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

📄 gamedraws.java

📁 用J2ME编写的手机飞机空战小游戏,比较经典,与大家共享
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;

/*====================================*/
/*    【游戏主控类:动作、逻辑、绘制。】     */
/*		      程序编写:励晓维		      */
/*		       2004-11-27 	          */
/*====================================*/

public class gameDraws extends Canvas implements CommandListener
{
	private Display display;  //显示
	private Form f;           //窗体
	private TextField tf;	  //文本输入框
	private Command menuBack;   //返回
	private Command menuOk;     //确认
	private Command menuPause;  //暂停
	private ImageLib pic;		//创建图片类的对象
	private MIDlet mid;
	private int MenuX = 40;			//菜单x轴位置变量
	private int MenuY = 55;			//菜单y轴位置变量
	private int MoveTitle = MenuY;	//标题框移动变量
	private int MoveCote = 6;		//战机选择栏初始位置
	private int menuIndex=1;		//菜单序列
	private int  count1= 0;			//战机选择计数
	private gameScore gc;			//创建记录库
	Random rd = new Random();
	private boolean alive=true;		//游戏线程开关
	private boolean gameinfo;		//信息提示开关
	Timer timer = new Timer();
	private int planeW,planeH;		//战机宽高
	private int epBtW,epBtH;		//敌机子弹宽高
	private int count;				//暂停菜单开关计数
	private int SelectPlane;		//选择飞机
	private int Lifes;				//飞机生命	
	private int BackGY;				//背景移动
	private int PlaneMove = 2;		//飞机移动状态
	private int MovePX, MovePY, 			//定义战机起点 
				MoveBtX = 60, MoveBtY = 100;//控制飞机与子弹的起点
	private int[] SuiJi = new int[7],						 //乱数出现敌机
				  epW = new int[4],		epH = new int[4],	 //敌机宽高
				  MoveEpX= new int[7],	MoveEpY = new int[7],//敌机位置
				  SuiJiEpX = new int[7],					 //乱数敌机X坐标
				  epBtX = new int[4],	epBtY = new int[4];	 //敌机子弹位置
	private int SpeedEnemy = 2;		//敌机飞行速度
	private int SpeedepBt = 1;		//敌机子弹速度
	private int SpeedpBt = 4;		//战机子弹速度
	private int Score = 0;			//得分
	private int term,Num;			//过关用到的变量	
	private int OverX=20,OverY=60;	//游戏结束画面的位置
	
	private int difficulty=3;		//游戏难度控制
	private int TopScore = 8000;	//过关总分
	private int pause;				//暂停用计数
	
	private int IbackY=-128;		//首页背景坐标
	private boolean Iback=true;		//首页动画开关
	
	
	/*===============================*/
	/*			本类构造器  	         */
	/*===============================*/
    public gameDraws(MIDlet midlet,Display s)
    {
        this.mid=midlet;
        this.display=s;
        f = new Form("");    //实例化表单
        tf=new TextField("留下大名", "YOURNAME", 20, TextField.ANY);
		menuOk = new Command("确认", Command.OK, 1);
		menuBack = new Command("返回", Command.BACK, 3);
		menuPause = new Command("暂停", Command.STOP, 1);		
		pic=new ImageLib();
		pic.loadMenuImg();  //初始化游戏图片
		setCommand(menuOk);
		EpType();			//取得敌机类型
		timer.schedule(new backMove(),10,10);
		timer.schedule(new PlaneMove(), 10, 100);	//战机与背景移动线程
		timer.schedule(new Enemy(), 400, 100);		//敌机线程
		timer.schedule(new PlaneBullet(), 20, 10);	//战机子弹线程
		timer.schedule(new bulletEp(),400,16);		//敌机子弹线程

    }
    
	/*===============================*/
	/*			主绘制方法  	         */
	/*===============================*/
    public void paint(Graphics g)
    {
        if(menuIndex==1)				
            	{paintMain(g);}			//游戏首页
        if(menuIndex==2){
            	count1++;choicePage(g);}//战机选择页
        if(menuIndex==3){
        		paintGame(g);}			//游戏主界面
        if(menuIndex==4){
    			gc.showCompet(g);}		//排行页
    }

    /**======首页绘制=======*/
	public void paintMain(Graphics g) {
		this.setCommandListener(this);
		g.setColor(255, 255, 255);
		g.fillRect(0, 0, getWidth(), getHeight());
		g.setColor(255, 0, 0);			
		g.drawImage(pic.gameUI[3], 0,IbackY, 0);	 //游戏首页
		g.fillRect(MenuX-1, MoveTitle-1, 52, 18);//填充选择框
		/**测试用遮挡屏幕*/
		g.setColor(255,255,255);
		g.fillRect(0,128,128,50);

		for(int i=0;i<3;i++)
		g.drawImage(pic.gameUI[i], MenuX, MenuY+i*23, 0);
	}
	
	/**=====帮助页绘制======*/
	public void helpPage()
	{
		f.setCommandListener(this);
		delForm();  //清空Form
		f.removeCommand(menuOk);
		f.append(pic.gameUI[4]); //调用帮助图片
		f.addCommand(menuBack);  //添加返回命令 
		display.setCurrent(f);
	}	
	
	/**=====战机选择页======*/
	public void choicePage(Graphics g)
	{
		g.setColor(0,255,0);
		g.drawImage(pic.gameUI[5],0,0,0);//战机选择画面
		g.drawRect(MoveCote, 26, 49, 79);//Y.W.H
		addCommand(menuBack);
	}

	/**====游戏画面绘制=====*/
	public void paintGame(Graphics g) { 
		addCommand(menuBack);
		removeCommand(menuOk);
		addCommand(menuPause);		
		g.setColor(255, 255, 255);
		g.fillRect(0, 0, getWidth(), getHeight());
		
		if(Score<=3000)
		    g.drawImage(pic.gameUI[7], 0, BackGY, 0);//背景1
		
		if(Score>3000&&Score<=5000){
			g.drawImage(pic.gameUI[24], 0, BackGY, 0);//背景2
		   }
		if(Score>5000&&Score<=8000){
			g.drawImage(pic.gameUI[25], 0, BackGY, 0);//背景3
		}

		//敌机
		for(int i=0;i<difficulty;i++)
		{   if(difficulty==4) 
		    		MoveEpX[i]=i*35;
			 else   MoveEpX[i]=SuiJiEpX[i]+i*40;
		g.drawImage(pic.gameUI[13], epBtX[i], epBtY[i]+2, 0);
   	    g.drawImage(pic.gameUI[SuiJi[i]], MoveEpX[i],MoveEpY[i], 0);}
   	    
   	    Impact(g);//碰撞检测
   	    
	    //过关条件判断
	    term = Score;
	    if(term>1000*Num) {gameinfo=true;Num+=1;}

		/**测试用遮挡屏幕*/
		g.fillRect(0,129,128,50);	 
		
		g.setColor(0, 255, 0);
		if(alive) g.drawString("按任意键开始",25,60,0);
		paintInfo(g);
		g.drawString("得分:" + String.valueOf(Score), 0, 0, 0);
		g.drawString("第"+String.valueOf(Num)+"关",100,0,0);
		
		if (SelectPlane == 1)   
		    PlaneRed(g);
		else  
		    PlaneBlue(g);//选中战机
		
	    //游戏结束判断
	    if(Lifes<0) 
	    {
	        OverY=60;MovePX=-20;
	        g.drawImage(pic.gameUI[6],OverX,OverY,0);
	        alive=true;removeCommand(menuPause);	        
	    }	    
	    
	    //游戏胜利判断
	    if(Score>=TopScore)
	    {
	        OverY=60;g.drawImage(pic.gameUI[21],0,0,0);
	        alive=true;removeCommand(menuPause);Lifes=-1;
	    }
	}

	
	/*===============================*/
	/*        选择战机:SelectAir 	 */
	/*===============================*/			
	public void SelectAir()
	{
	    /**初始化游戏各项参数*/
	    alive = true;
		pause=0;//重置暂停开关
		count=0;//重置暂停菜单计数
	    BackGY = -384;						//背景位置
	    MovePX = 50; MovePY = 110;			//战机坐标
	    MoveBtX=-10;						//战机子弹坐标
	    for(int i=0;i<7;i++) MoveEpY[i]=200;//敌机坐标
	    Lifes = 3;Score=0;Num=1;			//生命、得分、关数
	    for(int i=0;i<difficulty;i++) 		//难度控制
	        {epBtX[i]=-10;epBtY[i]=0;epW[i]=0;epH[i]=0;}
	    MoveEpY[0]=-60;	    MoveEpY[1]=-30;
	    MoveEpY[2]=-60;	    MoveEpY[3]=-30;
	    
    if(MoveCote==66)
    	{
        	SelectPlane=2;//选择蓝色战机
    	}
    if(MoveCote==6&&menuIndex==2)
    	{
    		SelectPlane=1;//选择红色战机
    	}
    	menuIndex=3;
	}	
	
	/**====绘制红色战机=====*/
	public void PlaneRed(Graphics g) {
//		战机子弹1
		g.drawImage(pic.gameUI[12], MoveBtX, MoveBtY, 0);
	    
	    for(int i=0;i<Lifes;i++)	//画左下角飞机1生命
			g.drawImage(pic.gameUI[8], 5+i*8, 118, 0);	
	    
	    if(PlaneMove>=0&&PlaneMove<5)
	   		g.drawImage(pic.gameUI[10], MovePX, MovePY, 0);
	    }

	/**====绘制蓝色战机=====*/
	public void PlaneBlue(Graphics g) {
//		战机子弹2
		g.drawImage(pic.gameUI[23], MoveBtX, MoveBtY, 0);
		
	    for(int i=0;i<Lifes;i++)	//画左下角飞机2生命
			g.drawImage(pic.gameUI[9], 5+i*8, 118, 0);
	    
	    if(PlaneMove>=0&&PlaneMove<5)
	   		g.drawImage(pic.gameUI[11], MovePX, MovePY, 0);				
	    }

    /**====获得敌机类型=====*/
	public void EpType()
	{
	    for(int i=0;i<7;i++)//敌机调用类型
	    {    
	        SuiJi[i] = Math.abs(rd.nextInt())%7+14;
	        SuiJiEpX[i]=7;
	    }
	}

    /**====绘制过关提示=====*/
	public void paintInfo(Graphics g)
	{
	    if(gameinfo==true)
	    {
	        for(int i=1;i<7;i++)
	        {
		       g.drawString("      第"+String.valueOf(Num)+"关!",30,60,0);
	           g.drawString("目标:"+String.valueOf(Num*1000)+"分", 30, 75, 0);
	        }
	     }
    }

	
	
	/*===============================*/
	/*	           按键定义             	 */
	/*===============================*/	    	
	public void keyPressed(int KeyCode) {
	    
		if(Lifes>=0&&pause==0) 
		     alive = false;
		pause++;//暂停开关一次有效
	    gameinfo = false;

	    /**战机选择页按键控制*/   
		if(KeyCode==getKeyCode(Canvas.LEFT)|| (KeyCode == KEY_NUM4)){
		        if(MoveCote>60)
		            MoveCote-=60;
		        else
		            MoveCote+=60;
			PlaneMove = 0;
		}//左
		
		if(KeyCode==getKeyCode(Canvas.RIGHT) || (KeyCode == KEY_NUM6)){
		        if(MoveCote<60)
		            MoveCote+=60;
		        else
		            MoveCote-=60;
			PlaneMove = 1;
		}//右

		/**游戏首页按键控制*/		
		if (KeyCode == getKeyCode(Canvas.DOWN) || (KeyCode == KEY_NUM8)) {
		        if(MoveTitle<=MenuY+23)
		            MoveTitle += 23;
		        else
		            MoveTitle = MenuY;
			PlaneMove = 4;
		}//定位下移的选择框位置
		
		if (KeyCode == getKeyCode(Canvas.UP) || (KeyCode == KEY_NUM2)) {
		        if(MoveTitle>=MenuY+23)
		            MoveTitle -= 23;
		        else
		            MoveTitle = MenuY+46;
			 PlaneMove = 3;
		}//定位上移的选择框位置			
		
		if (KeyCode == getKeyCode(Canvas.FIRE)) {
		    if(menuIndex==1){		    
			if (MoveTitle == MenuY) {
			    menuIndex=2;repaint();
				}}
		}//新游戏菜单选择

		if (KeyCode == getKeyCode(Canvas.FIRE)) {
		    if(menuIndex==1){
		        if (MoveTitle == (MenuY+23)) {
		            helpPage();}
			}

⌨️ 快捷键说明

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