96SEO 2026-02-23 13:09 9
处于非活动状态等我们创建Play按钮后玩家才能开始游戏。

由于Pygame没有内置创建按钮的方法为此新建一个Button类。
__init__(self,ai_settings,screen,msg):初始化按钮属性self.screen
screen.get_rect()#设置按钮尺寸及其他属性self.width,self.height
(0,255,0)#指定颜色为亮绿self.text_color
(255,255,255)#指定字体None为默认48字号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#按钮的标签只需创建一次def
preg_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
draw_button(self):#绘制一个用颜色填充的按钮再绘制文本self.screen.fill(self.button_color,self.rect)self.screen.blit(self.msg_image,self.msg_image_rect)在屏幕上绘制按钮
run_game():--snip--pygame.display.set_caption(Alien
Button(ai_settings,screen,Play)--snip--#
True:--snip--gf.update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button)run_game()成功显示按钮后再考虑逐步添加按钮的功能
修改update_screen()使得游戏处于非活动状态下才显示Play按钮且按钮位于其他所有屏幕元素上面
update_screen(ai_settings.screen,stats,ship,aliens,bullets,play_button):#更新屏幕上的图像并切换到新屏幕--snip--#如果游戏处于非活动状态就绘制Play按钮if
stats.game_active:play_button.draw_button()#
让最近绘制的屏幕可见pygame.display.flip()开始游戏
单击按钮时检测MOUSEKEYDOWN事件获取其位置使用pygame.mouse.get_pos()返回其坐标值以判断是否处于按钮的rect内如果是就将game_active设置为True并重置统计信息、删除现有外星人和子弹、创建一批新的外星人群、让飞船居中游戏就此开始。
为观感体验游戏开始后需要隐藏光标的出现。
同时给游戏新增开始游戏的快捷键P。
check_events(ai_settings,screen,stats,play_button,ship,bullets):#
pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y
pygame.mouse.get_pos()check_play_button(ai_settings,screen,stats,play_button,ship,aliens,bullets,mouse_x,mouse_y)def
check_play_button(ai_settings,screen,stats,play_button,ship,aliens,bullets,mouse_x,mouse_y)::#在玩家单击Play按钮时开始游戏button_clicked
play_button.rect.collidepoint(mouse_x,mouse_y)if
play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active
#隐藏光标pygame.mouse.set_visible(False)stats.reset_stats()stats.game_active
True#清空外星人列表和子弹列表aliens.empty()bullets.empty()#创建一群新的外星人并让飞船居中create_fleet(ai_settings,screen,ship,aliens)ship.center_ship()--snip--
ship_hit(ai_settings,stats,screen,ship,aliens,bullets):#
0:--snip--else:stats.game_active
False#游戏结束后重新显示光标pygame.mouse.set_visible(True)alien_invasion.py
True:gf.check_events(ai_settings,screen,stats,play_button,ship,bullets)提高等级
在消灭完整群外星人后适当提高游戏难度比如提高外星人的移动速度。
设置背景色由RGB指定230230,230为浅灰色self.ship_speed_factor
10#控制游戏节奏随着玩家等级提高的加快速度self.speedup_scale
1.5#初始化随游戏进行而变化的属性self.initialize_dynamic_settings()def
increase_speed(self):#提高速度设置self.ship_speed_factor
self.speedup_scaleself.bullet_speed_factor
self.speedup_scaleself.alien_speed_factor
self.speedup_scale#提高点数并设置为整数self.alien_points
check_bullet_alien_collisions(ai_settings,screen,ship,aliens,bullets):#
pygame.sprite.groupcollide(bullets,
删除现有的子弹加快游戏节奏并新建一群外星人bullets.empty()ai_settings.increase_speed()create_fleet(ai_settings,screen,ship,aliens)
check_play_button(ai_settings,screen,stats,play_button,ship,aliens,bullets,mouse_x,mouse_y)::#在玩家单击Play按钮时开始游戏button_clicked
play_button.rect.collidepoint(mouse_x,mouse_y)if
play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active
#重置游戏设置ai_settings.initialize_dynamic_settings()--snip--现在游戏更加具备了挑战性每当玩家将屏幕上的外星人消灭干净后游戏都将加快节奏。
根据游戏体验找到最佳的settings.speedup_scale值。
添加计分属性实时跟踪玩家的得分并显示最高得分、当前等级和余下的飞船数。
为在每次开始游戏时都重置得分我们在reset_stats()而不是__init__()中初始化score
而鉴于在任何情况下都不会重置最高分我们在__init__()中初始化high_score
ai_settingsself.reset_stats()self.game_active
True#在任何情况下都不应重置最高分self.high_score0def
reset_stats(self):#初始化随游戏进行可能变化的统计信息self.ship_left
self.ai_settings.ship_limitself.score
0self.level1-为在屏幕上显示得分创建一个新类Scoreboard
__init__(self,ai_settings,screen,stats):#初始化显示得分涉及的属性self.screen
screen.get_rect()self.ai_settings
stats#显示得分信息时使用的字体设置self.text_color
pygame.font.SysFont(None,48)#准备包含最高得分和当前得分的图像self.prep_score()self.prep_high_score()#显示等级self.prep_level()self.prep_ships()def
prep_score(self):#将得分转换为一副渲染的图像#将得分圆整到最近的10的整数倍rounded_score
int(round(self.stats.score,-1))#添加千位分隔符score_str
{:,}.format(rounded_score)self.score_image
self.font.render(score_str,True,self.text_color,self.ai_settings.bg_color)#将得分放在屏幕右上方self.score_rect
self.score_image.get_rect()#确保得分始终锚定在右边让其右边缘与屏幕右边缘相距20像素self.score_rect.right
20#使上边缘与屏幕上边缘相距20像素self.score_rect.top
prep_high_score(self):#将最高得分转换为一副渲染的图像high_score
int(round(self.stats.high_score,-1))high_score_str
{:,}.format(high_score)self.high_score_image
self.font.render(high_score_str,True,self.text_color,self.ai_settings.bg_color)#将最高得分放在屏幕顶部中央self.high_score_rect
self.high_score_image.get_rect()self.high_score_rect.centerx
self.screen_rect.centerxself.high_score_rect.top
prep_level(self):#将等级转换为渲染的图像self.level_image
self.font.render(str(self.stats.level),True,self.text_color,self.ai_settings.bg_color)#将等级放在得分下方self.level_rect
self.level_image.get_rect()self.level_rect.right
self.score_rect.right#给得分和等级之间留出空间self.level_rect.top
prep_ships(self):#显示还余下多少飞船self.ships
range(self.stats,ships_left):#创建一搜新飞船ship
Ship(self.ai_settings,self.screen)#让整个飞船编组都位于屏幕左边且左边距都为10像素ship.rect.x
ship.rect.width#y坐标设置为离屏幕上边缘10像素让所有飞船与得分图像对齐ship.rect.y
10#将每搜新飞船都添加到编组ships中self.ships.add(ship)def
show_score(self):#在屏幕上显示飞船和得分self.screen.blit(self.score_image,self.score_rect)self.screen.blit(self.high_score_image,self.high_score_rect)self.screen.blit(self.level_image,self.level_rect)#绘制飞船self.ships.draw(self.screen)为显示得分更新alien_invasion.py
True:gf.check_events(ai_settings,screen,stats,play_button,ship,aliens,bullets)--snip--
run_game():--snip--#创建存储游戏统计信息的实例并创建记分牌stats
Scoreboard(ai_settings,screen,stats)--snip--#游戏的主循环while
True:--snip--gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)run_game()显示得分并在外星人被消灭时更新得分提高速度
initialize_dynamic_settings(self):--snip--#指定击落一个外星人的得分self.alien_points
increase_speed(self):#提高速度设置self.ship_speed_factor
self.speedup_scaleself.bullet_speed_factor
self.speedup_scaleself.alien_speed_factor
self.speedup_scale#提高点数并设置为整数self.alien_points
self.score_scale)#显示分数注意确认点数在不断增加后要删除该语句以防影响性能及分散玩家注意力print(self.alien_points)显示余下的飞船数
__init__(self,ai_settings,screen):#
初始化飞船并设置其初始位置#导入Sprite让ship继承super(Ship,self).__init__()--snip--确保开始游戏时充分调用
check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets):#
pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y
pygame.mouse.get_pos()check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x,mouse_y)def
check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x,mouse_y):#在玩家单击Play按钮时开始游戏button_clicked
play_button.rect.collidepoint(mouse_x,mouse_y)if
play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active
#重置游戏设置ai_settings.initialize_dynamic_settings()#重置记分图像sb.prep_score()sb.prep_high_score()sb.prep_level()sb.prep_ships()#隐藏光标pygame.mouse.set_visible(False)stats.reset_stats()stats.game_active
True#清空外星人列表和子弹列表aliens.empty()bullets.empty()#创建一群新的外星人并让飞船居中create_fleet(ai_settings,screen,ship,aliens)ship.center_ship()--snip--def
check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets):#
pygame.sprite.groupcollide(bullets,
删除现有的子弹加快游戏节奏并新建一群外星人bullets.empty()ai_settings.increase_speed()#提高等级stats.level
1sb.prep_level()create_fleet(ai_settings,screen,ship,aliens)#子弹撞到外星人时返回一个字典collisions更新得分if
collisions.values():stats.score
ai_settings.alien_pointssb.prep_score()check_high_score(stats,sb)def
update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets):#
更新子弹的位置并删除已消失的子弹bullets.update()for
0:bullets.remove(bullet)check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets)def
check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets):#
像飞船被外星人撞到一样处理ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets)breakdef
update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets):#
检查并更新外星人群中所有外星人的位置check_fleet_edges(ai_settings,aliens)aliens.update()check_aliens_bottom(ai_settings,stats,screen,ship,aliens,bullets)#
pygame.sprite.spritecollideany(ship,aliens):ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)#检查是否有外星人抵达屏幕底端check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets)def
ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets):#
清空外星人列表和子弹列表--snip--else:stats.game_active
False#游戏结束后重新显示光标pygame.mouse.set_visible(True)def
check_high_score(stats,sb):#检查是否诞生了新的最高得分if
stats.high_score:stats.high_score
stats.scoresb.prep_high_score()--snip--相应的修改主while循环中的代码传递实参sb
run_game():--snip--#创建存储游戏统计信息的实例并创建记分牌stats
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)--snip--gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)run_game()--snip--
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback