我眼中的五子棋游戏开发

这是我在的第一篇博客,刚好最近用java开发了五子棋游戏,现将开发过程以及感想总结记录下来,如果真的有人看到了这篇文章,希望里面的内容能够帮到你。

首先是原型设计,先看图看图,见下图

我眼中的五子棋游戏开发_第1张图片

设计图如下

我眼中的五子棋游戏开发_第2张图片

解释一下我眼中的五子棋游戏。在开发之前,我一直再思考,现在传统的五子棋游戏还有没有改进玩法的可能性,从而让它变得更加有趣呢?我首先给了自己肯定的答案,然后每天开脑洞,终于想到了在本游戏中的核心玩法--“让子”。

所谓的“让子”操作就是当前玩家回合中,该玩家选择不下子而让对方玩家下子,即打破黑白子的数量平衡,这是我眼中的五子棋的核心玩法。

原型有了,设计图也ok了,接下来就是逻辑流程图+技术实现了。

部分逻辑图如下(流程太长,只截取部分)

我眼中的五子棋游戏开发_第3张图片
我眼中的五子棋游戏开发_第4张图片

相关类、实体如下

我眼中的五子棋游戏开发_第5张图片
我眼中的五子棋游戏开发_第6张图片

其中关键的棋盘数据采用二维数组进行建模,所有的逻辑操作的实现均转换成对二维数组的处理。

下面是关键代码的张贴,判定输赢的逻辑代码如下

/**

* 判断游戏是否结束

*/

public int isOver() {

int tmp = NONE;// 记录棋子

for (int i = 0; i < this.size; i++) {

for (int j = 0; j < this.size; j++) {

tmp = gobang[i][j];

if (tmp != NONE) {

// 判断斜上方

if (i >= 4 && j <= this.size - 5) {

for (int k = 1; k <= 4; k++) {

if (tmp != gobang[i - k][j + k]) {

break;

}

if (k == 4) {

// 判断是哪一方赢了

if (tmp == BLACK)

return BLACK_WIN;

if (tmp == WHITE)

return WHITE_WIN;

}

}

}

// 判断斜下方

if (i <= this.size - 5 && j <= this.size - 5) {

for (int k = 1; k <= 4; k++) {

if (tmp != gobang[i + k][j + k]) {

break;

}

if (k == 4) {

// 判断是哪一方赢了

if (tmp == BLACK)

return BLACK_WIN;

if (tmp == WHITE)

return WHITE_WIN;

}

}

}

// 判断横向

if (j <= this.size - 5) {

for (int k = 1; k <= 4; k++) {

if (tmp != gobang[i][j + k]) {

break;

}

if (k == 4) {

// 判断是哪一方赢了

if (tmp == BLACK)

return BLACK_WIN;

if (tmp == WHITE)

return WHITE_WIN;

}

}

}

// 判断纵向

if (i <= this.size - 5) {

for (int k = 1; k <= 4; k++) {

if (tmp != gobang[i + k][j]) {

break;

}

if (k == 4) {

// 判断是哪一方赢了

if (tmp == BLACK)

return BLACK_WIN;

if (tmp == WHITE)

return WHITE_WIN;

}

}

}

}

}

}

return NOT_OVER;

}

服务器和客户端的采用socket进行通信,服务器会和每个玩家建立专门的线程进行通信,客户端在正式进入游戏之前需要用户输入用户名进行登录,本程序中输入任意用户名即可(只要不与另外一个玩家重复),登录完成后等待另外一个玩家登录后即可进入游戏。

整个开发完成之后的效果如下图


我眼中的五子棋游戏开发_第7张图片
我眼中的五子棋游戏开发_第8张图片
我眼中的五子棋游戏开发_第9张图片

源码点击下面的链接:

http://download.csdn.net/download/pulan_peng/9771289

PS:下载可能需要积分,我也实在不想搞需要积分下载这一套,但是CSDN不允许我编辑,所以将就一下。

你可能感兴趣的:(我眼中的五子棋游戏开发)