一個簡單的示例講解遊戲遊戲編程原理。附示例源碼

房子到期了,剛搬家,網還沒轉過去,回去之後一個人只能看看廣告,不想被電視臺QJ,於是就在公司賴着蹭網、蹭空調。實在太無聊,剛好昨天和@zhzhxtrrk聊到了移動設備上的遊戲開發,據說在國外美刀賺很兇的,於是乎就寫個玩玩唄,度過漫漫長夜。。。

 

說實話不想裝sdk,於是就java上了,上網down素材。。。。然後開始動工。

 

 

先簡單介紹下游戲的原理吧。

一、重寫jpanel的print方法,在這個方法裏面做的事情:1.畫障礙物(頂部的尖刺) 2.畫地板隊列中的所有地板 3.畫人 4.畫圖血條等提示信息

二、新建一個線程,這個線程不停的循環,在這個線程中做的事情:1.更新地板的位置 2.隨即生成新的地板 3.更新地板動畫 4.刪除已經在窗口外面的地板

      每次循環休眠一段時間,每個循環是一個時鐘週期,不同的時鐘週期做不同的事情(35個時鐘週期生成一個地板,7個時鐘週期更新一次地板動畫)

 

效果圖:

 

核心代碼剖析:

在畫圖方法中不需要關注任何信息,只需要獲取需要畫圖的對象,然後調用對象的畫圖方法即可。這裏圖片的尖刺是畫出來的,如果能在底部圖上把這些直接畫上也是可以的。這樣做也有好處,我們可以在畫布的四周全部佈滿尖刺,如果碰到尖刺就死亡,這個也是可以的。

 

 

地板的生成:地板隊列(floorList)小於10的時候(表明同事出現的地板不超過10個),隨即生成一個NFloor,X座標爲(int) (Math.random() * (300 - 100))因爲畫布寬度爲300,地板爲100,所以我們不能讓地板的最右邊超出畫布,所以就是300-100之間的隨機數。請看下圖X的取值原理

 

 

新啓動的這個線程中會控制時鐘週期(每次時鐘週期休眠一段時間,這個值可以看效果訂),每個時鐘都會更新地板的位置,地板位置的計算公式:x座標不變(地板X軸始終是不變的)y=y-speed(Y軸的座標會每次以一定的速度減少,看到的效果就是地板在不停的上升)。同時每35個時鐘週期會隨即生成一個地板。

 

同時我們會在每個時鐘週期判斷一個地板是否超過了畫布,如果超過了就直接刪除掉。

 

由於畫板中有些地板是有動畫效果的,所以需要每7個時鐘週期更新一下地板的狀態,做出動畫效果floor.update()這個隨後講地板的時候在介紹

 

最後會掉一次repaint()把更新完成的數據重新在畫布上畫出來。

 

地板類:

每次畫地板的時候根據地板的不同style(地板類型)、donghua(地板的動畫狀態)來獲取需要畫的圖片,然後畫到畫布上。

 

每次獲取不同的動畫狀態,供上面的方法在獲取圖片的時候獲取不同的圖片。

 

玩家類:

在畫玩家的時候會判斷玩家1.是否還活着(沒碰壁,血不爲0) 2.玩家是否在地板上(在地板上根據不同的地板做出不同的人的座標和速度的變化) 3.畫人(根據座標和速度來畫)

 

 

好了到這裏一個下100層的遊戲已經搞定了。其實很簡單,一個遊戲就是不同的始終週期改變用戶的位置,然後根據不同位置做出不同邏輯的判斷。

 

好了就到這裏吧。下次放出一個小的效驗碼破解的示例

 

最後附上源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章