五子棋的开发

时间:2022-10-22 10:11:39

五子棋的开发

摘要:利用Java语言软件开发的一个界面简洁、直观、实用比较高的五子棋游戏。主要完成了玩家之间对战功能。客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息。

关键词:深度搜索;估值;五子棋

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)29-6555-02

五子棋是“棋类游戏”,棋盘与围棋相同,两人对局,轮流下子,将五子连成一行者为胜(横、竖或斜)。五子棋的名称:日文亦有“连五子、五子连、串珠、五目碰、五格、五石、五联、京棋”等多种称谓。

1 程序设计思想

要实现五子棋的游戏功能,必须先有一个棋盘,通过继承JPanel,然后在JPanel上画出一个16*16的棋盘。对于下棋的操作,通过对JPanel增加鼠标事件监听器MouseAdapter,每次当用户点击鼠标时,先取得点击的坐标值,然后取整得到一个对应棋盘的最近的一个坐标值。判断该坐标是否在棋盘之外,在棋盘之外则不作任何处理,如果不是,记录下该坐标值以进行下一步操作。判断该位置是否已有棋子,没有的话用类GraphicPanel画出棋子,并记录下棋盘的状态。判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更换玩家,监听事件处理结束。对于玩家的更换是程序自动的,每次用户点击鼠标后,都会变换玩家,从而画出对应黑方白方的棋子供玩家查看。

控制模块的判定:整个游戏设计最为关键的控制模块为判定执行玩家操作下棋子模块,它也是游戏的核心部分,它是通过准确的判断,几个棋子相连,再执行下一步操作。

其代码如下:

public boolean wasWin(){return wasWinAtV()||wasWinAtH()||wasWinAtLD()||wasWinAtRD();}

private boolean wasWinAtV(){char ch=isBlack?'@':'O';int i=boardX;

while(i>=0 && allChess[boardY][i]==ch){ i—;} int num=0; i++;

while(i=5; }

private boolean wasWinAtH(){char ch=isBlack?'@':'O';int i=boardY;

while(i>=0 && allChess[i][boardX]==ch){ i—;} int num=0;i++;

while(i=5;}

private boolean wasWinAtLD(){ char ch=isBlack?'@':'O';int i=boardY;int j=boardX;

while(i>=0 && j

while(i=0 && allChess[i][j]==ch){num++; i++; j—;} return num>=5;} private boolean wasWinAtRD(){char ch=isBlack?'@':'O';int i=boardY;int j=boardX;

while(i>=0 && j>=0 && allChess[i][j]==ch){i—;j—;}int num=0;i++;j++;

while(i=5; }

2 给鼠标添加监听事件

在游戏过程中,我们利用鼠标所发出的信息了解玩家的意图,进而作出相对应的动作。在窗口的软件中,鼠标的应用是不可或缺的,但鼠标固然好用,如果程序设计不当,也可能造成使用者的不便。通常鼠标在软件的应用上经常使用MouseAdapter事件[2,3]来作为确定使用者的操作意图,判断鼠标是否点击在有效位置,点击的位置是否已经有棋子,通过判断再执行下一步操作,关键代码如下:

addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e) {

int button=e.getButton();if(button!=MouseEvent.BUTTON1){return; }

int x=e.getX();int y=e.getY(); if(x LEFT_BORDER+(COL_NUM-1)*COL_GAP+RIGTH_BORDER/2|| yUP_BORDER+(ROW_NUM-1)*ROW_GAP+DOWN_BORDER/2){

ChessBoard.label.setText("无效!");

return;}

int boardX=Math.round((float)(x-LEFT_BORDER)/ROW_GAP);

int boardY=Math.round((float)(y-UP_BORDER)/COL_GAP);

if(allChess[boardY][boardX]!='*'){ChessBoard.label.setText("有棋子");

return;}

allChess[boardY][boardX]=isBlack?'@':'O';

GraphicPanel.this.boardX=boardX;GraphicPanel.this.boardY=boardY;

参考文献:

[1] 柳西玲.Java语言应用开发基础[M].北京:清华大学出版社,2006:48-59.

[2] 郑莉.王行言.Java语言程序设计[M].北京:清华大学出版社,2006:128-134.

[3] 赵文靖.Java程序设计基础与上机指导[M].北京:清华大学出版社,2006:35-48.

[4] 雍俊海.Java程序设计习题集[M].北京:清华大学出版社,2009:366-489.

[5] 陈轶,姚晓昆.Java程序设计实验指导[M].北京:清华大学出版社,2010:466-552.

上一篇:高职院校计算机应用课程教学改革探讨 下一篇:谈“透明皂”在物理教学中的妙用