Program The rantings of a lunatic Scientist

Posts marked as Java


Xenomorphs have hatched!

Game Dev Graphics Java

Okay I really need to get some sleep, it’s a quarter past 4 in the morning! But look! I’m really happy with progress on the game.

I’ve narrowed the premise down to a model that I am satisfied with. Here it is:

  • You are a lone marine trapped inside the LV426 Colony, your squad mates are presumed dead.
  • You are armed with an M41A Pulse Rifle but you have no bullets left!
  • There are four dead bodies of you fallen comrades laying around the map in the locations of the Pacman Mega-Pills. Each body has 1 magazines worth of salvageable ammo containing 25 bullets. (There are 100 total bullets per level)
  • The floor of the LV426 Colony is strewn with items that were knocked over or dropped when the chaos began, amidst the rubble you can find batteries to power your flashlight. (These batteries would be the normal pills from Pacman)
  • There is also a Motion Tracker at the location of the Pacman Cherry. The motion tracker will show the player the location and range of any Xenomorphs in the direction it is looking.

Pacman on LV426?

Game Dev Graphics Java

Yes that’s right! I’m working on First Person Pacman again!

And better yet, you can be too (if you are so inclined to) because the whole project is now available on Github!

I’ve decided that while the game is fun in it’s current state it is not scary enough. Don’t get me wrong, walking around a blind corner only to see a Ghost fly out and make a bee-Line straight for is pretty damn heart pumping but I feel like it can still be improved upon. Thus I propose we drop the lights, up the rust, and drop our little yellow hero into the hellish world that is LV426!

Edit Perhaps I could make it so you (Pacman) are the Xenomorph, being chased by the Marines (instead of Ghosts). You are injured so you cannot go on the offensive unless you feed on bodies laying around the map (the Mega-Pills from traditional Pacman)

I found some good ‘Aliens’ style wall textures just by googling them, I would credit the sources but it was obvious to me that the sites Google linked to were not the original sources, nor did they credit the artists. If anyone knows who they were then please email me.

I took the textures and duplicated them 4 times altering each one to make it subtly different.

Additionally with this set of walls I added a rust overlay to make it look more dilapidated. LV426 is not exactly a clean place to live.

Turing Machine’s, because I’m really that bored…

Java

In the absence of anything to do other than research my 3rd year project, exercise, and void my wallet in the Steam sales, here is the result of 5 hours work. You can see the whole project on GitHub.

The engine runs off an input consisting of 5-tuples. That is, lines that fit the form…

(state_id, expected_val, print_val, move_cmd, next_state)

There is also an optional line (which must be first in the file if it is not to be ignored) which consists of an unbroken string of B’s, 0’s, and 1’s. This line, if found, will set the initial value of the tape.

Here is a simple turing machine which generates an infinite string of 0 space 1 space 0 space 1…. Since this program expects a blank tape one isn’t defined.

One really good thing about this little project is having stumbled upon a great little Java Project calls JArgs, which is a Argument Parser for better dealing with Command Line Arguments. God knows why such a system is not built into the JDK in the first place.

This has allowed me to make a really neat way of running the program. You can define a file via the -f flag or pipe a file in via standard input. Thus both java TuringMachine -f .\resources\Simple.tur -t 100 and java TuringMachine < .\resources\Simple.tur -t 100

The -z flag is quite important as for some turing machines we need to imagine that the default value for an infinitely long tape is a blank cell, and for some that it is a 0. As an example, the Busy Beaver Turing Machine imagines a 0 filled tape.

For turing machines where we know the value of the tape is only relevant during a certain state, such as an adder, we can limit tape printing to that state only using the -p flag.

The -q flag stops all but the final output being displayed. This is good for when you know a program will run for a long time and eventually end. However if you do not know whether the Turing Machine will halt it is inadvisable to use this flag.

Finally the -t flag allows you to slow the execution of the Machine down so it is easier to view. It simply puts a thread sleep in after each instruction of the millisecond length given.

Here is an implementation of a 3-State Busy Beaver. This Machine would need to be run with the -z flag set as it assumes a 0 filled tape. Edit, additionally given that the Busy Beaver outputs to the tape both to the left and right of the start position it may be useful to pad the tape with default value on either side of the head. We can do this with the -d flag.

Finally here is a Binary Adder. It counts upwards indefinitely from the value in the initial tape. For a machine like this we would use the -p flag to denote that we only want to print the tape in state 1.

Update: 3rd Year Modules

Java L2Program University

After 201 votes I am pretty happy with the result ranking for which modules I want to take next year.

As it stands there are two mandatory modules, CS-344 and CS-354, which are related to the 3rd year project. Each of those is weighted at 20 credits meaning that I have to fill 80 credits worth of module selection to get 120 credits next year. At 10 credits a pop this means 8 modules.

So here comes the decision do I split it evenly and do four modules in TB1 and four in TB2? Or do I take more modules in TB1 because there is more there that I want to do? See, I said I was indecisive… Now to write a ranking program to let me vote on which of those I want to do… I kid. But seriously this is stressing me out.

After a quick conversation with my rather inebriated father (more akin to a conversation with a parrot. Love you Dad) I have decided to split the modules 5/3 and in TB1 do:

  • CS-307 Computer Graphics II:Modelling and Rendering
  • CS-313 High Integrity Systems
  • CS-377 Computer Vision and Pattern Recognition
  • CS-358 High-Performance Computing in C/C++
  • CS-345 Artificial Intelligence Applications

And in TB2 do:

  • CS-318 Cryptography and IT Security
  • CS-311 Concepts of Computer Programming Languages
  • CS-371 Design Patterns and Generic Programming

I am slightly worried about the thought of five exams in TB1 but I think I’ll be able cope with it.

Which modules to take next year?

Java L2Program University

Those who know me know that I am one of the most indecisive people in the world. So when posed with the question of what modules to choose next year I was completely at a loss! So much so that I have been putting it off for several months.

But now with the release of our Year 2 course marks and exam results I found myself continually going on and off of the Uni Intranet in order to check my results and show my parents. It occurred to me that with this traffic back and forth passed the button for module selections I really had NO excuse not to do them already.

But what to choose? I couldn’t do it! But then it came to me, two years ago after watching The Social Network I had wanted to try and recreate Zuckerberg’s ‘Facemash’ website so I had made on a subdomain of L2Program ‘Catmash’. A system for voting which of two cats was cuter. A fun little experiment with a powerful ranking algorithm; an algorithm that I already had the code for…

It has taken me about 2 hours to get this little program up and running. Every time it ‘poses a question’ to you it randomly selects Term Block 1 or 2 and then two unique modules within that Term Block. You click on the one you would rather take and over the course of several hundred votes it builds two lists of modules in the order of which you ‘really’ want to take.

Here is the input file the program loads from.

Java Ray Tracer – Just a test

Graphics Java

A few months ago, inspired by our Graphics Course, I decided to write a Ray Tracer. I had written one once before, in C# of all things, the summer before starting university. But it was crude and took 3 minutes to render one sphere, incorrectly too… I knew I could do better. Here is the result of 3 days worth of playing around with Java between lectures.

I didn’t quite get triangles working at the time. It was an issue to do with Java’s implementation of floats not having enough precision. My next Ray Tracer will be in C++ so that shouldn’t be a problem. (I know… A bad programmer always blames his tools…)

Here are some other choice renders…