今天做了个拼图游戏,很简单的,如果感兴趣就自己做一个放在手机上玩玩哦~~
我采用的手机屏幕是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();
}
}
附图