iOS開源:五子棋-大華五子棋(已上架)

GonzaloTill 7年前發布 | 11K 次閱讀 iOS開發 移動開發

一.項目介紹

1.地址:

2.效果圖:

近場五子棋對戰.gif

3.簡介:

該項目主要用到 MutipeerConnectivity 框架,用 藍牙 或者 局域網 二人近場五子棋對戰。

二.思路介紹

大概說下思路,具體看代碼實現。

1.畫棋盤及落點

這個可以去慕課網看看這個視頻: 五子棋 ,里面有詳細的講解,我對里面的進行了部分優化。比如怎么判斷兩點之間到底觸摸的哪個點。

2.悔棋,重來

每個點都是一個對象,讓后把對象放數組里面,進行刪去,或者重置。

3.人機模式

AI簡介.png

這里的AI(人工智能)比較簡單,這個算法可深可淺,此項目就是比較淺的,深的可以去看 算法 ,此項目AI的大體思路是:

  • 先便利棋盤上面的點,找到AI的棋子有活四,死四的點,既下一步能形成5個點的落子點,找到就直接在此點落子。

  • 如果沒找到,就遍歷玩家活四,或者死四的點,并在此進行落點進行防守,雖然活四沒法防守。

  • 然后這兩個點都沒找到的話,就直接找AI有形成活三,或者死三的點,進行落子進攻。

  • 如果沒找到,就找用戶能形成活三,死三的點進行防守。就這樣簡單的進行交互。

4.人人模式

人人連機主要用Multipeer Connectivity框架進行近場通訊,現在有黑白玩家想要連接。

  • 那么雙方必須打開藍牙或者連接 同一WiFi ,接著至少要有一個設備作為瀏覽器(browser),用來搜尋其他設備;

  • 第二個設備必須是可發現的,它要聲明它在這里,并且它想要與別的設備連接。換句話說,第二個設備需要宣傳自己。
    一般來說,兩個設備都要宣傳自己,但至少要有一個能瀏覽其他設備,從而建立連接。

  • 接受邀請后雙方建立連接。然后他們就可以基于session會話來傳遞數據消息數據(包括文本、圖像以及可以轉換為NSData對象的任何其他數據),流數據,資源數據。

  • 此項目只需要傳遞消息數據即可。收到數據的代理方法默認會是在子線程上面,所以如果要更新UI等操作要用 GCD線程回調到主線程 上面來,否則會造成線程異常的情況。

  • 傳遞的數據有棋子位置,棋子顏色,催促信號,語言文字等。為此我制定了簡單的協議來區別這些數據。否則沒有一套基本的標準,應用沒辦法判定這串數據是否是語言文字,還是棋子位置或者信號等。通訊協議表如下表所示。

數據類型 頭部 內容 例子
語言文字 ~ 文字 ~你吃飯了嗎?
黑子位置 black 棋子x,y坐標 black0705
白子位置 white 棋子x,y坐標 white0705
催促 quikly   quikly
悔棋 undo   undo

 

 

項目主頁:http://www.baiduhome.net/lib/view/home/1492132749711

 

 本文由用戶 GonzaloTill 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!