Python實(shí)例題之pygame開發(fā)打飛機(jī)游戲?qū)嵗a
題目
pygame開發(fā)打飛機(jī)游戲
pygame-aircraft-game使用 Pygame 開發(fā)的打飛機(jī)游戲腳本
import pygame import random # 初始化 Pygame pygame.init() # 定義屏幕尺寸 SCREEN_WIDTH = 480 SCREEN_HEIGHT = 650 # 創(chuàng)建屏幕對(duì)象 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("打飛機(jī)游戲") # 定義顏色 WHITE = (255, 255, 255) # 加載玩家飛機(jī)圖片 player_img = pygame.image.load("player.png") # 請(qǐng)確保該圖片存在 player_rect = player_img.get_rect() player_rect.centerx = SCREEN_WIDTH // 2 player_rect.bottom = SCREEN_HEIGHT - 10 # 玩家飛機(jī)移動(dòng)速度 player_speed = 5 # 加載敵機(jī)圖片 enemy_img = pygame.image.load("enemy.png") # 請(qǐng)確保該圖片存在 enemies = [] # 敵機(jī)生成間隔和計(jì)時(shí)器 ENEMY_SPAWN_INTERVAL = 1000 enemy_spawn_timer = 0 # 加載子彈圖片 bullet_img = pygame.image.load("bullet.png") # 請(qǐng)確保該圖片存在 bullets = [] # 子彈移動(dòng)速度 bullet_speed = 8 # 游戲主循環(huán) running = True clock = pygame.time.Clock() while running: # 控制游戲幀率 clock.tick(60) # 處理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: # 發(fā)射子彈 bullet_rect = bullet_img.get_rect() bullet_rect.centerx = player_rect.centerx bullet_rect.top = player_rect.top bullets.append(bullet_rect) # 獲取按鍵狀態(tài) keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and player_rect.left > 0: player_rect.x -= player_speed if keys[pygame.K_RIGHT] and player_rect.right < SCREEN_WIDTH: player_rect.x += player_speed if keys[pygame.K_UP] and player_rect.top > 0: player_rect.y -= player_speed if keys[pygame.K_DOWN] and player_rect.bottom < SCREEN_HEIGHT: player_rect.y += player_speed # 生成敵機(jī) enemy_spawn_timer += clock.get_time() if enemy_spawn_timer > ENEMY_SPAWN_INTERVAL: enemy_rect = enemy_img.get_rect() enemy_rect.x = random.randint(0, SCREEN_WIDTH - enemy_rect.width) enemy_rect.y = -enemy_rect.height enemies.append(enemy_rect) enemy_spawn_timer = 0 # 移動(dòng)敵機(jī) for enemy in enemies[:]: enemy.y += 3 if enemy.top > SCREEN_HEIGHT: enemies.remove(enemy) # 移動(dòng)子彈 for bullet in bullets[:]: bullet.y -= bullet_speed if bullet.bottom < 0: bullets.remove(bullet) # 檢測(cè)子彈和敵機(jī)的碰撞 for bullet in bullets[:]: for enemy in enemies[:]: if bullet.colliderect(enemy): bullets.remove(bullet) enemies.remove(enemy) # 繪制背景 screen.fill(WHITE) # 繪制玩家飛機(jī) screen.blit(player_img, player_rect) # 繪制敵機(jī) for enemy in enemies: screen.blit(enemy_img, enemy) # 繪制子彈 for bullet in bullets: screen.blit(bullet_img, bullet) # 更新顯示 pygame.display.flip() # 退出 Pygame pygame.quit()
代碼解釋
初始化部分:
- 初始化
pygame
庫,設(shè)置屏幕尺寸和標(biāo)題。 - 加載玩家飛機(jī)、敵機(jī)和子彈的圖片,并設(shè)置玩家飛機(jī)的初始位置。
- 定義敵機(jī)生成間隔和計(jì)時(shí)器,以及子彈的移動(dòng)速度。
- 初始化
游戲主循環(huán):
- 控制游戲幀率為 60 幀每秒。
- 處理事件,包括關(guān)閉窗口事件和發(fā)射子彈事件。
- 根據(jù)按鍵狀態(tài)移動(dòng)玩家飛機(jī)。
- 按一定間隔生成敵機(jī),并移動(dòng)敵機(jī)和子彈。
- 檢測(cè)子彈和敵機(jī)的碰撞,若碰撞則移除對(duì)應(yīng)的子彈和敵機(jī)。
- 繪制背景、玩家飛機(jī)、敵機(jī)和子彈,并更新顯示。
退出部分:
- 當(dāng)用戶關(guān)閉窗口時(shí),退出
pygame
。
- 當(dāng)用戶關(guān)閉窗口時(shí),退出
運(yùn)行思路
- 安裝依賴庫:確保已經(jīng)安裝了
pygame
庫,若未安裝,可使用以下命令進(jìn)行安裝:
pip install pygame
- 準(zhǔn)備圖片:準(zhǔn)備好
player.png
、enemy.png
和bullet.png
三張圖片,并將其放在與代碼文件相同的目錄下。 - 運(yùn)行腳本:將上述代碼保存為
aircraft_game.py
文件,在終端中運(yùn)行:
python aircraft_game.py
- 開始游戲:使用上下左右鍵移動(dòng)玩家飛機(jī),按空格鍵發(fā)射子彈,嘗試擊落敵機(jī)。
注意事項(xiàng)
- 請(qǐng)確保圖片文件的路徑和名稱正確,否則會(huì)出現(xiàn)加載圖片失敗的錯(cuò)誤。
- 此代碼只是一個(gè)簡單的示例,你可以根據(jù)需求對(duì)游戲進(jìn)行擴(kuò)展,如添加音效、計(jì)分系統(tǒng)、關(guān)卡設(shè)計(jì)等。
到此這篇關(guān)于Python實(shí)例題之pygame開發(fā)打飛機(jī)游戲的文章就介紹到這了,更多相關(guān)Python pygame打飛機(jī)游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中的正則表達(dá)式與JSON數(shù)據(jù)交換格式
正則表達(dá)式 是一個(gè)特殊的字符序列,一個(gè)字符串是否與我們所設(shè)定的這樣的字符序列,相匹配快速檢索文本、實(shí)現(xiàn)替換文本的操作。這篇文章主要介紹了Python中的正則表達(dá)式與JSON ,需要的朋友可以參考下2019-07-07python實(shí)現(xiàn)三階魔方還原的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)三階魔方還原的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python自動(dòng)化腳本安裝指定版本python環(huán)境詳解
這篇文章主要為大家詳細(xì)介紹了python自動(dòng)化腳本安裝指定版本python環(huán)境的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09基于Python 中函數(shù)的 收集參數(shù) 機(jī)制
今天小編就為大家分享一篇基于Python 中函數(shù)的 收集參數(shù) 機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12python中str、bytes、十六進(jìn)制字符串之間的相互轉(zhuǎn)換方法
這篇文章主要介紹了在Python中字符串(str)、字節(jié)序列(bytes)以及十六進(jìn)制字符串之間的轉(zhuǎn)換方法,包括如何使用.encode()、.decode()、bytes.fromhex()和.hex()方法進(jìn)行轉(zhuǎn)換,需要的朋友可以參考下2025-03-03Python安全獲取域管理員權(quán)限幾種方式操作示例
在不考慮直接攻擊域控的情況下,如何快速獲取域管理員權(quán)限呢?本文分享幾種常見的獲取域管理員權(quán)限的方式,有需要的朋友可以借鑒參考下2021-10-10