這是我在簡書的第一篇博客,剛好最近用java開發了五子棋游戲,現將開發過程以及感想總結記錄下來,如果真的有人看到了這篇文章,希望里面的內容能夠幫到你。
首先是原型設計,先看圖看圖,見下圖
設計圖如下
解釋一下我眼中的五子棋游戲。在開發之前,我一直再思考,現在傳統的五子棋游戲還有沒有改進玩法的可能性,從而讓它變得更加有趣呢?我首先給了自己肯定的答案,然后每天開腦洞,終于想到了在本游戲中的核心玩法--“讓子”。
所謂的“讓子”操作就是當前玩家回合中,該玩家選擇不下子而讓對方玩家下子,即打破黑白子的數量平衡,這是我眼中的五子棋的核心玩法。
原型有了,設計圖也ok了,接下來就是邏輯流程圖+技術實現了。
部分邏輯圖如下(流程太長,只截取部分)
相關類、實體如下
其中關鍵的棋盤數據采用二維數組進行建模,所有的邏輯操作的實現均轉換成對二維數組的處理。
下面是關鍵代碼的張貼,判定輸贏的邏輯代碼如下
/**
* 判斷游戲是否結束
*/
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進行通信,服務器會和每個玩家建立專門的線程進行通信,客戶端在正式進入游戲之前需要用戶輸入用戶名進行登錄,本程序中輸入任意用戶名即可(只要不與另外一個玩家重復),登錄完成后等待另外一個玩家登錄后即可進入游戲。
整個開發完成之后的效果如下圖
源碼點擊下面的鏈接:
http://download.csdn.net/download/pulan_peng/9771289
PS:下載可能需要積分,我也實在不想搞需要積分下載這一套,但是CSDN不允許我編輯,所以將就一下。