寫在開頭:
本人初入iOS眷茁,想借此系列的文章記錄自己的學習過程枫夺,同時也和大家分享一些學習心得鹦马,作為一個剛學編程的新人蓖扑,想自己寫一個小app或者小游戲可能是一件比較困難的事情唉铜,于是乎我就嘗試用自己所學的有限的知識能不能做幾個小應用,哪怕非常簡單的也不要緊律杠,整個嘗試的過程非常有趣潭流,如果你和我同為新人,那么一起來學習討論吧柜去!
文章底部有下載鏈接
先上游戲展示:
所用知識:OC基礎(chǔ)知識以及UI基礎(chǔ)控件的使用灰嫉,如UIButton UILabel 等等
各位觀眾老爺大家好,這是鄙人的第二篇文章嗓奢,其實應該是一篇的讼撒,由于發(fā)第一篇文章的時候正寫2048寫的起勁,于是乎第一篇討論其了如何做2048這個小游戲股耽,但是畢竟我們的主題是萌新的成長史根盒,不可能一個初學者一上來第一個程序就寫2048,所以物蝙,今天我就和大家聊聊我本菜雞的第一個iOS小程序炎滞,進入本期主題
三子棋
話說我都不知道這個游戲究竟應該叫什么名字,規(guī)則就是三個棋子的五子棋诬乞,上一下游戲畫面大家立馬就懂了
請大家先無視我給起的如此邪惡的游戲名字册赛。。震嫉。
游戲規(guī)則就是三個O或者三個X連成一條直線就可以獲得游戲勝利森瘪,不管橫著還是斜著,如果格子填滿了還為分勝負則為平局
接下來說下游戲的開發(fā)思路
1. 用什么控件來表示圖上能看的到的東西
本菜采用的是游戲的9個格子用9個按鈕表示票堵,因為玩的過程中要點擊才有變化扼睬,所以我只想到了按鈕,有人可能要問悴势,這些邊框和O X之類的圖片怎么來的窗宇,呃。瞳浦。都是本菜自己用畫圖工具畫的担映,就畫了三張好像废士。叫潦。
就是如圖的這么三個簡單的小圖片,我畫的都是正方形的哦官硝,為了不影響美觀
RESTART當然是一個按鈕矗蕊,下面的游戲名字則是一個Label
勝利的提示信息大家先忽略吧短蜕,大家可以先用一些簡單控件代替。
2. 點擊按鈕后的按鈕背景圖片變化
首先設(shè)置一個BOOL類型的屬性傻咖,比如
@property (nonatomic, assign) BOOL isO朋魔;
每次點擊的方法里先讓 isO的屬性取反
self.isO = ! self.isO;
這樣確保每一次點擊isO的值都不一樣,然后就可以根據(jù)每次的值給按鈕設(shè)置背景圖了
別放了點擊之后讓按鈕的enable屬性成為NO卿操。
因為xcode默認會設(shè)置按鈕highlighted時的顏色警检,所以注意調(diào)整disable狀態(tài)的背景圖和原來一樣,這樣就不至于點完之后圖片顏色發(fā)生變化了?
3. 如何判斷勝平負
這里我深深的感覺到自己菜就寫不出精簡的代碼的道理害淤,這一塊我自己看自己寫的代碼都覺得肯定可以得到優(yōu)化扇雕,但誰讓我現(xiàn)在菜呢,不知道更好的辦法窥摄,不過沒關(guān)系镶奉,等我學到的時候我也會會的,現(xiàn)在我就用最笨的方法完成游戲的功能崭放。
剛開始學習的時候哨苛,老師告訴我每個控件都有自己的tag值,我就想我能不能通過tag值進行判斷呢币砂,于是乎我就讓九個按鈕的tag值依次等于1到9建峭,但是我還是一直想不出簡單的方法可以通過tag值判斷勝利條件,直到我靈機一動道伟。迹缀。。蜜徽。
每當你點擊了哪個按鈕之后祝懂,如果它為O ,就讓它的tag值加100拘鞋,如果為X就加1000砚蓬;
然后設(shè)置八個變量,分別等于每種勝利所需要的三個按鈕的tag值的和盆色,不知道這么說大家能聽懂不
這里我貼一些我寫的代碼吧灰蛙。。如果某一個的和在300和1000之間隔躲,那么O勝利摩梧,如果超過了3000那么X勝利
數(shù)值當然不用一定設(shè)置成我這個樣子,我當時就是隨便一想宣旱,然后就隨便一寫仅父,然后確實能成功。。笙纤。
這里要說下平局的情況的判斷耗溜,我的方法是設(shè)置一個count = 0;
每一次點擊讓它加1省容,如果count = 9抖拴,而且又沒有哪一方獲勝的話,就提示為平局
4. 重新開始按鈕
把按鈕的屬性設(shè)成初始的時候就可以了腥椒,別忘了把enable屬性改成YES
好像已經(jīng)說完了阿宅,雖然說我完成了最后的功能,但是不得不說看著自己寫的一堆重復又蹩腳的代碼真的很是蛋疼笼蛛,所以說當一只菜鳥并非長久之計啊家夺,得變得更強才行。
如果你和我一樣伐弹,同為一個喜歡自己寫東西的萌新拉馋,熱烈歡迎過來留言討論,大家一起交流進步惨好。
附上游戲下載地址 ?點這里下載? ?密碼 abcf