Skip to content

Month: April 2008

Simple Java Tileset Example

Tilesets are a common technique in game development to create all kinds of tile-based games (from strategy to RPG games).

Here’s a example of simple 2D isometric square tilesets. I decided to use 32×32 pixels tiles and store 10 tiles per row in a single image:

I created a class called public class JGameCanvas that extends from JPanel from swing:

package game;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;
enum Tile {
TREE, TREE_CHOMP, TREE_DEAD, T13, T14, T15, T16, T17, T18, T19,
T40, T41, T42, T43, T44, T45, T46, T47, T48, T49,
NEWS, T51,      RES_1, RES_2, BUSS_1, BUSS_2, HOSP_1, HOSP_2, MARK_1, MARK_2,
PIZZ_1, PIZZ_2, RES_3, RES_4, BUSS_3, BUSS_4, HOSP_3, HOSP_4, MARK_3, MARK_4,
PIZZ_3, PIZZ_4, RES_5, RES_6, BUSS_5, BUSS_6, HOSP_5, HOSP_6, MARK_5, MARK_6
public class JGameCanvas extends JPanel{
    private static final int tW = 32; // tile width
    private static final int tH = 32; // tile height
    private static final Tile map[][] =
    {{Tile.TREE,Tile.TREE, Tile.TREE, Tile.ROAD_V, Tile.GRASS, Tile.TREE, Tile.TREE_DEAD, Tile.GRASS_STONE, Tile.TREE, Tile.TREE},
     {Tile.GRASS,Tile.GRASS, Tile.GRASS_STONE, Tile.ROAD_V, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS},
     {Tile.PIZZ_1,Tile.PIZZ_2, Tile.GRASS, Tile.ROAD_V, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS},
     {Tile.PIZZ_3,Tile.PIZZ_4, Tile.GRASS, Tile.ROAD_V, Tile.GRASS, Tile.GRASS, Tile.MARK_1, Tile.MARK_2, Tile.HOSP_1, Tile.HOSP_2},
     {Tile.ROAD_H,Tile.ROAD_H, Tile.ROAD_H, Tile.ROAD_VH_LEFT, Tile.TREE, Tile.TREE_DEAD, Tile.MARK_3, Tile.MARK_4, Tile.HOSP_3, Tile.HOSP_4},
     {Tile.GRASS,Tile.BUSS_1, Tile.BUSS_2, Tile.ROAD_V, Tile.TREE, Tile.NEWS, Tile.MARK_5, Tile.MARK_6, Tile.HOSP_5, Tile.HOSP_6},
     {Tile.GRASS,Tile.BUSS_3, Tile.BUSS_4, Tile.ROAD_VH_RIGHT, Tile.ROAD_H, Tile.ROAD_H, Tile.ROAD_H, Tile.ROAD_H, Tile.ROAD_H, Tile.ROAD_H},
     {Tile.GRASS,Tile.BUSS_5, Tile.BUSS_6, Tile.ROAD_V, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS},
     {Tile.GRASS,Tile.GRASS, Tile.GRASS, Tile.ROAD_V, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS, Tile.GRASS}
    private Image tileset;
    public JGameCanvas() {
        tileset = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("resources/tileset.png"));
    protected void paintComponent(Graphics g) {
        g.fillRect(0, 0, getWidth(), getHeight());
        for(int i=0;i<10;i++)
            for(int j=0;j<10;j++)
                drawTile(g, map[j][i], i*tW,j*tH);
    protected void drawTile(Graphics g, Tile t, int x, int y){
        // map Tile from the tileset
        int mx = t.ordinal()%10;
        int my = t.ordinal()/10;
        g.drawImage(tileset, x, y, x+tW, y+tH,
                mx*tW, my*tH,  mx*tW+tW, my*tH+tH, this);

Program running:

Those graphics I created for the game Batalhão and are under Creative Commons Attribution Share Alike 3.0 license. The source code is under GPL license, download the NetBeans project with sources: tileset.tar.bz2.

NetBeans Day Fortaleza with Gregg Sporar

Gregg Sporar and CEJUG

Those days Gregg Sporar, NetBeans enthusiast working at Sun Microsystems was here in Brazil and went to our city Fortaleza to speak in our NetBeans Day Fortaleza. We had only a couple of days to prepare everything but is always good work under such pressure. :-)

Me at the airport

Me and my friend (Cassiano Carvalho) could toke care of him. First we got Gregg at our international airport, Pinto Martins from a flight from Recife. After that we went to a typical food dinner at Coco Bambu where’s Gregg could taste our tapioca and figure why our local JUG (CEJUG) event is called Tapioca with Coffee.

Gregg tasting Tapioca

After that we went to the hotel but we did not have realized that that day was the birthday of our city Fortaleza and the birthday party was a public concert at beach of one of most famous artist in Brazil, Roberto Carlos.

Roberto Carlos in the early years
Roberto Carlos in the early years… :P

For those who are not Brazilians, To have an idea what Roberto Carlos is, just imagine (in a smaller proportion of course) some kind of Brazilian Elvis Presley. When we quited the restaurant the show was just finished, we had a huge crowd walking back for everywhere, streets blocked, mess and traffic extremely slow. We spend about two hour on this. We decided to park the car, get Gregg’s luggage and go walking the hotel. Luckily the rain don’t caught us.

Rainy Day

In the morning was raining cats and dogs at Fortaleza, what is very uncommon.

Gregg cheking out

I picked Gregg at the hotel to the campus so we can meet the NPD (acronym in Portuguese for Data Processing Core) building, the Internet backbone of the entire state and where some projects are using NetBeans. Gregg also met our CS department, our labs and our cluster.

While that we prepared the auditorium and some last details, test microphones and projector.

P4140007 P4140006

People started to get and we got their names and mails for event certifications. I opened the event talking about NetBeans, CEJUG projects and opportunities for the students.



People from TV Software Livre (Free Software Television) was there too to record and transmit the event.

P4140017 P4140025

The first Gregg’s talk was about NetBeans and some new features from the last version of NetBeans and some new features for the version 6.1.


The second was about Memory Leaks in Java and a method for detecting those. Very interesting.

Gregg Sporar

NetBeans Day Fortaleza

NetBeans Day Fortaleza

NetBeans Day NetBeans Day Fortaleza

Gregg Sporar

After Gregg quited to fly to Brasilia I did a presentation on NetBeans 6 and 6.1 Beta news features. You can download Gregg’s slides here and here, my slides here.The recorded video is hosted at Google Video. You can see more photos in this album:

Gregg Sporar

Gregg, thank you very much and hope you liked your quick visit to Fortaleza. ;) Thanks also CEJUG and all guys that made this event possible.

Integer.MAX_VALUE and Integer.MIN_VALUE

You should know that variable values are cyclic in Java.

public class Test{
  public static void main(String args[]){
     int x = Integer.MAX_VALUE + 1;

This produces:


Netbeans Day Fortaleza

Netbeans Day Fortaleza

Gregg Sporar, Sun MicrosystemsGregg Sporar, evangelista do Netbeans pela Sun Microsystems, estará essa segunda-feira (14/Abril/2008) em Fortaleza para participar do NetBeans Day Fortaleza.

O evento será essa segunda-feira a partir das 13 horas no auditório da Pró-Reitoria de Graduação, no prédio da Biblioteca Central no Campus do Pici. Dê uma olhada no mapa. Os assentos são limitados, chegue cedo e garanta seu lugar.

No NetBeans Day eu também vou fazer uma apresentação mostrando a palestra que eu vou apresentar no FISL, Netbeans 6: indo além do Java na trilha de Ruby.

Em seguida ele partirá para Brasília e depois para Porto Alegre onde ele apresentará sua palestra no FISL intitulada Memory Leaks in Java Applications – Different Tools for Different Types of Leaks.

Espero vocês lá!

E esse sábado tem o nosso tradicional Café com Tapioca, não esqueçam de ir!