拼图

拼图

 我也不知道这个游戏叫什么名字。大概叫拼图吧。这个游戏挺简单的。代码较短。我贴了出来。

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);
           
        }
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值