Archives for : jake

Microsoft prize for imaginative computing

Last night, I attended an awards dinner hosted by the School of Engineering and Computing at Glasgow Caledonian University. I was delighted to receive The Microsoft Award for the Most Imaginative Computing Honours Project 2009-2010, recognising the innovative original work put into JAKE.

Microsoft generously provided a quite substantial prize of software and other merchandise on the night, in connection with Microsoft Student Partners and Dreamspark. The poster showcasing JAKE (seen right) was on display during the reception.

JAKE report and paper

I never got around to posting the final honours report on JAKE, but recently had to share the link with someone anyway, so thought it might as well be copied here: JAKE robot honours report.

Also, here’s a short technical summary of JAKE in paper format that I wrote at the same time as the report.

JAKE Poster

A poster on JAKE was presented at GCU yesterday. The JAKE honours work is now complete, but I’m still in the process of wrapping up a paper on it.

JAKE handed in

The final report on JAKE has now been handed in. As noted elsewhere on the blog, JAKE was my undergraduate honours project during 4th year of my BSc. I’m continuing to work on JAKE for the moment, hopefully with the possibility of getting something published.

No more flicker

Over the past couple of weeks the flicker has been gradually reduced. I’ve now implemented my own buffering code, rather than using the built-in support, to eliminate it altogether. We now have a decent frame rate with smooth robot movements and no annoying background flicker.

PacMan! (updated with video)

JAKE isn’t just limited to robots and beepers. Since we have Movers in JAKE, we can create all sorts of objects, not just robots. It’s entirely possible to set up your own PacMan scenario, as in the video below:

I’ve already written about Ghosts. While working on the example programs to accompany JAKE, I’ve created a KillerGhost – a subclass of ghost that kills any robots it touches. All of this was done within the JAKE editor – it’s something (albeit difficult) that a student could do themselves without having access to the underlying JAKE Java code.

So we have a ghost that can kill robots. Since Movers can use different icons (using the name of a file in the same directory), we can also create a new PacMan class. This class is a type of Mover, so we can change its icon and give it move() and turnLeft() instructions. We can create methods on the controller (buttons) to move  our PacMan character about the maze. Since it’s a type of Mover, it can’t move into walls.
If we add extra beepers to the world, the PacMan object can pick them up to use as food (as in the original game).

Reduced flicker

Up until now, JAKE has had some flickering in Java, especially when running programs with lots of on-screen objects. From now on, there’s a lot less flicker when the Java programs run, and this is reflected in the PacMan video I’ll be posting later tonight.

Two simple programs (video)

These videos show the creation of two simple Java robot programs in JAKE, based on an earlier blog entry about creating control events.

The robot/wall graphics are a little choppy, but that seems to be something to do with mixing Java and the screen-capture software.

Adding events

A big part of JAKE (Java Karel with Events) is that it adds an understandable event model to the Karel mini-paradigm. We know that there are problems with Java’s event model [1], and that’s part of what JAKE is meant to address. The idea is that the programmer, once they’ve set up their world, creates event buttons, methods of the control panel.

Adding an event is done with the “Add…” button. This adds a new button to the control panel.

When the programmer clicks on their new event button, a pop-up menu opens, giving them the option to write the method that goes with this button.

This opens the code editor (work on which is still in progress).

Now, when the programmer compiles their work, JAKE copies this method into the program, creates an appropriate JButton, and writes a Listener to connect the JButton to the control panel method. The student programmer doesn’t actually see any of the event listeners, and doesn’t have to worry about them yet. It’s not an ideal solution to have to hide away parts of the program, but hey, it is “broken”


[1] Milner, W. W. A broken metaphor in Java. ACM SIGCSE Bulletin, 41, 4 ( 2010), 76-77.

Minor updates this week

As well as the new world editor, there have been some other small updates to JAKE this week.

Firstly, the graphics have been improved slightly in the JAKE Java library, so that there’s no longer the same stretching and pixelating as before. The wall and beeper icons are now crisper. You can see this in one of the screenshots for the world editor, when compared to a scenario from a few weeks ago:

Secondly, tooltips have been added. The two screenshots below show how tooltips show up in both the world editor and the class diagram. For world editor objects, the tooltip shows the name and type of the object (e.g. “jake (robot)” or “myBeep (beeper)”). For class icons, the tooltip describes this class’s relationship to its parent:

Finally, the WorldObject class has been replaced by “Thing”. This saves any confusion from having the “World” and “WorldObject” classes next to each other in the diagram; we didn’t want it to appear that WorldObject was an instance of World. So, now, all objects in the World are “Things”.