手机拼图游戏设计理念

发布时间:2024-09-25

手机拼图游戏设计理念

Canvas是个抽象类,为开发人员提供了一系列方法,用于处理界面显示,游戏动作,键盘事件和触摸屏事件。Canvas组件由Canvas类的子类负责创建,在子类中必须重写父类中的paint(Graphics)方法。Canvas组件是个可显示的组件,能够直接设置在屏幕上,下面的方法使Canvas组件以全屏的模式显示在屏幕上:

public void setFullScreenModel(Boolean mode)

如果Canvas组件以全屏的模式显示在屏幕上,那么添加到该组件上的命令对象将不可见,但是用户可以通过软件触发命令。

1.设计的要求:

(1)用户通过方向键来操作游戏:按住上键是使方框位置向正上方跳两格,按住下键是使方框向正下方跳两格,左键是使方框连续按照拼图顺序逆时针跳四格,右键是使方框按照拼图顺序顺时针跳四格,中键是使方框定格并使被定格的图片跳到空格上去。

(2)游戏没有暂停的功能,在游戏界面有两个计数的,一个是你当前所走的步数(移动的次数),另一个是花费的时间。当你将拼图拼完整后界面就会显示“Good Job!”,如果你一直没有拼完的话,界面也不会消失,也不会限制你,花费时间的计数一直在进行,界面是显示的是“Are you idiot?” 。

(3)在游戏界面上有七张图片,图片的整体是由一个番茄切割而成。

2. 类设计

游戏由两个类和一个接口组成

(1)主类是PictureMidlet,它继承了父类Midlet。负责创建菜单,处理命令事件。

(2)还有一个类是PictureCanvas,它继承了类GameCanvas和Runnable接口。扩展该类的Canvas组件能够响应用户按下键,释放键和持续按键等动作,而不再依赖于设备。按键动作有Runnable接口中定义的方法处理。

(3)Runnable接口定义了PictureCanvas组件上键盘事件的处理方法。

3.代码实现

import java.io.IOException;

public class PictureCanvas extends GameCanvas implements Runnable{

TiledLayer picLayer;

int picture[][]={{1,2},{3,4},{5,6},{7,8}};

int selected=7;

int takeOutTitle;

int screenWidth=this.getWidth();

int screenHeight=this.getHeight();

int x=(screenWidth-176)/2;

int y=(screenHeight-208)/2;

static int moveCnt=0;

static long costTime=0;

long gameStartTime,gameNowTime;

Graphics g=this.getGraphics();

public PictureCanvas(){

super(true);

try {

Image img = Image.createImage("/menu.png");

picLayer=new

TiledLayer(picture[0].length,picture.length,img,88,52);

picLayer.setPosition(x, y);

} catch (IOException ex) {

ex.printStackTrace();

}

initPicture();

takeOutTitle=picture[3][1];

picture[3][1]=0;

/**/

gameStartTime=System.currentTimeMillis();

Thread th=new Thread(this);

th.start();

}

public void initPicture(){

Random rnd=new Random();

for(int i=0;i<picture.length;i++){

for(int j=0;j<picture[i].length;j++){

int row=i,col=j;

int xrow=Math.abs(rnd.nextInt())%4;

int xcol=Math.abs(rnd.nextInt())%2;

if(row!=xrow||col!=xcol){

int t=picture[row][col];

picture[row][col]=picture[xrow][xcol];

picture[xrow][xcol]=t;

}

}

}

}

public void run() {

while(true){

input();

logic();

render();

try {

Thread.sleep(50);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

gameNowTime=System.currentTimeMillis();

costTime=(gameNowTime-gameStartTime)/1000;

}

}

private void input() {

int keyState=this.getKeyStates();

switch(keyState){

case UP_PRESSED:

if(selected-2>0)selected-=2;

break;

case DOWN_PRESSED:

if(selected+2<=8)selected+=2;

break;

case LEFT_PRESSED:

if(selected-1>0)selected-=1;

break;

case RIGHT_PRESSED:

if(selected+1<=8)selected+=1;

break;

case FIRE_PRESSED:

int row=(selected-1)/2;

int col=(selected-1)%2;

int dir=isCanMove(row,col);

//System.out.println("dir="+dir);

switch(dir){

case 0:break;

case 1:

picture[row-1][col]=picture[row][col];

picture[row][col]=0;

moveCnt++;

break;

case 2:

picture[row+1][col]=picture[row][col];

picture[row][col]=0;

moveCnt++;

break;

case 3:

picture[row][col-1]=picture[row][col];

picture[row][col]=0;

moveCnt++;

break;

case 4:

picture[row][col+1]=picture[row][col];

picture[row][col]=0;

moveCnt++;

break;

}

break;

}

}

public int isCanMove(int sRow,int sCol){

int isCan=0;

//System.out.println("selected="+selected);

if(selected-2>0){

if(picture[sRow-1][sCol]==0)return 1;

}

if(selected+2<=8){

if(picture[sRow+1][sCol]==0)return 2;

}

if((selected-1)%2==1){

if(picture[sRow][sCol-1]==0)return 3;

}

if((selected-1)%2==0){

if(picture[sRow][sCol+1]==0)return 4;

}

return isCan;

}

public boolean isFinished(){

int index=1;

for(int i=0;i<picture.length;i++){

for(int j=0;j<picture[i].length;j++){

if(picture[i][j]==0){

if(takeOutTitle!=index)return false;

}

if(picture[i][j]!=index)return false;

index++;

}

}

return true;

}

private void logic() {

if(isFinished()){

System.out.println("Good Job!");

}

else

System.out.println("Are you idiot?");

}

private void render() {

g.setColor(192,192,192);

g.fillRect(0, 0, this.getWidth(),this.getHeight());

g.setColor(0);

g.drawString("移动的次数:" +moveCnt, x, 0, Graphics.TOP | Graphics.LEFT);

g.drawString("花费的时间:"+costTime, x, Font.getDefaultFont().getHeight(), Graphics.TOP | Graphics.LEFT);

for(int i=0;i<picture.length;i++){

for(int j=0;j<picture[i].length;j++){

picLayer.setCell(j, i,picture[i][j]);

}

}

picLayer.paint(g);

int x=((selected-1)%2)*88+this.x;

int y=((selected-1)/2)*52+this.y;

g.setColor(11,23,70);

g.drawRect(x, y, 88, 52);

this.flushGraphics();

}

}

4.运行效果

手机拼图游戏设计理念.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219