分享
 
 
 

J2ME小游戏-fly

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

1、FlyMidlet.java

package fly;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import java.util.*;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class FlyMidlet extends MIDlet {

Navigate ng;

public FlyMidlet() {

ng=Navigate.getInstance(this);

}

protected void startApp() {

System.out.println("startApp");

ng.display.setCurrent(ng.mc);

printInfo();

}

protected void pauseApp() {

System.out.println("pauseApp");

}

protected void destroyApp(boolean parm1) {

System.out.println("destroyApp");

Navigate.mc.stop();

MyGameCanvas.cleanJob();

Navigate.cleanJob();

}

private void printInfo(){

System.out.println("FlyMidlet printInfo() start:");

System.out.println("FlyMidlet printInfo() end:");

}

}

2、Bullets.java

package fly;

import javax.microedition.lcdui.game.*;

import javax.microedition.lcdui.*;

import java.util.Random;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class Bullets extends GameObject {

private int[][] bullets;

private int bulletstotal;

private Random rnd;

public static final int BULLET_TYPE_LEFT=0;

public static final int BULLET_TYPE_RIGHT=1;

public static final int BULLET_TYPE_TOP=2;

public static final int BULLET_TYPE_BOTTOM=3;

private int width,height;

public Bullets(Image img,int picwidth,int picheight,int bulletstotal,int width,int height) {

super(img,picwidth,picheight);

this.bulletstotal=bulletstotal;

bullets=new int[bulletstotal][6];

rnd=new Random();

this.width=width;

this.height=height;

}

public void initBullets(){

for (int i = 0; i < bullets.length; i++) {

initBullet(i);

}

}

private void initBullet(int i) {

bullets[i][0] = (rnd.nextInt() & 0x7fffffff) % 4; //type

bullets[i][5] = 1; //alive

switch (bullets[i][0]) {

case BULLET_TYPE_LEFT:

bullets[i][1] = -5;

bullets[i][2] = (rnd.nextInt() & 0x7fffffff) % height;

bullets[i][3] = (rnd.nextInt() & 0x7fffffff) % 3 + 1; //vx

bullets[i][4] = (rnd.nextInt()) % 3; //vy

break;

case BULLET_TYPE_RIGHT:

bullets[i][1] = width + 5;

bullets[i][2] = (rnd.nextInt() & 0x7fffffff) % height;

bullets[i][3] = ( (rnd.nextInt() & 0x7fffffff) % 3 + 1) * -1; //vx

bullets[i][4] = (rnd.nextInt()) % 3; //vy

break;

case BULLET_TYPE_TOP:

bullets[i][1] = (rnd.nextInt() & 0x7fffffff) % width;

bullets[i][2] = -5;

bullets[i][3] = (rnd.nextInt()) % 3; //vx

bullets[i][4] = (rnd.nextInt() & 0x7fffffff) % 3 + 1; //vy

break;

case BULLET_TYPE_BOTTOM:

bullets[i][1] = (rnd.nextInt() & 0x7fffffff) % width;

bullets[i][2] = height + 5;

bullets[i][3] = (rnd.nextInt()) % 3; //vx

bullets[i][4] = ( (rnd.nextInt() & 0x7fffffff) % 3 + 1) * -1; //vy

break;

}

}

public void updata(int i){

bullets[i][1]+=bullets[i][3];

bullets[i][2]+=bullets[i][4];

if(bullets[i][1]<-5 || bullets[i][1]>width+5){

bullets[i][3]*=-1;

}

if(bullets[i][2]<-5 || bullets[i][2]>height+5){

bullets[i][4]*=-1;

}

}

private void paint(Graphics g,int i){

updataspritepos(i);

sprite.paint(g);

}

public void paint(Graphics g) {

for (int i = 0; i < bullets.length; i++) {

if(bullets[i][5]==0){

continue;

}

sprite.setPosition(bullets[i][1],bullets[i][2]);

sprite.paint(g);

}

}

public void refreshBullets(Sprite planesprite, boolean needcollision){

for (int i = 0; i < bullets.length; i++) {

if(bullets[i][5]==0){

continue;

}

if(needcollision){

//System.out.println("needcollision ");

if (isCollision(planesprite, i, 10)) {

//System.out.println("collision ");

Navigate.mc.gameover = true;

Navigate.mc.explosion.sprite.setPosition(bullets[i][1] - 16,

bullets[i][2] - 16);

bullets[i][5] = 0;

continue;

}

}

updata(i);

}

}

private boolean isCollision(Sprite sprite,int i,int range){

//updataspritepos(i);

//return sprite.collidesWith(this.sprite,true);

boolean result=false;

int planeXCenter=sprite.getX()+12;

int planeYCenter=sprite.getY()+12;

int bulletXCenter=bullets[i][1]+3;

int bulletYCenter=bullets[i][2]+3;

if(Math.abs(planeXCenter-bulletXCenter) < range){

if (Math.abs(planeYCenter - bulletYCenter )< range) {

result = true;

}

}

return result;

}

private void updataspritepos(int i){

sprite.setPosition(bullets[i][1],bullets[i][2]);

}

/* no use now

public void resetDeadBullet(){

for (int i = 0; i < bullets.length; i++) {

if(bullets[i][5]==0){//dead bullet

initBullet(i);

}

}

}

*/

public void killbullets(Sprite planesprite,int range){

for (int i = 0; i < bullets.length; i++) {

if(bullets[i][5]!=0){//alive bullets

if(isCollision(planesprite, i, range)){

bullets[i][5]=0;

initBullet(i);

}

}

}

}

}

3、Font.java

package fly;

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class Font {

Sprite sprite;

int width,height;

int[] charhash;

Graphics g;

public Font(Graphics g,Image img, int width, int height, char[] chars) {

this.g=g;

sprite=new Sprite(img,width,height);

this.width=width;

this.height=height;

charhash=new int[128];

for (int i = 0; i < charhash.length; i++) {

charhash[i]=-1;

}

Character c;

for (int i = 0; i < chars.length; i++) {

c=new Character(chars[i]);

charhash[c.hashCode()]=i;

}

}

public void drawChar(char ch, int x, int y){

Character c=new Character(ch);

int hashcode=c.hashCode();

sprite.setPosition(x,y);

if(hashcode>=0){

sprite.setFrame(charhash[hashcode]);

sprite.paint(g);

}

}

public void drawString(String str, int x, int y){

int length=str.length();

for (int i = 0; i < length; i++) {

drawChar(str.charAt(i),x+width*i,y);

}

}

}

4、GameObject.java

package fly;

import javax.microedition.lcdui.game.*;

import javax.microedition.lcdui.*;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class GameObject {

public Sprite sprite;

public boolean alive;

private int lifecount=0;

public int lifetime=0;

public int speed=0;

private int animcount=0;

public GameObject(Image img,int width,int height){

sprite=new Sprite(img,width,height);

reset();

}

public void move(int dx,int dy){

sprite.move(dx,dy);

}

public void moveto(int x,int y){

sprite.setPosition(x,y);

}

public void update(){

if(!alive)

return;

if(++animcount>speed){

animcount=0;

sprite.nextFrame();

if(lifetime!=0 && ++lifecount>lifetime)

alive=false;

}

}

public void paint(Graphics g){

if(!alive)

return;

sprite.paint(g);

}

public void reset(){

alive=true;

lifecount=0;

animcount=0;

sprite.setFrame(0);

}

}

5、ImageTools.java

package fly;

import javax.microedition.lcdui.*;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class ImageTools {

protected ImageTools() {

}

public static Image getImage(String str){

Image img=null;

try {

img = Image.createImage(str);

}

catch (Exception ex) {

System.out.println(ex);

}

finally{

return img;

}

}

}

6、MyGameCanvas.java

package fly;

import javax.microedition.lcdui.game.GameCanvas;

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class MyGameCanvas extends GameCanvas

implements Runnable, CommandListener{

private static MyGameCanvas instance;

Graphics g;

boolean running;

Thread t;

Command startcmd,exitcmd,restartcmd;

int keystate;

boolean keyevent;

boolean key_up,key_down,key_left,key_right,key_fire;

private boolean allowinput;

public int screenwidth;

public int screenheight;

boolean gameover;

//define your variable here

long gametimeoffset;

long gametime;

int bombnum;

int []bombaward;

int bombawardtop;

GameObject plane;

int planedirection;

TiledLayer background;

Bullets bullets;

GameObject explosion;

GameObject bomb;

Image bomb_ico;

Font fontbig,fontsmall;

//define your variable end

protected MyGameCanvas() {

super(true);

g=getGraphics();

running=false;

t=null;

addCommand(startcmd=new Command("start",Command.OK,1));

addCommand(exitcmd=new Command("exit",Command.EXIT,1));

setCommandListener(this);

screenwidth=getWidth();

screenheight=getHeight();

//put your init once code here

Image img=ImageTools.getImage("/pic/MyPlaneFrames.png");

plane=new GameObject(img,24,24);

planedirection=0;

img=ImageTools.getImage("/pic/back_water.png");

int backcolumns=screenwidth/img.getWidth()+1;

int backrows=screenheight/img.getHeight()+1;

background=new TiledLayer(backcolumns,backrows,img,img.getWidth(),img.getHeight());

int x,y;

for (int i = 0; i < backcolumns*backrows; i++) {

x=i%backcolumns;

y=i/backcolumns;

System.out.println("x="+x+" y="+y);

background.setCell(x,y,1);

}

img=ImageTools.getImage("/pic/bullet.png");

bullets=new Bullets(img,img.getWidth(),img.getHeight(),20,screenwidth,screenheight);

img=ImageTools.getImage("/pic/explosion.png");

explosion=new GameObject(img,32,32);

bomb_ico=ImageTools.getImage("/pic/bomb_icon.png");

img=ImageTools.getImage("/pic/b_number.png");

fontbig=new Font(g,img,10,15,new char[]{'0','1','2','3','4','5','6','7','8','9'});

img=ImageTools.getImage("/pic/s_number.png");

fontsmall=new Font(g,img,5,7,new char[]{'0','1','2','3','4','5','6','7','8','9'});

img=ImageTools.getImage("/pic/bomb.png");

bomb=new GameObject(img,65,65);

bombaward=new int[]{0,1,1,1,1,1};

bombawardtop=bombaward.length-1;

//put your init once code end

}

//private void InitInstance(){ }

synchronized public static MyGameCanvas getInstance() {

if (instance == null) {

instance = new MyGameCanvas();

System.out.println("new MyGameCanvas");

}

return instance;

}

public void run(){

System.out.println("MyGameCanvas run start");

long st=0,et=0,diff=0;

int rate=50;//16-17 frame per second

while(running){

st=System.currentTimeMillis();

//put your code here

//input();

//gameLogic();

//your code end

gameinput();

gameMain();

et=System.currentTimeMillis();

diff=et-st;

if(diff<rate){

//System.out.println("Sleep "+(rate-diff));

try {

Thread.sleep(rate - diff);

}

catch (InterruptedException ex) {}

}else{

//System.out.println("rush , and the frame using time: "+diff);

}

}

System.out.println("MyGameCanvas run end");

}

public void start(){

if(!running){

running=true;

t=new Thread(this);

t.start();

}

}

private void gameMain() {

g.setColor(0,0,0);//clear screen

g.fillRect(0,0,getWidth(),getHeight());

background.paint(g);//draw background

//g.setColor(255,255,255);

//g.drawString("hello",1,1,g.TOP|g.LEFT);

if(bomb.alive){

bomb.moveto(plane.sprite.getX()-20,plane.sprite.getY()-20);

bomb.paint(g);

bomb.update();

bullets.killbullets(plane.sprite,32);

}

bullets.paint(g);

plane.paint(g);

bullets.refreshBullets(plane.sprite,!gameover && !bomb.alive);

g.drawImage(bomb_ico,0,screenheight-1,g.BOTTOM|g.LEFT);

fontbig.drawString(String.valueOf(gametime),screenwidth/2-15,10);

fontsmall.drawString(String.valueOf(bombnum),bomb_ico.getWidth(),screenheight-fontsmall.height);

if (gameover) {

explosion.paint(g);

explosion.update();

if(!explosion.alive){

plane.alive=false;

g.setColor(255,255,255);

g.drawString(StringTools.timeOpinion(gametime),5,22,g.LEFT|g.TOP);

g.drawString("fly 0.1 ver by favo yang",2,100,g.LEFT|g.TOP);

g.drawString("E-mail : favoyang@yahoo.com",2,115,g.LEFT|g.TOP);

g.drawString("simulate from:",2,130,g.LEFT|g.TOP);

g.drawString("Mr.tony 's <hold on 20sec 1.20> ",2,145,g.LEFT|g.TOP);

g.drawString("hello tony, just funny.",2,160,g.LEFT|g.TOP);

}

}else{

gametime=(System.currentTimeMillis()-gametimeoffset)/1000;

int awardindex=(int)gametime/20;

if(awardindex>bombawardtop)

awardindex=bombawardtop;

if(bombaward[awardindex]!=0){

bombnum+=bombaward[awardindex];

bombaward[awardindex]=0;

}

if (keyevent) {

if(key_up){

plane.move(0, -3);

plane.sprite.setFrame(0);

}

if(key_down){

plane.move(0, 3);

plane.sprite.setFrame(0);

}

if(key_left){

plane.move( -3, 0);

plane.sprite.setFrame(1);

}

if(key_right){

plane.move(3, 0);

plane.sprite.setFrame(2);

}

if(key_fire){

if(!bomb.alive && bombnum>0){//bomb isn't actived and there's enough bomb .

bomb.reset();

bomb.alive=true;

bombnum--;

}

}

}

else {

plane.sprite.setFrame(0);

}

}

flushGraphics();

}

private void gameInit() {

gameover=false;

gametime=0;

gametimeoffset=System.currentTimeMillis();

allowinput=true;

key_up=key_down=key_left=key_right=key_fire=false;

plane.moveto((screenwidth-plane.sprite.getWidth())/2,

(screenheight-plane.sprite.getHeight())/2);

bullets.initBullets();

plane.reset();

explosion.reset();

explosion.lifetime=3;

bomb.reset();

bomb.lifetime=6;

bomb.alive=false;

bombnum=3;

for (int i = 0; i < bombaward.length; i++) {

bombaward[i]=1;

}

bombaward[0]=0;

printInfo();

}

public void stop(){

if(running){

running = false;

}

}

private void printInfo(){

System.out.println("MyGameCanvas printInfo() start:");

System.out.println("width : "+ getWidth()+ " Height: "+getHeight());

java.lang.Runtime rt=java.lang.Runtime.getRuntime() ;

System.out.println("total memory: "+rt.totalMemory());

System.out.println("free memory: "+rt.freeMemory());

System.out.println("MyGameCanvas printInfo() end:");

}

public void commandAction(Command c, Displayable d) {

String cmdstr=c.getLabel();

if(cmdstr.equals("start")){

gameInit();

start();

removeCommand(startcmd);

addCommand(restartcmd=new Command("restart",Command.OK,1));

}else if(cmdstr.equals("restart")){

stop();

while(t.isAlive());

gameInit();

start();

}else if(cmdstr.equals("exit")){

stop();

Navigate.midlet.destroyApp(false);

Navigate.midlet.notifyDestroyed();

}

}

private void gameinput() {

if(allowinput){

keystate=getKeyStates();

keyevent=false;

if((keystate & UP_PRESSED)!=0){//up

key_up=true;keyevent=true;

//deal your unstop job code here

planedirection=1;

//System.out.println("up press");

//deal your unstop job code end

}else if((keystate & UP_PRESSED)==0){//release key

if(key_up==true){

key_up=false;

//deal your one press-one job code here

//System.out.println("up release");

//deal your one press-one job code end

}

}

if((keystate & DOWN_PRESSED)!=0){//down

key_down=true;keyevent=true;

//deal your unstop job code here

planedirection=2;

//System.out.println("down press");

//deal your unstop job code end

}else if((keystate & DOWN_PRESSED)==0){//release key

if(key_down==true){

key_down=false;

//deal your one press-one job code here

//System.out.println("down release");

//deal your one press-one job code end

}

}

if((keystate & LEFT_PRESSED)!=0){//left

key_left=true;keyevent=true;

//deal your unstop job code here

planedirection=3;

//System.out.println("left press");

//deal your unstop job code end

}else if((keystate & LEFT_PRESSED)==0){//release key

if(key_left==true){

key_left=false;

//deal your one press-one job code here

//System.out.println("left release");

//deal your one press-one job code end

}

}

if((keystate & RIGHT_PRESSED)!=0){//right

key_right=true;keyevent=true;

//deal your unstop job code here

planedirection=4;

//System.out.println("right press");

//deal your unstop job code end

}else if((keystate & RIGHT_PRESSED)==0){//release key

if(key_right==true){

key_right=false;

//deal your one press-one job code here

//System.out.println("right release");

//deal your one press-one job code end

}

}

if((keystate & FIRE_PRESSED)!=0){//fire

key_fire=true;keyevent=true;

//deal your unstop job code here

planedirection=0;

//System.out.println("fire press");

//deal your unstop job code end

}else if((keystate & FIRE_PRESSED)==0){//release key

if(key_fire==true){

key_fire=false;

//deal your one press-one job code here

//System.out.println("fire release");

//deal your one press-one job code end

}

}

if(!keyevent){

//no keyevent here

//System.out.println("NO KEY press");

//no keyevent end

}

}

}

public static void cleanJob(){

instance=null;

}

}

7、Navigate.java

package fly;

import javax.microedition.lcdui.*;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class Navigate {

private static Navigate instance;

public static MyGameCanvas mc;

public static FlyMidlet midlet;

public static Display display;

protected Navigate(FlyMidlet midlet) {

Navigate.midlet=midlet;

Navigate.mc=MyGameCanvas.getInstance();

Navigate.display=Display.getDisplay(midlet);

}

synchronized public static Navigate getInstance(FlyMidlet midlet){

if (instance == null) {

instance = new Navigate(midlet);

System.out.println("new Navigate");

}

return instance;

}

public static void cleanJob(){

instance=null;

}

}

8、StringTools.java

package fly;

/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/

public class StringTools {

protected StringTools() {

}

public static String timeOpinion(long gametime){

if(gametime<10){

return "Do you play with your foot?";

//return "i can't belive,your are a game master";

}else if(gametime<16){

return "come boy, you can do it!";

}else if(gametime<20){

return "what a pity! try again.";

}else if(gametime<25){

return "very well, you are a real man.";

}else if(gametime<30){

return "i know you have talent of this game.";

}else if(gametime<40){

return "i can't belive, your are a game master.";

}else{

return "oh my god, are you a human?";

}

}

}

9.fly.jad

MIDlet-1: FlyMidlet, , fly.FlyMidlet

MIDlet-Jar-Size: 18499

MIDlet-Jar-URL: fly.jar

MIDlet-Name: My MIDlet Suite

MIDlet-Vendor: My Vendor

MIDlet-Version: 1.0

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有