}} //在屏幕上绘出游戏见面 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);
相关推荐: