拼图
我也不知道这个游戏叫什么名字。大概叫拼图吧。这个游戏挺简单的。代码较短。我贴了出来。
MIDlet类:
/*
* ScrollScreen.java
*
* Created on 2006年7月23日, 下午3:29
*/
package me.j2me.game;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
*
* @author xinyu
* @version
*/
public class ScrollScreen extends MIDlet {
private Display display = null;
public void startApp() {
try {
display = Display.getDisplay(this);
MainCanvas gameCanvas = new MainCanvas(this);
gameCanvas.start();
display.setCurrent(gameCanvas);
}catch(Exception e){
e.printStackTrace();
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void exit(){
System.gc();
destroyApp(false);
notifyDestroyed();
}
}
girlCanvas类:
/*
* girlCanvas.java
*
* Created on 2006年7月26日, 下午2:34
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package me.j2me.game;
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.TiledLayer;
/**
*
* @author xinyu
*/
public class girlCanvas extends GameCanvas implements Runnable, CommandListener {
private CorrectMidlet midlet;
private boolean isPlay;
private boolean isWin;
private Image girl;
private TiledLayer girlLayer;
private int[][] map;
private int x,y;
private int steps,level;
private Thread t;
private Command exitCommand = new Command("退出",Command.EXIT,1);
private Command nextCommand = new Command("下一级",Command.OK,1);
/** Creates a new instance of girlCanvas */
public girlCanvas(CorrectMidlet midlet) {
super(true);
this.midlet = midlet;
try {
girl = Image.createImage("/girl.png");
} catch (IOException ex) {
ex.printStackTrace();
}
girlLayer = new TiledLayer(4,4,girl,32,35);
this.addCommand(exitCommand);
this.addCommand(nextCommand);
this.setCommandListener(this);
}
public void run(){
Graphics g = getGraphics();
while(isPlay == true){
input();
drawScreen(g);
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
private void input(){
int keyStates = getKeyStates();
if((keyStates & UP_PRESSED)!=0){
if(x+1<4){
map[x][y]=map[x+1][y];
map[x+1][y]=0;
girlLayer.setCell(y,x,map[x][y]);
girlLayer.setCell(y,x+1,0);
x++;
steps++;
}
}else if((keyStates & DOWN_PRESSED)!=0){
if(x-1>=0){
map[x][y]=map[x-1][y];
map[x-1][y]=0;
girlLayer.setCell(y,x,map[x][y]);
girlLayer.setCell(y,x-1,0);
x--;
steps++;
}
}else if((keyStates & LEFT_PRESSED)!=0){
if(y+1<4){
map[x][y]=map[x][y+1];
map[x][y+1]=0;
girlLayer.setCell(y,x,map[x][y]);
girlLayer.setCell(y+1,x,0);
y++;
steps++;
}
}else if((keyStates & RIGHT_PRESSED)!=0){
if(y-1>=0){
map[x][y]=map[x][y-1];
map[x][y-1]=0;
girlLayer.setCell(y,x,map[x][y]);
girlLayer.setCell(y-1,x,0);
y--;
steps++;
}
}
//checkOK?
isWin = true;
int temp = map[3][3];
map[3][3] = 16;
for(int i = 0;i<4;i++)
for(int j = 0;j<4;j++){
System.out.print("<> "+map[i][j]);
if(map[i][j]!=i*4+j+1){
isWin = false;
//break;
}
}
map[3][3] = temp;
}
private void drawScreen(Graphics g){
g.setColor(0x00000ff);
g.fillRect(0,0,getWidth(),getHeight());
//g.setColor(0x00000ff);
//g.fillRect(0,0,138,150);
g.setColor(0x000000);
g.drawString("Steps: "+steps+" Level: "+level,10,150,Graphics.LEFT|Graphics.TOP);
girlLayer.setPosition(5,5);
if(isWin){
girlLayer.setCell(3,3,16);
girlLayer.paint(g);
g.setColor(0xff0000);
g.drawString("You Win! ",100,150,Graphics.LEFT|Graphics.TOP);
isPlay = false;
}else{
girlLayer.paint(g);
for(int i= 0;i<3;i++)
for(int j= 0;j<3;j++){
g.drawLine(37+i*32,5,37+i*32,145);
g.drawLine(5,40+j*35,133,40+j*35);
}
}
flushGraphics();
}
private void getMap(){
map = new int[][]{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}};
Random r = new Random();
int n;
for(int i = 0;i< level*10;i++){
n = r.nextInt(4);
switch(n){
case 0:if(x+1<4){
map[x][y]=map[x+1][y];
map[x+1][y]=0;
x++;
}break;
case 1:if(x-1>=0){
map[x][y]=map[x-1][y];
map[x-1][y]=0;
x--;
}break;
case 2:if(y+1<4){
map[x][y]=map[x][y+1];
map[x][y+1]=0;
y++;
}break;
case 3:if(y-1>=0){
map[x][y]=map[x][y-1];
map[x][y-1]=0;
y--;
}break;
}
}
for(int i = 0;i<4;i++)
for(int j = 0;j<4;j++)
girlLayer.setCell(j,i,map[i][j]);
}
public void start(int level){
this.level = level;
isWin = false;
x= 3;
y=3;
steps = 0;
isPlay = true;
getMap();
t = new Thread(this);
t.start();
}
public void stop(){
isPlay = false;
t.yield();
t = null;
}
public void commandAction(Command cmd, Displayable displayable){
if(cmd == exitCommand){
stop();
midlet.exit();
}else if(cmd == nextCommand){
stop();
start(++level);
}
}
}