|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请各位大神解惑(在鱼c发这帖子会不会被打 为了解惑,打也认了)。问题如下,代码可以正常运行,没有报错,但是按钮”Play“却没有在界面上显示出来,不知道是不是没有调用对应的函数,还是咋的。
相关的代码如下
alien_invasion.py
- import pygame
- import game_functions as gf
- from settings import Settings
- from ship import Ship
- from pygame.sprite import Group
- from game_stats import GameStats
- from button import Button
- 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("外星人入侵")
- #创建Play按钮
- play_button = Button(ai_settings,screen,"Play")
- #创建一个用于存储游戏统计信息的实例
- stats = GameStats(ai_settings)
- #创建一艘飞船
- ship = Ship(ai_settings,screen)
- #创建一个用于存储子弹的编组
- bullets = Group()
- # 创建一个用于存储外星人群的编组
- aliens = Group()
- #创建外星人群
- #alien = Alien(ai_settings,screen)#创建一个外星人
- gf.create_fleet(ai_settings,screen,ship,aliens)
- #开始游戏的主循环
- while True:
- # 监视键盘和鼠标事件
- gf.check_events(ai_settings,screen,ship,bullets)
- if stats.game_active:
- #监视键盘松开或是按下向右的按钮
- ship.update()
- # 监视键盘松开或是按下空格键的按钮
- gf.update_bullets(ai_settings,screen,ship,aliens,bullets)
- #更新每个外星人的位置
- gf.update_aliens(ai_settings,screen,stats,ship,aliens,bullets)
- #每次循环都重新绘屏幕,让最近绘制的屏幕可见
- gf.update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button)
- run_game()
复制代码
game_functions.py
- import sys
- import pygame
- from bullet import Bullet
- from alien import Alien
- from time import sleep
- def check_keydown_events(event,ai_settings,screen,ship,bullets):
- """响应按键"""
- if event.key == pygame.K_RIGHT:
- ship.moving_right = True
- elif event.key == pygame.K_LEFT:
- ship.moving_left = True
- elif event.key == pygame.K_SPACE:
- fire_bullet(ai_settings,screen,ship,bullets)
- elif event.key == pygame.K_q:
- sys.exit()
- def fire_bullet(ai_settings,screen,ship,bullets):
- """如果还没有到达限制,就发射一颗子弹"""
- # 创建新子弹,并将其加入到编组bullets中
- if len(bullets) < ai_settings.bullets_allowed:
- new_bullet = Bullet(ai_settings, screen, ship)
- bullets.add(new_bullet)
- def check_keyup_events(event,ship):
- """响应松开"""
- if event.key == pygame.K_RIGHT:
- ship.moving_right = False
- elif event.key == pygame.K_LEFT:
- ship.moving_left = False
- def check_events(ai_settings,screen,ship,bullets):
- """响应按键和鼠标事件"""
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- sys.exit()
- elif event.type == pygame.KEYDOWN:
- check_keydown_events(event,ai_settings,screen,ship,bullets)
- elif event.type == pygame.KEYUP:
- check_keyup_events(event,ship)
- def update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button):
- """更新屏幕上的图像,并切换到新屏幕"""
- #每次循环时都重绘屏幕
- screen.fill(ai_settings.bg_color)
- #在飞船和外星人后面重绘所有子弹
- for bullet in bullets.sprites():
- bullet.draw_bullet()
- ship.blitme()
- aliens.draw(screen)
- #如果游戏处于非活动状态,就绘制Play按钮
- if not stats.game_active:
- play_button.draw_button
- #让最近绘制的屏幕可见
- pygame.display.flip()
复制代码
game_stats.py
- class GameStats():
- """跟踪游戏的统计信息"""
- def __init__(self,ai_settings):
- """初始化统计信息"""
- self.ai_settings = ai_settings
- self.reset_stats()
- #游戏刚启动时处于非活动状态
- self.game_active = False
- def reset_stats(self):
- """初始化在游戏运行期间可能变化的统计信息"""
- self.ships_left = self.ai_settings.ship_limit
复制代码
button.py
- import pygame.ftfont
- class Button():
- def __init__(self,ai_settings,screen,msg):
- """初始化按钮的属性"""
- self.screen = screen
- self.screen_rect = screen.get_rect()
- #    设置按钮的尺寸和其他属性
- self.width,self.height = 200, 50
- self.button_color = (150,150,150)
- self.text_color = (150,250,250)
- 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渲染为图像,并使其在按钮上居中"""
- 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)
复制代码
运行alien_invasion.py文件,游戏界面的截图如附件,”Play“的按钮没有显示出来
if not stats.game_active:
play_button.draw_button ()
方法记得要() ,要不然得到的就是函数的地址。
|
-
请忽略因电脑屏幕小,而没有显示全的界面
|