星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

这篇具有很好参考价值的文章主要介绍了星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

星际争霸之小霸王之小蜜蜂(十二)--猫有九条命

 星际争霸之小霸王之小蜜蜂(十一)--杀杀杀

 星际争霸之小霸王之小蜜蜂(十)--鼠道

星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫

 星际争霸之小霸王之小蜜蜂(七)--消失的子弹

 星际争霸之小霸王之小蜜蜂(六)--让子弹飞

 星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速

 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来


目录

系列文章目录

文章目录

前言

一、设置开始按钮

二、绘制开始按钮

 三、添加点击响应

 四、重置游戏进程

总结


前言

前面我们已经完成了游戏主体部分,现在我们要打磨游戏的细节,增加游戏的可玩性。


一、设置开始按钮

我们需要添加一个开始按钮,在我们点击开始按钮之前,游戏静止不动,当我们点击开始之后,游戏正常运行,当游戏结束后,回到初始状态,并出现开始按钮。

首先我们让游戏处于一个静止状态,就是我们之前设置的game_active,将其赋值为False

然后我们就需要在屏幕上放置一个开始按钮了,但是pygame没有直接创建按钮的方法,我们需要自己创建按钮的模块。

import pygame.font

class Button():
    def __init__(self,new_setting,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)

        #创建按钮的rect对象
        self.rect = pygame.Rect(0,0,self.width,self.height)
        self.rect.center = self.screen_rect.center

        self.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代替。

 星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞,python游戏之猫鼠大战,pygame,python,笔记,实例,机器学习

 三、添加点击响应

 我们现在已经在屏幕上绘制出开始按钮了,但是它只是显示出来,并没有什么作用。之前我们是监听键盘输入,现在我们需要监听鼠标的点击,当鼠标点击开始按钮的位置时候,我们就开始游戏。

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.type==pygame.KEYDOWN:
            check_keydown_events(event,new_setting,screen,ship,bullets)

        elif event.type==pygame.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 = True

        aliens.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 = True

        aliens.empty()
        bullets.empty()

        create_fleet(new_setting,screen,aliens)
        ship.center_ship()

总结

我们实现了游戏的开始可以按钮控制。点赞!!!文章来源地址https://www.toymoban.com/news/detail-714006.html

到了这里,关于星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 星际争霸之小霸王之小蜜蜂(七)--消失的子弹

    目录 前言  一、删除子弹  二、限制子弹数量  三、继续重构代码 总结 昨天我们已经让子弹飞了起来,但是会面临一个和之前小蜜蜂一样的问题,小蜜蜂的行动应该限制在窗口内,那么子弹也是有相同之处,也需要限制一个移动范围,当超出范围之后,就要将其消灭,释放

    2024年02月09日
    浏览(34)
  • 星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫

    星际争霸之小霸王之小蜜蜂(十五)--剧将终场 星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪 星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命   星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之

    2024年02月08日
    浏览(39)
  • 星际争霸之小霸王之小蜜蜂(十五)--剧将终场

    星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪 星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命  星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(

    2024年02月08日
    浏览(41)
  • 星际争霸之小霸王之小蜜蜂(六)--让子弹飞

    目录 前言  一、添加子弹设置  二、创建子弹  三、创建绘制和移动子弹函数  四、让子弹飞  五、效果  总结 小蜜蜂的基本操作已经完成了,现在开始编写子弹的代码了。  在我的预想里,我们的小蜜蜂既然是一只猫,那么放出的子弹应该是一只猫爪,或者是爪印,一个

    2024年02月11日
    浏览(45)
  • 星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

    星际争霸之小霸王之小蜜蜂(十二)--猫有九条命  星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾  星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫  星际争霸之小霸王之小蜜蜂(七)

    2024年02月08日
    浏览(36)
  • 星际争霸之小霸王之小蜜蜂(一)--窗口界面设计

    目录   前言 一、安装pygame库  1、pygame库简介  2、在windows系统安装pygame库 二 、搭建游戏框架 1、创建游戏窗口   2、改变窗口颜色  总结 前言 大家应该都看过或者都听说过python神书“大蟒蛇”,上面有一个案例是《外星人入侵》,游戏介绍让我想起了上学时候玩过的星际

    2024年02月12日
    浏览(33)
  • 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命

    星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾  星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫   星际争霸之小霸王之小蜜蜂(七)--消失的子弹  星际争霸之小霸王之小蜜蜂(六)

    2024年02月08日
    浏览(35)
  • 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来

    目录 前言 一、监听按键并作出判断  二、持续移动  三、左右移动  总结: 前言 今天开始正式操控我们的小蜜蜂了,之前学java的时候是有一个函数监听鼠标和键盘的操作,我们通过传过来不同的值进行判断,现在来看看python是否一样的实现。  以我浅薄的知识判断,流程

    2024年02月12日
    浏览(43)
  • 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫

     星际争霸之小霸王之小蜜蜂(七)--消失的子弹  星际争霸之小霸王之小蜜蜂(六)--让子弹飞  星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速  星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来 目录  前言 一、寻找图片  二、创建Alien类  三、小老鼠实例化

    2024年02月11日
    浏览(36)
  • AI强化学习初探——卡牌游戏星际争霸II

    作者:禅与计算机程序设计艺术 在AI技术领域,强化学习(Reinforcement Learning)是最具代表性的一种机器学习方法。其核心思想是通过反馈机制让智能体(Agent)不断修正策略,使得它不断地按照既定目标策略进行行动,以达到最优状态的优化。常见的强化学习算法如Q-learnin

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包