Monday, November 12, 2012

TankGame 02 - Slick, MarteEngine, Lwjgl Setup - Java 2D game development

Posted by sudheera On 11:43 AM


Lets keep AI algorithm and the game logic aside for a while and focus on the Game interface in this post. I'm using Slick + MarteEngine +Light Weight Java Game Library(lwgjl) combination for this project. So this post and the future posts will be kind of Silk game developing tutorials. That's a good thing because these engins,libraries are not commonly used and tutorials are hard to find. Jmonkey is also a good game engine but as I heard it is biased towards 3D game developing and we don't need that. Since we're coding with Java we can't use XNA framework either.

First of all we need to include these libraries to our project. I'm developing this project with Netbeans, so here I'll explain the steps you should follow in oder to setup the environment first.  Eclipse users please google it, it's not hard to do it with eclipse. However with my x64 bit computer I spent like 48 hours to find a way to get these things to work. I'll explain the standard way and later I can give this special bundle for x64 bit users.

Slick

1. Download and extract the library from :  Link
2. Open netbeans, create new project, goto tools->libraries
3. Click on the button new library, and give name "Slick"
4. Click button add jar/folder and browse the extracted folder and go to the folder "lib" and choose all files except "slick.jar" and "slick-util-src.zip" and then click add.
5. In source tab add the folder "src" which located inside the extracted folder. And do the same for Javadoc tab(folder is named "javadoc").

Marte Engine

1. Download ans extract from : Link
2. Create the new library named "marte" like we did before(step 3 above)
3. add marteEngine.jar and src folder in classpath and sources tabs.


setup the project

1. Go to project properties. (RightClick - > Properties)
2. In left side choose libraries.
3. Under the "compile" tab click on add library and add "marte" library we just created.
4.Click on add jar/Folder and add Slick.jar which we left at step 4 of slick setting
5. In "Run" tab add the "slick" library.
6. Now choose 'run' from the left side panel()  and for the 'VM Options' you should enter the following line :
-Djava.library.path="F:\Tank Game\Libraries\lwjgl-2.8.4\lwjgl-2.8.4\native\windows" 

Here as the path I've given the path to "\native\windows" folder.  You have to browse the path according to your folder and paste it as the path.

And that's all. Now we have setup our environment. Here's my netbeans project folder that I'm currently working on. (It contains a half-game from a tutorial on youtube). Download it and import to netbeans and follow above steps. (If you already added the libraries then you have to follow "setup the project" part only).


Now run the spaceshooter.java file. If you get a new window and a space-ship in it, then you have done everything correctly so far. If not you have to go through above all steps and make it done. If your system is x64 bit then don't worry there's an issue with the lwgjl library for x64 systems. x64 users can follow these steps instead.

For x64 users 

I should give credit to Mr. Stefan Hendriks for sharing this wonderful method with us. I almost spent a whole day trying crack this one. here's the original post.
 
Download this special 64 version of lwgjl : Download

 1. In netbeans goto tools-> libraries and delete the slick library we created earlier.
2.  Create new "slick" library and add everything(to classpath tab) except slick.jar in the "slick\lib" folder of the downloaded folder. And the Java doc and src as we did earlier.
3.  Create a new library called "lwgjl" and add everything inside the "lwgjl\lib" folder of the downloaded folder to the classpath tab. And add src and Javadoc accordinly.
4. Then repeat the setup the project steps, but at the step 4 add the slick.jar located in the "\slick\lib" of the downloaded folder, and at the step 6 you should set the path of "\native\windows" folder that is located inside of the downloaded folder.
5. Don't forget to add the "lwgjl" library to compile tab.

This is how is should look


Now everything should be working nicely. That's it for now, soon we'll be developing the Tank Game world and players, hopefully. thanks.

Any problem with the post? please leave a comment.

Sunday, October 28, 2012

TankGame 01 - Communicating with the Server

Posted by sudheera On 9:57 AM


This blog post is more like a log than a tutorial. Here I'm logging the steps I followed while creating the AI player for the TankGame which provided as a 2nd year project. I will provide every single detail with this post and the future posts, so if anyone interested in following this as a tutorial he/she will get a chance.


First of all I should explain whats required to do in this project. We are provided with a Server application which hosts the TankGame (something like this). Our task is to program an AI player program in order it can win over the other players(4 other). 


Downloads:

Introduction to game : download
Server program(for practicing purposes) : download
Information about above Sever program : download

Get server Program running :  Unzip the Downloaded server program, a c# project folder. You have to open MS Visual Studio and open this project. (Or double click on the C# project file located in  ...\Server_v3.2.0.1\lk.ac.mrt.cse.pc11 named lk.ac.mrt.cse.pc11). Then by pressing F5 key you can run the server. 
  
Now we have the Server program, so we should create the client program. The client and the server programs should be able to communicate with each other. So we need to create the socket connections. In server program configuration file it is configured as the server port as 6000 and the client port as 7000 and the address as 127.0.0.1 .
 So according to the introduction slides in order to join the game, the client should send the msg "JOIN#" to the server. Here's the simple Java code for sending msgs to server. 




private BufferedWriter write;

Socket serversoc = new Socket("127.0.0.1", 6000);

write = new BufferedWriter(new OutputStreamWriter(serversoc.getOutputStream()));
write.write("JOIN#");
write.flush();

However, for this server program "flush()" method didn't work, So I had to use the "write.close()" instead.
 

Because of that we have to reopen the bufferedreader as well as the socket each time we want to send a msg, (Hope this server bug will repair soon and then I'll update the post ASAP).


Important :  For above code to work properly you should first run the Server program. Then using the GUI select(put a tick) the four dummies and then click start. The game will wait for the other player(your client) and will start as soon as you send the "JOIN#" msg.

OK. Now our target is to read  the server reply, For do this we should open the socket with the port number 7000. And then we can listen to that socket and receive the server replies. Following code will show a simple example but in your client program you should use a listener and do the job according to the msg arrival.  




private BufferedReader read;
ServerSocket clientserversoc = new ServerSocket(7000);
Socket clientsoc = clientserversoc.accept();
read = new BufferedReader(new InputStreamReader(clientsoc.getInputStream()));
System.out.println(read.readLine()); // do the job, I just print out the msg
read.close();

Again here I use "read.close()" because without that line it won't work. :-/.  Ok. thats it for today. Soon I'll post how to work with the game engine and the AI algorithms we're using for this program. Thank you.!

Thursday, April 5, 2012

Hacking JOSH - with virtual hardware

Posted by sudheera On 12:28 PM



This post will extend the Hacking JOSH – Operating System Tutorial with some cool stuff. Some of the content of this post is based on the work done by Mr.Asiri Rathnayake.

Here I will show how to boot JOSH os in a virtual computer without using any hardware.(USB drive or floppy disk). Another advantage of using this method is you can develop and test it without rebooting your computer(host). All you need to do is rebooting the virtual computer.
_________________________________________________________

Wednesday, February 22, 2012

How to install & troubleshoot Apache Tomcat ( NetBeans and IDEA ) - Part 01

Posted by sudheera On 10:36 AM

What is Tomcat ?
Tomcat is an open source servlet container and web server for java servlets and Java Server Pages(JSPs).

Installation guide for windows

1. Get tomcat
First you have to download the Binary Distribution from the apache website. Latest release is 7.0.25 But I would recommend 6.0.35 stable version. For windows download the appropriate bit distribution suit for your system.(32 bit or 64 bit)


Once you downloaded the binary distribution you can extract it and copy to a folder. I would recommend C:/Program Files.

Important : Your system should have installed netbeans 6.0(with web and Java EE) or higher and JDK latest version.

2. Configure
First we have to configure tomcat users and roles by editing  tomcat-users.xml located in the conf folder. (C:\Program Files\apache-tomcat-6.0.35\conf) 

Initially it would look look like this 

(click on the image to zoom)

Now you have to edit the tomcat-users.xml file as you wish.Ultimately it should look like following.

<?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
        <role rolename="manager"/>
        <role rolename="standard"/>
        <user username="admin" password="pwd" roles="standard,manager"/>
     </tomcat-users>
 
You can download the edited  tomcat-users.xml file (with above username and password ) here
Later you will need this username and password when adding server to netbeans.

3. Adding External Server

Then you have to add the server to netbeans. Start up netbeans as the first step.
Then find the service tab on the left hand side. If you can't find the services tab there, just hit Ctrl+5 or goto Windows->Services

Right click on Servers and click 'add server'


Then you will get 'Add server instance' window choose the appropriate server and hit next

In next window you have to specify the sever location. That is the extracted folder which is located inside program files folder. And you need to enter the username and password you added to the tomcat-users.xml file.

 
With that step you are done with installation. Good luck with your work. My next post is about some difficulties which I faced during installing tomcat. Thank you.