一.項目介紹
1.地址:
2.效果圖:
近場五子棋對戰.gif
3.簡介:
該項目主要用到MutipeerConnectivity框架, 用藍牙或者局域網二人近場五子棋對戰。
二.思路介紹
大概說下思路,
1.畫棋盤及落點
這個可以去慕課網看看這個視頻:五子棋, 裡面有詳細的講解, 我對裡面的進行了部分優化。 比如怎麼判斷兩點之間到底觸摸的哪個點。
2.悔棋, 重來
每個點都是一個物件, 讓後把物件放陣列裡面, 進行刪去, 或者重置。
3.人機模式
AI簡介.png
這裡的AI(人工智慧)比較簡單, 這個演算法可深可淺, 此項目就是比較淺的, 深的可以去看演算法, 此專案AI的大體思路是:
先便利棋盤上面的點, 找到AI的棋子有活四, 死四的點, 既下一步能形成5個點的落子點, 找到就直接在此點落子。
如果沒找到, 就遍歷玩家活四, 或者死四的點, 並在此進行落點進行防守, 雖然活四沒法防守。
然後這兩個點都沒找到的話, 就直接找AI有形成活三, 或者死三的點, 進行落子進攻。
如果沒找到, 就找用戶能形成活三, 死三的點進行防守。 就這樣簡單的進行交互。
4.人人模式
人人連機主要用Multipeer Connectivity框架進行近場通訊, 現在有黑白玩家想要連接。
那麼雙方必須打開藍牙或者連接同一WiFi,
第二個設備必須是可發現的, 它要聲明它在這裡, 並且它想要與別的設備連接。 換句話說, 第二個設備需要宣傳自己。 一般來說, 兩個設備都要宣傳自己, 但至少要有一個能流覽其他設備, 從而建立連接。
接受邀請後雙方建立連接。 然後他們就可以基於session會話來傳遞資料消息資料(包括文本、圖像以及可以轉換為NSData物件的任何其他資料), 流資料, 資來源資料。
此專案只需要傳遞消息資料即可。 收到資料的代理方法預設會是在子執行緒上面, 所以如果要更新UI等操作要用GCD執行緒回檔到主執行緒上面來, 否則會造成執行緒異常的情況。
傳遞的資料有棋子位置, 棋子顏色,
三.用到的三方和借鑒
感謝下面作者
四.結語
如果能對你有幫助, 就給個star或贊鼓勵下, 有什麼不足的地方, 歡迎大家指正。