2020年春节前后,冠状病毒爆发,遂编写这个游戏,希望武汉人民加油,中国人民加油,杀死病毒,获得胜利。
游戏的内容参考的是Eric Matthes的《Python编程从入门到实践》中的项目1外星人入侵,稍作修改。
以下是书中对该游戏的描述:
“在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。”
- alien_invation.py
- alien.py
- bullet.py
- button.py
- game_functions.py
- game_stats.py
- scoreboard.py
- settings.py
- ship.py
- images
下图是整个游戏的文件分布:
下述代码是alien_invation.py,是整个游戏的主代码。“主文件alien_invasion.py创建一系列整个游戏都要用到的对象,它还包含游戏的主循环,要玩《外星人入侵》,只需运行该文件,其它文件包含的代码被直接或间接地导入到这个文件中。”
import pygame
from settings 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
def run_game():
"""初始化游戏并创建一个屏幕对象"""
#1、初始化
#2、设置窗口尺寸
#3、设置窗口标题
#4、获得键盘和鼠标事件
#5、设置退出条件
#6、展示窗口
pygame.init()
ai_settings=Settings()#初始化设置对象
screen=pygame.display.set_mode(
(ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("杀死冠状病毒")#标题文字
#创建一个用于存储游戏统计信息的实例
stats=GameStats(ai_settings)
ship=Ship(screen,ai_settings)
bullets=Group()
aliens=Group()
button=Button(screen,'武汉加油!')
gf.create_fleet(screen,ai_settings,aliens,ship)
sb=ScoreBoard(stats,ai_settings,screen)
#开始游戏的主循环
while True:
#监视键盘和鼠标事件
gf.check_events(ship,ai_settings,screen,bullets,button,stats,aliens,sb)
if stats.game_active:
#让最近绘制的屏幕可见
ship.update()
gf.update_bullets(bullets,aliens,screen,ai_settings,ship,stats,sb)
gf.update_aliens(aliens,screen,ai_settings,ship,stats,bullets,sb)
gf.update_screen(screen,ship,ai_settings,bullets,aliens,button,stats,sb)
run_game()
以下代码是alien.py,每个外星人的行为都由Alien类控制。
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
'''表示单个外星人的类'''
def __init__(self,screen,ai_settings):
'''初始化外星人并设置其初始位置'''
super().__init__()
self.ai_settings=ai_settings
self.screen=screen
#加载外星人图像,并设置其rect属性
self.image=pygame.image.load('images/alien.png')
self.rect=self.image.get_rect()
#每个外星人最初都在屏幕左上角附近
self.image=pygame.transform.scale(self.image,(int(self.rect.width/4),int(self.rect.height/4)))
self.rect=self.image.get_rect()
self.rect.x=self.rect.width
self.rect.y=self.rect.height
def blitme(self):
'''在指定位置绘制外星人'''
self.screen.blit(s