程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> j2me 實現的掃雷游戲

j2me 實現的掃雷游戲

編輯:J2ME

一、 利用J2ME實現Windows自帶的掃雷游戲。實現過程主要用的知識點:

   1、MIDlet實現入口,控制屏幕和命令的控制。

  2、數組,偵聽接口,線程,簡單的算法。

  

二、 具體的實現過程:

   入口類的實現:

import Javax.microedition.lcdui.*;
import Javax.microedition.midlet.*;

public class gameStart extends MIDlet implements CommandListener {
	public static gameStart midlet;
	public myCanvas mc;
	private Command exitCommand = new Command("Exit", Command.EXIT, 0);

	public gameStart() {
		gameStart.midlet = this;
	}

	public void startApp() {
		gameStart.midlet.startGame();
		
	}

	public void pauseApp() {

	}

	public void destroyApp(boolean f) {

	}

	public void startGame() {
		mc = null;
		mc = new myCanvas();
		Display.getDisplay(this).setCurrent(mc);
		mc.addCommand(exitCommand);
		mc.setCommandListener(this);
	}

	public void exitGame() {
		destroyApp(false);
		notifyDestroyed();
	}

	public void commandAction(Command cmd, Displayable arg1) {
		if (cmd == exitCommand) {
			destroyApp(false);
			notifyDestroyed();
		}
	}
}
其中實現游戲的開始,結束和偵聽用戶命令。
還可以實現MIDlet三個狀態的轉化(暫停、結束、開啟)。
 
實現類:
import Javax.microedition.lcdui.*;
import Java.util.*;
public class myCanvas extends Canvas{
    public Image offScreen;
    public Graphics offg;
    public int map[][]=new int[8][8];
    public Random r1;
    public Image imCricle,imMine;//pic
    public int px,py;
    public int mineNumber=10;//¡Á¨¹¨¤&IExcl;Á¨ºy
    public boolean gameOver=false;//¨®??¡¤¨º?&IExcl;¤??¨¢¨º?
    public boolean gameWin=false;//¨®??¡¤¨º?¡¤?¨º&IExcl;訤?
    public myCanvas()
    { offScreen=Image.createImage(149,180);
      offg=offScreen.getGraphics();
      try{
      imCricle=Image.createImage("/cricle.png");
      imMine=Image.createImage("/mine.png");
      }catch(Exception e){}
      r1=new Random();
      initMap();//3?¨º??¡¥¨¤&IExcl;Á??
    	
    }
    public void initMap()
    {
    	for(int n=0;n<mineNumber;n++)
    	{int tmp=Math.abs(r1.nextInt()%64);
    	 int row=tmp/8;//DD
    	 int col=tmp%8;//¨¢D
    	 if(map[row][col]!=20)
    	 { map[row][col]=20;//??¦Ì¨²rowDD¦Ì¨²col¨¢D¨¦¨¨3¨¦¨¤&IExcl;Á
    	 	}
    	 else
    	 {n--;}
    	}
    }
    public void drawMap()
    {offg.setColor(0xFFFFFF);
     offg.fillRect(0,0,176,208);
     offg.setColor(0);
     for(int i=0;i<8;i++)
     { for(int j=0;j<8;j++)	
       {offg.drawRect(j*20,i*20,20,20);
       	//¨¨?1?¡¤-?a?¨°??¨º??a¦Ì??¨¹?¡ì¦Ì?¨¤&IExcl;Á¨ºy
        if(map[i][j]!=20&&map[i][j]!=0&&map[i][j]!=10)
        {
         offg.drawString(" "+map[i][j],j*20,i*20,0);	
        }
        else if(map[i][j]==10)
        {
         offg.drawString("  0",j*20,i*20,0);	
        }
       }
     }
    
    }
    public void drawCricle()
    {
      offg.drawImage(imCricle,px,py,0);	
    }
    public void drawOver()//????¨®??&IExcl;¤?¨¢¨º?
    { offg.setColor(0xFFFFFF);
      offg.fillRect(0,0,176,208);
      offg.setColor(0);
      offg.drawString("Game Over",30,30,0);
      for(int i=0;i<8;i++)
      {
        for(int j=0;j<8;j++)
        {if(map[i][j]==20)
         {offg.drawImage(imMine,j*20,i*20,0);}
         else
         {offg.drawRect(j*20,i*20,20,20);}
        }
      }
    }
    public void drawWin()//????¨®??¡¤¨º&IExcl;訤?
    {
    	offg.setColor(0xFFFFFF);
        offg.fillRect(0,0,176,208);
        offg.setColor(0);
        offg.drawString("you Win",30,30,0);
    }
	public void paint(Graphics g)
	{drawMap();//????¨¤&IExcl;Á?? 
	 drawCricle();//???????¨°
	 if(gameOver){drawOver();}
	 if(gameWin){drawWin();}
	 offg.drawString("new game            exit",0,170,0);
	 g.drawImage(offScreen,0,0,0);
	}
	public void checkWin()
	{  int count=0;//????&IExcl;¤-?a¦Ì?¨ºy¨¢?
		for(int i=0;i<8;i++)
		{
		 for(int j=0;j<8;j++)
		 {
		   	if(map[i][j]>0)
		   	{ count++;
		   		}
		 }
		}
		if(count+this.mineNumber==64)
		{ this.gameWin=true;
			}
	
	}
	//map[r2][c2]?¨¹?¡ì¦Ì?¨¤&IExcl;Á¨ºy
	public int checkNum(int r2,int c2)
	{int num=0;
	 //&IExcl;Á¨®¨¦?
	 if(r2-1>=0&&c2-1>=0)//?D??¨º?¡¤?¨®D&IExcl;Á¨®¨¦?
	 {
	  if(map[r2-1][c2-1]==20){num++;}
	 }
	 //¨¦?
	 if(r2-1>=0)
	 {
	  if(map[r2-1][c2]==20)num++;
	 }
	 //¨®¨°¨¦?
	 if(r2-1>=0&&c2+1<=7)
	 {
	   if(map[r2-1][c2+1]==20)num++;	
	 }
	 //&IExcl;笨
	 if(c2-1>=0)
	 {
	  if(map[r2][c2-1]==20)num++;	
	 }
	 //¨®¨°
	 if(c2+1<=7)
	 {
	  if(map[r2][c2+1]==20)num++;	
	 }
	 //&IExcl;笨??
	 if(r2+1<=7&&c2-1>=0)
	 { if(map[r2+1][c2-1]==20)num++;
	 	}
	 //??
	 if(r2+1<=7)
	 {
	 	if(map[r2+1][c2]==20)num++;
	 }
	 //¨®¨°??
	 if(r2+1<=7&&c2+1<=7)
	 {
	 	if(map[r2+1][c2+1]==20)num++;
	 }
	 return num;//?a¦Ì??¨¹?¡ì¦Ì?¨¤&IExcl;Á¨ºy
	}
	public void check(int row,int col)
	{
		if(map[row][col]==20)
		{gameOver=true;}
		else
		{//?D?¡§?a¦Ì??¨¹?¡ì¦Ì?¨¤&IExcl;Á¨ºy
		 int k=this.checkNum(row,col);
		 if(k>0)//?a¦Ì??¨¹?&IExcl;쨮D¨¤¨¤
		 { map[row][col]=k;//??¨º??a¦Ì??¨¹?¡ì¦Ì?¨¤&IExcl;Á¨ºy
		 	}
		 else//?a¦Ì??¨¹?¡ì??¨®D¨¤&IExcl;Á
		 { map[row][col]=10;//&IExcl;¤-?a?a¨°?¦Ì?
		   //?¨²?D???a¦Ì??¨¹?&IExcl;ì¦Ì??¨¦??
		   //&IExcl;Á¨®¨¦?
		     if(row-1>=0&&col-1>=0)
		     { if(map[row-1][col-1]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row-1,col-1);
		       }
		     }
		   //¨¦?
		     if(row-1>=0)
		     { if(map[row-1][col]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row-1,col);
		       }
		     }
		   //¨®¨°¨¦?
		     if(row-1>=0&&col+1<=7)
		     { if(map[row-1][col+1]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row-1,col+1);
		       }
		     }
		   //&IExcl;笨
		     if(col-1>=0)
		     { if(map[row][col-1]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row,col-1);
		       }
		     }
		   //¨®¨°
		     if(col+1<=7)
		     { if(map[row][col+1]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row,col+1);
		       }
		     }
		   //&IExcl;笨??
		     if(row+1<=7&&col-1>=0)
		     { if(map[row+1][col-1]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row+1,col-1);
		       }
		     }
		   //??
		     if(row+1<=7)
		     { if(map[row+1][col]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row+1,col);
		       }
		     }
		   //¨®¨°??
		     if(row+1<=7&&col+1<=7)
		     { if(map[row+1][col+1]<10){//?D??¨º?¡¤?¡À?&IExcl;¤-?a
		     	check(row+1,col+1);
		       }
		     }
		 }
		}
		
	}
	public void keyPressed(int n)
	{if(n==-6)
	 {gameStart.midlet.startGame();}
	 if(n==-7)
	 {gameStart.midlet.exitGame();}
	 int k=this.getGameAction(n);
	 switch(k)
	 {
	  case Canvas.UP:
	  	    if(py>=20)  py-=20;
             break;
	  case Canvas.DOWN:
	  	    if(py<=20*6){py+=20;}
	  	    break;
	  case Canvas.LEFT:
	  	    if(px>=20) px-=20;
	  	    break;
	  case
        Canvas.RIGHT: if(px<=20*6)px+=20; break; case Canvas.FIRE: int seleRow=py/20;//¦Ì¡À?&IExcl;ã???¨°¦Ì??¨´?¨²DD int seleCol=px/20;//¦Ì¡À?&IExcl;ã???¨°¦Ì??¨´?¨²¨¢D check(seleRow,seleCol);//¨®??¡¤¡¤-?a¦Ì?¨¤&IExcl;Á¦Ì??¨¬2a //?¨¬2a1y1? checkWin(); } this.repaint(); this.serviceRepaints(); } }

 

在這個類中主要實現了屏幕的繪畫,實現其具體的算法,針對每種情況作出相應的處理。

三、編譯 運行 通過 之後打包 形成jar文件

  我已經把jar放到了服務器上,手機可以直接訪問

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved