這是我在簡(jiǎn)書的第一篇博客顷链,剛好最近用java開發(fā)了五子棋游戲,現(xiàn)將開發(fā)過程以及感想總結(jié)記錄下來焚刚,如果真的有人看到了這篇文章点弯,希望里面的內(nèi)容能夠幫到你。
首先是原型設(shè)計(jì)矿咕,先看圖看圖抢肛,見下圖
設(shè)計(jì)圖如下
解釋一下我眼中的五子棋游戲。在開發(fā)之前碳柱,我一直再思考捡絮,現(xiàn)在傳統(tǒng)的五子棋游戲還有沒有改進(jìn)玩法的可能性,從而讓它變得更加有趣呢士聪?我首先給了自己肯定的答案锦援,然后每天開腦洞,終于想到了在本游戲中的核心玩法--“讓子”剥悟。
所謂的“讓子”操作就是當(dāng)前玩家回合中灵寺,該玩家選擇不下子而讓對(duì)方玩家下子,即打破黑白子的數(shù)量平衡区岗,這是我眼中的五子棋的核心玩法略板。
原型有了,設(shè)計(jì)圖也ok了慈缔,接下來就是邏輯流程圖+技術(shù)實(shí)現(xiàn)了叮称。
部分邏輯圖如下(流程太長(zhǎng),只截取部分)
相關(guān)類藐鹤、實(shí)體如下
其中關(guān)鍵的棋盤數(shù)據(jù)采用二維數(shù)組進(jìn)行建模瓤檐,所有的邏輯操作的實(shí)現(xiàn)均轉(zhuǎn)換成對(duì)二維數(shù)組的處理。
下面是關(guān)鍵代碼的張貼娱节,判定輸贏的邏輯代碼如下
/**
* 判斷游戲是否結(jié)束
*/
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;
}
服務(wù)器和客戶端的采用socket進(jìn)行通信挠蛉,服務(wù)器會(huì)和每個(gè)玩家建立專門的線程進(jìn)行通信,客戶端在正式進(jìn)入游戲之前需要用戶輸入用戶名進(jìn)行登錄肄满,本程序中輸入任意用戶名即可(只要不與另外一個(gè)玩家重復(fù))谴古,登錄完成后等待另外一個(gè)玩家登錄后即可進(jìn)入游戲。
整個(gè)開發(fā)完成之后的效果如下圖
源碼點(diǎn)擊下面的鏈接:
http://download.csdn.net/download/pulan_peng/9771289
PS:下載可能需要積分稠歉,我也實(shí)在不想搞需要積分下載這一套掰担,但是CSDN不允許我編輯,所以將就一下怒炸。