五子棋游戏.ppt
《五子棋游戏.ppt》由会员分享,可在线阅读,更多相关《五子棋游戏.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为”Renju”,英文称之为”Gobang”或”FIR”(Five in a Row 的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。五子棋游戏是一个比较大众的棋类游戏,大多数人都会玩这个游戏,五子棋的玩法与规则如下:五子棋是两个人之间进行的竞技活动,由于对黑方白方规则不同,黑棋必须先行(本设计的游戏,黑棋与白棋的规则一样,但一样由黑棋先下)。五子棋专用盘为 1515,五连子的方向为横、竖、斜。在棋盘上以对局双方均不可能形成五连为和棋。首先形成五连子的一方为赢。五子棋必须由双
2、方进行游戏,当某一方按照一定规则连成五个棋子的时候,该游戏方就胜利,在本游戏中,我们并不需要做到对战形式的,我们可以设计一个简单的“电脑”来做我们的对手,当我们下完棋后,这个简单的“电脑”就随便在棋盘中下一个棋,当然,如果想做更强大的“电脑”我们可以编写程序来实现,当我们下棋的时候,这个“电脑”就对我们所下的棋子进行检测,并将棋子下到最恰当的位置。本章主要目的是展现五子棋的实现原理,如果读者有兴趣,可以自行开发强大的“人工智能电脑”来进行游戏。玩家必须以(x,y)的方式输入棋盘的坐标,其中,x 代表棋坐标,y 代表竖坐标。x 与y 的值必须是1 到N(棋盘的大小)的正数。系统询问玩家是否继续游
3、戏时,玩家输入 y 是代表继续,输入其它则代表退出游戏。“”代表黑子,“”代表白子。当玩家以(x,y)的形式输入下棋的坐标后,游戏中就可以根据玩家所下的坐标,再去将棋子放置到棋盘中。我们可以将棋盘看作一个二维数组,填充着棋盘式的标志(“十”),玩家下棋后,将棋子替换原来的标志,最后再执行输入。由于本章是在控制台中进行打印,因此只需要使用System.out.println 来进行打印即可,如果需要实现有界面的五子棋游戏,例如使用swing 或者awt,可以使用相应的方法,将二维数组“画”到界面中。因此,不管是使用swing、awt或者其他界面技术,五子棋的实现原理几乎大同小异。要进行五子棋游戏
4、,必须有有一个棋盘,而这个类主要控制棋盘的初始化,输出与及增加新的棋子。这个类包含以下方法:void initBoard(),这个方法用于初始化棋盘,开始新的游戏时,应该调用此方法,初始化出一个新的空棋盘。void printBoard(),此方法用于在控制台输出棋盘,各方每一完一颗棋子后,由于棋盘上棋子的状态有改变,所以必须调用此方法重新输入棋盘。void setBoard(int posX,int posY,String chessman),posX 与posY 是新下棋子的x 与y 坐标,,chessman 是新下棋子的类型(黑子与白子),每下完一颗棋子后,通过调用此方法把棋子设置到棋盘
5、上。String getBoard(),返回棋盘,返回类型是保存棋盘的二维数组。当我们需要初始化棋盘的时候,可以直接调用 Chessboard 的initBoard 方法,我们需要考虑该方法需要实现的功能:初始化棋盘。由于我们将棋盘看作是一个二维数组,因此initBoard 就需要帮我们去创建一个二维数组,创建二维数组可以使用以下代码。代码清单:codegobangsrcorgcrazyitgobangChessboard.javaObject array=new Objectsizesize;for(int i=0;i array.length;i+)for(int j=0;j arrayi
6、.length;j+)arrayij=new Object();以上代码创建一个固定大小(一维与二维大小)的二维数组,再通过嵌套循环为数组中的每一个元素进行赋值。在游戏中如果我们进行了下棋的操作,可以直接改变这个数组的某一个元素值。在创建Chessboard 类时,我们就需要发挥面向对象的思维,在我们的程序中,所有看到的或者想的事物,我们都可以将其抽象成具体的某个对象,并赋予一定的属性与行为。在设计对象的过程中,如果有某些事物拿捏不准,不知如何设计属性或者行为,可以将其设计成接口或者抽象类。Chessboard 中提供了一个printBoard 的方法用于打印棋盘,在本章中,我们就需要将棋盘数
7、组打印到控制台中,因此该方法可以简单的调用System.out.print 去打印相关的字符串。需要注意的是,由于printBoard 方法是没有参数的,因此我们需要为Chessboard 提供一个二维数组变量,当调用printBoard 方法的时候,将对象内的二维数组打印,我们可以将Chessboard 看作一个有状态的Java对象,有状态的Java 对象可以理解成一个Java 对象保存一些与该对象相关的状态属性,如果该对象没有保存与该对象相关的状态属性,那么我们可以将这个对象看成一个无状态的Java 对象。当外部调用 Chessboard 的setBoard 方法时,就可以将某个值设置到C
8、hessboard 中的二维数组里,告诉Chessboard 玩家或者“电脑”在某个位置下了怎样的棋子。Chessman 类是一个枚举类,此类是构造器私有的,不能直接创建,里面有BLACK 与WHITE 两个静态属性,代表黑子与白子枚举类,两个表态属性都是Chessman 类型的,要获取棋子,则通过这两个属性调用以下的方法获取棋子:String getChessman(),返回String 类型的棋子实例,“”或者“”。如果我们需要得到棋子的字符串(“”或者“”),可以使用以下的代码。代码清单:codegobangsrcorgcrazyitgobangChessman.java Chessma
9、n.BLACK.getChessman();GobangGame 类是进行游戏的类,Chessboard 依赖于此类,此类控制游戏的开始,重玩与结束,Chessboard 类。主要包含以下构造器与方法:GobangGame(),默认无参数构造器。GobangGame(Chessboard chessboard),有参数构造器,以一个Chessboard 实例去初始化这个类。boolean isValid(String inputStr),此方法验证控制台的输入字符串是否合法,如果合法,返回true,如果不合法,则返回false,此方法抛出Exception 异常。void start(),开始
10、游戏。此方法抛出Exception 异常。boolean isReplay(String chessman),是否重新开始游戏,如果是,返回true,否则返回false,参数chessman 代表黑子或白子。int computerDo(),计算机随机下棋,由计算机自动设置棋盘,并返回包含新下棋子位置x 与y 坐标的int数组类型。boolean isWon(int posX,int posY,String ico),判断输赢,参数posX 与posY 代表新下棋子的x 与y 坐标,ico 代表新下的棋子类型,如果赢了,返回true,否则返回false。GobangGame 是五子棋游戏的主体
11、类,游戏里面所有的处理都在该类中实现。isValid 方法用于验证控制台的输入,start 方法,用于游戏的开始,初始化棋盘,从控制台读取玩家的输入信息、打印棋盘,验证控制台输入的信息等。computerDo方法用于随机产生坐标。isWon 方法判断游戏是否胜利,isWon 方法会在每次下棋后(玩家下棋或者“电脑”下棋)调用。如果需要做到更好的程序解耦,我们可以使用一些设计模式,例如将游戏规则写成一个具体的算法,可以使用策略模式,如果需要产生出不同的棋子(将控制台换成其他界面),可以编写棋子工厂等。用一个 String类型的二维数组board 去保存棋盘,board ij代表棋盘的某个位置(i
12、 代表x 坐标,j 代表y 坐标),如果此位置没有棋子,默认值为“十”,如果有棋子,board ij的值为“”或者“”。用一个不可改变的常量BOARD_SIZE 来表示棋盘的大小,所以保存这个棋盘的是一个BOARD_SIZE*BOARD_SIZE 的二维数组。棋盘的形状棋盘的形状代码清单:codegobangsrcorgcrazyitgobangChessboard.javapublic void initBoard()/初始化棋盘数组board=new StringBOARD_SIZEBOARD_SIZE;/把每个元素赋值为“十”,用于控制台输出棋盘for(int i=0;i BOARD_S
13、IZE;i+)for(int j=0;j BOARD_SIZE;j+)boardij=十;代码清单:codegobangsrcorgcrazyitgobangChessboard.javapublic void printBoard()/打印每个数组元素for(int i=0;i BOARD_SIZE;i+)for(int j=0;j BOARD_SIZE;j+)/打印后不换行System.out.print(boardij);/每打印完一行数组元素就换行一次System.out.print(n);在 Chessboard 中提供了一个getBoard 的方法,用于返回本对象的棋盘二维数组,该
14、方法一般在游戏类GobangGame 中调用,游戏类得到棋盘的二维数组,可以用于判断棋盘中的某一个位置是否有棋子或者计算游戏是否胜利。代码清单:codegobangsrcorgcrazyitgobangChessboard.java/*返回棋盘*return 返回棋盘*/public String getBoard()return this.board;在某些情况下,一个类的属性是有限而且固定的(在某些情况下),例如本章中的棋子类,它只有两个对象,黑棋和白棋。这种实例有限而且固定的类,在Java 里面称为枚举类,枚举类的关健字用enum而不是class,此类中有两个枚举属性BLACK 和WHI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 游戏
限制150内