對比python學julia(第三章:遊戲編程)--(第二節)公主迎聖誕(1)

2.1.    遊戲介紹

  這是原書介紹的第一個遊戲,適合4 歲以上的小朋友玩。下圖所示是這個遊戲在不同狀態時的畫面截圖。啓動這個遊戲程序,就進人遊戲的歡迎畫面。這時按下鏈盤上的回車鍵就可以開始遊戲。

遊戲歡迎畫 遊戲進行畫面 遊戲結束畫面

 

  在遊戲進行中,從天空中會不斷地隨機掉下雪花、禮物和剪刀。玩家使用鍵盤上的左、右方向鍵控制公主角色往左、右兩個方向移動,讓公主躲避剪刀、接住禮物和雪花。接到雪花可獲得10分,接到禮物可獲得50分。遊戲開始時,玩家有3顆愛心寶石。如果玩家讓公主碰到剪刀,就要扣掉1顆愛心寶石;如果愛心寶石用光了,那麼碰到剪刀就會結束遊戲。這個遊戲的時間限定爲5分鐘。遊戲開始後就開始倒計時,時間到,則遊戲結束。

  在遊戲結束畫面,按下鏈盤上的回車鍵可以重新開始遊戲。如果要退出遊戲程序,可以單擊窗口中的“關閉”按鈕。

2.1.    編程思路

  這個遊戲要實現的功能並不複雜,整個遊戲分爲3個狀態,即等待、進行和結束。在各個狀態下需要實現的功能見下表:

  原書表 29-1 遊戲狀態及功能

狀態

功能

等待狀

l  顯示遊戲歡迎背景圖

l  等待狀態 按下回車開始玩

進行狀態

l  顯示遊戲進行背景圖

l  循環播放《鈴兒響叮噹》伴奏曲

l  用左、右方向鍵控制公主左、右移動

l  禮物、雪花和剪刀隨機地從天空中掉下

l  公主接到禮物加50分,接到雪花加10分

l  公主碰到剪刀減掉1課愛心寶石

結束狀態

l  顯示遊戲結束背景圖

l  按下回車鍵重新玩遊戲

  這個遊戲的3個狀態在不同的條件下被觸發和轉換,其變化情況如原書 圖29-2 所示。

 

  在遊戲進行中,從天空中會隨機掉落物體,可能是雪花、禮物或剪刀中的一個。 使用隨機函數決定掉落物體的類型,將雪花、禮物和剪刀三者的比例控制爲爲5:3:2。 也就是在1到10之間隨機生成一個數n 。如果1≤n≤5,則掉落物體是雪花。如果6≤n≤8,則掉落物體是禮物。如果9≤n≤10,則掉落物體是剪刀。

  在遊戲時需要判斷公主是否碰到雪花、禮物或刀剪,專業的說法叫作“碰撞檢測 ”。在Pyglet 中並沒有提供碰撞檢測的功能,需要編程者自己實現。不過好在GameZero很貼心地提供了碰撞檢測的函數collide(a,b)。

  function collide (a,b)

  參數a,b是兩個actor對象

  function collide (a, x::Integer, y::Integer)

  參數a是一個actor對象,x,y是某個座標點

  function collide (a, pos::Tuple)

  這是上一個函數的變體:

  collide(a, pos::Tuple) = collide(a, pos[1], pos[2])

  事實上,所謂碰撞檢測,就是使用數學上的兩點之間距離公式算出計兩個角色之間的距離,當這個距離小於某個數值時,就認爲兩個精靈碰撞在一起。這個距離通常以角色的中心點起始計算。如果各位讀者需要自行檢測碰撞,GameZero還提供距離距離檢測函數:

  function distance (a::Actor, target::Actor)

  function distance(a::Actor, tx, ty)

  爲了實現這個遊戲,需要準備一些圖片素材和音樂素材,原書提供的資源包中包含了這些素材。對各種素材的簡單介紹如下:

  (1) 在遊戲處於3個不同狀態時分別顯示不同的背景圖像。每個狀態的背景圖像上已經寫上相應的提示信息,這樣可以減少編程的工作量。

  (2) 遊戲開始時,玩家有3 顆愛心寶石,每次碰到剪刀就會被扣掉 1 顆。爲簡化編程,在愛心寶石數量變化時,將顯示不同的圖像。

  (3) 遊戲進行中使用的公主、雪花、禮物、剪刀的造型圖像採用 PNG 格式。

  (4) 在遊戲進行中循環播放一首名爲《鈴兒響叮噹》的伴奏曲。(原書資源包提供的是w4a格式的文件,GameZero不支持播放此類格式的音樂,筆者將其轉變爲MP3格式)

  (5) 在公主碰到雪花、禮物或剪刀時播放一個 pop 音效聲。

  提示:在進入這個遊戲的編程介紹之前,希望大家先試玩一下,以便更好地瞭解這個遊戲需要實現的各項功能。所以這裏先放出完整的代碼供大家下載試玩。

  下載地址:https://files.cnblogs.com/files/zjzkiss/sdgz.rar

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