赣州瑞金网站建设,wordpress提交表单插件,wordpress 微信二维码登录,深圳推广系统系列文章目录
星际争霸之小霸王之小蜜蜂#xff08;十二#xff09;--猫有九条命 星际争霸之小霸王之小蜜蜂#xff08;十一#xff09;--杀杀杀 星际争霸之小霸王之小蜜蜂#xff08;十#xff09;--鼠道
星际争霸之小霸王之小蜜蜂#xff08;九#xff09;--狂鼠之…系列文章目录
星际争霸之小霸王之小蜜蜂十二--猫有九条命 星际争霸之小霸王之小蜜蜂十一--杀杀杀 星际争霸之小霸王之小蜜蜂十--鼠道
星际争霸之小霸王之小蜜蜂九--狂鼠之灾 星际争霸之小霸王之小蜜蜂八--蓝皮鼠和大脸猫 星际争霸之小霸王之小蜜蜂七--消失的子弹 星际争霸之小霸王之小蜜蜂六--让子弹飞 星际争霸之小霸王之小蜜蜂五--为小蜜蜂降速 星际争霸之小霸王之小蜜蜂四--事件监听-让小蜜蜂动起来 目录
系列文章目录
文章目录
前言
一、设置开始按钮
二、绘制开始按钮 三、添加点击响应 四、重置游戏进程
总结 前言 前面我们已经完成了游戏主体部分现在我们要打磨游戏的细节增加游戏的可玩性。 一、设置开始按钮 我们需要添加一个开始按钮在我们点击开始按钮之前游戏静止不动当我们点击开始之后游戏正常运行当游戏结束后回到初始状态并出现开始按钮。 首先我们让游戏处于一个静止状态就是我们之前设置的game_active将其赋值为False 然后我们就需要在屏幕上放置一个开始按钮了但是pygame没有直接创建按钮的方法我们需要自己创建按钮的模块。 import pygame.fontclass Button():def __init__(self,new_setting,screen,msg):self.screen screenself.screen_rect screen.get_rect()#设置按钮的尺寸self.width,self.height 200,50self.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.centerself.prep_msg(msg) pygame.font.SysFont(None, 48)是用于创建一个新的字体对象其中None表示默认字体48是字体的大小。 我们还调用了prep_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 self.font.render(msg, True, self.text_color, self.button_color)是Pygame中用于渲染文本的方法之一。它的作用是将文本字符串msg渲染成一个图像以便在游戏中显示。在这个方法中True表示启用抗锯齿功能即使用高质量的渲染效果self.text_color和self.button_color分别表示文本的颜色和按钮的颜色。该方法返回一个Surface对象表示渲染后的文本图像。可以将这个Surface对象绘制到屏幕上以显示文本 。 二、绘制开始按钮 我们已经完成按钮和按钮上文字的设置工作现在我们需要将他们显示在屏幕上首先我们在Button类里创建一个显示函数然后主函数里调用这个函数。 def draw_button(self):self.screen.fill(self.button_color,self.rect)self.screen.blit(self.msg_image,self.msg_image_rect) self.screen.fill(self.button_color, self.rect)是Pygame中用于填充屏幕背景色的方法之一。它的作用是将整个屏幕的背景色设置为指定的颜色以便在游戏中显示。 该方法接受两个参数color和rect。其中color是要设置的颜色可以是RGB元组或颜色名称rect是一个Rect对象表示屏幕的矩形区域。 在这个方法中self.button_color表示要设置的颜色self.rect表示整个屏幕的矩形区域。 self.screen.blit(self.msg_image, self.msg_image_rect)是Pygame中用于将一个图像绘制到另一个图像上的方法之一。它的作用是将指定的图像绘制到屏幕上的指定位置。 该方法接受三个参数source、dest和area。其中source是要绘制的图像dest是要绘制到的目标位置area是一个矩形区域表示要绘制的区域。如果area为None则只绘制source图像的左上角部分。 在这个方法中self.msg_image是要绘制的图像self.msg_image_rect是指定的目标位置。 然后我们在主函数中调用它 play_button Button(new_setting,screen,开始)while True:gf.check_events(new_setting,screen,ship,bullets)if stats.game_active:ship.update()gf.update_bullets(new_setting,screen,bullets,aliens)gf.update_aliens(new_setting,stats,screen,ship,aliens,bullets)gf.update_screen(new_setting,screen,ship,bullets,aliens,play_button) 我们首先创建了Button类的实例然后我们希望每次刷新屏幕的绘制按钮所以我们将play_button作为传参传入update_screen我们希望的是游戏静止还没有开始的时候调用显示开始按钮所以要加个判断在stats.game_active等于False的时候执行代码。因此update_screen要加一个传参stats。 def update_screen(new_setting,screen,stats,ship,bullets,aliens,play_button):screen.fill(new_setting.bg_color)for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()aliens.draw(screen)if not stats.game_active:play_button.draw_button()
pygame.display.flip() 运行的时候发现中文不显示也许是字体不对我们先按照书上用英文play代替。 三、添加点击响应 我们现在已经在屏幕上绘制出开始按钮了但是它只是显示出来并没有什么作用。之前我们是监听键盘输入现在我们需要监听鼠标的点击当鼠标点击开始按钮的位置时候我们就开始游戏。 def check_events(new_setting,screen,ship,bullets,stats,play_button):for event in pygame.event.get():if event.type pygame.QUIT:sys.exit()elif event.typepygame.KEYDOWN:check_keydown_events(event,new_setting,screen,ship,bullets)elif event.typepygame.KEYUP:check_keyup_events(event, ship)elif event.type pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y pygame.mouse.get_pos()check_play_button(stats,play_button,mouse_x,mouse_y)def check_play_button(stats,play_button,mouse_x,mouse_y):if play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active True 很好理解。首先判断监听的事件是否是鼠标点击然后获取鼠标点击的位置。这里有一个新函数要学习。 play_button.rect.collidepoint(mouse_x, mouse_y)是Pygame中用于检测鼠标点击是否在按钮矩形区域内的方法。其中play_button是一个pygame.Rect对象表示一个矩形区域mouse_x和mouse_y是鼠标的横坐标和纵坐标。 这个方法会返回一个布尔值如果鼠标点击的位置在play_button矩形区域内则返回True否则返回False。这可以用于判断用户是否点击了按钮以便在游戏中执行相应的操作。 经执行代码点击开始游戏便开始了游戏结束后恢复到原始状态再点击开始又执行。 四、重置游戏进程 在玩游戏的过程中我们发现游戏结束后我们再点击开始小花猫的生命值没有恢复只有最后一条命失败一次就重新开始了。因此我们需要在点击开始按钮后对游戏进行重置。 def check_play_button(stats,play_button,mouse_x,mouse_y,new_setting,aliens,bullets,ship,screen):if play_button.rect.collidepoint(mouse_x,mouse_y):stats.reset_stats()stats.game_active Truealiens.empty()bullets.empty()create_fleet(new_setting,screen,aliens)ship.center_ship() 我们对check_play_button函数进行了修改在相关调用的时候参数都要修改这里就不一一列出来了按照这个修改之后运行又出现新的问题之前因为结束将代表活动的参数stats.game_active设置为False所以开始按钮一直保持在休眠状态游戏结束后再出现现在的开始按钮会一直处于活动状态游戏开始后虽然看不见但是点击开始按钮的位置还是能实现点击开始按钮的效果游戏可以重置这显然是不合理的因此我们要加个判断只有游戏处于非活动状态时点击才有效。 def check_play_button(stats,play_button,mouse_x,mouse_y,new_setting,aliens,bullets,ship,screen):if play_button.rect.collidepoint(mouse_x,mouse_y) and not stats.game_active:stats.reset_stats()stats.game_active Truealiens.empty()bullets.empty()create_fleet(new_setting,screen,aliens)ship.center_ship() 总结 我们实现了游戏的开始可以按钮控制。点赞