Alien_invasion-Game
- 用 Python 编写的外星人入侵小游戏
- 来源 《Python编程 从入门到实践》项目1 外星人入侵
操作方法
- 按左右键移动飞船
- 按空格键射击
- 按Q键退出
附上代码
-
主程序
import sys import pygame from setting import Settings from ship import Ship from alien import Alien import game_function as gf from pygame.sprite import Group from game_stats import GameStats from button import Button from scoreboard import Scoreboard def run_game(): ai_settings = Settings()#创建一个实例 # 初始化游戏并创建一个屏幕对象 pygame.init() screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) programIcon = pygame.image.load("image\icon.bmp") pygame.display.set_icon(programIcon) pygame.display.set_caption("外星人入侵") #创建一艘飞船 ship = Ship(ai_settings , screen) #创建一个用于存储子弹的编组 bullets = Group() #创建一个外星人 #alien = Alien(ai_settings,screen) #创建外星人群 aliens = Group() gf.create_fleet(ai_settings,screen,ship,aliens) #创建一个用于存储游戏信息的实例 stats = GameStats(ai_settings) #创建记分牌 sb = Scoreboard(ai_settings,screen,stats) # 创建play按钮 play_button = Button(ai_settings,screen,'Play') #开始游戏的主循环 while True: gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets) gf.update_aliens(ai_settings,stats,sb,screen,ship,aliens,bullets) gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button) run_game()
-
飞船类:设置飞船的相关参数
import pygame from pygame.sprite import Sprite class Ship(Sprite): def __init__(self,ai_settings,screen): '''初始化飞船并设置其初始位置''' super(Ship,self).__init__() # Sprite.__init__(self) self.screen = screen self.ai_settings = ai_settings # 加载飞船图像并获得其外接矩形 self.image = pygame.image.load("image\ship.bmp") self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() # 将每艘飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom #在飞船属性center中存储小数 self.center = float(self.rect.centerx) # 移动标志 self.moving_right = False self.moving_left = False def update(self): '''根据移动标志调整飞船的位置''' #更新飞船的center值,而不是rect if self.moving_right and self.rect.right < self.screen_rect.right: self.rect.centerx += self.ai_settings.ship_speed_factor if self.moving_left and self.rect.left > 0: self.rect.centerx -= self.ai_settings.ship_speed_factor def blitme(self): '''在指定位置绘制飞船''' self.screen.blit(self.image,self.rect) def center_ship(self): '''让飞船在屏幕居中''' self.center = self.screen_rect.centerx
-
外星人类
import pygame from pygame.sprite import Sprite class Alien(Sprite): '''表示单个外星人的类''' def __init__(self,ai_settings,screen): '''初始化外星人并设置其起始位置''' Sprite.__init__(self) self.screen = screen self.ai_settings = ai_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 blitme(self): '''在指定位置上绘制外星人''' self.screen.blit(self.image,self.rect) def check_edges(self): '''如果外星人位于屏幕边缘,就返回True''' screen_rect = self.screen.