⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mygamecanvas.java

📁 一個j2me空戰游戲程序很不錯,可以作為學習之用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class MyGameCanvas extends GameCanvas implements Runnable, CommandListener
{
	int first[]= {0,1,2,1,3,4,7,6,5,4,8,9,3,6,8,10,11,6,5,4,7,5,11,8,3,9,6 ,5,8,12,0,0,0,0,0,-1};//第一关逻辑
	//int first[]={-1};
	int second[]={0,1,2,4,0,3,5,4,7,0,6,1,1,8,0,2,9,0 ,10,3,4,7,5,9,0 ,8,2,0,10,0,4,3 ,6,0,0,0,0,0,-1};
	//int second[]={-1};
	//int third[]={};
	
	int step;//目前状态
	public GameMIDlet parent;
	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;
	
	public int screenwidth;
	public int screenheight;
	
	boolean gameover;//游戏是否结束

	Sprite plane;//我的飞机
	
	//开始字符显示
        Sprite Begin;
        Sprite Gameover;
        //第几关字符显示
        Sprite Mission;
        //成绩显示
        Sprite scoredisplay[];
        
	boolean alive;//我的飞机的存活
	int clock;//我的飞机发射子弹的间隙
	
	//背景设置
	LayerManager myView;
	Sprite background;
	int currentY;//当前的背景设置点
	//子弹
	Bullets bullets;
	//敌人
	GameObject enemy;
	//飞机爆炸效果
	Sprite myexplosion;
	int myexplosionlife;
	
	//各个爆炸效果
	explosion explosions;
	//老怪
	Monster monster;
	
	int currentgate;//当前的关
	int missionfinished;//此关是否完成
	int beginlife;//开始时候显示的字的生命期
	Image img;
	
	int score;//每个关口的成绩
	int totalscore;//总成绩
	int scoretemp,scorebak;
	int tempX;
	int temp;
	
	protected MyGameCanvas(GameMIDlet p)
	{
		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();
		parent=p;
		scoredisplay=new Sprite[11];
		//put your init once code here
		
        	try {
        		img = Image.createImage("/Plane.png");
        	}
        	catch (Exception ex) 
        	{}
		plane=new Sprite(img,24,24);
		//背景处理
		try {
        		img = Image.createImage("/back.png");
        	}
        	catch (Exception ex) 
        	{}
                background=new Sprite(img,img.getWidth(),img.getHeight());
                myView=new LayerManager();
                myView.append(background);
                //初始化字体图片
                try {
        		img = Image.createImage("/begin.png");
        	}
        	catch (Exception ex) 
        	{}
                Begin=new Sprite(img,img.getWidth(),img.getHeight());
                try {
        		img = Image.createImage("/gameover.png");
        	}
        	catch (Exception ex) 
        	{}
                Gameover=new Sprite(img,img.getWidth(),img.getHeight());
                try {
        		img = Image.createImage("/mission1.png");
        	}
        	catch (Exception ex) 
        	{}
                Mission=new Sprite(img,img.getWidth(),img.getHeight());
                //初始化子弹
                try {
        		img = Image.createImage("/bullet.png");
        	}
        	catch (Exception ex) 
        	{}
                bullets=new Bullets(img,img.getWidth(),img.getHeight(),screenwidth,screenheight,this);

                //初始化敌人
                enemy=new GameObject(screenwidth,screenheight,this);
                try {
        		img = Image.createImage("/mybom.png");
        	}
        	catch (Exception ex) 
        	{}
        	myexplosion=new Sprite(img,64,50);
        	try {
        		img = Image.createImage("/scoredisplay.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[10]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num0.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[0]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num1.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[1]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num2.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[2]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num3.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[3]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num4.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[4]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num5.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[5]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num6.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[6]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num7.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[7]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num8.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[8]=new Sprite(img,img.getWidth(),img.getHeight());
        	try {
        		img = Image.createImage("/num9.png");
        	}
        	catch (Exception ex) 
        	{}
        	scoredisplay[9]=new Sprite(img,img.getWidth(),img.getHeight());
        	        	
        	explosions=new explosion();
        	
                monster=new Monster(screenwidth,screenheight,this);
                //put your init once code end
                System.out.println(screenwidth);
                System.out.println(screenheight);
                currentgate=1;
                score=0;
                totalscore=0;
	}
	
	public void run()
	{
		
		long st=0,et=0,diff=0;
		int rate=50;//16-17 frame per second
		while(running)
		{
			st=System.currentTimeMillis();
			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);
			}
		}
		
	}
	
	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());
		
		//bullets.refreshBullets(plane.sprite,true);
		myView.paint(g,0,0);//draw background
		currentY-=5;
		if (currentY<0)
		  currentY=600;
		myView.setViewWindow(0,currentY,180,177);
		if (missionfinished>1)//显示成绩
		{
			missionfinished--;
			scoredisplay[10].setPosition(0,0);
			scoredisplay[10].paint(g);
			scoredisplay[currentgate].setPosition(90,18);
			scoredisplay[currentgate].paint(g);
			tempX=3;
			scorebak=score;
			temp=1000000;
			while(scorebak<temp ) temp=temp/10;
			if (temp==0)
			{
				scoredisplay[0].setPosition(tempX,78);
				scoredisplay[0].paint(g);
			}
			else
			{
				while(temp>0)
			        {
				scoretemp=scorebak/temp;
				scoredisplay[scoretemp].setPosition(tempX,78);
				scoredisplay[scoretemp].paint(g);
				tempX+=15;
				scorebak=scorebak-scoretemp*temp;
				temp/=10;
			        }
			}
			tempX=3;
			scorebak=totalscore+score;
			temp=1000000;
			while(scorebak<temp ) temp/=10;
			if (temp==0)
			{
				scoredisplay[scoretemp].setPosition(tempX,135);
				scoredisplay[scoretemp].paint(g);
			}
			else
			{
				while(temp>0)
			        {
				scoretemp=scorebak/temp;
				scoredisplay[scoretemp].setPosition(tempX,135);
				scoredisplay[scoretemp].paint(g);
				tempX+=15;
				scorebak=scorebak-scoretemp*temp;
				temp/=10;
			        }
			}
			
			
		}
		else if (missionfinished>0)//开始下一关
		{
			if (currentgate==2)
			{
				gameover=true;
				missionfinished=0;
				myexplosionlife=72;
			}
			else
			{
				currentgate++;
			        gameInit();
			}
			return;
		}
			
		if (beginlife>0)
		{
			beginlife--;
			if (beginlife>30)
			  Begin.paint(g);
			else
			  Mission.paint(g);
		}
		else
		{
		if (currentgate==1)
		{
			step++;
			if ((step%35==0) && (step/35<first.length))
			{
				switch (first[step/35])
			        {
			         case 0:
			           break;//什么敌人都没有
			         case 1:
			           enemy.initObject(screenwidth/2-7,0,0,2,0,-1);
			           break;
			         case 2:
			           enemy.initObject(screenwidth/4-7,0,0,2,0,-1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -