C#基礎視頻教程7.4 如何編寫簡單遊戲
接下來我們實現整個的遊戲流程,當點擊開始遊戲,則需要三個事情開始運行
1 小鳥初始化並往下掉(當然還是可以用按鈕讓他飛一下)
2 每隔一定時間從左側產生一個管子(寬度和高度隨機,產生周期2000ms左右)
3 每隔一定時間檢測是否鳥撞到了管子(這個時間周期要50ms左右,也可以更大或者更小)
?
跟上一節不同的地方在於,小鳥是唯一的,而管子不唯一。我們之前只是判斷一個小鳥和一個管子是否有碰撞,隨著管子的不斷生成,要檢測小鳥和每個管子是否有碰撞。所以我們把生成管子放在了GameSense的一個list裏面,list存儲的是GameRectange的類的實例,在另一個判斷的線程,就需要遍歷list的每一個元素做判斷,並且只要有任意一個撞擊了,就認為撞擊了
?
我們前面用了很多類都是靜態的,這裏管子的類卻不能是靜態的,因為每一個管子大小都是不一樣的,每隔一定時間都會new一個出來。可想而知,如果我們要做成兩只鳥雙人遊戲,鳥也不能做成靜態的(所以讀者在考慮是否有必要做成靜態的類,方法的時候,只要想清楚這個類是否會需要多個實例,如果需要則不能是靜態的),本例中只有場景是唯一的,裁判是唯一的,所以可以用靜態的。
?
為了提高遊戲的體驗,每產生一個管子,沒有撞上去,就可以給用戶增加一點分數(我們在屏幕用了繪制文字的方法,這比用控件更加合理,至少不會有控件自帶的背景色幹擾)。在每個子線程中我們都把延時Sleep操作放到了最後,讀者可以測試一下如果放到前面會有什麽問題(多次的彈窗,或者遊戲結束了還產生多余的一個管子)
?
把遊戲開始,遊戲結束,遊戲清空場景也單獨做成方法,註意遊戲清空場景並不等同於遊戲結束。結束的時候要彈窗告訴用戶他掛了,但是此時還不能馬上清空場景(畫面要顯示他撞在哪裏了),點擊確定按鈕之後才去執行清空場景(原來的list保存的管子都扔掉,小鳥也回到初始位置等等,很多布爾值都要復位)
?
已經可以測試完整的運行了,點擊小鳥飛行,繞過障礙物,則得分,撞上去就提示遊戲結束,下一節我們繼續完善
?
?
?
更多教學視頻和資料下載,歡迎關註以下信息:
我的優酷空間:
http://i.youku.com/acetaohai123
?
我的在線論壇:
http://csrobot.gz01.bdysite.com/
?
問題交流:
QQ:910358960
郵箱:[email protected]
?
?
?
?
?
C#基礎視頻教程7.4 如何編寫簡單遊戲