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

📄 my_gamecanvas.java

📁 一个手机的游戏。。源码 要学习的朋友可以来下载
💻 JAVA
字号:
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.lcdui.*;

import java.io.IOException;
import java.util.*;

public class My_GameCanvas extends GameCanvas implements Runnable,CommandListener
{
	boolean exit_bz=false;       //退出标志
	boolean isGamePaused=false;  //暂停标志
	boolean isGameOver=false;    //暂停标志
	boolean JiXubz=false;        //继续标志
	boolean csh_bz=true ;        //初始化标志
	int sj_gan;                   //随机杆变量
	int x2,y2;;                   //菜单坐标
    private int action = -2,jsq2=0,js=1;             //分支条件变量
    int jsq=0;                    //记录下的层数
    int by=0;
    int gan_x=60,gan_y=158;
    int i,i2;                        //杆序号
;
	
	
	private Image sp1_Image;     //闪屏图片
	private Image sp2_Image;     //闪屏图片
	private Image img;           //菜单背景图片     
	private Image shezhi_img;    //设置图片
	private Image help_img;      //帮助图片
	private Image win_Image;     //胜利图片
	private Image over_Image;    //失败图片
	private Image allbutton;     //按钮图片
	private Image laba;          //喇叭图片  
	private Image yxbj;          //游戏背景
//	private Image gan_5;
//	private int[] f2={0,1,2};	
//	private int[] f5={0,0,1,1,2,2,3,3,2,2,1,1};
	
	private Graphics g;          //画笔
	private Command back;        //按钮对象
	private zouzou_MIDlet w; 
	MySprite man;
	MySprite []gan=new MySprite[5] ;
	MySprite touci ;
	Random rdm = new Random();           //随机数对象
	private LayerManager mLayerManager;  //层管理类对象
	
	protected My_GameCanvas(zouzou_MIDlet w) throws IOException
    {
        super(true);  //不调用keyPress等,提高速度和性能
        g=getGraphics();
        this.w=w;
		back = new Command("返回",Command.SCREEN,1);
        setCommandListener(this);
		mLayerManager = new LayerManager();
		game_init();
		ShanPing();
		zr_Image();
		x2=65;
		y2=60;
    }
	
//	载入闪屏图片
	void ShanPing()
	{
		try
		{   
			sp1_Image = Image.createImage("/monternet_logo.png");
			sp2_Image = Image.createImage("/logo1.png");
		}
		catch (Exception e)
		{
		}
    }
	
	void zr_Image() //载入菜单等图片
	{
		try
		{   
			img=Image.createImage("/MainMenu_new.png");
			shezhi_img=Image.createImage("/shezhi.png");
			help_img=Image.createImage("/help.png");
			win_Image=Image.createImage("/win.png");
			over_Image=Image.createImage("/over.png"); 
			allbutton=Image.createImage("/allbutton.png");
			laba=Image.createImage("/laba.png");
			yxbj=Image.createImage("/bg.png");
		}
		catch (Exception e)
		{
		}
	}
//	画菜单
    public void Paint_Menu(Graphics g)
	{
    	g.drawImage(img, 0, 0, 0);
        g.setClip(x2,y2,52,20);
        if (js==1)
			g.drawImage(allbutton,x2-52,y2,0);
        else
		    g.drawImage(allbutton,x2,y2,0);
		g.setClip(x2,y2+23*1,52,20);
		if (js==2)
		    g.drawImage(allbutton,x2-52*3,y2+23*1,0);
		else
		    g.drawImage(allbutton,x2-52*2,y2+23*1,0);
		g.setClip(x2,y2+23*2,52,20);
		if (js==3)
			g.drawImage(allbutton,x2-52*5,y2+23*2,0);
        else
		    g.drawImage(allbutton,x2-52*4,y2+23*2,0);
		
		if (JiXubz==true)
		{
			g.setClip(x2,y2+23*3,52,20);
			if (js==4)
				g.drawImage(allbutton,x2-52*7,y2+23*3,0);
	        else
			    g.drawImage(allbutton,x2-52*6,y2+23*3,0);
		    
			g.setClip(x2,y2+23*4,52,20);
			if (js==5)
				g.drawImage(allbutton,x2-52*9,y2+23*4,0);
	        else
			    g.drawImage(allbutton,x2-52*8,y2+23*4,0);
			g.setClip(0,0,getWidth(),getHeight());
		
		}
		else
		{
			g.setClip(x2,y2+23*4,52,20);
			if (js==4)
				g.drawImage(allbutton,x2-52*9,y2+23*4,0);
	        else
			    g.drawImage(allbutton,x2-52*8,y2+23*4,0);
			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,0);
    	if(n==2)//画帮助图片
    	{
    		g.drawImage(help_img,0,0,0);
    		addCommand(back);
    	}
    	if(n==3)//画设置图片
    	{	
    		g.drawImage(shezhi_img,0,0,0);
    		g.setClip(100,75,16,14);
//    		if (labaBz==true)
//    			g.drawImage(laba,100,75,Graphics.LEFT|Graphics.TOP);
//    		else
//    			g.drawImage(laba,100-16,75,Graphics.LEFT|Graphics.TOP);
    		addCommand(back);
    	}
    	if(n==4)//画失败图片
    	{
    		this.addCommand(back);
    		g.drawImage(over_Image,0,0,0);
    	}
    	if(n==5)//画胜利图片
    	{
    		addCommand(back);
    		g.drawImage(win_Image,0,0,0);
    	}
    }
    
//  角色开始 ---定位
	void dingWei() throws IOException
	{		
		man.setPosition(60,135);         //人物的初始位置
		man.setXY(60,135);		
		gan[0].setPosition(60,158);
		gan[0].setXY(60,158);
		gan[0].setVisible(true);
		int j,k=gan_y;
		for(int i=1;i<5;i++)
		{
			k=k+50;
			j=Math.abs(rdm.nextInt()) % 106 +10;
			gan[i].setPosition(j,k);
			gan[i].setXY(j,k);
		}
		touci.setPosition(0,0);
		touci.setXY(0,0);
	}
	
	//循环刷杆
	void shuagan(int g) 
	{	
	    	int j=Math.abs(rdm.nextInt()) % 106 +10,k;
		    k=g-1;
		    if(k<1)  k=4;
		    gan[g].setPosition(j,gan[k].getY()+50);
		    gan[g].setXY(j,gan[k].getY()+50);
		    mLayerManager.append(gan[g]);	    
	}
	
	//开始刷屏
	void game_init() throws IOException
	{
		man = createman();               //创建人物
		
		gan[0]= creategan(); //第一个杆坐标位置
		for(int i=1;i<5;i++)
		{
		    gan[i]= creategan(); 
		    gan[i].fenzhen(sj_gan);
		}
		touci= createtouci();            //头刺的坐标位置
		
		dingWei();                       //定位		
		
		mLayerManager.append(gan[0]);    //绑定杆
		mLayerManager.append(gan[1]);      
		mLayerManager.append(gan[2]);
		mLayerManager.append(gan[3]);
		mLayerManager.append(gan[4]);
		mLayerManager.append(man);       //绑定人物
		mLayerManager.append(touci);     //绑定头刺
		
		man.setVisible(false);           //不可见
		gan[0].setVisible(false);
		gan[1].setVisible(false);
		gan[2].setVisible(false);
		gan[3].setVisible(false);
		gan[4].setVisible(false);
		touci.setVisible(false);
		
	}
	
	//产生主角对象方法
	private MySprite createman() throws IOException
	{
		Image image = Image.createImage("/char.png");
		return new MySprite(image, 16, 17);
	}
	
//	产生头刺对象方法
	private MySprite createtouci() throws IOException
	{
		Image image = Image.createImage("/teeth.png");
		return new MySprite(image, 176, 23);
	}
	
//	产生杆对象方法
	private MySprite creategan() throws IOException 
	{
		Image image=null;
		if(csh_bz)
		{
		    image = Image.createImage("/flat0.png");
		    csh_bz=false;
		}else
		{
			sj_gan=Math.abs(rdm.nextInt()) % 6 ;
		    switch(sj_gan)
		    {
		    case 0:
		    	image = Image.createImage("/flat0.png");
		    	break;
		    case 1:
		    	image = Image.createImage("/flat1.png");
		    	break;
		    case 2:
		    	image = Image.createImage("/flat2.png");
		    	break;
		    case 3:
		    	image = Image.createImage("/flat3.png");
		    	break;
		    case 4:
		    	image = Image.createImage("/flat4.png");
		    	break;
		    case 5:
		    	image = Image.createImage("/flat5.png");
		    	break;
		    }
		    
		}			
		return new MySprite(image, 50, 8);
	}
	//人与头刺碰撞
	public boolean pengzhuang_1() 
	{
		if (man.collidesWith(touci,false))// true象素碰撞  false
		{
			siwang();
			return true;
		}else
			return false;		
	}
	
//	人与杆碰撞
	public boolean pengzhuang_2() 
	{
		for(i=0;i<5;i++)
		{
			if (man.collidesWith(gan[i],false))// true象素碰撞  false 
			{
				   return true;			       
			}					
		}
		return false;
	}
	
////	人与道具碰撞
//	public boolean  pengzhuang_3() 
//	{
//		if (man.collidesWith(daoju,false))// true象素碰撞  false 
//			   return true;
//			else
//			   return false;
//	}
	
	//杆与头刺碰撞
	public boolean  pengzhuang_4() 
	{
		for(i2=0;i2<5;i2++)
		{
			if (gan[i2].collidesWith(touci,false))// true象素碰撞  false 
			{				
				gan[i2].setVisible(false);								
				return true;				
			}		
		}
		return false;
	}
	
    //产生线程并执行线程方法
    public void start()      
	{
		Thread t = new Thread(this);
		t.start();
	}
    
//  游戏动作
    void game_act() 
	{
    	g.drawImage(yxbj, 0, -240+by, Graphics.TOP | Graphics.LEFT);
		g.drawImage(yxbj, 0, by, Graphics.TOP | Graphics.LEFT);
		by+=5;
		if(by>=240) by=0;
		
		
    	man.setVisible(true); 
    	for(int i=0;i<5;i++)
    	{
    	   gan[i].setVisible(true);		  
		   gan[i].nextFrame();
    	}
		
		
		touci.setVisible(true);

		if (pengzhuang_2())
		{
			man.setPosition(man.getX(),gan[i].getY()-17);         //人物的初始位置
			man.setXY(man.getX(),gan[i].getY()-17);
		}else
		{
		    man.DOWN_MOVE();
		}
		if (pengzhuang_4())
		{
			if(i2==0)
			{
			   gan[0].setPosition(-100,-100);
			   gan[0].setXY(-100,-100);
			}else
			{
				try
				{
				    gan[i2]=creategan();
				}
			    catch(Exception e)
				{
				}	
				shuagan(i2) ;				
			}
		}
//		man.setFrame(0);
		gan[0].AUTO_MOVE();
		gan[1].AUTO_MOVE();
		gan[2].AUTO_MOVE();
		gan[3].AUTO_MOVE();
		gan[4].AUTO_MOVE();	
		g.setColor(0x000000);
		g.fillRect(0,158,176,19);
	}
   
//  实施 
    private void render(Graphics g)
	{
		g.setColor(0xffffff);
		g.fillRect(0, 0, getWidth(),getHeight());
		jsq2++;
		if (jsq2 == 10 )
		{
			action++;
		}
		else if(jsq2 == 15)
		     {
			    action++;
			    //jsq2=100;
		     }
	}
    
//  死亡
	public void  siwang() 
	{		
			action=4;
			man.setVisible(false);           
			gan[0].setVisible(false);
			gan[1].setVisible(false);
			gan[2].setVisible(false);
			gan[3].setVisible(false);
			gan[4].setVisible(false);
			touci.setVisible(false);
	}	
		
//	主线程
	public void run()      
	{
		while (!exit_bz) 
		{
			if (!isGamePaused)
			{
                //碰撞判断3---(人与头刺)
	        	pengzhuang_1();
				//键盘操作选择
	        	KeyOS();
				render(g);	
				try 
				{
					Thread.sleep(50);
				} 
				catch (InterruptedException ie) 
				{
				}

//				分支情况
				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,画菜单
				    	  Paint_Menu(g);
		                  break;
				     case 1:  //如果action=1,画游戏				    	
				    		 game_act();  //游戏动作						    	 
		                  break; 
				     case 2:  //如果action=2,画帮助
				    	  Print_Item(g,2);
		                  break;        
				     case 3:  //如果action=3,画设置图片
				    	  Print_Item(g,3);
		                  break;  
				     case 4:  //如果action=4,画失败
				    	  Print_Item(g,4);
		                  break;
				     case 5:  //如果action=5,画胜利
				    	  Print_Item(g,5);
		                  break;     
		        }
				mLayerManager.paint(g, 0, 0);
				flushGraphics(); //刷新屏幕
			}		
	        else
	        {
	        	try 
				{
					Thread.sleep(100);
				} 
				catch (InterruptedException ie) 
				{
				}
	        }
		}
    }
	
//	键盘操作选择
	private void KeyOS()
	{
		if (action==1) input_1();
		if (action==0) input_2();
//		if (action==3) input_3();
        //占位 容错
		if (action==2) input_4();
		if (action==4) input_4();
		if (action==5) input_4();
		if (action==-1) input_4();
		if (action==-2) input_4();
		
	}
	
	//占位 容错
	private void input_4()
	{
		int keyStates = getKeyStates();
	}
	
	   //键盘输入处理方法1 主角控制
	private void input_1()
	{
        int keyStates = getKeyStates();
        if ((keyStates & LEFT_PRESSED) != 0)
		     man.LEFT_MOVE();
	    else if ((keyStates & RIGHT_PRESSED) != 0)
		     man.RIGHT_MOVE();
		
    }
	
    //键盘输入处理方法2  菜单选择
	private void input_2()
	{
		int keyStates = getKeyStates();
		if (JiXubz==true)
		{
			if ((keyStates & UP_PRESSED) != 0)
		    {
				 js--;
			     if (js<1)
			     {
					 js=5;
			     }
		    }
			if ((keyStates & DOWN_PRESSED) != 0)
		    {
				js++;
				if (js>5)
			    {
					 js=1;
			    }
			}
			if ((keyStates & FIRE_PRESSED) != 0)
			{
				 if (js==1)  
				 {
					 action=1;
					 jsq=0;
					 isGamePaused=false;
					 try
					    {
						 dingWei();          //新开始
					    }
				        catch(Exception e)
					    {
					    }							 
					 this.addCommand(back);
				 }
			     if (js==2)  action=2;
				 if (js==3)  action=3;
				 if (js==4 && JiXubz==true)
				 {
					 action=1;
					 JiXubz=false;
					 this.addCommand(back);
				 }
				 if (js==5)  w.destroyApp(false);
			}
		}
		else
		{
			if ((keyStates & UP_PRESSED) != 0)
		    {
				 js--;
			     if (js<1)
			     {
					 js=4;
			     }
		    }
			if ((keyStates & DOWN_PRESSED) != 0)
		    {
				js++;
				if (js>4)
			    {
					 js=1;
			    }
			}
			if ((keyStates & FIRE_PRESSED) != 0)
			{
				 if (js==1)  
				 {
					 action=1;
					 jsq=0;
					 isGamePaused=false;
					 try
					    {
						 dingWei();          //新开始
					    }
				        catch(Exception e)
					    {
					    }	
					 this.addCommand(back);
				 }
			     if (js==2)  action=2;
				 if (js==3)  action=3;
				 if (js==4)  w.destroyApp(false);
			}
		}
	}
	
	//按钮监听
	public void commandAction(Command c,Displayable d)
    {
		if (c == back)
		{
			if (action==1)
			{
				JiXubz=true;
				js=4;
			}
			else
				js=1;
			action=0;
			removeCommand(back);
			man.setVisible(false);           
			gan[0].setVisible(false);
			gan[1].setVisible(false);
			gan[2].setVisible(false);
			gan[3].setVisible(false);
			gan[4].setVisible(false);
			touci.setVisible(false);
		}
    }
}

⌨️ 快捷键说明

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