14-2射击游戏 :创建一个矩形,它在屏幕右边缘以固定的速度上下移动。然后,在屏幕左边缘创建一艘飞船,玩家可上下移动该飞船,并射击前述矩形目标。添加一 个用于开始游戏的Play按钮,在玩家三次未击中目标时结束游戏,并重新显示Play按钮,让玩家能够通过单击该按钮来重新开始游戏。
#learn_game.py
#coding=utf-8
import pygame
from pygame.sprite import Group
from settings import Settings
from rocket import Rocket
from cube import Cube
from game_stats import GameStats
from button import Button
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("Rocket Game")
# 创建一个play按钮
play_button = Button(ai_settings, screen, "Play")
# 创建一个用于存储游戏统计信息的实例
stats = GameStats(ai_settings)
# 设置background颜色蓝色
#bg_color = (135,206,250)
# 创建一个火箭
rocket = Rocket(ai_settings, screen)
# 创建一个矩形
#cube = Cube(ai_settings, screen)
#创建一个存储炮火的编组
fires = Group()
#创建矩形编组
cubes = Group()
#开始游戏的主循环
while True:
#监控键盘和鼠标事件
gf.check_events(ai_settings, screen, stats, play_button, rocket,
fires, cubes)
#火箭位置
rocket.update()
#炮火位置
gf.update_fires(ai_settings, stats, screen, rocket, fires, cubes)
#矩形位置
cubes.update()
#每次循环时都重绘屏幕
gf.update_screen(ai_settings, screen, stats, rocket, fires, cubes,
play_button)
run_game()
#settings.py
class Settings():
def __init__(self):
#初始化游戏的设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230,230,230)
self.rocket_speed = 1.5
#飞船的设置
self.ship_speed_factor = 1.5
#炮火的设置
self.fire_speed_factor = 1
self.fire_width = 15
self.fire_height = 3
self.fire_color = 255, 140, 0
self.fire_allowed = 5
self.fire_limit = 3
#方块的设置
self.cube_width = 50
self.cube_height = 50
self.cube_color = 0, 0, 230
self.cube_speed_factor = 1
#为1代表向下移,为-1表示向上移
self.fleet_direction = 1
#game_functions.py
#coding=utf-8
import sys
import pygame
from fire import Fire
from cube import Cube
from time import sleep
def check_keydown_events(event, ai_settings, screen, rocket, fires):
#按键响应
# if event.key == pygame.K_RIGHT:
# rocket.moving_right = True
# elif event.key == pygame.K_LEFT:
# rocket.moving_left = True
if event.key == pygame.K_UP:
rocket.moving_up =