前言:java
此次是從前就特別喜歡玩的「奧賽羅」,可是國內玩的人很少,後來也就慢慢淡忘了。偶然想起來,以爲仍是挺有意思的,就着手開發了。以前已經寫過兩三個小遊戲,因此開發起來也很順暢,原覺得利用業餘時間幾天應該能寫完的,斷斷續續寫了兩三個星期。中間以爲很差又推翻重寫了一次。目前只完成了java版本,後面有空的話,應該還會繼續完善。git
開發歷程github
本來想法是經過加載一些靜態圖片資源來繪製棋盤和棋子,不事後來本身作的圖片效果不是太滿意,網上也沒有找到合適的圖片資源,就把這個想法給pass掉了,改爲所有由canvas進行繪製。算法
原來設計是使用三個canvas,分別是:最底部是棋盤畫板,中間是落子畫板,最上層是提示落子位置畫板。後來以爲三個canvas太浪費,因此把落子位置給挪到最底層棋盤畫板上,每次落子完就會重繪一次棋盤和提示落子位置。爲何不適用同一個canvas進行繪製呢?由於重繪實在太耗硬件資源了,最後開發出來的遊戲運行時資源佔用能夠說是很是少的。canvas
之前玩就以爲8x8棋盤過小,因此開發的時候就保留了棋盤的可擴展性,能夠支持任意格子數量的棋盤,好比正常的8x8棋盤,也能夠9x9,10x10,16x16棋盤等等多線程
原先考慮是須要多線程的,後來沒有用到。由於幾乎全部計算都在幾毫秒以內就完成了,也不必非要多線程了。可是仍是使用了兩個線程,一個窗口線程和一個後臺保活線程,後臺線程暫時只有監控窗口線程運行狀態和打打日誌這樣的功能。優化
遊戲截圖ui
項目維護地址線程
https://github.com/eguid/Othello設計
目前開發進程
已完成
1.0版本更新 一、增長贏棋提示和從新開始遊戲 二、優化代碼結構
0.3版本更新 一、輸贏邏輯判斷 二、落子位置算法優化和越界bug修復
0.2版本更新 一、落子位置預測算法實現
0.1版本實現 一、界面、棋盤、棋子繪製 二、棋子翻轉算法實現
待完成
一、悔棋(悔棋真的很討厭,因此一直沒加這個功能)
二、人機對戰
三、聯網對戰
若是有興趣的小夥伴也能夠參與開發