Friday, April 23, 2010

Simple Game in J2ME for Nokia3110

This is a Game which is made in J2ME.
Following is the files under the Sun's Wireless Toolkit JDK.
src
|_FullScreenGame.java
|_MainCanvas.java
|_MenuCanvas.java
|_TitleCanvas.java

FullScreenGame.java:-
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class FullScreenGame extends MIDlet implements CommandListener {
private Display display;
private TitleCanvas titleCanvas;
private MainCanvas mainCanvas;
private MenuCanvas menuCanvas;
public int score=0;
public void startApp() {
display = Display.getDisplay(this);
titleCanvas = new TitleCanvas();
menuCanvas = new MenuCanvas(this);
display.setCurrent(titleCanvas);
try{Thread.sleep(2000L);}
catch (InterruptedException localInterruptedException){}
display.setCurrent(menuCanvas);
System.gc();
}
public void GameOver() {
display.setCurrent(menuCanvas);
System.gc();
}
public void GameStart() {
mainCanvas = new MainCanvas(this);
display.setCurrent(mainCanvas);
}
public void pauseApp(){}
public void destroyApp(boolean paramBoolean){}
public void commandAction(Command paramCommand, Displayable paramDisplayable) {}
}


MainCanvas.java:-
import java.io.*;
import javax.microedition.lcdui.*;
import java.util.*;
class MainCanvas extends Canvas implements Runnable {
Image image;
int width,height,mode,XPosition=60,inc=1,x=3,y=3,paramInt=5,miss=0;
static int speed=10;
boolean running = true;
FullScreenGame mainProgram;
public MainCanvas(FullScreenGame fsg) {
mainProgram = fsg;
mainProgram.score=0;
try{image = Image.createImage("/back.jpg");}catch (IOException localIOException) {}
setFullScreenMode(true);
Thread localThread = new Thread(this);
mode = 2;
localThread.start();
}
public void run() {
while(running) {
repaint();
try{Thread.sleep(speed);}catch(InterruptedException e){return;}
}
}
public void paint(Graphics g) {
if(y==133 && (mode==1 || mode==2)) {
if(XPosition+2 > x || x > XPosition+22)
miss++;
else {
if(mode==1)mode=0;
if(mode==2)mode=3;
mainProgram.score+=10;
}
}
if(x==2) {
if(mode==0)mode=3;
if(mode==1)mode=2;
}
if(y==137) {
if(mode==1)mode=0;
if(mode==2)mode=3;
}
if(x==119) {
if(mode==2)mode=1;
if(mode==3)mode=0;
}
if(y==2) {
if(mode==0)mode=1;
if(mode==3)mode=2;
}
switch(mode) {
case 0:
x-=inc;
y-=inc;
break;
case 1:
x-=inc;
y+=inc;
break;
case 2:
x+=inc;
y+=inc;
break;
case 3:
x+=inc;
y-=inc;
break;
}
g.drawImage(image,0,0,0);
g.setColor(0,0,0);
g.drawLine(2,144,125,144);//Bottom Bar Line
g.drawRect(1,1,125,157);//Boundry
g.setColor(255,0,128);
g.drawString("Score:"+mainProgram.score+" Speed:"+(11-(speed/2))+" Miss:"+miss,3,146,0);//String Bottom Bar
g.setColor(128,0,255);
g.fillRect(XPosition+2,140,20,4);//Bar
g.setColor(255,0,0);
g.fillArc(x,y,7,7,0,360);//Ball
if(miss == 5) {
g.drawString("Game Over",45,60,0);
g.drawString("Score: "+mainProgram.score,45,60,0);
running = false;
mainProgram.GameOver();
}
}
protected void keyPressed(int paramInt) {
if(paramInt == 35)//Close on Button #
mainProgram.GameOver();
if(paramInt == -3)//LEFT
if(XPosition != 0)
XPosition = XPosition-10;
if(paramInt == -4)//RIGHT
if(XPosition < 101)
XPosition = XPosition+10;
if(paramInt == -2)//DOWN
if(speed < 21)
speed +=2;
if(paramInt == -1)//UP
if(speed > 2)
speed -=2;
}
}


MenuCanvas:-
import java.io.IOException;
import javax.microedition.lcdui.*;
import java.util.*;
class MenuCanvas extends Canvas {
Image image;
int width,height;
int randomNo[]={12,6,9,8,3,11,4,9,7,6,2,10,7,2,5,10,8,12,4,9,8,
2,6,2,10,7,1,5,2,5,12,4,9,8,0,2,7,0,2,9,0,2,4,9,5,12,6,9,8,3,
11,4,3,7,6,2,10,7,2,5,2,5,12,4,9,8,2,6,2,10,7,2,5,7,5,12,4,9,
8,0,2,3,0,2,6,0,2,4,9,512,6,9,8,3,11,4,3,7,6,2,10,7,2,5,2,5,12,
4,9,8,2,6,2,10,7,2,5,2,5,12,4,9,8,0,2,2,0,2,2,0,2,4,9,5};
Font font,simpleFont;
FullScreenGame mainProgram2;
public MenuCanvas(FullScreenGame fsgame) {
mainProgram2 = fsgame;
try {
image = Image.createImage("/back.jpg");
} catch (IOException localIOException) {}
setFullScreenMode(true);
width = getWidth();
height = getHeight();
}
public void paint(Graphics g) {
simpleFont=g.getFont();
font = Font.getFont(32,1,16);
g.setFont(font);
g.drawImage(image,0,0,0);
g.setColor(225, 0, 0);
g.drawString("Nirmal Ganesha",8,20,0);
g.setColor(225, 0, 128);
g.drawRect(35,44,60,12);
g.drawRect(33,42,64,16);
for(int i=0;i<128;i+=3){
g.drawRect(i,0,3,randomNo[i+1]);
g.drawRect(i,160-randomNo[i],3,randomNo[i]);
}
g.drawString("DX Ball",41,43,0);
g.setColor(225, 0, 255);
g.setFont(simpleFont);
g.drawString("Creater: Ganesh Bhosale",4,62,0);
g.setColor(0, 0, 225);
g.drawString("Press Fire to Start Game",4,80,0);
g.drawString("Press # to Close",25,100,0);
g.setColor(128,0,255);
g.drawString("Last Game Score: "+mainProgram2.score,18,120,0);
}
protected void keyPressed(int paramInt) {
System.out.println(paramInt);
if(paramInt == 35) {//Close on Button # 
mainProgram2.notifyDestroyed();
}
if(paramInt == -5) {
mainProgram2.GameStart();
}
}
}
TitleCanvas.java:-
import java.io.IOException;
import javax.microedition.lcdui.*;
class TitleCanvas extends Canvas {
private Image image;
private int width;
private int height;
public TitleCanvas() {
try {
image = Image.createImage("/title.jpg");
}
catch (IOException localIOException) {}
setFullScreenMode(true);
width = getWidth();
height = getHeight();
}
public void paint(Graphics g) {
g.fillRect(0, 0, width, height);
g.setColor(225, 0, 128);
g.drawImage(image, width / 2 - (image.getWidth() / 2), height / 2 - (image.getHeight() / 2), 0);
g.drawString("Nirmal Ganesh", 1, 1, 0);
}
}

The variable "Mode" used in Program is showing direction of ball. That is well explained in Image below:



The following are the Required image files for this Game which must be put into "res" folder:- back.jpg:-  title.jpg:-  
Just compile this program & use it.

The screenshot below may help you little bit.

For more information visit Dwij IT Solutions.


No comments:

Post a Comment

Your comments will be important to impprove this blog.
Please have some comments or doubts freely.