python--从入门到实践--chapter 12 pygame_Alien_Invasion
生活随笔
收集整理的這篇文章主要介紹了
python--从入门到实践--chapter 12 pygame_Alien_Invasion
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 安裝pygame包,把安裝好的包copy一份到pycharm工程目錄下,不然找不到pygame包
抄一遍書上的代碼:
settings.py
class Settings():def __init__(self):self.screen_width = 1200self.screen_height = 800self.bg_color = (255, 255, 255)self.ship_speed_factor = 1.5ship.py
import pygame class Ship():def __init__(self, ai_settings, screen):self.screen = screenself.ai_settings = ai_settingsself.image = pygame.image.load("images/ship.bmp")self.rect = self.image.get_rect() #圖像矩形self.screen_rect = screen.get_rect() #屏幕矩形,左上角原點,右下角如1200,800self.rect.centerx = self.screen_rect.centerx #圖像x中心,在屏幕中心self.rect.bottom = self.screen_rect.bottom #圖像底邊,在屏幕底邊self.center = float(self.rect.centerx) #圖像x中心坐標轉成浮點型,存在center中self.moving_right = Falseself.moving_left = Falsedef update(self):if self.moving_right and self.rect.right < self.screen_rect.right: #限制位置在屏幕內self.center += self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:self.center -= self.ai_settings.ship_speed_factorself.rect.centerx = self.centerdef blitme(self):self.screen.blit(self.image, self.rect) #blit實現動畫效果game_functions.py
import sys import pygame def check_keydown_events(event, ship): #檢測鍵盤按下事件if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Truedef check_keyup_events(event, ship): #檢測鍵盤松開事件if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef check_events(ship):for event in pygame.event.get():if event.type == pygame.QUIT: #退出事件sys.exit()elif event.type == pygame.KEYDOWN: #鍵盤按下事件check_keydown_events(event, ship)elif event.type == pygame.KEYUP: #鍵盤松開事件check_keyup_events(event, ship)def update_screen(ai_settings, screen, ship):screen.fill(ai_settings.bg_color) #屏幕填充背景色ship.blitme() #ship的動畫效果pygame.display.flip() #讓動畫盡可能流暢alien_invasion.py
import sys import pygame from settings import Settings from ship import Ship import game_functions as gf def run_game():pygame.init()ai_settings = Settings() #創建游戲設置screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))pygame.display.set_caption("Alien Invasion") #設置標題ship = Ship(ai_settings, screen) #創建游戲對象while True:gf.check_events(ship) #檢測事件ship.update() #更新ship位置gf.update_screen(ai_settings, screen, ship) #刷新屏幕run_game()
練習題:
1.火箭上下左右移動
2.創建一個程序,顯示一個空屏幕。在事件循環中,每當檢測到 pygame.KEYDOWN 事件時都打印屬性event.key。運行這個程序,并按各種鍵,看看Pygame如何響應
添加子彈模塊后的代碼
settings.py
ship.py 不變
bullet.py
game_functions.py
import sys import pygame from bullet import Bullet def fire_bullet(ai_settings, screen, ship, bullets): #發射子彈if len(bullets) < ai_settings.bullets_allowed: #子彈沒超數量new_bullet = Bullet(ai_settings, screen, ship) #生成新子彈bullets.add(new_bullet) #新子彈加入組 def check_keydown_events(event,ai_settings, screen, ship, bullets): #檢測鍵盤按下事件if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.key == pygame.K_SPACE: #按下空格鍵,發射子彈fire_bullet(ai_settings, screen, ship, bullets)def check_keyup_events(event, ship): #檢測鍵盤松開事件if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef check_events(ai_settings, screen, ship, bullets):for event in pygame.event.get():if event.type == pygame.QUIT: #退出事件sys.exit()elif event.type == pygame.KEYDOWN: #鍵盤按下事件check_keydown_events(event, ai_settings, screen, ship, bullets)elif event.type == pygame.KEYUP: #鍵盤松開事件check_keyup_events(event, ship)def update_screen(ai_settings, screen, ship, bullets):screen.fill(ai_settings.bg_color) #屏幕填充背景色for bullet in bullets.sprites(): #把每個子彈畫在屏幕上bullet.draw_bullet()ship.blitme() #ship的動畫效果pygame.display.flip() #刷新,讓動畫盡可能流暢def update_bullets(bullets):bullets.update() #更新子彈位置for bullet in bullets.copy(): #刪除飛出屏幕的子彈if bullet.rect.bottom <= 0:bullets.remove(bullet)alien_invasion.py
import sys import pygame from settings import Settings from ship import Ship import game_functions as gf from pygame.sprite import Group def run_game():pygame.init()ai_settings = Settings() #創建游戲設置screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))pygame.display.set_caption("Alien Invasion") #設置標題ship = Ship(ai_settings, screen) #創建游戲飛船對象bullets = Group() #創建子彈組while True:gf.check_events(ai_settings, screen, ship, bullets) #檢測事件ship.update() #更新ship位置gf.update_bullets(bullets) #更新子彈位置,刪除飛出去的子彈# print(len(bullets)) #調試時,確認子彈飛出屏幕后被刪除gf.update_screen(ai_settings, screen, ship, bullets) #刷新屏幕run_game()
作業3:更改上述代碼,使之橫向發射子彈
添加 pygame.transform.rotozoom(surface, angle, scale) (縮放和旋轉)
代碼連接 https://github.com/hitskyer/course/tree/master/python/chenmingming/pygame_project/alien_invasion
總結
以上是生活随笔為你收集整理的python--从入门到实践--chapter 12 pygame_Alien_Invasion的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 数据平滑_数据平滑方法的原
- 下一篇: unity python_Unity引擎