房子到期了,剛搬家,網還沒轉過去,回去之後一個人只能看看廣告,不想被電視臺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層的遊戲已經搞定了。其實很簡單,一個遊戲就是不同的始終週期改變用戶的位置,然後根據不同位置做出不同邏輯的判斷。
好了就到這裏吧。下次放出一個小的效驗碼破解的示例
最後附上源碼