一、游戏介绍
1.游戏规则:左右键移动,空格键射击
2.游戏代码主要由一个主运行程序(alien_invasion.py)和八个模块组成:
1>主函数alinen_invasion.py
2>飞船函数ship.py
3>外星人模块alien.py
4>设置模块Setting.py
5>系统功能的模块game_function.py
6>子弹模块biu.py
7>系统信息的模块game_state.py
8>按钮模块button.py
9>计分板模块scoreboard.py
二、游戏环境搭建
- 本练习使用了python3.5版本
- pygame 模块安装,打开命令窗口,输入命令安装:
python -m pip install pygame - 游戏图片下载:
URl:https://download.csdn.net/download/qq_35871505/18992871
三、游戏代码如下:
1.主函数alinen_invasion.py
# __author__ = 'lzc'
# -*- coding: UTF-8 -*-
import sys
import pygame
from setting import Settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
from alien import Alien
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard
import time
def run_game():
#初始化游戏并创建一个屏幕对象
pygame.init()
#引用settings类
ai_settings=Settings()
#屏幕的大小
screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("飞机大战")
#创建按钮
play_button = Button(ai_settings,screen,'PLAY')
#创建飞船
ship = Ship(ai_settings,screen)
#创建存储子弹的编组
bullets=Group()
#创建外星人群
aliens=Group()
gf.create_fleet(ai_settings,screen,ship,aliens)
#创建一个存储游戏统计信息的实例
stats=GameStats(ai_settings)
#创建记分牌
sb =Scoreboard(ai_settings,screen,stats)
#开始游戏的主循环
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,screen,stats,sb,ship,aliens,bullets)
#更新屏幕
gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)
#time.sleep(0.001)
run_game()
2.飞船函数ship.py
# __author__ = 'lzc'
# -*- coding: UTF-8 -*-
import pygame
from pygame.sprite import Sprite
#需要 ship 继承Sprite,以便能够创造出飞船编组
class Ship(Sprite):
def __init__(self,ai_settings,screen):
super(Ship,self).__init__() #ship继承Sprite
self.screen = screen
self.ai_settings=ai_settings
#加载飞船图像并获取其外接矩形
self.image = pygame.image.load('images/ship.bmp')
self.rect = self.image.get_rect() # 得到小飞机的矩形区域
self.screen_rect = screen.get_rect() # 得到screen的矩形区域
#将每艘新飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx # 水平居中
self.rect.bottom = self.screen_rect.bottom # 底部
#self.rect.centery=self.screen_rect.centery #置于中心
#在飞船属性center中存储小数值
self.center= float(self.rect.centerx) #飞船横坐标的值
self.centery=float(self.rect.centery) #飞船纵坐标的值
#移动标识
self.moving_right=False
self.moving_left=False
self.moving_up=False
self.moving_down=False
def update(self):
#更新飞船的center值而不是rect值
if self.moving_right and self.rect.right < self.screen_rect.right:
self.center +=self.ai_settings.ship_speed_factor
if self.moving_left and self.rect.left>0:
self.center -=self.ai_settings.ship_speed_factor
if self.moving_down and self.rect.bottom<self.screen_rect.bottom:
self.centery+=self.ai_settings.ship_speed_factor
if self.moving_up and self.rect.top>0:
self.centery-=self.ai_settings.ship_speed_factor
#根据self.center,更新rect对象
self.rect.centerx=self.center
self.rect.centery=self.centery
#飞船置于底部
def botton_ship(self):
self.center =self.screen_rect.centerx
self.centery = self.screen_rect.bottom - 30 # 底部
def blitme(self):
self.screen.blit(self.image,self.rect) # 在指定位置绘制小飞机
3.外星人模块alien.py
# __author__ = 'lzc'
# -*- coding: UTF-8 -*-
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
'''外星人的类'''
def __init__(self,ai_settings,screen):
super