程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python實現的吃東西小游戲

編輯:Python

一、設計目的

課程設計教學目的

本課程設計是本專業的一門重要實踐性教學環節。在學習了專業基礎課和《Python程序設計》課程的基礎上,本課程設計旨在加深對Python程序設計的認識,對Python語言及其語言生態有一個進一步的掌握和應用,學會運用Python標准庫及外接相關庫來解決實際問題的基本能力,培養和提高學生分析問題、解決問題的能力,尤其是提高學生使用Python為開發語言來進行問題描述、交流與思考的能力,為畢業設計和以後的工程實踐打下良好的基礎。

本課程設計具體目的

  1. 為全面了解Python技術歷史、現狀與發展趨勢的基礎上,系統掌握Python基本概念、編程思想以及程序設計技術,具備熟練的Python編程技能和面向對象軟件設計技術思想。

  2. 通過總體框架到頁面設計再到代碼實現,了解Python設計的一般步驟,並熟練掌握Python的設計思想。

  3. 本課題主要訓練邏輯思維和Python語法,對代碼編寫由大到小,由總體到模塊,掌握其基本邏輯,對以後的設計可以做到舉一反三,進而形成邏輯思維。

二、設計任務和要求

課程設計教學任務和要求

本課程設計主要任務是以Python為開發語言完成一個100~300行左右規模的程序項目開發。設計參考題目見附件1。

課程設計的基本要求是:在課程設計的各個階段嚴格、規范地完成相關的文檔,例如總體方案報告,詳細設計報告、功能說明、數據結構說明、算法說明、程序設計框圖、圖例和源程序等。要求所寫文檔結構合理、內容完整、敘述清晰。程序源碼要有詳細注釋,可讀性好。更高要求是:有創意、系統界面美觀。

本課程設計具體任務和要求:

  1. 頁面完美,邏輯清晰。
  2. 代碼編寫在可讀性高的情況下盡可能的簡潔。
  3. 可選用PyCharm,Python IDLE等開發平台以提高開發效率,通過資料查閱和學習盡可能掌握一種或多種集成開發環境。
  4. 共同完成代碼的銜接,游戲總體框架和邏輯的實現。分工編寫課程設計報告,報告總共包括六大部分:設計目的、設計要求、總體設計、詳細設計、調試與測試、設計總結。

三、總體設計

我負責游戲邏輯的實現。

Vel_y是游戲中魚下落的速度,游戲中每當接到了炸彈,貓的表情會變成哭臉,同時生命值減一,遺漏魚時,生命值也會減一,當生命值為0時,游戲結束。

四、設計實現

4.1 最終實現結果:

游戲的啟動頁面:

游戲的運行界面:

當Round>2時,會插入炸彈:

圖3 炸彈界面

4.2 實現結果評價

良好

總體上來說,游戲的運行基本滿足了當初設計時的構想,滿足了設計要求。

五、詳細設計

游戲具體邏輯的實現:

5.1 pygame事件

pygame事件可以處理游戲中的各種事情,pygame中的事件處理是放在一個實時的循環中來完成的。將代碼都放在一個while True的循環中,但是這樣會造成死循環,所以在裡面加一句sys.exit()來退出。

for event in pygame.event.get()

上面的代碼將會創建當前等待處理的事件的一個列表,然後使用for循環來遍歷裡面的事件。這樣,我們將會根據事件產生的順序依次地進行不同的操作。常見的事件是按鍵按下,按鍵釋放以及鼠標移動。通常需要最先處理QUIT事件(在用戶關閉窗口的時候會產生該事件。)

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

5.2 鼠標事件

pygame支持一些鼠標事件,他們包括:

MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN.

在MOUSEMOTION中包含了一些屬性:event.pos,event.rel,event.buttons

Elif event.type == MOUSEMOTION:
mouse_x,mouse_y = event.pos
move_x,move_y = event.rel

MOUSEBUTTONUP裡面的屬性:

elif event.type == MOUSEBUTTONUP:
if game_over:
game_over = False
lives = 10
score = 0
Round =1
vel_y=0.4
mine=0
flag=0
pic=cat
bomb_y = -50

5.3 輪詢鍵盤

在pygame中,使用pygame.key.get_pressed()來輪詢鍵盤接口。這個方法會返回布爾值的一個列表,其中每個鍵一個標志。使用鍵常量值來匹配按鍵,這樣的好處就是不必遍歷事件系統就可以檢測多個鍵的按下。

keys = pygame.key.get_pressed()
if keys[K_ESCAPE]:
sys.exit()

5.4 游戲結束的處理

if game_over:
screen.blit(init,(60, 60))
print_text(font3, 200, 400,"Clicked To Play!")
print_text(font2, 310, 480,"[email protected] developed by xiaoxiami")

圖4 游戲結束頁面

5.5 游戲等級設置和難度設置

等級123456分數<300300600600900900120012001500>1500下落速度0.40.60.81.01.21.2
else:
#Round setting
if score >300 and score <600:
Round=2
elif score >600 and score <900:
Round =3
elif score >900 and score <1200:
Round=4
elif score >1200 and score <1500:
Round =5
elif score >=1500:
Round =6
#draw the Round
print_text(font1, 280, 0, "Round: " + str(Round))
#speed setting
if Round ==1:
vel_y=0.4
elif Round ==2:
vel_y=0.6
elif Round ==3:
vel_y=0.8
elif Round ==4:
vel_y=1.0
elif Round ==5:
vel_y=1.2

5.6 游戲過程中的介紹

如果錯過魚的話,就重置魚的位置,給它一個隨機的x值,然後生命值減一:

 if bomb_y > 500:
bomb_x = random.randint(0, 500)
bomb_y = -50
lives -= 1
if lives == 0:
game_over = True

簡單碰撞檢測函數,查看是否接住魚:

 elif bomb_y > pos_y:
if bomb_x > pos_x-10 and bomb_x < pos_x + 70:
score += 10
bomb_x = random.randint(0, 500)
bomb_y = -50

同理炸彈的檢測和這個是類似的:

if mine_y > 500:
mine_x = random.randint(0, 500)
mine_y = -50

為了控制貓的坐標不超出屏幕范圍,加入了以下代碼:

pos_x = mouse_x
if pos_x < 0:
pos_x = 0
elif pos_x > 510:
pos_x = 500

貓在接到炸彈。或者生命值小於5的時候,會變成哭臉,因此我們還需要加載一張哭臉的位圖,然後在程序中添加一些相應的邏輯代碼:

加載貓的哭臉位圖:

cat2=pygame.image.load("aodamiao_3.png")

當接到炸彈的時候,貓變成哭臉:

elif mine_y > pos_y:
if mine_x > pos_x and mine_x < pos_x + 40:
mine_x = random.randint(0, 500)
mine_y = -50
lives-=1
pic=cat2
if lives == 0:
game_over = True

當貓的生命值小於5時,貓變成哭臉:

if lives<5:
pic=cat2

六、調試與測試

6.1 異常處理

try...except...finally...

用於判斷貓的位置是否超出了游戲窗口:

try:
print("開始執行try...")
mouse_x>0
mouse_x<510
except ZeroDivisionError as e:
print(“貓超出范圍”)
finally:
print("執行finally...")
print("END...")

6.2 調試

Print

通過print 輸出可能出錯的變量,可以通過錯誤信息和print 輸出的內容來進行修改bug,print在測試完成後還需要刪除

pdb

啟動Python的單步調試器pdb,程序一行行執行。可以采用pdb.set_trace()在代碼中設置斷點


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved