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

📄 henwaycanvas.java

📁 这是本人在上学的时候写的一个小鸡过马路的程序.里面据体实现了音乐播放,碰撞检测等功能J2ME程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.*;
import javax.microedition.media*;
import javax.microedition.rms.RecordStore;
import com.nokia.mid.ui.*;
/*
 * 创建日期 2006-11-15
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */

/**
 * @author liwei
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class HenwayCanvas extends FullCanvas implements Runnable{

	int gameState=0;
	MIDletFrame mf;
	boolean flag;
	Font font;
	Random rand;
	int num,setnum;
	int soundset,vibraset;
	boolean left,right,up,down;
	//====================================================
	  private boolean  sleeping;
	  private long     frameDelay;
	  private Image    background;
	  private Image    chickenHead;
	  private Sprite   chickenSprite;
	  private Sprite[] carSprite = new Sprite[4];
	  private int[]    carYSpeed = new int[4];
	  private boolean  gameOver;
	  private int      numLives;
	  private int      score;
	  private Player   musicPlayer;
	  private Player   celebratePlayer;
	  private Player   squishPlayer;
	  private Player   gameoverPlayer;
	  public static int HSc = 0;
	  private boolean back;
	  Thread trd;
	public HenwayCanvas(MIDletFrame mf)
	{
		this.mf=mf;
		flag=true;
		font=Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
		//Set the frame rate (20 fps)
	    frameDelay = 50;
	    // Clear the input delay
	    recordJob(false);
	    rand=new Random();
	    
	    start();
		trd=new Thread(this);
		trd.start();
	}
	
	public void start() 
	{
	    // Initialize the game variables
	    gameOver = false;
	    numLives = 3;
	    score = 0;
	    // Initialize the background image and chicken and car sprites
	    try {
	      background = Image.createImage("/Highway.png");
	      chickenHead = Image.createImage("/ChickenHead.png");

	      chickenSprite = new Sprite(Image.createImage("/Chicken.png"), 22, 22);
	      chickenSprite.setPosition(0, 77);

	      carSprite[0] = new Sprite(Image.createImage("/Car1.png"));
	      carSprite[0].setPosition(27, 0);
	      carYSpeed[0] = 3;
	      carSprite[1] = new Sprite(Image.createImage("/Car2.png"));
	      carSprite[1].setPosition(62, 0);
	      carYSpeed[1] = 1;
	      carSprite[2] = new Sprite(Image.createImage("/Car3.png"));
	      carSprite[2].setPosition(93, 67);
	      carYSpeed[2] = -2;
	      carSprite[3] = new Sprite(Image.createImage("/Car4.png"));
	      carSprite[3].setPosition(128, 64);
	      carYSpeed[3] = -5;
	    }
	    catch (IOException e) {
	      System.err.println("Failed loading images!");
	    }
	    // Initialize the music and wave players
	    try {
	      InputStream is = getClass().getResourceAsStream("Music.mid");
	      musicPlayer = Manager.createPlayer(is, "audio/midi");
	      musicPlayer.prefetch();
	      is = getClass().getResourceAsStream("Celebrate.wav");
	      celebratePlayer = Manager.createPlayer(is, "audio/X-wav");
	      celebratePlayer.prefetch();
	      is = getClass().getResourceAsStream("Squish.wav");
	      squishPlayer = Manager.createPlayer(is, "audio/X-wav");
	      squishPlayer.prefetch();
	      is = getClass().getResourceAsStream("GameOver.wav");
	      gameoverPlayer = Manager.createPlayer(is, "audio/X-wav");
	      gameoverPlayer.prefetch();
	    }
	    catch (IOException ioe) {
	    }
	    catch (MediaException me) {
	    }
	  }
	protected synchronized void recordJob(boolean writeflags)
	{
	    RecordStore recordStore = null;
	    byte[] b = null;
	    String str = null;
	    try{
	      recordStore = RecordStore.openRecordStore("ChacknPop", true);
	      if(recordStore.getNumRecords() == 0){
	        str = Integer.toString(HSc);
	        b = str.getBytes();
	        recordStore.addRecord(b, 0, b.length);
	      }else{
	        if(writeflags == true){
	          str = Integer.toString(HSc);
	          b = str.getBytes();
	          recordStore.setRecord(1, b, 0, b.length);
	        }else if(writeflags == false){
	          b = recordStore.getRecord(1);
	          HSc = Integer.parseInt(new String(b));
	        }
	      }
	      recordStore.closeRecordStore();
	      recordStore = null;
	      b = null;
	      str = null;
	    }catch(Exception e){
	    }
	  }
	  private void CheckScore()
	  {
	    if(HSc < score){
	        HSc = score;
	    }
	  }
	  public void drawGame(Graphics g)
	  {
		g.setFont(font);
		// Draw the highway background
	  	g.setColor(0,0,0);
	  	g.fillRect(0,0,getWidth(),getHeight());
	  	
	  	g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);
	  	
	  	g.setColor(0,255,255);
	  	g.drawString("返回",0,getHeight()-font.getHeight(),0);
		g.drawString("退出",getWidth()-font.stringWidth("退出"),getHeight()-font.getHeight(),0);
		
		//Draw the score
	    g.setColor(255,0,0);
	    g.drawString("Sc:",155,0,0);
	    g.drawString(""+score,155,font.getHeight(),0);
	    
	    // Draw the number of remaining lives
	    for (int i = 0; i < numLives; i++)
	      g.drawImage(chickenHead, 25 - ((i + 1) * 8), 0, Graphics.TOP | Graphics.LEFT);

	    // Draw the chicken sprite
	    chickenSprite.paint(g);

	    // Draw the car sprites
	    for (int i = 0; i < 4; i++)
	      carSprite[i].paint(g);
	    
	    if (gameOver) {
	      gameState=6;
	    }
	  }
	  private void update() 
	  {
	  	checkBounds(chickenSprite, false);
	    // See whether the chicken made it across
	    if (chickenSprite.getX() == (getWidth() - chickenSprite.getWidth())) {
	      // Play a sound for making it safely across
	    	if(soundset==0)
	    	{
		      try {
		        celebratePlayer.start();
		      }
		      catch (MediaException me) {
		      }
	    	}

	      // Reset the chicken position and increment the score
	      chickenSprite.setPosition(0, 77);
	      score += 25;
	    }
	    if(left==true)
	    {
	    	chickenSprite.move(-3, 0);
	        chickenSprite.nextFrame();
	    }
	    if(right==true)
	    {
	    	chickenSprite.move(3, 0);
	        chickenSprite.nextFrame();
	    }
	    if(up==true)
	    {
	    	chickenSprite.move(0, -3);
	        chickenSprite.nextFrame();
	    }
	    if(down==true)
	    {
	    	chickenSprite.move(0, 3);
	        chickenSprite.nextFrame();
	    }
	    // Update the car sprites
	    for (int i = 0; i < 4; i++) {
	      // Move the car sprites
	      carSprite[i].move(0, carYSpeed[i]);
	      checkBounds(carSprite[i], true);

	      // Check for a collision between the chicken and cars
	      if (chickenSprite.collidesWith(carSprite[i], true)) {
	        // Play a sound for losing a chicken
	      	if(soundset==0)
	      	{
		        try {
		          squishPlayer.start();
		          
		        }
		        catch (MediaException me) {
		        }
	      	}
			if(vibraset==0)
		    {
		         mf.display.vibrate(200);
		    }
	        // Check for a game over
	        if (--numLives == 0) {
	          // Stop the music and play a game over sound
	          if(soundset==0)
				{
				    try {
				    	musicPlayer.stop();
				    	try
				    	{
				    		Thread.sleep(20);
				    	}
				    	catch(Exception e){}
			            gameoverPlayer.start();
				    }
				    catch (MediaException me) {
				    }
				}

	          gameOver = true;
	        } else {
	          // Reset the chicken position
	          chickenSprite.setPosition(0, 77);
	        }
	        // No need to continue updating the car sprites
	        break;
	      }
	    }
	  }
	  private void checkBounds(Sprite sprite, boolean wrap) {
	    // Wrap/stop the sprite if necessary
	    if (wrap) {
	      // Wrap the sprite around the edges of the screen
	      if (sprite.getX() < -sprite.getWidth())
	        sprite.setPosition(getWidth(), sprite.getY());
	      else if (sprite.getX() > getWidth())
	        sprite.setPosition(-sprite.getWidth(), sprite.getY());
	      
	      if (sprite.getY() < -sprite.getHeight())
	        sprite.setPosition(sprite.getX(), getHeight());
	      else if (sprite.getY() > getHeight())
	        sprite.setPosition(sprite.getX(), -sprite.getHeight());
	    }
	    else {
	      // Stop the sprite at the edges of the screen
	      if (sprite.getX() < 0)
	        sprite.setPosition(0, sprite.getY());
	      else if (sprite.getX() > (getWidth() - sprite.getWidth()))
	        sprite.setPosition(getWidth() - sprite.getWidth(), sprite.getY());
	      if (sprite.getY() < 0)
	        sprite.setPosition(sprite.getX(), 0);
	      else if (sprite.getY() > (getHeight() - sprite.getHeight()))
	        sprite.setPosition(sprite.getX(), getHeight() - sprite.getHeight());
	    }
	  }
	public void paint(Graphics g)
	{
		if(gameState==0)
		{
			drawTitle(g);
		}
		else if(gameState==1)
		{
			drawMenu(g);
		}
		else if(gameState==2)
		{
			drawSettings(g);
		}
		else if(gameState==3)
		{
			drawHelp(g);
		}
		else if(gameState==4)
		{
			drawAbout(g);
		}
		else if(gameState==5)
		{
			drawGame(g);
			update();
		}
		else if(gameState==6)
		{
			GameOver(g);
		}
	}
	public void drawTitle(Graphics g)
	{
		g.setFont(font);
		
		Integer integer;
		String string;
		
		g.setColor(200,200,30);
		g.fillRect(0,0,getWidth(),getHeight());
		
		g.setColor(0,255,255);
		g.drawString("小鸡过马路",(getWidth()-font.stringWidth("小鸡过马路"))/2,50,0);
		g.drawString("菜单",0,getHeight()-font.getHeight(),0);
		g.drawString("退出",getWidth()-font.stringWidth("退出"),getHeight()-font.getHeight(),0);
		
	    g.setColor(255,0,0);
	    integer=new Integer(HSc);
	    string=integer.toString();
	    g.drawString("最高分: "+HSc,(getWidth()-(font.stringWidth("最高分: "+string)))/2,90,0);
	}
	public void drawHelp(Graphics g)
	{
		g.setFont(font);
		
		g.setColor(200,200,30);
		g.fillRect(0,0,getWidth(),getHeight());
		
		g.setColor(0,255,255);
		g.drawString("帮助",(getWidth()-font.stringWidth("帮助"))/2,0,0);
		g.drawString("返回",getWidth()-font.stringWidth("返回"),getHeight()-font.getHeight(),0);
	}
	public void drawAbout(Graphics g)
	{
		g.setFont(font);
		
		g.setColor(200,200,30);
		g.fillRect(0,0,getWidth(),getHeight());
		
		g.setColor(0,255,255);
		g.drawString("关于",(getWidth()-font.stringWidth("关于"))/2,0,0);
		g.drawString("返回",getWidth()-font.stringWidth("返回"),getHeight()-font.getHeight(),0);
	}
	public void drawSettings(Graphics g)
	{
		g.setFont(font);
		
		g.setColor(200,200,30);
		g.fillRect(0,0,getWidth(),getHeight());
		
		g.setColor(150,100,0);
		g.fillRect(0,60+font.getHeight()*setnum,getWidth(),font.getHeight());
		
		g.setColor(0,255,255);
		g.drawString("设置",(getWidth()-font.stringWidth("设置"))/2,0,0);

		
		if(soundset==1)
		{
			g.drawString("声音: 关",60,60,0);
		}
		else
		{
			g.drawString("声音: 开",60,60,0);
		}
		if(vibraset==1)
		{
			g.drawString("振动: 关",60,60+font.getHeight(),0);
		}
		else
		{

⌨️ 快捷键说明

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