Python實戰(zhàn)之外星人入侵游戲示例代碼
0.前言
最近學習的python第一個項目實戰(zhàn),《外星人入侵》,成功實現所有功能,給大家提供源代碼
環(huán)境安裝:python 3.7+ pygame
安裝 pygame
pip install -- user pygame
或者
conda install --user pygame
1.效果展示
先展示效果,消滅外星人,有三條命,按Q是退出全屏,空格鍵是子彈,按下play鍵開始游戲,擊敗外星人飛船會有積分加,三條命之后需要點擊play才能再次啟動
2.實現代碼
外星人入侵小游戲文件排版如下,先創(chuàng)建這幾個.py文件
2.1 image
2.2 alien_invasion.py
import sys from time import sleep import pygame from settings import Settings from ship import Ship from bullet import Bullet from alien import Alien from game_stats import GameStats from button import Button from scoreboard import Scoreboard class AlienInvasion: ? ? '''管理游戲資源和行為的類''' ? ? def __init__(self): ? ? ? ? '''初始化游戲并創(chuàng)建游戲資源''' ? ? ? ? pygame.init() ? ? ? ? self.settings = Settings() ? ? ? ? self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN) ? ? ? ? self.settings.screen_width = self.screen.get_rect().width ? ? ? ? self.settings.screen_height = self.screen.get_rect().height ? ? ? ? pygame.display.set_caption('Alien Invasion') ? ? ? ? '''創(chuàng)建存儲游戲統(tǒng)計信息的實例''' ? ? ? ? '''并創(chuàng)建記分牌''' ? ? ? ? '''創(chuàng)建一個用于存儲游戲統(tǒng)計信息的實例''' ? ? ? ? self.stats =GameStats(self) ? ? ? ? self.sb = Scoreboard(self) ? ? ? ? self.ship =Ship(self) ? ? ? ? self.bullets = pygame.sprite.Group() ? ? ? ? self.aliens = pygame.sprite.Group() ? ? ? ? self._create_fleet() ? ? ? ? '''創(chuàng)建play按鈕''' ? ? ? ? self.play_button = Button(self,"Play") ? ? ? ? # '''設置背景色''' ? ? ? ? # self.bg_color = (self.settings.bg_color) cuowu ? ? def _ship_hit(self): ? ? ? ? '''響應飛船被外星人撞到''' ? ? ? ? if self.stats.ships_left >0: ? ? ? ? ? ? '''將ship_left減1并更新記分牌''' ? ? ? ? ? ? self.stats.ships_left -= 1 ? ? ? ? ? ? self.sb.prep_ships() ? ? ? ? ? ? '''清除余下的外星人和子彈''' ? ? ? ? ? ? self.aliens.empty() ? ? ? ? ? ? self.bullets.empty() ? ? ? ? ? ? '''創(chuàng)建一群新的外星人,并將飛船放到屏幕底端的中央''' ? ? ? ? ? ? self._create_fleet() ? ? ? ? ? ? self.ship.center_ship() ? ? ? ? ? ? '''暫停''' ? ? ? ? ? ? sleep(0.5) ? ? ? ? else: ? ? ? ? ? ? self.stats.game_active = False ? ? ? ? ? ? pygame.mouse.set_visible(True) ? ? def _create_fleet(self): ? ? ? ? '''創(chuàng)建外星人群''' ? ? ? ? '''創(chuàng)建一個外星人并計算一行可容納多少個外星人''' ? ? ? ? '''外星人的間距為外星人寬度''' ? ? ? ? alien = Alien(self) ? ? ? ? alien_width, alien_height = alien.rect.size ? ? ? ? available_space_x = self.settings.screen_width - (2 * alien_width) ? ? ? ? number_aliens_x = available_space_x // (2 * alien_width ) ? ? ? ? '''計算屏幕可容納多少行外星人''' ? ? ? ? ship_height = self.ship.rect.height ? ? ? ? available_space_y = (self.settings.screen_height - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3 * alien_height) - ship_height) ? ? ? ? number_rows = available_space_y // (2 * alien_height) ? ? ? ? '''創(chuàng)建外星人群''' ? ? ? ? for row_number in range(number_rows): ? ? ? ? ? ? '''創(chuàng)建第一行外星人''' ? ? ? ? ? ? for alien_number in range(number_aliens_x): ? ? ? ? ? ? ? ? self._create_alien(alien_number,row_number) ? ? def _create_alien(self,alien_number,row_number): ? ? ? ? '''創(chuàng)建一個外星人并將其加入當前行''' ? ? ? ? alien = Alien(self) ? ? ? ? alien_width, alien_height =alien.rect.size ? ? ? ? alien.x = alien_width + 2 * alien_width * alien_number ? ? ? ? alien.rect.x = alien.x ? ? ? ? alien.rect.y =alien.rect.height + 2 * alien.rect.height * row_number ? ? ? ? self.aliens.add(alien) ? ? def run_game(self): ? ? ? ? '''開始游戲的主循環(huán)''' ? ? ? ? while True: ? ? ? ? ? ? '''監(jiān)視鍵盤和鼠標事件''' ? ? ? ? ? ? self._check_events() ? ? ? ? ? ? if self.stats.game_active: ? ? ? ? ? ? ? ? '''調用飛船的方法''' ? ? ? ? ? ? ? ? self.ship.update() ? ? ? ? ? ? ? ? '''子彈更新''' ? ? ? ? ? ? ? ? self._update_bullets() ? ? ? ? ? ? ? ? '''讓外星人移動''' ? ? ? ? ? ? ? ? self._update_aliens() #suojin+weizhi ? ? ? ? ? ? '''每次循環(huán)時都會重繪屏幕''' ? ? ? ? ? ? self._update_screen() ? ? def _check_fleet_edges(self): ? ? ? ? '''有外星人到達邊緣時采取相應的措施''' ? ? ? ? for alien in self.aliens.sprites(): ? ? ? ? ? ? if alien.check_edges(): ? ? ? ? ? ? ? ? self._change_fleet_direction() ? ? ? ? ? ? ? ? break ? ? def _change_fleet_direction(self): ? ? ? ? '''將整群人外星人下一,并改變它們的方向''' ? ? ? ? for alien in self.aliens.sprites(): ? ? ? ? ? ? alien.rect.y += self.settings.fleet_drop_speed ? ? ? ? self.settings.fleet_direction *= -1 ? ? def _update_aliens(self): ? ? ? ? '''檢測是否有外星人位于屏幕邊緣,更新外星人群中所有外星人的位置''' ? ? ? ? self._check_fleet_edges() ? ? ? ? self.aliens.update() ? ? ? ? '''檢測外星人和飛船之間的碰撞''' ? ? ? ? if pygame.sprite.spritecollideany(self.ship, self.aliens): ? ? ? ? ? ? self._ship_hit() ? ? ? ? '''檢查是否有外星人到達了屏幕底端''' ? ? ? ? self._check_aliens_bottom() #suojin ? ? def _check_events(self): ? ? ? ? '''響應按鍵和鼠標事件''' ? ? ? ? for event in pygame.event.get(): ? ? ? ? ? ? if event.type == pygame.QUIT: ? ? ? ? ? ? ? ? sys.exit() ? ? ? ? ? ? elif event.type == pygame.KEYDOWN: ? ? ? ? ? ? ? ? self._check_keydown_events(event) ? ? ? ? ? ? elif event.type == pygame.KEYUP: ? ? ? ? ? ? ? ? self._check_keyup_events(event) ? ? ? ? ? ? elif event.type == pygame.MOUSEBUTTONDOWN: ? ? ? ? ? ? ? ? mouse_pos = pygame.mouse.get_pos() ? ? ? ? ? ? ? ? self._check_play_button(mouse_pos) ? ? def _check_play_button(self,mouse_pos): ? ? ? ? '''在玩家單機play按鈕時開始新游戲''' ? ? ? ? button_clicked = self.play_button.rect.collidepoint(mouse_pos) ? ? ? ? if button_clicked and not self.stats.game_active: ? ? ? ? ? ? '''重置游戲設置''' ? ? ? ? ? ? self.settings.initialize_dynamic_settings() ? ? ? ? ? ? '''重置游戲統(tǒng)計信息''' ? ? ? ? ? ? self.stats.reset_stats() ? ? ? ? ? ? self.stats.game_active = True ? ? ? ? ? ? self.sb.prep_score() ? ? ? ? ? ? self.sb.prep_level() ? ? ? ? ? ? self.sb.prep_ships() ? ? ? ? ? ? '''清空余下的外星人和子彈''' ? ? ? ? ? ? self.aliens.empty() ? ? ? ? ? ? self.bullets.empty() ? ? ? ? ? ? '''創(chuàng)建一群新的外星人并讓飛船居中''' ? ? ? ? ? ? self._create_fleet() ? ? ? ? ? ? self.ship.center_ship() ? ? ? ? ? ? '''隱藏鼠標光標''' ? ? ? ? ? ? pygame.mouse.set_visible(False) ? ? def _check_aliens_bottom(self): ? ? ? ? '''檢查是否有外星人到達了屏幕底端''' ? ? ? ? screen_rect =self.screen.get_rect() ? ? ? ? for alien in self.aliens.sprites(): ? ? ? ? ? ? if alien.rect.bottom >= screen_rect.bottom: ? ? ? ? ? ? ? ? '''像飛船被撞一樣處理''' ? ? ? ? ? ? ? ? self._ship_hit() ? ? ? ? ? ? ? ? break ? ? def _check_keydown_events(self,event): ? ? ? ? '''響應按鍵''' ? ? ? ? if event.key == pygame.K_RIGHT: ? ? ? ? ? ? '''向右移動飛船''' ? ? ? ? ? ? self.ship.moving_right = True ? ? ? ? elif event.key == pygame.K_LEFT: ? ? ? ? ? ? '''向左移動飛船''' ? ? ? ? ? ? self.ship.moving_left = True ? ? ? ? elif event.key == pygame.K_q: ? ? ? ? ? ? sys.exit() ? ? ? ? elif event.key == pygame.K_SPACE: ? ? ? ? ? ? self._fire_bullet() ? ? def _check_keyup_events(self,event): ? ? ? ? '''響應松開''' ? ? ? ? if event.key == pygame.K_RIGHT: ? ? ? ? ? ? self.ship.moving_right = False ? ? ? ? elif event.key == pygame.K_LEFT: ? ? ? ? ? ? self.ship.moving_left = False ? ? def _fire_bullet(self): ? ? ? ? '''創(chuàng)建一顆子彈,并將其加入編組bullets中''' ? ? ? ? if len(self.bullets) < self.settings.bullets_allowed: ? ? ? ? ? ? new_bullet = Bullet(self) ? ? ? ? ? ? self.bullets.add(new_bullet) ? ? def _update_bullets(self): ? ? ? ? '''更新子彈的位置并刪除消失的子彈''' ? ? ? ? '''更新子彈的位置''' ? ? ? ? self.bullets.update() ? ? ? ? '''刪除消失的子彈''' ? ? ? ? for bullet in self.bullets.copy(): ? ? ? ? ? ? if bullet.rect.bottom <= 0: ? ? ? ? ? ? ? ? self.bullets.remove(bullet) ? ? ? ? self._check_bullet_alien_collisions() ? ? def _check_bullet_alien_collisions(self): ? ? ? ? '''檢查是否有子彈擊中了外星人 ? ? ? ? 如果是,就刪除相應的子彈和外星人''' ? ? ? ? collisions = pygame.sprite.groupcollide(self.bullets, self.aliens, True,True) ? ? ? ? if collisions: ? ? ? ? ? ? for aliens in collisions.values(): ? ? ? ? ? ? ? ? self.stats.score += self.settings.alien_points * len(aliens) ? ? ? ? ? ? self.sb.prep_score() ? ? ? ? ? ? self.sb.check_high_score() ? ? ? ? if not self.aliens: ? ? ? ? ? ? '''刪除現有的子彈并新建一群外星人''' ? ? ? ? ? ? self.bullets.empty() ? ? ? ? ? ? self._create_fleet() ? ? ? ? ? ? self.settings.increase_speed() ? ? ? ? ? ? '''提高等級''' ? ? ? ? ? ? self.stats.level += 1 ? ? ? ? ? ? self.sb.prep_level() ? ? def _update_screen(self): ? ? ? ? '''更新屏幕上的圖像,并切換到新屏幕''' ? ? ? ? self.screen.fill(self.settings.bg_color)#loule settings. ? ? ? ? self.ship.blitme() ? ? ? ? for bullet in self.bullets.sprites(): ? ? ? ? ? ? bullet.draw_bullet() ? ? ? ? self.aliens.draw(self.screen) ? ? ? ? '''顯示得分''' ? ? ? ? self.sb.show_score() ? ? ? ? '''如果游戲處于非活動狀態(tài),就繪制Play按鈕''' ? ? ? ? if not self.stats.game_active: ? ? ? ? ? ? self.play_button.draw_button() ? ? ? ? '''讓最近繪制的屏幕可見''' ? ? ? ? pygame.display.flip() if __name__ == "__main__": ? ? '''創(chuàng)建游戲實例并運行游戲''' ? ? ai = AlienInvasion() ? ? ai.run_game()
2.3 alien.py
import pygame from pygame.sprite import Sprite class Alien(Sprite): ? ? '''表示單個外星人的類''' ? ? def __init__(self,ai_game): ? ? ? ? '''初始化外星人并設置其起始位置''' ? ? ? ? super().__init__() ? ? ? ? self.screen = ai_game.screen ? ? ? ? self.settings = ai_game.settings ? ? ? ? '''加載外星人圖像并設置其rect屬性''' ? ? ? ? self.image = pygame.image.load('image/alien.bmp') ? ? ? ? self.rect =self.image.get_rect() ? ? ? ? '''每個外星人最初都在屏幕左下角附近''' ? ? ? ? self.rect.x = self.rect.width ? ? ? ? self.rect.y = self.rect.height ? ? ? ? '''存儲外星人的精確水平位置''' ? ? ? ? self.x = float(self.rect.x) ? ? def check_edges(self): ? ? ? ? '''如果外星人位于屏幕邊緣,就返回True''' ? ? ? ? screen_rect = self.screen.get_rect() ? ? ? ? if self.rect.right >= screen_rect.right or self.rect.left <= 0: ? ? ? ? ? ? return True ? ? def update(self): ? ? ? ? '''向左或者向右移動外星人''' ? ? ? ? self.x += (self.settings.alien_speed * self.settings.fleet_direction) ? ? ? ? # self.x += self.settings.alien_speed向右移動外星人 ? ? ? ? self.rect.x = self.x
2.4 bullet.py
import pygame from pygame.sprite import Sprite class Bullet(Sprite): ? ? '''管理飛船所發(fā)射子彈的類''' ? ? def __init__(self,ai_game): ? ? ? ? '''在飛船當前位置創(chuàng)建一個子彈對象''' ? ? ? ? super().__init__() ? ? ? ? self.screen = ai_game.screen ? ? ? ? self.settings = ai_game.settings ? ? ? ? self.color =self.settings.bullet_color ? ? ? ? '''在(0,0)處創(chuàng)建一個表示子彈的矩形,在設置正確的位置''' ? ? ? ? self.rect =pygame.Rect(0,0,self.settings.bullet_width, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?self.settings.bullet_height) ? ? ? ? self.rect.midtop =ai_game.ship.rect.midtop ? ? ? ? '''存儲用小數表示子彈位置''' ? ? ? ? self.y =float(self.rect.y) ? ? def update(self): ? ? ? ? '''向上移動子彈''' ? ? ? ? '''更新表示子彈位置的小數值''' ? ? ? ? self.y -= self.settings.bullet_speed ? ? ? ? '''更新表示子彈的rect的位置''' ? ? ? ? self.rect.y = self.y ? ? def draw_bullet(self): ? ? ? ? '''在屏幕上繪制子彈''' ? ? ? ? pygame.draw.rect(self.screen, self.color, self.rect)
2.5 button.py
import pygame.font class Button: ? ? def __init__(self,ai_game,msg): ? ? ? ? '''初始化按鈕的屬性''' ? ? ? ? self.screen = ai_game.screen ? ? ? ? self.screen_rect = self.screen.get_rect() ? ? ? ? '''設置按鈕的尺寸和其他屬性''' ? ? ? ? self.width, self.height = 200,50 ? ? ? ? self.button_color = (0,255,0) ? ? ? ? self.text_color =(255,255,255) ? ? ? ? self.font = pygame.font.SysFont(None,48) ? ? ? ? '''創(chuàng)建按鈕的rect對象,并使其居中''' ? ? ? ? self.rect = pygame.Rect(0,0,self.width,self.height) ? ? ? ? self.rect.center = self.screen_rect.center ? ? ? ? '''按鈕的標簽只需要創(chuàng)建一次''' ? ? ? ? self._prep_msg(msg) ? ? def _prep_msg(self,msg): ? ? ? ? '''將msg渲染為圖像,并使其在按鈕上居中''' ? ? ? ? self.msg_image = self.font.render(msg,True,self.text_color,self.button_color) ? ? ? ? self.msg_image_rect = self.msg_image.get_rect() ? ? ? ? self.msg_image_rect.center = self.rect.center ? ? def draw_button(self): ? ? ? ? '''繪制一個用顏色填充的按鈕,再繪制文本''' ? ? ? ? self.screen.fill(self.button_color, self.rect) ? ? ? ? self.screen.blit(self.msg_image,self.msg_image_rect)
2.6 game_stats.py
class GameStats: ? ? '''跟蹤游戲的統(tǒng)計信息''' ? ? def __init__(self,ai_game): ? ? ? ? '''初始化統(tǒng)計信息''' ? ? ? ? self.settings = ai_game.settings ? ? ? ? self.reset_stats() ? ? ? ? '''游戲剛啟動時處于活動狀態(tài)''' ? ? ? ? self.game_active = False ? ? ? ? '''任何情況下都不應該重置最高得分''' ? ? ? ? self.high_score = 0 ? ? def reset_stats(self): ? ? ? ? '''初始化在游戲運行期間可能變化的統(tǒng)計信息''' ? ? ? ? self.ships_left = self.settings.ship_limit ? ? ? ? self.score = 0 ? ? ? ? self.level = 1
2.7 scoreboarf.py
import pygame.font from pygame.sprite import Group from ship import Ship class Scoreboard: ? ? '''顯示得分信息的類''' ? ? def __init__(self,ai_game): ? ? ? ? '''初始化顯示得分涉及的屬性''' ? ? ? ? self.ai_game = ai_game ? ? ? ? self.screen = ai_game.screen ? ? ? ? self.screen_rect = self.screen.get_rect() ? ? ? ? self.settings = ai_game.settings ? ? ? ? self.stats = ai_game.stats ? ? ? ? '''顯示得分信息時使用的字體設置''' ? ? ? ? self.text_color = ?(30,30,30) ? ? ? ? self.font = pygame.font.SysFont(None,48) ? ? ? ? '''準備包含最高得分和當前得分的圖像''' ? ? ? ? self.prep_score() ? ? ? ? self.prep_ships() ? ? ? ? self.prep_high_score() ? ? ? ? self.prep_level()#cuowu ? ? def prep_ships(self): ? ? ? ? '''顯示還剩下多少艘飛船''' ? ? ? ? self.ships = Group() ? ? ? ? for ship_number in range(self.stats.ships_left): #cuowu ? ? ? ? ? ? ship =Ship(self.ai_game) ? ? ? ? ? ? ship.rect.x = 10 + ship_number * ship.rect.width ? ? ? ? ? ? ship.rect.y = 10 ? ? ? ? ? ? self.ships.add(ship) #cuowu ? ? def prep_high_score(self): ? ? ? ? '''將最高得分轉換為渲染的圖像''' ? ? ? ? high_score =round(self.stats.high_score, -1) ? ? ? ? high_score_str = "{:,}".format(high_score) ? ? ? ? self.high_score_image = self.font.render(high_score_str,True, ? ? ? ? ? ? ? ? ? ? self.text_color,self.settings.bg_color) ? ? ? ? '''將最高得分放在屏幕頂部中央''' ? ? ? ? self.high_score_rect = self.high_score_image.get_rect() ? ? ? ? self.high_score_rect.centerx = self.screen_rect.centerx ? ? ? ? self.high_score_rect.top = self.score_rect.top ? ? def prep_score(self): ? ? ? ? '''將得分轉換成一副渲染的圖像''' ? ? ? ? rounded_score = round(self.stats.score, -1) ? ? ? ? score_str ="{:,}".format(rounded_score) ? ? ? ? self.score_image =self.font.render(score_str,True, ? ? ? ? ? ? ? ? self.text_color,self.settings.bg_color) ? ? ? ? '''在屏幕右下顯示得分''' ? ? ? ? self.score_rect =self.score_image.get_rect() ? ? ? ? self.score_rect.right = self.screen_rect.right - 20 ? ? ? ? self.score_rect.top = 20 ? ? def show_score(self): ? ? ? ? '''在屏幕上顯示得分和等級和余下的飛船數''' ? ? ? ? self.screen.blit(self.score_image, self.score_rect) ? ? ? ? self.screen.blit(self.high_score_image, self.high_score_rect) ? ? ? ? self.screen.blit(self.level_image, self.level_rect ) ? ? ? ? self.ships.draw(self.screen) ? ? def check_high_score(self): ? ? ? ? '''檢查是否誕生了新的最高得分''' ? ? ? ? if self.stats.score > self.stats.high_score: ? ? ? ? ? ? self.stats.high_score = self.stats.score ? ? ? ? ? ? self.prep_high_score() ? ? def prep_level(self): ? ? ? ? '''將等級轉化為渲染的圖像''' ? ? ? ? level_str = str(self.stats.level) ? ? ? ? self.level_image = self.font.render(level_str,True, ? ? ? ? ? ? ? ? self.text_color, self.settings.bg_color) ? ? ? ? '''將等級放在得分下面''' ? ? ? ? self.level_rect = self.level_image.get_rect() ? ? ? ? self.level_rect.right = self.score_rect.right ? ? ? ? self.level_rect.top = self.score_rect.bottom +10
2.8 settings.py
class Settings: ? ? '''存儲游戲《外星人入侵》中所有設置的類''' ? ? def __init__(self): ? ? ? ? '''初始化游戲的靜態(tài)設置''' ? ? ? ? '''屏幕設置''' ? ? ? ? self.screen_width = 1200 ? ? ? ? self.screen_height =800 ? ? ? ? self.bg_color = (230,230,230) ? ? ? ? self.ship_limit = 3 ? ? ? ? self.bullet_width = 3 ? ? ? ? self.bullet_height = 15 ? ? ? ? self.bullet_color = (60, 60, 60) ? ? ? ? self.bullets_allowed = 3 ?# 設置存儲的最大子彈數為3 ? ? ? ? self.fleet_drop_speed = 10 ? ? ? ? '''加快游戲節(jié)奏的速度''' ? ? ? ? self.speedup_scale = 1.1 ? ? ? ? self.score_scale = 1.5 ? ? ? ? self.initialize_dynamic_settings() ? ? ? ? # '''設置飛船速度''' ? ? ? ? # self.ship_speed = 1.5 ? ? ? ? # '''子彈設置''' ? ? ? ? # self.bullet_speed = 1.5 ? ? ? ? # self.alien_speed = 1.0 ? ? ? ? # '''fleet_direction為1表示向有意,-1表示向左移''' ? ? ? ? # self.fleet_direction = 1 cuowu ? ? def initialize_dynamic_settings(self): ? ? ? ? '''初始化隨游戲進行而變化的設置''' ? ? ? ? self.ship_speed = 1.5 ? ? ? ? self.bullet_speed =3.0 ? ? ? ? self.alien_speed = 1.0 ? ? ? ? '''fleet_direction為1表示向右,為-1表示向左''' ? ? ? ? self.fleet_direction = 1 ? ? ? ? # '''計分''' ? ? ? ? self.alien_points = 50 ? ? def increase_speed(self): ? ? ? ? '''提高速度設置和外星人分數''' ? ? ? ? self.ship_speed *= self.speedup_scale ? ? ? ? self.bullet_speed *= self.speedup_scale ? ? ? ? self.alien_speed *= self.speedup_scale ? ? ? ? self.alien_points = int(self.alien_points * self.score_scale) ? ? ? ? # print(self.alien_points) cuowu
2.9 ship.py
import pygame from pygame.sprite import Sprite class Ship(Sprite): ? ? '''管理飛船的類''' ? ? def __init__(self,ai_game): ? ? ? ? '''初始化飛船并設置其初始化位置''' ? ? ? ? super().__init__() ? ? ? ? self.screen = ai_game.screen ? ? ? ? '''設置飛船速度''' ? ? ? ? self.settings = ai_game.settings ? ? ? ? self.screen_rect = ai_game.screen.get_rect() ? ? ? ? '''加載飛船圖像并獲取其外接矩陣''' ? ? ? ? self.image = pygame.image.load('image/ship.bmp') ? ? ? ? self.rect = self.image.get_rect() ? ? ? ? '''對于每艘新飛船,都將其放在屏幕底部的中央''' ? ? ? ? self.rect.midbottom = self.screen_rect.midbottom ? ? ? ? '''在飛船的屬性x中存儲小數值''' ? ? ? ? self.x = float(self.rect.x) ? ? ? ? '''移動標志''' ? ? ? ? self.moving_right = False ? ? ? ? self.moving_left = False ? ? def update(self): ? ? ? ? '''根據移動標志調整飛船的位置''' ? ? ? ? '''更新飛船而不是rect對象的值''' ? ? ? ? if self.moving_right and self.rect.right < self.screen_rect.right: ? ? ? ? ? ? self.x += self.settings.ship_speed ? ? ? ? if self.moving_left and self.rect.left > 0: ? ? ? ? ? ? self.x -= self.settings.ship_speed ? ? ? ? '''根據self.x更新rect對象''' ? ? ? ? self.rect.x = self.x ? ? def blitme(self): ? ? ? ? '''在指定位置繪制飛船''' ? ? ? ? self.screen.blit(self.image, self.rect) ? ? def center_ship(self): ? ? ? ? '''讓飛船在屏幕底端劇中''' ? ? ? ? self.rect.midbottom = self.screen_rect.midbottom ? ? ? ? self.x = float(self.rect.x)
以上就是Python實戰(zhàn)之外星人入侵游戲示例代碼的詳細內容,更多關于Python外星人入侵游戲的資料請關注腳本之家其它相關文章!
相關文章
Pycharm中配置遠程Docker運行環(huán)境的教程圖解
這篇文章主要介紹了Pycharm中配置遠程Docker運行環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Python的Django中將文件上傳至七牛云存儲的代碼分享
七牛云存儲可以幫助服務器轉存圖片等數據,類似于Dropbox等存儲服務,這里就帶給大家Python的Django中將文件上傳至七牛云存儲的代碼分享,需要的朋友可以參考下2016-06-06虛擬環(huán)境及venv和virtualenv的區(qū)別說明
這篇文章主要介紹了虛擬環(huán)境及venv和virtualenv的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02