Pular para o conteúdo principal

Stacker Game in JavaFX

In this post I am going to share with you this simple game I created using JavaFX.

The Stacker game


The goal of the game is to reach the top by stacking rectangles. This is a well known game where when you reach the top you earn some gifts. Here is a video I took from youtube of someone playing this game:


Our game is a little different. We will will only stack 1 rectangle, but the rectangle can be adjacent of the below rect, not exactly on top of it. The number of rectangles to fill will be increasing according to the level and also the speed.

The game in Processing

The game was previously created in Processing, but most of the code I could reuse in the JavaFX version! You can find the source for the processing version in my github.


Stacker


Creating games with JavaFX


JavaFX was always a platform for games since its 1.0 version. I remember we even had a blog specific for JavaFX script games. Since the end of JavaFX Script and with JavaFX 2, we have some samples that might be downloaded in Oracle's site.
To get start with games on JavaFX I recommend this series of posts by Carl Dea.
JavaFX have all resources we need to create games: animations, resources to detect collision, special effects, play sounds, etc...

Our stacker game implementation


The game is basically based on update a boolean matrix and read it to create a visual representation. When the user click on the game, we make a loop in the matrix to see if the block in the previous line  is true or if the block in the current line is adjacent to the block in the previous line.
The two important classes in our program is the Game Engine and the game itself. The game engine is responsible to make the game alive, because it will make the game update the screen on a given frequency and make it draw itself.
The game is responsible to draw and update the scenario according to time and user's input. Here is the code of these two classes:

There are classes that does nothing. We need to create a concrete class, so we did, we created the StackerGame  class. It contains the matrix that represents the game and will draw the grid and the rectangles according to the time, level and user's input.
The logic of the game is basically move a boolean in the matrix and fix it when the user clicks. If the user click was done when the rectangle had a block below it or adjacent, the game will continue, if not, we will call game over and when the user click again, the game will start from beginning. Note that the score is higher when the user makes a perfect stack and lower when the user stack using an adjacent block.  The game is drawn in a canvas, which is easier to control in our case(we are coming from Processing!).
Notice that we expose some variable using javaFX properties. These properties are used in our main application to display the score, level and eventually the game over label. See the all the code of these two classes:


Here is the game in action:


Possible Improvements


Unfortunately the game has no sounds and the effects are poor. Also, if the user reach the level 20, the game will bug! So, the possible improvements are:

* Improve the look of the game;
* Add sounds;
* Handle the end of the game event.

Conclusion


It was a simple demonstration of a game using JavaFX. As usual, it was done for fun, in a few hours... Don't judge possible bad code... The source is in my github.

JavaFX is fun, is enterprise, is good for game programming, for data visualizations, for learning Java...

Comentários

Postagens mais visitadas deste blog

Simplest JavaFX ComboBox autocomplete

Based on this Brazilian community post , I've created a sample Combobox auto complete. What it basically does is: When user type with the combobox selected, it will work on a temporary string to store the typed text; Each key typed leads to the combobox to be showed and updated If backspace is type, we update the filter Each key typed shows the combo box items, when the combobox is hidden, the filter is cleaned and the tooltip is hidden:   The class code and a sample application is below. I also added the source to my personal github , sent me PR to improve it and there are a lot of things to improve, like space and accents support.

Dancing lights with Arduino - The idea

I have been having fun with Arduino these days! In this article I am going to show how did I use an electret mic with Arduino to create a Dancing Lights circuit. Dancing Lights   I used to be an eletronician before starting the IT college. I had my own electronics maintenance office to fix television, radios, etc. In my free time I used to create electronic projects to sell and I made a few "reais" selling a version of Dancing lights, but it was too limited: it simply animated lamps using a relay in the output of a 4017 CMOS IC. The circuit was a decimal counter  controlled by a 555. 4017 decimal counter. Source in the image When I met Arduino a few years ago, I was skeptical because I said: I can do this with IC, why should I use a microcontroller. I thought that Arduino was for kids. But now my pride is gone and I am having a lot of fun with Arduino :-) The implementation of Dancing Lights with Arduino uses an electret mic to capture the sound and light leds...

Creating custom Work Item Handler in BPM Suite/jBPM 6

Hi all! In this post I am going to share my experience creating a work item handler for BPM Suite 6.0.3 (which is very similar to jbpm as explained in a previous post ). The Hello World Work Item Handler Let's create a really simple WorkItemHandler just to print "Hello World" in the console. Of course you can implement more feature and make it receive parameters, access database, web services, etc. But in this post we will keep it simple. Really simple. First thing to do is to create a maven project for my WorkItemHandler. Here's the pom.xml of my Maven project: Notice that we are importing jbpm dependency so we can find the java interface that is used to create work item handlers. Now we can start coding. Let's create a class name HelloWorkItemHandler in package org.jugvale.jbpm, here is the simple code: Now we can build our project and go to BPM Suite to configure it so we can use this workitem. Registering the WorkItemHandler UPDATE...