《Python遊戲趣味程式設計》 第7章 飛機大戰

2021-10-18 20:49:25 字數 3080 閱讀 6162

7 飛機大戰 python遊戲開發

圖書簡介可以看這裡:

童晶:《python遊戲趣味程式設計》新書上架了

本章我們將編寫乙個飛機大戰的遊戲,滑鼠控制飛機移動、按下滑鼠發射子彈,效果如圖7-1所示。首先我們實現背景迴圈滾動、飛機發射子彈;然後實現敵機的控制與得分顯示、遊戲失敗判斷與處理;最後為遊戲新增音效。

import pgzrun  # 匯入遊戲庫

import random # 匯入隨機庫

width = 480 # 設定視窗的寬度

height = 700 # 設定視窗的高度

title = 'python飛機大戰'

background1 = actor('background') # 匯入背景1

background1.x = 480/2 # 背景1的x座標

background1.y = 852/2 # 背景1的y座標

background2 = actor('background') # 匯入背景2

background2.x = 480/2 # 背景2的x座標

background2.y = -852/2 # 背景2的y座標

bullet = actor('bullet') # 匯入子彈

bullet.x = width/2 # 子彈的x座標

bullet.y = -height # 子彈的y座標,開始不可見

hero = actor('hero') # 匯入玩家飛機

hero.x = width/2 # 設定玩家飛機的x座標

hero.y = height*2/3 # 設定玩家飛機的y座標

enemy = actor('enemy') # 匯入敵機

enemy.x = width/2 # 設定敵機的x座標

enemy.y = 0 # 設定敵機的y座標

score = 0 # 遊戲得分

isloose = false # 遊戲是否失敗,初始不失敗

def draw(): # 繪製模組,每幀重複執行

background1.draw() # 繪製遊戲背景

background2.draw() # 繪製遊戲背景

hero.draw() # 繪製玩家飛機

enemy.draw() # 繪製敵機飛機

bullet.draw() # 繪製子彈

# 下面顯示得分

screen.draw.text("得分: "+str(score), (200, height-50), fontsize=30,

fontname='s', color='black')

if isloose: # 遊戲失敗後輸出資訊

screen.draw.text("遊戲失敗!", (50, height/2), fontsize=90,fontname='s', color='red')

def update(): # 更新模組,每幀重複操作

global score, isloose

if isloose:

return # 如果遊戲失敗,返回,不做下面的操作

# 以下**用於實現背景的迴圈滾動效果

if background1.y > 852/2 + 852:

background1.y = -852/2 # 背景1移動到背景2的正上方

if background2.y > 852/2 + 852:

background2.y = -852/2 # 背景2移動到背景1的正上方

background1.y += 1 # 背景1向下滾動

background2.y += 1 # 背景2向下滾動

if bullet.y > -height:

bullet.y = bullet.y - 10 # 子彈自動向上移動

enemy.y += 3 # 敵機自動下落

if enemy.y > height: # 敵機落到畫面底部

enemy.y = 0 # 敵機從上面重新出現

enemy.x = random.randint(50, width-50) # 敵機水平位置隨機

if bullet.colliderect(enemy): # 子彈與敵機發生碰撞後

enemy.y = 0 # 敵機從上面重新出現

enemy.x = random.randint(0, width) # 敵機水平位置隨機

score = score + 1 # 得分加1

bullet.y = -height # 隱藏子彈

if hero.colliderect(enemy): # 玩家飛機和敵機發生碰撞

isloose = true # 遊戲失敗

hero.image = 'hero_blowup' # 更換遊戲玩家的為**

def on_mouse_move(pos, rel, buttons): # 當滑鼠移動時執行

if isloose:

return # 如果遊戲失敗,返回,不做下面的操作

hero.x = pos[0] # 玩家飛機的x座標設為滑鼠的x座標

hero.y = pos[1] # 玩家飛機的y座標設為滑鼠的y座標

def on_mouse_down(): # 當滑鼠鍵按下時

if isloose:

return # 如果遊戲失敗,返回,不做下面的操作

bullet.x = hero.x # 把子彈位置設為玩家飛機的正上方

bullet.y = hero.y - 70

pgzrun.go() # 開始執行遊戲

聯想filez

2. 能否進一步實現多架敵機的同時出現;

3. 能否為玩家飛機新增生命值,每撞擊一次生命值減1,每得分超過10分,生命值加1;

4. 嘗試實現橫版的飛機遊戲。

讀者也可以參考本章的開發思路,嘗試設計並分步驟實現坦克大戰、賽車等小遊戲。

PYTHON核心程式設計第7章第6題

這是乙個投資系統,必須值為 顯示器 所持有的 購買 當前價位 company numbers pay price now price 富博國際 1000 5 5.1 浩博國際 200 1 0.8 利已 100 1 1.3 沙巴 30 20 18 資料結構 其他可選 收益率52周最高指數 最低指數 使...

趣味程式設計 搶n遊戲

這是中國民間的乙個遊戲。兩人從1開始輪流報數,每人每次可報乙個數或兩個連續的數,誰先報到n n 1000000001 誰就為勝方。現要你判斷是先手勝還是後手勝。有多組資料,每一行只有乙個n 如果是先手勝,輸出no,否則輸出yes no 一 倒推法 搶30是我國民間的乙個兩人遊戲,具有很強的對抗性和娛...

python程式設計 第6章

學習django book的可以參照下面的資訊。在mysite下面建立完books後,繼續按著例子走,出現以下問題 pytho manage.py validate error one or more models did not validate books.author headshot to ...