實驗四 Python綜合實踐
課程:《Python程序設計》
班級:1843
姓名:章森洋
學號:20184307
實驗教師:王志強
實驗日期:2020年5月16日
必修/選修: 公選課
1.實驗內容
此處填寫實驗的具體內容;
(一)實驗內容
Python綜合應用:利用pygame來進行一個游戲的編程
(二)實驗要求
運用這學期所學的python所有知識來進行一個編程
(1)程序能運行,功能豐富。(需求提交源代碼,并建議錄制程序運行的視頻)
(2)綜合實踐報告,要體現實驗分析、設計、實現過程、結果等信息,格式規范,邏輯清晰,結構合理。
(3)在實踐報告中,需要對全課進行總結,并寫課程感想體會、意見和建議等。
2. 實驗設計思路和結果
游戲思路的介紹
創建一個名為“家園保衛戰”的簡單游戲。游戲的樣式和飛機大戰差不多,需要用到的知識點有pygame各種庫的應用,碰撞檢查,一些圖片、音樂的導入以及數學公式(反三角的應用)math庫的應用
實現步驟
1.安裝pygame。使用win+r打開管理器,輸入cmd進行命令行控制。輸入pip install pygame指令,進行下載pygame。下載完成后,在IDLE中導入pygame庫,如果顯示版本和網站,說明安裝成功。

2.添加游戲資源
將所有需要用到的圖片和音頻放在與py文件用一個文件夾中,各種資源分組在其中的其他文件夾中,如下所示:

3.編寫程序
① 首先我們需要導入庫,因為在這個程序中,我們要用到pygame的一些方法,math的一些方法,還有隨機數

② 初始化游戲窗口和定義變量。在這個游戲程序中會有很多對象存在,而我們在使用這些對象前面需要對它進行定義。首先需要創建一個游戲窗口,大小為640*480,緊接著有角色變量playerpos,keys是用我們給定時刻的鍵狀態數組,還有時間,敵人,武器等一些的變量定義

③ 需要加載游戲的圖像和音頻,這里就用到pygame.image.load方法,將文件夾中圖片和音頻加載我們界面中


④ 為游戲添加背景。在resources文件文件中,草的圖像是只有100100的分辨率的,無法滿足游戲界面640480,這就意味著必須將草地平鋪在屏幕區域上才能完全覆蓋它。

for語句首先通過x循環。然后,在該for循環中,它遍歷y,并在由for循環生成的x和y值處繪制草。接下來的兩行只是在屏幕上繪制城堡。
⑤ 移動、旋轉玩家。能通過鍵盤和鼠標上玩家能隨意操控角色。
在第二個步驟已經建立了鍵狀態數組,然后需要根據所按下的鍵更新鍵狀態數組。通過添加event.key函數檢測按鍵操作

首先檢查一個鍵是否被按下或釋放。然后檢查被按下或釋放的鍵,如果被按下或釋放的鍵是正在使用的鍵之一,則相應地更新keys變量。

之前有定義playerpos變量是用來控制移動后的玩家角色的位置,這里我們按下哪個鍵,從對應的玩家x或y位置進行一個移動
除了對于WASD角色的移動,還需要進行角色的旋轉。這里需要使用pygame.surface.rotate函數,角度的單位這里為弧度,用到的數學原理是就是反三角函數

⑥ 接下來需要生成游戲角色的攻擊武器。這里需要兩個變量來控制武器。第一個變量表示玩家的準確性,第二個數組跟蹤所有箭頭。精度變量是一個射擊次數和命中次數的列表。最后需要來計算一個準確度百分比。同時,獲取鼠標單擊時鼠標位置并基于旋轉的玩家位置和光標位置計算箭頭旋轉。這個旋轉值存儲在箭頭數組中。


vely和velx值是用來計算三角的變量。10是箭頭的速度。if語句只檢查項目符號是否超出范圍(屏幕的邊界),如果超出范圍,則刪除箭頭。第二個for語句循環遍歷箭頭,并以正確的旋轉方式繪制箭頭。
⑦ 我們要將敵人添加到程序中,敵人是用數組列表來存儲,變量名叫badguys。通過計時器badtimer來控制敵人數量,如果badtimer為0,則增加一個敵人,并根據badtimer運行到目前為止的次數再次設置badtimer。for循環更新敵人的x位置,檢查敵人是否在屏幕外,如果它在屏幕外,則刪除。

⑧ 進行碰撞檢查。循環遍歷所有壞人,并且在每個循環中都必須遍歷所有箭頭,并檢查它們是否碰撞。如果他們這樣做,然后刪除敵人,刪除箭頭,并增加一個正確率。

colliderect是pygame 的內置語句,用于判斷兩個矩形是否矩形是否相交
⑨ 最后一步就是設置我們的輸贏條件。兩個方案,如果時間時間到90秒,城堡沒有被炸毀(血量條還在),則獲勝,如果血量見底,則失敗


其他(感悟、思考等)
全課程的總結感悟:
眨眼間一個學期就過去了,時間過得非常的快,我呢也學會了一門新的計算機語言——python。在大一的時候學c,那時候聽我高中的其他同學說他們大學在學python,非常的方便。說實話,因為c涉及到計算機的內存地址和指針的問題,在一定程度上還是非常的繁瑣的,在那時就對python充滿了好奇和期待。到大二上的時候因為專業選修課學習了java。對比java和c我覺得兩種語言差不多難度,java它的繁瑣點在于利用構造器不斷的調用,如果程序中要操作的變量一多的話,可能就容易出錯。并且父類子類的運用也會設計涉及到this,super,特別容易弄錯。這學期的python算是第三門語言了,有了前兩個做基礎學起來也不是那么費勁。對比而言,python無疑是最方便的。沒有c的指針,語言上也比c更為簡潔,同時也沒有java這么多的調用。如果說要給一個python做一個一句話的評價的話,完全就是“簡單英語的組成代碼的語句”。
在學會python語言的同時,也學會了pycharm軟件,還有碼云push的方法。雖然這學期我們所學python只是一些皮毛,甚至說最后幾節課的知識點,像爬蟲,數據庫,socket套接字用的都還不是非常的熟練,“師傅領進門,修行靠個人”,今后無論生活還是學習中,還要不斷的去運用python,才能更好的掌握它。
意見和建議:這學期盡管上了整個學期的線上課,我的感覺卻是和線下課沒什么區別,整體的感覺還是很好的。如果說一定要提一些什么建議的話,我覺得如果能上課講的語速能在慢一點可能會好一些,有幾節課講的太快,筆記也來不及做。

浙公網安備 33010602011771號