project飞船射击外星人
1加入play按钮
创建button文件
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) # 设置按钮文字字号
# 创建按钮的 rect 对象,并使其居中
self.rect = pygame.Rect(0,0,self.width,self.height) # 按钮为矩形元素
self.rect.center = self.screen_rect.center # 将按钮放在屏幕中央
# 按钮的标签只需要创建一次
self._prep_msg(msg)
def _prep_msg(self,msg):
"""将msg渲染为图像,并使其在按键上居中"""
# render渲染文字(文本,是否开始反锯齿功能:True文本边缘更加平滑,文本文字颜色,背景颜色)
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) # 将文本绘制在矩形上
主文件导入按钮
from button import Button
初始化资源导入按钮
# 创建 play 按钮
self.play_button = Button(self,"Play")
导入绘制按钮行为
# 如果游戏处于非活动状态就绘制Play按钮
if not self.stats.game_active:
self.play_button.draw_button()
运行游戏
屏幕获取鼠标位置并检测方法
elif event.type == pygame.MOUSEBUTTONDOWN: # 如果用户按下鼠标
mouse_pos = pygame.mouse.get_pos() # 获得鼠标位置
self._check_play_button(mouse_pos) # 位置传入_check_play_button方法
检查按键方法
def _check_play_button(self,mouse_pos):
"""玩家单机Play按钮时开始新游戏"""
button_clicked = self.play_button.rect.collidepoint(mouse_pos) # 鼠标按下的位置是在play_button里面
if button_clicked and not self.stats.game_active: # 鼠标被按下并且游戏不在运行
self.stats.reset_stats() # 重置游戏统计信息
self.stats.game_active = True # 启动游戏
self.aliens.empty() # 清空余下的外星人
self.bullet.empty() # 情况子弹
self._create_fleet() # 创建新的一群外星人
self.ship.center_ship() # 并使其居中
pygame.mouse.set_visible(False) # 隐藏鼠标光标
游戏结束光标回来
pygame.mouse.set_visible(True)
2游戏难度升级
设置初试速度与加速之后速度
class Settings:
def __init__(self):
"""初始化游戏的设置"""
# 屏幕设置
self.screen_width = 1200
self.screen_height = 700
self.bg_color = (255,255,255) # 设置背景颜色RGB(红,绿,蓝)
self.ship_speed = 0.7 # 设置飞船运行速度
# 子弹设置
self.bullet_speed = 0.8
self.bullet_width = 3
self.bullet_height = 6
self.bullet_color = (60,60,60)
self.bullet_allowed = 3 # 设置子弹每组数量
# 外星人设置
self.alien_speed = 1.0 # 设置外星人向右移动速度
self.fleet_drop_speed = 10 # 设置外星人向下移动速度
# fleet_direcrion为1表示向右移,为-1表示向左移
self.fleet_direction = 1
# 设置飞船数量
self.ship_limit = 3
# 加快游戏节奏速度
self.speedup_scale = 1.1 # 游戏当前速度
self.initialize_dynamic_settings()
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
def increase_speed(self):
"""提高速度设置"""
self.ship_speed *= self.speedup_scale
self.bullet_speed *= self.speedup_scale
self.alien_speed *= self.speedup_scale
主程序加入速度升级模块
self.setting.increase_speed()
当游戏开始时速度重置
self.setting.initialize_dynamic_settings()
3设置计分系统
设置重置分数信息
self.score = 0
创建分数代码文件
创建文件Scoredboard显示游戏得分
import pygame.font
class Scoreboard:
"""显示得分信息的类"""
def __init__(self,ai_game):
"""初始化显示得分涉及的属性"""
self.screen = ai_game.screen
self.screen_rect = self.screen.get_rect()
self.settings = ai_game.setting
self.stats = ai_game.stats
# 显示得分信息时使用的字体设置
self.text_color = (30,30,30)
self.font = pygame.font.SysFont(None,48)
# 准备初始得分图像
self.prep_score()
def prep_score(self):
"""将得分转换为一副渲染的图像"""
score_str = str(self.stats.score)
self.score_image = self.font.render(score_str,True,self.settings.bg_color)
# 在屏幕右上角显示得分
self.screen_rect = self.score_image.get_rect()
self.screen_rect.right = self.screen_rect.right - 20
self.screen_rect.top = 20
def show_score(self):
"""在屏幕上显示得分"""
self.screen.blit(self.score_image,self.screen_rect)
导入文件
from scoreboard import Scoreboard
# 创建存储游戏统计信息的实例,并创建记分牌
self.stats = GameStats(self)
self.sb = Scoreboard(self)
显示记分
self.sb.show_score()
设置初始射杀分值
self.alien_points = 50
更新主文件射杀分值
if collisions: # 一旦射杀成功
for aliens in collisions.values(): # 碰撞发生个数,确保每次碰撞都会加分
self.stats.score += self.setting.alien_points * len(aliens) # 分值增加
self.sb.prep_score() # 渲染更新后分值
游戏重开重设分值
self.sb.prep_score()
设置分数随等级提升而改变
# 外星人分数的提升速度
self.score_scale = 1.5
self.initialize_dynamic_settings()
self.alien_points = int(self.alien_points * self.score_scale)
标签:Python,self,外星人,project,score,button,msg,screen,rect
From: https://blog.51cto.com/u_16352455/8805205