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

📄 maincanvas.java

📁 JAVA的一个小游戏..很好玩..小地鼠游戏
💻 JAVA
字号:
/***************************************************
*  程序文件名称: MainCanvas.java
*  功能:主游戏程序
***************************************************/
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class MainCanvas extends GameCanvas implements Runnable
{
	private Thread 			t;
	private boolean 		sleeping;
	private int 			begin;
	private int 			frameDeleay;
	private Image 			bkp, hammerImage, startImg, mouseImage, gameOverImg;
	private HammerSprite 	hammerSprite;
	private MouseSprite 	mouseSprite;
	private int 			level;
	private long 			Score;  
	private Player 			musicPlayer, musicPlayer1;
	
  //构造函数,进行一些初始化的设置
  public MainCanvas()
	{
	 super(true);
	 //
	 frameDeleay = 33;
	 //	
	 begin = 0;
	 //得分回零
	 Score = 0;	
	 try
	  {
		//游戏背景图像
		bkp = Image.createImage("/bk.png");
		//游戏开始封面
		startImg = Image.createImage("/start.png");
		//锤子系列图像,构造锤子精灵
		hammerImage = Image.createImage("/chuizi.png");
		//地鼠锤子系列图像,构造地鼠精灵
		mouseImage = Image.createImage("/shu.png");
		//地鼠贴片的宽和高
		mouseSprite = new MouseSprite( mouseImage, 40, 30 );
		//锤子贴片的宽和高
		hammerSprite = new HammerSprite( hammerImage, 40, 30 );
		//游戏结束画面
		gameOverImg = Image.createImage("/gameover.png");
      }
		catch(IOException e)
		{	}
		
	  try {
      	//定义声音文件的输入流
		InputStream is = this.getClass().getResourceAsStream("Music.mid");
     	//建立midi文件媒体播放器
		musicPlayer = Manager.createPlayer(is, "audio/midi");
      	//让播放器对声音流进行预提取
		musicPlayer.prefetch();
      	//设置声音的播放次数(无限循环)
		musicPlayer.setLoopCount(-1);
      	//启动播放器
		musicPlayer.start();
      }
      catch (IOException ioe) 
    	{}
      catch (MediaException me) 
    	{}		
  }
	
  //精灵碰撞检测
 private void checkSpritEvent()
  {
	if(hammerSprite.collidesWith(mouseSprite, true))
	 {
		mouseSprite.checkBeat();
		//加分
		Score+=100;
	 }
  }
	
	//手机按键对应锤子精灵的坐标位置:
 private void update()
  {    
	//获取手机按键的键值
	int keySelect = this.getKeyStates();
	switch (keySelect)
  	 {
  		case LEFT_PRESSED:
			//移动锤子精灵到指定的坐标位置
  			hammerSprite.moveTo(42, 93);
  			//检测精灵碰撞
			checkSpritEvent();
  			break;
  		case RIGHT_PRESSED:
			//移动锤子精灵到指定的坐标位置
  			hammerSprite.moveTo(180, 92);
  			//检测精灵碰撞
			checkSpritEvent();
  			break;
  		case FIRE_PRESSED:
			//移动锤子精灵到指定的坐标位置
			hammerSprite.moveTo(110, 95);
			//检测精灵碰撞
			checkSpritEvent();
  			break;
  		case UP_PRESSED:
            //移动锤子精灵到指定的坐标位置
		    hammerSprite.moveTo(120, 73);
		    //检测精灵碰撞
			checkSpritEvent();
  			break;
  		case DOWN_PRESSED:
            //移动锤子精灵到指定的坐标位置
			hammerSprite.moveTo(100, 134);
			//检测精灵碰撞
			checkSpritEvent();
  				break;
  		}
	}

  //显示游戏封面
 private void drawStart(Graphics g )
  {
	g.setColor( 0, 0, 0 );
	g.fillRect( 0, 0, getWidth(), getHeight() );
	g.setColor( 255, 255, 255 );
	g.drawImage( startImg, 0, 0, g.TOP|g.LEFT );
	//刷新画面
	flushGraphics();
  }
	
  //显示游戏画面
private void draw( Graphics g )
  {
	g.setColor( 0, 0, 0 );
	g.fillRect( 0, 0, getWidth(), getHeight() );
	g.setColor( 255, 255, 255 );
	//显示背景图像	
	g.drawImage( bkp, 0, 0, g.TOP|g.LEFT );
	//加载地鼠精灵	
	mouseSprite.paint(g);
	//加载锤子精灵	
	hammerSprite.paint(g);
	g.setColor( 0, 0, 0 );
	//记录得分  
	g.drawString( ""+Score, 70, 194, g.TOP|g.LEFT);
	//记录关卡                       
	g.drawString( ""+mouseSprite.getLevel(), 220,194, g.TOP|g.LEFT);
	//刷新画面
	flushGraphics();	
  }
	
	//过关,显示得分和过关数
 private void drawLevel(Graphics g)
  {
	g.setColor( 0, 0, 0 );
	g.fillRect( 0, 0, getWidth(), getHeight() );
	g.setColor( 255, 255, 255 );
	g.setColor( 255, 255, 255 );
	//在93行27列显示得分情况	
	g.drawString( ""+Score, 27, 93, g.TOP|g.LEFT);
	//在93行106列显示过关数	
	g.drawString( ""+mouseSprite.getLevel(), 106, 93, g.TOP|g.LEFT);
	//在59行30列显示
	g.drawString( "Level:"+mouseSprite.getLevel()+" Start", 30, 59, g.TOP|g.LEFT);
	//刷新画面	
	flushGraphics();
  }
	
 //结束游戏画面
 private void drawGameOver( Graphics g )
  {
	g.setColor( 0, 0, 0 );
	g.fillRect( 0, 0, getWidth(), getHeight() );
	//显示游戏结束画面
	g.drawImage(gameOverImg, 0, 0, g.TOP|g.LEFT);
	//刷新画面	
	flushGraphics();
  }
	
 //启动线程
 public void start()
  {
		sleeping = false;
		t = new Thread(this);
		t.start();
  }

  //运行线程	
 public void run()
  {
	Graphics g = this.getGraphics();
	while( !sleeping )
	{
 	 //游戏结束
	 if( mouseSprite.isGameOver() )
      {
      	begin = -1;
      }
	 //游戏进行中
	if( begin == 1 )
	  {
		//锤子精灵移动到指定的坐标位置
		update();
		//显示画面
		draw(g);
		try //暂停
     	 { Thread.sleep(frameDeleay); }
      	catch (InterruptedException ie) 
      	 {  }
     	  //如果是进入新关
		if( mouseSprite.isNewLevel() )
      	 {
      	  //显示新的关数
		  drawLevel(g);
      	  mouseSprite.setNewLevel(false);
      	  mouseSprite.initBeatMouse();
      	  try 
      		{
        	  Thread.sleep(5000);
      		}
      	  catch (InterruptedException ie) 
      		{  }
      	 }
   	  }
    //游戏开始
	else if( begin == 0 )
      {
      	drawStart(g);
      	try 
      	 {
        	Thread.sleep(frameDeleay);
      	 }
      	catch (InterruptedException ie) 
      	 {  }
      }
    //游戏结束
	else if( begin == -1 )
      {	
      	drawGameOver( g );
      	mouseSprite.stop();
      	try
      	 {	musicPlayer.stop(); }
      	catch(Exception e)
      	 {	}
      	try 
      	 {
           Thread.sleep(500);
      	 }
      	catch (InterruptedException ie) 
      	 {	}	
      }
   }
 }
	
 //停止音乐
 public void stop()
 {
  sleeping = true;
  musicPlayer.close();
 }
	
 //设置开始状态标志 
 public void beginning( int b )
  {
	begin = b;
  }
	
 //设置开始状态
 public int ifBegin()
  {
	return begin;
  }
	
 //游戏开始
 public void gameStart()
 {
  //开始过关数第1关	
  beginning(1);
  //得分归零		
  Score = 0;
  //初始化地鼠精灵的一些状态设置	
  mouseSprite.initGame();
  //加载地鼠精灵
  mouseSprite.start();
 }
}

⌨️ 快捷键说明

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