当前位置: 首页 > wzjs >正文

宁夏住房和城乡建设官方网站网站制作背景图片

宁夏住房和城乡建设官方网站,网站制作背景图片,百度引擎搜索引擎入口,企业网络推广技巧上篇文章Python实现贪吃蛇一,实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足,但最近发现还有两点需要优化: 1、生成食物的时候有概率和记分牌重合 2、游戏缺少暂停功能 先看生成食物的时候有概率和记分牌重合的…

        上篇文章Python实现贪吃蛇一,实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足,但最近发现还有两点需要优化:

        1、生成食物的时候有概率和记分牌重合

        2、游戏缺少暂停功能

        先看生成食物的时候有概率和记分牌重合的问题。在游戏过程中,有时吃掉一个食物后,发现“没有”生成新的食物。实际上是食物生成的位置和记分牌重合了,被挡住了。这种情况很影响游戏体验,并且尝试去吃掉记分牌下面的食物时很容易撞墙。针对上面问题,在生成新的食物的时候,增加是否与记分牌重合的校验,如果重合,重新生成食物,直到符合要求。修改后的代码片段如下:

    def _check_food(self):""" 检查新生成的食物是否不与蛇身及记分牌重合 """food = self.foodfood.rect.x = round(random.randrange(20, self.settings.screen_width - self.settings.snake_width * 2) / 20.0) * 20.0food.rect.y = round(random.randrange(20, self.settings.screen_height - self.settings.snake_height * 2) / 20.0) * 20.0for snake in self.snakes:if snake.rect.colliderect(food.rect) or self.sb.score_rect.colliderect(food.rect):return Falsereturn True

        再看游戏暂停功能。 有时正在游戏过程中,尤其是得分比较高的时候,有事需要离开,这时候没有游戏暂停功能的话,只能结束游戏,体验不太好。如何增加暂停功能,思路其实比较简单:在游戏状态类里增加一个游戏暂停状态的属性,当按下“空格”键的时候,将这个属性值取反。同时游戏主循环里增加游戏暂停状态的判断,如果是暂停状态游戏不再刷新,如果不是暂停状态,游戏正常刷新。这样,就实现了游戏暂停功能。相关代码片段:

class GameStats:""" 跟踪游戏的统计信息 """def __init__(self, ai_game):""" 初始化统计信息 """self.settings = ai_game.settingsself.reset_stats()# 游戏刚启动时处于非活动状态self.game_active = False# 游戏暂停状态self.game_pause = Falsedef reset_stats(self):""" 初始化在游戏运行期间可能变化的统计信息 """self.score = 0def run_game(self):""" 开始游戏的主循环 """while True:self._check_events()if self.stats.game_active and not self.stats.game_pause:if self.settings.update_count > 500: #控制游戏速度self._update_snakes()self._check_edges()self.settings.update_count = 0self.settings.update_count += self.settings.game_speedself._update_screen()

        修改后主程序类(gluttonous_snake.py)的完整代码:

import sys
import timeimport pygame
import randomfrom settings import Settings
from snake import Snake
from game_stats import GameStats
from button import Button
from food import Food
from scoreboard import Scoreboard
from game_sound import GameSoundclass GluttonousSnake:""" 管理游戏资源和行为的类 """def __init__(self):""" 初始化游戏并创建游戏资源 """pygame.init()# 初始化音频混合器pygame.mixer.init()# 初始化游戏声音self.snake_eat_food_sound = GameSound('snake_eat_food.mp3')self.snake_game_over_sound = GameSound('snake_game_over.mp3')self.background_sound = GameSound('snake_background_sound.mp3')self.cheer_sound = GameSound('snake_cheer_sound.mp3')self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("贪吃蛇")# 创建一个用于存储游戏统计信息的实例self.stats = GameStats(self)# 创建记分牌self.sb = Scoreboard(self)self.food = Food(self)self.snakes = []self._create_snakes()# 创建Play按钮self.play_button = Button(self, "Play")def _create_snakes(self):""" 初始化创建长度为3的蛇 """for snake_number in range(3):self._create_snake(snake_number)def _create_snake(self, snake_number):""" 创建一段蛇身 """snake = Snake(self)self.screen_rect = self.screen.get_rect()snake.x = self.settings.screen_width / 2snake.y = self.settings.screen_height / 2 + snake_number * self.settings.snake_heightsnake.rect.x = snake.xsnake.rect.y = snake.yself.snakes.append(snake)def _check_events(self):# 监视键盘和鼠标的事件for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.MOUSEBUTTONDOWN:mouse_pos = pygame.mouse.get_pos()self._check_play_button(mouse_pos)def _check_play_button(self, mouse_pos):""" 在玩家单击Play按钮时开始新游戏 """button_clicked = self.play_button.rect.collidepoint(mouse_pos)if button_clicked and not self.stats.game_active:# 重置游戏设置self.stats.game_active = True# 播放背景音乐self.background_sound.play(0)# 隐藏鼠标光标pygame.mouse.set_visible(False)self.stats.score = 0self.sb.prep_score()self.settings.snake_direction = 'up'self.settings.update_count = 0self.settings.game_speed = 1# 清空余下的蛇身self.snakes.clear()# 重新创建蛇身self._create_snakes()def _check_keydown_events(self, event):# 响应按键if event.key == pygame.K_RIGHT:if self.settings.snake_direction == 'right':self._change_speed(1)elif self.settings.snake_direction == 'left':self._change_speed(-1)else:self.settings.snake_direction = 'right'elif event.key == pygame.K_LEFT:if self.settings.snake_direction == 'left':self._change_speed(1)elif self.settings.snake_direction == 'right':self._change_speed(-1)else:self.settings.snake_direction = 'left'elif event.key == pygame.K_UP:if self.settings.snake_direction == 'up':self._change_speed(1)elif self.settings.snake_direction == 'down':self._change_speed(-1)else:self.settings.snake_direction = 'up'elif event.key == pygame.K_DOWN:if self.settings.snake_direction == 'down':self._change_speed(1)elif self.settings.snake_direction == 'up':self._change_speed(-1)else:self.settings.snake_direction = 'down'elif event.key == pygame.K_SPACE:self.stats.game_pause = not self.stats.game_pauseelif event.key == pygame.K_q:sys.exit()def _change_speed(self, add):# 改变蛇的移动速度if (self.settings.game_speed + add) > 0:self.settings.game_speed += adddef _update_snakes(self):""" 更新蛇 """snake_head = self.snakes[0]self._create_snake_head(snake_head.rect.x, snake_head.rect.y)""" 检查是否吃到食物 """eat_food = self._check_eat_food()if not eat_food:self.snakes.pop()def _check_edges(self):""" 蛇碰到边缘时采取相应的措施 """snake_head = self.snakes[0]if snake_head.check_edges():self._game_over()def _check_eat_self(self, snake_head):""" 是否碰到自己 """for snake in self.snakes:if snake.rect.colliderect(snake_head.rect):self._game_over()breakdef _game_over(self):# 播放音乐self.snake_game_over_sound.play(1)self.stats.game_active = False# 显示鼠标光标pygame.mouse.set_visible(True)def _check_eat_food(self):""" 检测蛇吃到食物 """snake_head = self.snakes[0]food = self.foodif snake_head.rect.colliderect(food.rect):self.stats.score += self.settings.food_score# 播放声音if self.stats.score % 100 == 0:self.cheer_sound.play(1)else:self.snake_eat_food_sound.play(1)self.sb.prep_score()self._update_food()return Trueelse:return Falsedef _update_food(self):""" 更新食物 """while True:if self._check_food():returndef _check_food(self):""" 检查新生成的食物是否不与蛇身及记分牌重合 """food = self.foodfood.rect.x = round(random.randrange(20, self.settings.screen_width - self.settings.snake_width * 2) / 20.0) * 20.0food.rect.y = round(random.randrange(20, self.settings.screen_height - self.settings.snake_height * 2) / 20.0) * 20.0for snake in self.snakes:if snake.rect.colliderect(food.rect) or self.sb.score_rect.colliderect(food.rect):return Falsereturn Truedef _create_snake_head(self, x, y):""" 创建蛇头 """snake = Snake(self)if self.settings.snake_direction == 'up':snake.x = xsnake.y = y - self.settings.snake_heightelif self.settings.snake_direction == 'down':snake.x = xsnake.y = y + self.settings.snake_heightelif self.settings.snake_direction == 'right':snake.x = x + self.settings.snake_widthsnake.y = yelif self.settings.snake_direction == 'left':snake.x = x - self.settings.snake_widthsnake.y = ysnake.rect.x = snake.xsnake.rect.y = snake.yself._check_eat_self(snake)self.snakes.insert(0, snake)def run_game(self):""" 开始游戏的主循环 """while True:self._check_events()if self.stats.game_active and not self.stats.game_pause:if self.settings.update_count > 500: #控制游戏速度self._update_snakes()self._check_edges()self.settings.update_count = 0self.settings.update_count += self.settings.game_speedself._update_screen()def _update_screen(self):# 每次循环时都会重绘屏幕self.screen.fill(self.settings.bg_color)self.food.draw_food()for snake in self.snakes:snake.draw_snake()# 如果游戏处于非活动状态,就绘制Play按钮if not self.stats.game_active:self.play_button.draw_button()# 显示得分self.sb.show_score()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建实例并运行游戏ai = GluttonousSnake()ai.run_game()


文章转载自:

http://8ooYRIwj.rcnyp.cn
http://RQocpxyM.rcnyp.cn
http://iyvsfGJ9.rcnyp.cn
http://lgGah8eL.rcnyp.cn
http://GuqWob5L.rcnyp.cn
http://qIUBv6Sk.rcnyp.cn
http://CegzwguK.rcnyp.cn
http://zFCdgA1K.rcnyp.cn
http://STiMpwnJ.rcnyp.cn
http://FONfZ3HB.rcnyp.cn
http://UojqVR8D.rcnyp.cn
http://gn9UoFPY.rcnyp.cn
http://irf803Ey.rcnyp.cn
http://zUJzqQEP.rcnyp.cn
http://LXx2giLm.rcnyp.cn
http://F8dFw1BR.rcnyp.cn
http://ghWZ7jFQ.rcnyp.cn
http://jDssMisT.rcnyp.cn
http://Ef7fWLdg.rcnyp.cn
http://C3FWhXX8.rcnyp.cn
http://T6bqmrUY.rcnyp.cn
http://ZMNEa1wq.rcnyp.cn
http://4U5pEaaU.rcnyp.cn
http://TLBHlOMc.rcnyp.cn
http://9wERhDw9.rcnyp.cn
http://mV97BFbq.rcnyp.cn
http://cQUvTFyQ.rcnyp.cn
http://lx9pASf4.rcnyp.cn
http://i5PyGXah.rcnyp.cn
http://FxsEyoiK.rcnyp.cn
http://www.dtcms.com/wzjs/655665.html

相关文章:

  • 微信网站怎么做的好名字现在标书都从哪个网站下载
  • 成功网站案例有哪些淄博周村网站建设定制
  • 桂平做网站公司简单网站开发实例教程
  • 计算机基础网站建设和网络安全微山网站建设
  • 做电路设计的兼职网站软件界面设计软件有哪些
  • 网站建设最简单的教程桂林有帮做公司网站吗
  • 网站未及时续费阿里云服务器 做网站
  • 工程网站建设丽水品牌网站设计
  • 网站建设功能套餐表东营推广营销公司
  • 公司网站界面如何设计WordPress 固定域名
  • 环球资源网的网站特色网站是哪个公司做的
  • 做网站怎么跟客户谈话如何做一个公司网站
  • 金乡做网站 亿九浙江职业能力建设网
  • 网站如何做市场推广番禺俊才网
  • 网站建设要注意什么厦门网站制作套餐
  • 企业网站首页设计解析凡科建站多少钱
  • 网站策划书包括哪些内容?服装定制图案
  • 一个虚拟主机空间挂两个网站凉山住房和城乡建设局网站
  • 可商用的免费素材网站奔驰高端品牌
  • 网站建设有什么样好的建设意见网站服务器租用价格多少钱一年
  • 南宁微网站制作东莞哪家网站营销公司好
  • 深圳雨棚制作江门网站推广优化
  • 宿迁公司做网站抖音代运营费用明细
  • 看装修案例的网站session WordPress
  • 爱站网长尾关键词挖掘工具电脑版百度app下载安装官方免费版
  • 手机网站列表模板天津建设科技杂志的官方网站
  • 深圳建设工程造价管理站wordpress首页设计
  • 资质升级业绩备案在哪个网站做小程序软件开发制作
  • 网站配色 蓝绿2345网址导航删除办法
  • 软件下载免费大全网站未来网站发展方向