我眼中的五子棋遊戲開發
這是我在簡書的第一篇部落格,剛好最近用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不允許我編輯,所以將就一下。
相關文章
- 我眼中的PHPPHP
- 我眼中的 "阿里" ?阿里
- 我眼中的Windows薦Windows
- 專業遊戲開發者眼中的《夢想世界》遊戲開發
- 我眼中的Android FrameworkAndroidFramework
- 【java web】我眼中的JqueryJavaWebjQuery
- 我眼中的敏捷設計敏捷
- 我眼中的指標 (轉)指標
- 我眼中的技術高手
- 我眼中的專案經理
- 我眼中的前端九段前端
- 我眼中的Android架構Android架構
- 五子棋畫布-我的理解
- 我眼中的程式碼的未來
- 說說我眼中的IT界加班文化
- 我練習專案眼中的 vueVue
- 說說我眼中的Vue和ReactVueReact
- 我眼中的開發和測試
- 我眼中的各種程式語言
- 我眼中的go的語法特點Go
- 我眼中的閃電比特幣(LBTC)比特幣
- 我眼中的 Nginx(一):Nginx 和位運算Nginx
- 我眼中的價值幣——應用場景
- 我眼中的 效能劣化、優化的曲線優化
- 我眼中的效能劣化、優化的曲線優化
- 我眼中的 Nginx(二):HTTP/2 dynamic table size updateNginxHTTP
- 我眼中的 JavaScript 函數語言程式設計JavaScript函數程式設計
- 周朝陽:我眼中的網際網路思維
- 淺談遊戲中臺——我眼中的supercell為何成功?遊戲
- 我眼中的 Nginx(五):Nginx — 子請求設計之道Nginx
- 我眼中的JSP,永不止步,盡在學習JS
- 遊戲開發之我見遊戲開發
- 我眼中的 Nginx(六):深入 Nginx/Openresty 服務裡的 DNS 解析NginxRESTDNS
- 我眼中的《WebGL:Up and Running》——中文版譯者序Web
- GitHub 工程師:我眼中的理想上司是這樣子的Github工程師
- 我眼中的中美印日四國程式設計師的特點程式設計師
- 我爸爸眼中的我(r12筆記第22天)筆記
- 我眼中的寶雞景點(r11筆記第53天)筆記