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

📄 wxjgamecanvas.java

📁 一个简单的手游
💻 JAVA
📖 第 1 页 / 共 5 页
字号:

import java.io.*;                 //导入异常类  
import java.util.Random;          //导入随机数类
import javax.microedition.lcdui.*;//导入用户显示屏类
import javax.microedition.lcdui.game.*;//游戏类
import javax.microedition.rms.*;  //记录仓库  

//游戏画布类(GameCanvas)             游戏画布类              线程接口    监听接口
public class WXJGameCanvas extends GameCanvas implements Runnable,CommandListener
{                                    
	private WXJ_MIDlet w;         //主类对象
	private Sound      sod;         //声音类对象
	Random  rdm = new Random();     //随机数对象
	static boolean exit_bz=false; //游戏退出标志
	boolean isGamePaused=false;    //游戏暂停标志
	boolean kaiguan0 = true;
	boolean kaiguan1 = true;
	boolean kaiguan2 = true;
	boolean kaiguan3 = true;
	boolean shengyin = true;
	boolean bofang = true;
	private Command cmdBack=null;	 //退出按钮引用变量
	private Command queding=null;	 //排行榜确定按钮引用变量
	boolean JiXubz=false;          //继续按键标志
	RecordStore rs;                  //记录仓库对象
    StringBuffer sb;                 //字符串变量对象
	Graphics g = getGraphics();      //脱机缓冲画笔
	Font ziti =Font.getFont(Font.FACE_SYSTEM,  //字体的外观       //改变字体的大小
     		                Font.STYLE_PLAIN,  //字体的样式
			                Font.SIZE_LARGE);  //字体的尺寸
	
	private WXJ_GameSprite   pPeople;    //主角飞机对象
	private WXJ_GameSprite   BOSS;       //敌人BOOS
	private WXJ_GameSprite   laozide_dj;      //飞机道具 1
	private WXJ_GameSprite   fj_dj1;     //飞机道具 2
    private WXJ_GameSprite   zhaDan;     //炸弹
    private WXJ_GameSprite   BACK;       //游戏中的返回图标
    private WXJ_GameSprite   laba1;      //飞机道具 1
    private WXJ_GameSprite[]jiemian = new WXJ_GameSprite [2]; //背景边框
	private WXJ_GameSprite[] fjzd   = new WXJ_GameSprite[15]; //飞机子弹
	private WXJ_GameSprite[] fjzd1  = new WXJ_GameSprite[15]; //飞机子弹
	private WXJ_GameSprite[] fjzd2  = new WXJ_GameSprite[15]; //飞机子弹
	private WXJ_GameSprite[] BOSS_DD= new WXJ_GameSprite [4]; //敌人BOOS的导弹
	private WXJ_GameSprite[] xiaobidiji   = new WXJ_GameSprite [4]; //敌人小飞机
	private WXJ_GameSprite[] diren  = new WXJ_GameSprite [4]; //敌人中型飞机
	private WXJ_GameSprite[] wofeiji_HP  = new WXJ_GameSprite [3]; //飞机HP标志
	private WXJ_GameSprite[] laozidezhadan  = new WXJ_GameSprite [3]; //飞机保险标志
	private WXJ_GameSprite[] DJZD   = new WXJ_GameSprite[16]; //敌人小飞机子弹
    private WXJ_GameSprite[] DJZD2  = new WXJ_GameSprite[16]; //敌人中型飞机子弹
	private WXJ_GameSprite[] DJZD3  = new WXJ_GameSprite[16]; //敌人BOSS子弹
    private WXJ_GameSprite[] HuoGuang=new WXJ_GameSprite [6]; //爆炸效果对象    
    
    private LayerManager mLayerManager;  //层管理类对象
    private Image sp1_Image, sp2_Image;  //闪屏图片
    private Image win_Image,over_Image;  //胜利和失败的图片
    private Image shezhi_img, help_img;  //设置和帮助的图片
    private Image    allbutton,    img;  //图片菜单和菜单背景图片
    private Image beijing, beijing1,    laba;  //游戏背景图片  //喇叭图片
    private Image fanhui,      paihang;  //排行榜背景图片 //菜单中的返回图标
    private Image mc,zimu,shuzi,zhizhen; //排行榜的 名次,字母,数字,指针
    private Image phb_bjt,mingzi,quding; //排行榜背景图片  //排行榜输入界面背景标题 //确定图标
    
    private int Xuan_Ji,XuanZe_jsp=0; //选择敌人飞机的计数器   2个//小飞机和中型飞机
    private int x2,y2;                //图片菜单的坐标
    private int timeStep   =1000;      //线程时间
    private int DiJiCX_jsq =0, DiJiCX_jsq2 =0, DiJiCX_jsq3 =0;   //敌机出现计数器 一共3个
    private int bj_y1      =-310, bj_y2    =0;      //背景图移动的纵坐标
    private int df_jsq     =0,    daoju_jsq=0;      //得分计数器  // 道具存在时间计数器
    private int kill_jsq   =0;          //主角死亡时间计数器
    private int mz1, mz2, mz3, mzw=1;   //胜利输入的人名
    private int [][] a=new int [3][5]; //前3名得分   
    
    private boolean labaBz  = true;   //喇叭标志
    private boolean djcz    =false;   //敌人中型飞机存在标志 1
    private boolean djcz2   =false;   //敌人中型飞机存在标志 2
    private boolean djcz3   =false;   //敌人中型飞机存在标志 3
    private boolean djcz4   =false;   //敌人中型飞机存在标志 4
    private boolean boss    =false;   //敌人BOSS存在标志
    private boolean huanzhen=false;   //爆炸效果换桢标志
    private boolean xdf_bz  =false;   //是否写得分标志
    private boolean zd_bz   =false;   //主角发射子弹的标志
    private boolean DJ_BZ   =false;   //道具存在标志
    private boolean cs_hp   =false;   //判断是否增加主角生命的标志
    
    private byte action  = -2;         //分支条件变量
    private byte jsq2=0, js=1;         //控制闪屏时间的计数器   和选择菜单计数器
    private byte BaoZha_jsq=0;         //爆炸计数器
    private byte huanzhen_jsq=0;       //爆炸效果换桢的记数器
    private byte djjsq   =  4;         //敌人小飞机jsq
    private byte djjsq2  =  4;         //敌人中飞机jsq
    private byte kaishi  =  0;         //动画时间计数器
   // int bf = 1;
    
    public WXJGameCanvas (WXJ_MIDlet w) throws IOException //抛出异常
	{
		super(true);        //不调用keyPress等,提高速度和性能
		this.w=w;           //给全局变量赋值
		mLayerManager = new LayerManager();//容器的对象
		
        Load_Image();        //装载菜单 关于 帮助 图片            //断点 18 
        game_init();         //游戏初始化方法 
        //断点 1 
      //  bofang();
		cmdBack=new  Command("返回",Command.OK,1); //设置返回按键
		queding=new  Command("确定",Command.OK,1); //设置确定按键
	    this.setCommandListener(this);   //打开监听
	    this.setFullScreenMode (true);   //设置全屏模式
		x2=90;  //给图片菜单坐标赋值
		y2=75;
		sod = new Sound();             //给声音分配内存空间
		rs=openRSAnyway();             //记录仓库对象            //断点 19
		sb=new StringBuffer("得分: "); //游戏中的得分和记录仓库的分数公用
		
		
		Thread t = new Thread(this);  //调用线程
		t.start();                                              //断点  20
	}
    
    public void Paint_Menu(Graphics g)//画菜单//和贪吃蛇的尺寸一样
	{
    	g.drawImage(img, 0, 0, Graphics.TOP | Graphics.LEFT);//菜单的背景
        g.setClip(x2,y2,52,20);
		if (js==1)                     //开始按键
			g.drawImage(allbutton,x2-52,y2,Graphics.TOP|Graphics.LEFT);
        else
		    g.drawImage(allbutton,x2,y2,Graphics.TOP|Graphics.LEFT);
		g.setClip(x2,y2+23*1,52,20);
		if (js==2)                     //帮助按键
		    g.drawImage(allbutton,x2-52*3,y2+23*1,Graphics.TOP|Graphics.LEFT);
		else
		    g.drawImage(allbutton,x2-52*2,y2+23*1,Graphics.TOP|Graphics.LEFT);
		g.setClip(x2,y2+23*2,52,20);
		if (js==3)                     //设置按键
			g.drawImage(allbutton,x2-52*5,y2+23*2,Graphics.TOP|Graphics.LEFT);
        else
		    g.drawImage(allbutton,x2-52*4,y2+23*2,Graphics.TOP|Graphics.LEFT);
		g.setClip(x2,y2+23*3,52,20);
		if (js==4)                     //排行榜按键
			g.drawImage(allbutton,x2-52*11,y2+23*3,Graphics.TOP|Graphics.LEFT);
        else
		    g.drawImage(allbutton,x2-52*10,y2+23*3,Graphics.TOP|Graphics.LEFT);	
		if (JiXubz==true)//有继续按键的时候
		{
			g.setClip(x2,y2+23*4,52,20);
			if (js==5)               //继续按键
				g.drawImage(allbutton,x2-52*7,y2+23*4,Graphics.TOP|Graphics.LEFT);
	        else
			    g.drawImage(allbutton,x2-52*6,y2+23*4,Graphics.TOP|Graphics.LEFT);
		    g.setClip(x2,y2+23*5,52,20);
			if (js==6)               //退出按键
				g.drawImage(allbutton,x2-52*9,y2+23*5,Graphics.TOP|Graphics.LEFT);
	        else
			    g.drawImage(allbutton,x2-52*8,y2+23*5,Graphics.TOP|Graphics.LEFT);
			g.setClip(0,0,getWidth(),getHeight());
		}
		else
		{
			g.setClip(x2,y2+23*5,52,20);
			if (js==5)               //退出按键
				g.drawImage(allbutton,x2-52*9,y2+23*5,Graphics.TOP|Graphics.LEFT);
	        else
			    g.drawImage(allbutton,x2-52*8,y2+23*5,Graphics.TOP|Graphics.LEFT);
			g.setClip(0,0,getWidth(),getHeight());
		}
	}	
    
    private void  Print_Item(Graphics g,int n)
    {
    	if(n==-2)     //画闪屏1 (移动logo)
    		g.drawImage(sp1_Image,getWidth()/2,getHeight()/2,Graphics.VCENTER|Graphics.HCENTER);
    	if(n==-1)     //画闪屏2 (游戏学院logo)
    		g.drawImage(sp2_Image, 0, 0,Graphics.LEFT|Graphics.TOP);
    	if(n==2)      //画帮助图片
    	{
    		g.drawImage(help_img, 30,57,Graphics.LEFT|Graphics.TOP);
    		g.drawImage(fanhui,177,this.getHeight()-25,0);
    		this.addCommand(cmdBack);
    	}
    	if(n==3)      //画设置图片
    	{	
    		laba1.setVisible(true);
    		g.drawImage(shezhi_img,32,63,Graphics.LEFT|Graphics.TOP);
    		g.drawImage(fanhui,177,this.getHeight()-25,0);
    		if (labaBz==true)//画喇叭标志
    		{
    			laba1.setPosition(132,138);
    		    laba1.setFrame(0);
    		}
    		else
    		{
    			 laba1.setFrame(1);
    		}
    		this.addCommand(cmdBack);
    	}
    	if(n==4)      //画排行榜图片
    	{	
    		sortData();//仓库内容排序的方法                      //断点  29
    		g.drawImage(paihang,32,45,Graphics.LEFT|Graphics.TOP);
    		g.drawImage(fanhui,177,this.getHeight()-25,0);
    		g.drawImage(mc,60,130,0);
    		
    		g.setClip(136,130,9,13);              //写第一名字
    		g.drawImage(zimu,136-9*a[0][0],130,0);
    		g.setClip(151,130,9,13);
    		g.drawImage(zimu,151-9*a[0][1],130,0);
    		g.setClip(166,130,9,13);
    		g.drawImage(zimu,166-9*a[0][2],130,0);
    		
    		g.setClip(91,150,9,13);             //写第一得分
    		g.drawImage(shuzi,91-9*(a[0][3]/1000),150,0);
    		g.setClip(106,150,9,13);
    		g.drawImage(shuzi,106-9*((a[0][3]%1000)/100),150,0); 
    		g.setClip(121,150,9,13);
    		g.drawImage(shuzi,121-9*((a[0][3]%100)/10),150,0);
    		g.setClip(136,150,9,13);
    		g.drawImage(shuzi,136-9*(a[0][3]%10),150,0);
    		g.setClip(151,150,9,13);
    		g.drawImage(shuzi,151,150,0);
    		g.setClip(166,150,9,13);
    		g.drawImage(shuzi,166,150,0);
    		
    		g.setClip(136,175,9,13);              //写第二名字
    		g.drawImage(zimu,136-9*a[1][0],175,0);
    		g.setClip(151,175,9,13);
    		g.drawImage(zimu,151-9*a[1][1],175,0);
    		g.setClip(166,175,9,13);
    		g.drawImage(zimu,166-9*a[1][2],175,0);
    		
    		g.setClip(91,195,9,13);             //写第二得分
    		g.drawImage(shuzi,91-9*(a[1][3]/1000),195,0);
    		g.setClip(106,195,9,13);
    		g.drawImage(shuzi,106-9*((a[1][3]%1000)/100),195,0); 
    		g.setClip(121,195,9,13);
    		g.drawImage(shuzi,121-9*((a[1][3]%100)/10),195,0);
    		g.setClip(136,195,9,13);
    		g.drawImage(shuzi,136-9*(a[1][3]%10),195,0);
    		g.setClip(151,195,9,13);
    		g.drawImage(shuzi,151,195,0);
    		g.setClip(166,195,9,13);
    		g.drawImage(shuzi,166,195,0);
    		
    		g.setClip(136,220,9,13);              //写第三名字
    		g.drawImage(zimu,136-9*a[2][0],220,0);
    		g.setClip(151,220,9,13);
    		g.drawImage(zimu,151-9*a[2][1],220,0);
    		g.setClip(166,220,9,13);
    		g.drawImage(zimu,166-9*a[2][2],220,0);
    		
    		g.setClip(91,239,9,13);             //写第三得分
    		g.drawImage(shuzi,91-9*(a[2][3]/1000),239,0);
    		g.setClip(106,239,9,13);
    		g.drawImage(shuzi,106-9*((a[2][3]%1000)/100),239,0); 
    		g.setClip(121,239,9,13);
    		g.drawImage(shuzi,121-9*((a[2][3]%100)/10),239,0);
    		g.setClip(136,239,9,13);
    		g.drawImage(shuzi,136-9*(a[2][3]%10),239,0);
    		g.setClip(151,239,9,13);
    		g.drawImage(shuzi,151,239,0);
    		g.setClip(166,239,9,13);
    		g.drawImage(shuzi,166,239,0);

    		g.setClip(0,0,this.getWidth(),this.getHeight());
    		this.addCommand(cmdBack);
    	}
    	
    	if(n==5)      //画失败图片
    	{
    		this.addCommand(cmdBack);
    		g.drawImage(over_Image,70, 110,Graphics.LEFT|Graphics.TOP);
    		xdf_bz=dfpd();//是否写得分标志                             //断点  30
    	}
    	if(n==6)      //画胜利图片
    	{
    		this.addCommand(cmdBack);
    		g.drawImage(win_Image,70, 110,Graphics.LEFT|Graphics.TOP);
    		xdf_bz=true;
    	}
    	if(n==7)//画排行榜输入
    	{    		
    		this.addCommand(queding);
    		g.drawImage(phb_bjt,32,51,0);
    	    g.drawImage(mingzi,65,71,0);
     		g.drawImage(zhizhen,90+(30*(mzw-1)),195,0);
     		g.drawImage(quding,177,this.getHeight()-25,0);
     		
     		g.setClip(90,180,9,13);
     		g.drawImage(zimu,90-9*mz1,180,0);
     		g.setClip(120,180,9,13);
     		g.drawImage(zimu,120-9*mz2,180,0);
     		g.setClip(150,180,9,13);
     		g.drawImage(zimu,150-9*mz3,180,0); 
 	
     		g.setClip(78,220,9,13);
     		g.drawImage(shuzi,78-9*(df_jsq/1000),220,0);
     		g.setClip(93,220,9,13);
     		g.drawImage(shuzi,93-9*((df_jsq%1000)/100),220,0); 
     		g.setClip(108,220,9,13);
     		g.drawImage(shuzi,108-9*((df_jsq%100)/10),220,0); 
     		g.setClip(123,220,9,13);
     		g.drawImage(shuzi,123-9*(df_jsq%10),220,0); 
     		g.setClip(138,220,9,13);
     		g.drawImage(shuzi,138,220,0); 
     		g.setClip(153,220,9,13);
     		g.drawImage(shuzi,153,220,0); 
     		
     		g.setClip(0,0,getWidth(),getHeight());   		
    	}
    }    
    
    private void render(Graphics g)// 实施 
	{
		g.setColor(0xffffff);//颜色为白
		g.fillRect(0, 0, getWidth(),getHeight());//清屏
		jsq2++;
		if (jsq2 == 3)//30
		{
			action++;
		}
		else if(jsq2 == 6)//60
		     {
			    action++;
		     }	
		if(jsq2==0)    //不设  就卡或者界面乱跳
			jsq2=10;
			
		//分支情况
		switch(action)
		{
		     case -2: //如果action=-2,画闪屏1
		    	  Print_Item(g,-2);
		    	  break;
		     case -1: //如果action=-1,画闪屏2
		    	  Print_Item(g,-1);
		    	  break;
		     case 0:  //如果action=0, 画菜单
		    	  timeStep=700;
		    	  if(labaBz==true)    //喇叭标志
		  			sod.play_music1();//启用声音
		    	  else
		    		sod.STOP1();
		    	  Paint_Menu(g);
                  break;
		     case 1:  //如果action=1, 画游戏
		    	  timeStep=150;
		    	  sod.STOP1();
		    	  //sod.close1();
		    	  sod.play_music();
		    	 // bf=2;
		    	  if(kaiguan0=true)
		    	  {
		    	    game_act();//游戏动作  
		    	    kaiguan0=false;
		    	  }//断点  31
                  break; 
		     case 2:  //如果action=2, 画帮助
		    	  timeStep=700;
		    	  bj_move();
		    	  Print_Item(g,2);
                  break;        
		     case 3:  //如果action=3, 画设置图片
		    	  timeStep=700;
		    	  bj_move();
		    	  Print_Item(g,3);
                  break;  
		     case 4:  //如果action=4, 画排行榜

⌨️ 快捷键说明

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