1. 程式人生 > >C#基礎視頻教程7.4 如何編寫簡單遊戲

C#基礎視頻教程7.4 如何編寫簡單遊戲

-1 list span 不能 時間 .gz 更多 結束 實例

接下來我們實現整個的遊戲流程,當點擊開始遊戲,則需要三個事情開始運行

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 如何編寫簡單遊戲