j2me 拼图游戏

今天做了个拼图游戏,很简单的,如果感兴趣就自己做一个放在手机上玩玩哦~~

我采用的手机屏幕是240*320的,你可以根据手机实际屏幕尺寸修改图片大小~~

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class mosaicMIDlet extends MIDlet implements CommandListener {


 private Display display;
 private Form form;
 private Command okCommand=new Command("OK",Command.OK,1);
 private Command exitCommand=new Command("EXIT",Command.EXIT,1);
 
 public mosaicMIDlet () {
  display=Display.getDisplay(this);
  display.setCurrent(new gameCanvas());
  }
 protected void startApp() throws MIDletStateChangeException {
  form=new Form("拼图");
  form.addCommand(okCommand);
  form.addCommand(exitCommand);
  form.setCommandListener(this);
  display.setCurrent(form);
 }

 public void commandAction(Command c,Displayable d){
  if(c==okCommand)
  {
   display.setCurrent(new gameCanvas());
  }
  else if(c==exitCommand)
  {
   destroyApp(false);
   notifyDestroyed();
  }
 }
 
 protected void pauseApp() {
 }
public void destroyApp(boolean unconditional) {
 }
}

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.Sprite;
import java.util.*;

public class gameCanvas extends Canvas {
 //定义一个精灵数组存放12张图片
 Sprite[] s=new Sprite[12];
 //定义胜利的精灵对象
 Sprite win;
 Random random=new Random();
 //当前坐标位置
 int posX=1,posY=1;
 //第一次按下选择键,初始为true
 boolean isFirst=true;
 //记录按下选择键后原来的坐标位置
 int LastX,LastY;
 public gameCanvas()
 {
  //消除任务栏
  this.setFullScreenMode(true);
  try
  {
   //数字互换,使数组seq内部按序为随机数
   int[] seq=new int[12];
   for(int i=0;i<seq.length;i++)
    seq[i]=i;
   for(int i=0;i<50;i++)
   {
    int a=random.nextInt(12);
    int b=random.nextInt(12);
    int temp=seq[a];
    seq[a]=seq[b];
    seq[b]=temp;
   }
   Image img=Image.createImage("/2.jpg");
   win=new Sprite(Image.createImage("/win.png"));
   win.setVisible(false);
   //使屏幕显示打乱的图片
   for(int i=0;i<s.length;i++)
   {
    s[i]=new Sprite(img,80,80);
    s[i].setPosition(i%3*80, i/3*80);
    s[i].setFrame(seq[i]);
   }
  }
  catch(Exception ex)
  {
  }
 }

 protected void paint(Graphics g) {
  for(int i=0;i<s.length;i++)
  s[i].paint(g);
  g.setColor(255,255,255);
  //画分割线
  g.drawLine(80, 0, 80, 320);
  g.drawLine(160, 0, 160, 320);
  g.drawLine(0, 80, 240, 80);
  g.drawLine(0, 160, 240, 160);
  g.drawLine(0, 240, 240, 240);
  //按键移过显示红色矩形框
  g.setColor(255, 0, 0);
  g.drawRect(posX*80, posY*80, 80, 80);
  //执行按下选择键后的事件,用黑色矩形框标志选定的精灵对象
  if(!isFirst){
   g.setColor(0);
   g.drawRect(LastX*80+1, LastY*80+1, 80-2,80-2);
   g.drawRect(LastX*80, LastY*80, 80, 80);
  }
  win.paint(g);
 
 }
 //按键事件
 public void keyPressed(int key){
  //up -1,down -2,left -3,right -4
  if(key==-1){
   posY--;
   if(posY<0) posY=3;
  }
  else if(key==-2){
   posY++;
   if(posY>3) posY=0;
  }
  else if(key==-3){
   posX--;
   if(posX<0) posX=2;
  }
  else if(key==-4){
   posX++;
   if(posX>2) posX=0;
  }
  else if(key==-5){
   //按下选择键,记录原来的坐标位置
   if(isFirst){
    LastX=posX;
    LastY=posY;
    isFirst=false;
   }
   else
   {
    int a=posX+posY*3;
    int b=LastX+LastY*3;
    int tmp=s[a].getFrame();
    s[a].setFrame(s[b].getFrame());
    s[b].setFrame(tmp);
    isFirst=true;
    //定义一个胜利的标志,默认为true
    boolean isWin=true;
    //判断拼接的图是否和原图一致
    for(int i=0;i<s.length;i++)
    {
     if(s[i].getFrame()!=i)
     {
      isWin=false;
      break;
     }
    }
    //胜利后,显示胜利图片
    if(isWin){
     win.setVisible(true);
    }
   }
  }
  this.repaint();
  
 }

}

附图

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值