差不多用了三天的空闲时间,把这个案例看完了一遍,并且实际操作了一下,其实难度确实不高,很适合我们这样的新人去操作。
不过其实遇到了许多的问题,但大多都是我的问题,做的我是心态崩了。
今天最后做play按钮的时候,怎么也不出效果,把game_active 改为False就显示黑屏,而换成True显示内容但是没啥卵用,因为不是静态的。
当时是真的不想做了,因为确实没有啥错误,出去吃了个饭,再仔细一看发现我是真的蠢!

while True: # 监视鼠标和键盘事件 gf.check_events(ai_settings, screen, stats, board,
play_button, ship, aliens, bullets) if stats.game_active: ship.update()
bullets.update() gf.update_bullets(ai_settings, screen, stats, board, ship,
aliens, bullets) gf.update_aliens(ai_settings, screen, stats, board, ship,
aliens, bullets) gf.update_screen(ai_settings, screen, stats, board, ship,
aliens, bullets, play_button)

这一段,最后的gf.update_screen,应该是再if外的,因为他是做出那个静态效果的,但是我当时把他放到了if里,所以改成false时,显示黑屏,我当时真的找了半天,因为他这个如果你没改false的话是没有任何问题出现的,最后随便一看,发现了这个错误,把我气的。
还有一些非常蠢的错误,基本上全是自己的失误吧,哎,说多了都是泪。
其实很重要的一个模块就是pygame.sprites毕竟你要修改游戏要进行交互等等吧,很重要。---->《python sprites介绍》
不得不说,细节决定成败,这句话非常有道理!
我就把外星人,计分板和按钮的py文件发一下源代码,其余的还是改成附件上传吧,毕竟有点小多。
计分板的,scoreboard.py

import pygame.font from pygame.sprite import Group from ship import Ship
class Scoreboard(): """显示得分信息的类""" def __init__(self, ai_settings, screen,
stats): self.screen =screen self.screen_rect = screen.get_rect() self.ai_settings
= ai_settings self.stats = stats self.text_color = (50, 50, 50) self.font
= pygame.font.SysFont(None, 48) # 初始化得分图像 self.prep_score() self.prep_high_score()
self.prep_level() self.prep_ships() def prep_ships(self): self.ships =
Group() for ship_number in range(self.stats.ships_left): ship = Ship(self.ai_settings,
self.screen) ship.rect.x = 10 + ship_number * ship.rect.width ship.rect.y
= 10 self.ships.add(ship) def 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.centerx self.high_score_rect.top
= self.score_rect.top def 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 = self.score_rect.bottom+ 10 def prep_score(self): """将得分转化为图像""" 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() self.score_rect.right =self.screen_rect.right
-20 self.score_rect.top = 20 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.py

import pygame from pygame.sprite import Sprite class Alien(Sprite): def
__init__(self, ai_settings, screen): """初始化外星人起始位置""" super(Alien, self).__init__()
self.ai_settings = ai_settings self.screen = screen # 加载外星人图像,并设置其rect属性
self.image = pygame.image.load("images/alien.bmp") self.rect = self.image.get_rect()#self.screen_rect = screen.get_rect() # 每个外星人都要在屏幕的上面出现 self.rect.x =

self.rect.width self.rect.y = self.rect.height # 储存每个外星人的位置 self.x = float(self.rect.x)
def blitme(self): self.screen.blit(self.image, self.rect) def check_edges(self):
"""如果外星人位于屏幕边缘,就返回true""" screen_rect = self.screen.get_rect() if self.rect.right
>= screen_rect.right: return True elif self.rect.left <= 0: return
True def update(self): """向右移动外星人""" self.x += self.ai_settings.alien_speed_factor* self.ai_settings.fleet_direction self.rect.x = self.x

按钮,button.py

import pygame.font 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 = (0, 255, 0) self.text_color =
(255, 255, 255) self.font = pygame.font.SysFont(None, 48) 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): 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)

其余的下载链接--》天翼云
有什么问题可以在下面的评论区发送,我看到后会在第一时间解答!

本文作者:博主:     文章标题:python 外星人入侵 完整版
本文地址:https://zjzdmc.top/jsfx/45.html     
版权说明:若无注明,本文皆为“Datehoer的Blog-个人博客-技术分享”原创,转载请保留文章出处。
最后修改:2021 年 04 月 20 日 10 : 08 AM
如果觉得我的文章对你有用,请随意赞赏