一.項目介紹
1.地址:
github地址:GobangProject
優酷操作視頻:如何操作
2.效果圖:
3.簡介:
該項目主要用到MutipeerConnectivity框架,用藍牙或者局域網二人近場五子棋對戰。
二.思路介紹
大概說下思路,具體看代碼實現。
1.畫棋盤及落點
這個可以去慕課網看看這個視頻:五子棋,里面有詳細的講解,我對里面的進行了部分優化。比如怎么判斷兩點之間到底觸摸的哪個點。
2.悔棋,重來
每個點都是一個對象,讓后把對象放數組里面,進行刪去,或者重置。
3.人機模式
這里的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 |
三.用到的三方和借鑒
感謝下面作者
1.LLSwitch
2.SFDraggableDialogView
3.慕課網五子棋
四.結語
如果能對你有幫助,就給個star或贊鼓勵下,有什么沒明白的歡迎留言交流。