五子棋游戏总体设计与实现 联系客服

发布时间 : 星期六 文章五子棋游戏总体设计与实现更新完毕开始阅读

}} //在屏幕上绘出游戏见面 gobang (2)游戏界面类

Gobang Canvas 类继承自 Canvas,游戏的核心类是 Gobang Canvas 类,此类将完成游戏的绘图、互动、控制、逻辑、等所有功能,此类的框架代码如下:

Package com.occo.j2me.game.gobang; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.Canvas;

import javax.microedition.lcdui.Command Listener; public Gobang Canvas(Gobang gobang){ this.gobang=gobang; } protected void paint(Graphics g) { }

import javax.microedition.lcdui.Graphics;public class Gobang Canvas extends Canvas implements Command Listener{protected Gobang gobang; public Gobang Canvas(){ }

}

(3)棋子类

整个棋盘是一个 Chesses 类型的二维数组,棋盘上的每一个棋子都对应着一个Chesses 的对象,此类定义了一个棋子,源代码如下:

package com.occo.j2me.game.gobang; public Chesses() { }

public class Chesses {boolean is Player1; public Chesses(boolean is Player1) { this.is Player1=is Player1; }}

4.3 游戏实现

4.3.1 主类的实现

YpkWuZiQiActivity类是五子棋游戏的主类,同时也是五子棋游戏的入口,它继承自Activity类。进入程序后,首先调用init()方法,init()方法通过调用setContentView(R.layout.welcomeview)显示登录该游戏的第一个界面。welcomeview.xml是一个布局文件,里面存储了界面信息。该界面中有四个Button,分别为welButton1、welButton12、welButton3、 welButton4,点击每个Button都会触发一个事件,其中点击welButton1和welButton2还会给它的成员变量FIGHTINGMODE赋值,因为在人人对战和人机对战是写在同一个ChessBoard类中的,所以需要通过FIGHTINGMODE的值来区分是人人对战还是人机对战。

点击welButton1时,FIGHTINGMODE=1,然后会调用initTwo()方法,该方法通过调用setContentView(R.layout.chess)方法,来显示对战的界面。chess.xml文件存储了对战界面的信息。在chess.xml文件中调用了ChessBoard类,该类中主要定义了棋盘的信息,下文会对该类做具体的介绍的。在对战界面中也有四个Button,分别是b1、b2、b3、b4。

首先来介绍一下b2,该Button的功能是返回主页,调用init()方法就可以实现。b3的功能是重新开始,这个也只需要调用initTwo()方法。b3的功能是退出,调用了系统方法:System.exit(1)。下面重点介绍一下b1,该Button的功能是悔棋。该Button设定的点击事件详细内容如下:

b1.setOnClickListener(new OnClickListener(){ public void onClick(View v){

ChessBoard chess = (ChessBoard)findViewById(R.id.chess); Point temp = null; if(chess.whoRun == 1){

if(chess.firstPlayer.getMyPoints().size()>=1

&&chess.secondPlayer !=null){

temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);

chess.secondPlayer.getMyPoints().remove(temp); chess.freePoints.add(temp);

temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);

chess.firstPlayer.getMyPoints().remove(temp); chess.freePoints.add(temp); chess.freshCanvas();

}

}

if(chess.whoRun == 2){

if(chess.firstPlayer.getMyPoints().size()>=1 && chess.secondPlayer !=null){ temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);

chess.firstPlayer.getMyPoints().remove(temp); chess.freePoints.add(temp);

temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);

chess.secondPlayer.getMyPoints().remove(temp); chess.freePoints.add(temp); chess.freshCanvas(); } })

首先获取ChessBoard对象,该对象继承自View,详细的定义了棋盘信息,主要负责显示棋盘的内容。接下来判断一下触发悔棋事件的是哪一个玩家,再判断是否符合悔棋的条件,这个条件很简单,就是棋盘上至少要有两个棋子。之后便进行悔棋操作,分别将两个玩家最后下的棋子取出,程序实现就是将两个ArrayList的最后一个元素remove出来,再分别放到记录棋盘中没有棋子的点的

}

}

集合中,最后更新一下画布,主要是调用ChessBoard的invalidate()方法。通过以上步骤之后,呈现在我们面前的便是悔完棋的画面了。

点击welButton2时,FIGHTINGMODE=2,之后的步骤便会点击welButton1

是相同的了,不同的是,由于对战模式的改变,从人人对战变成了人机对战。

welButton3

initThree()

setContentView(R.layout.netchess)方法实现网络对战。详细的对战实现细节将会在下文一一介绍。在这个界面中只保留了两个Button:b2和b4。这两个Button所实现的功能和上面的b2和b4是相同的。

最后,welButton4比较简单。它所实现的功能为退出应用程序,调用System.exit(1)方法。 4.3.2 游戏设置类的实现

游戏设置表单用来对游戏参数进行设置,包括棋盘大小、先手选择、智能级别。表单中使用了 Gauge 和 Choice Group 两种高级用户界面组件。

1、棋盘尺寸选择

标准的五子棋棋盘为 15*15,但为了满足不同玩家的需求,这里提供了大小为10*10 到 20*20 的棋盘,用户可以通过 Gauge 组件改变。棋盘的最小值为 10,而Gauge 组件的最小值为 0,所以当前的 Gauge 值需要角上 10 才是当前棋盘大小。创建 Gauge 组件的代码如下:

form = new Form(\游戏设置\创建参数设置表单并添加标签 gauge Size = new Gauge(\棋盘规格: \ + board Size + \ X \ + board Size, true, 10, board Size - 10); //棋盘规格

form.append(gauge Size);