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

商城做网站哪家好南宁网站运营优化平台

商城做网站哪家好,南宁网站运营优化平台,湖北网站定制开发价格表,零基础做网站前言 本篇文章接着之前的内容,继续对游戏功能进行优化,主要是优化游戏状态以及对应的处理。 状态 一个游戏包含多种状态,这个状态是一个可以很复杂也可以很简单的内容。条件所限,我们这个游戏的状态就比较简单: 未…

前言

本篇文章接着之前的内容,继续对游戏功能进行优化,主要是优化游戏状态以及对应的处理。

状态

一个游戏包含多种状态,这个状态是一个可以很复杂也可以很简单的内容。条件所限,我们这个游戏的状态就比较简单:

  • 未开始
  • 游戏中
  • 暂停
  • 结束

我们通过一个字段进行控制,并且将这个字段放置到setting模块中。

class Setting:"""系统设置类"""def __init__(self):-- snip --# 游戏状态:0未开始,1游戏中,2暂停,3结束self.game_status = 0

处理状态

根据不同的状态值,我们先对main模块进行简单的处理。

import pygame
from pygame.sprite import Groupimport alien_invasion.game_functions as gf
from alien_invasion.setting import Setting
from alien_invasion.ship import Shipdef run_game():"""启动游戏"""# 初始化pygamepygame.init()# 定义一个系统设置对象setting = Setting()# 新建窗口screen = pygame.display.set_mode((setting.screen_width, setting.screen_height))# 窗口命名pygame.display.set_caption(setting.caption)# 定义一个飞船对象ship = Ship(setting, screen)# 创建子弹编组bullets = Group()# 创建外星人编组aliens = Group()# 创建编组内的外星人gf.create_fleet(setting, screen, aliens)while True:if setting.game_status == 0:passelif setting.game_status == 1:# 处理监听事件gf.check_event(ship, setting, screen, bullets)# 移动飞船ship.move()# 更新子弹位置gf.update_bullets(bullets, aliens, setting, screen)# 更新外星人gf.update_aliens(aliens, setting, ship)# 刷新屏幕gf.update_screen(setting, screen, ship, bullets, aliens)elif setting.game_status == 2:passelif setting.game_status == 3:passif __name__ == '__main__':run_game()

状态对应的业务

现在,我们要对状态思考响应的游戏业务。

这里直接描述一下我个人简单预定的功能:

  1. 启动游戏,弹出窗口,显示欢迎来到游戏,按回车键开始游戏。其他所有按键不生效。
  2. 在游戏中,按下回车暂停游戏;暂停游戏时按下回车继续游戏
  3. 开始游戏后,任意时刻按下Esc键退出游戏,回到黑色窗口,显示游戏介绍,暂停一秒关闭游戏。

代码实现

我们在第二步已经简单的对状态值进行了处理,接下来就根据上面的业务在对应的状态处理部分一一填充。

首先我们处理开始游戏的状态。

开始游戏

首先我们需要在setting.game_status == 0的条件下新建一个not_start()函数,传入参数settingscreen。这两个参数一个是要回写状态值到配置模块中,一个是渲染游戏窗口需要的一些属性。

修改main模块中循环处理的部分如下:

-- snip --while True:# 没啥用,方便编写代码的时候看看代码执行情况print(setting.game_status)if setting.game_status == 0:# 处理没启动的业务逻辑gf.not_start(setting, screen)-- snip --

main模块处理好以后,我们在gf模块进行实际的业务代码编写。

在函数中,我们需要完成两个功能,一个是渲染文字,一个是监听按键事件,是否有开始游戏,那么代码编写如下:

def not_start(setting, screen):# 先渲染文字handle_text(screen)print("not_start")# 处理监听事件for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:if setting.game_status == 0:setting.game_status = 1print("开始游戏")

这里监听事件的部分没有单独拉函数出来,主要是不影响阅读,不过因为渲染文字的函数有点行数并且也算一个比较独立的功能,所以又单独创建了一个函数,后面的结束也是如此。

另外虽然我们这个时候只监听是否按下回车键的这个事件,但是点击退出窗口的监听事件,在任何地方都不能忘了,不然到时候可能你的窗口关不了,只能去通过停止程序关闭。

监听事件的代码比较简单的,就是在确认是按下了回车,状态是0的时候,回写状态值即可。

我们看看文字渲染的代码。

文字渲染我们在项目开始之前介绍pygame就提前讲过,相比大家都不陌生,看代码注释即可,代码如下:

def handle_text(screen):# 字体颜色pink = pygame.Color('#FFFFFF')# 使用Arial字体创建一个字体对象,32号,加粗,倾斜font = arial_bold = pygame.font.SysFont('Arial', 32, bold=True, italic=True)# 渲染文本text_surface1 = font.render("Welcome to the Game Of Alien Invasion", True, pink)# 获取文件的矩形区域text_rect1 = text_surface1.get_rect()# 设置文本Y坐标320,居中位置text_rect1.midtop = (screen.get_width() // 2, 320)# 渲染文本text_surface2 = font.render("Press The Enter Key To Start The Game", True, pink)# 获取文件的矩形区域text_rect2 = text_surface2.get_rect()# 设置文本Y坐标420,居中位置text_rect2.midtop = (screen.get_width() // 2, 420)# 绘制文本screen.blit(text_surface1, text_rect1)screen.blit(text_surface2, text_rect2)# 更新显示pygame.display.flip()

运行main模块,按下回车。

在这里插入图片描述
可以看到文字正常渲染,并且输出栏一直在出输出当前状态。

如果你觉得画面单调,可以自己加点东西渲染,pygame渲染图片这些相比也不陌生了。

按下回车,游戏正常开始!

在这里插入图片描述
可以看到,已经进入到游戏页面,并且输出栏的状态值也变成了1。

游戏中

游戏中的处理比较简单,因为我们之前已经完成了游戏中的代码编写,所以我们只需要在游戏中的监听事件中加上回车键的监听事件暂停游戏。

ps: 这里其实也可以结束游戏,代码我先写上,但是不操作。业务代码也不复杂,就是多加一个Esc键的监听事件。

gf模块中的check_keydown_events()函数代码修改如下:

def check_keydown_events(event, ship, setting, screen, bullets):"""响应按键"""if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.key == pygame.K_UP:ship.moving_top = Trueelif event.key == pygame.K_DOWN:ship.moving_bottom = Trueelif event.key == pygame.K_SPACE:fire(bullets, screen, setting, ship)elif event.key == pygame.K_q:sys.exit()elif event.key == pygame.K_RETURN:if setting.game_status == 1:setting.game_status = 2print("暂停游戏")elif event.key == pygame.K_ESCAPE:setting.game_status = 3print("游戏结束")

启动main模块,开始游戏后再按回车,效果如下:

在这里插入图片描述

可以看到,我们的飞船,子弹,外星人全部暂停住了,输出栏一直打印状态也变成了2(暂停)。

屏幕中显示了一些文字,这些其实是暂停的业务。

我们马上进行暂停的业务代码编写。

暂停游戏

参考开始游戏的实现,我们在暂停的分支下调用一个函数stop()

main模块循环部分代码如下:

	-- snip --while True:# 没啥用,方便编写代码的时候看看代码执行情况print(setting.game_status)if setting.game_status == 0:# 处理没启动的业务逻辑gf.not_start(setting, screen)elif setting.game_status == 1:# 处理监听事件gf.check_event(ship, setting, screen, bullets)# 移动飞船ship.move()# 更新子弹位置gf.update_bullets(bullets, aliens, setting, screen)# 更新外星人gf.update_aliens(aliens, setting, ship)# 刷新屏幕gf.update_screen(setting, screen, ship, bullets, aliens)elif setting.game_status == 2:gf.stop(setting, screen)-- snip --

同样,我们去到gf模块创建stop()函数并实现相应的功能,代码如下:

-- snip --
def stop(setting, screen):handle_stop_text(screen)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:if setting.game_status == 2:setting.game_status = 1print("继续游戏")elif event.key == pygame.K_ESCAPE:setting.game_status == 3:print("结束游戏")
-- snip --

代码依旧分两部分实现,渲染文字和监听事件。在暂停的监听事件中我们和开始一样,监听关闭窗口,回车和结束,并在回车事件中回写状态值,让游戏继续运行,在Esc时间中结束游戏。

文字渲染部分代码如下:

def handle_stop_text(screen):# 字体颜色pink = pygame.Color('#000000')# 使用Arial字体创建一个字体对象,32号,加粗,倾斜font = arial_bold = pygame.font.SysFont('Arial', 32, bold=True, italic=True)# 渲染文本text_surface1 = font.render("Game Stop", True, pink)# 获取文件的矩形区域text_rect1 = text_surface1.get_rect()# 设置文本Y坐标50,居中位置text_rect1.midtop = (screen.get_width() // 2, 320)# 渲染文本text_surface2 = font.render("Press The Enter Key To restore The Game", True, pink)# 获取文件的矩形区域text_rect2 = text_surface2.get_rect()# 设置文本Y坐标50,居中位置text_rect2.midtop = (screen.get_width() // 2, 420)# 绘制文本screen.blit(text_surface1, text_rect1)screen.blit(text_surface2, text_rect2)# 更新显示pygame.display.flip()

基本上就是复制开始的文字渲染,改了下文字内容。

效果的话这里就不展示了,就是暂停开始,开始暂停这一套。

结束游戏

在游戏中和暂停的时候,我们都可以通过按键Esc实现游戏结束。

main模块的改动依旧是调用一个结束函数,但是结束函数不需要回写状态值,所以我们只需要一个screen参数。

代码如下:

while True:# 没啥用,方便编写代码的时候看看代码执行情况print(setting.game_status)if setting.game_status == 0:# 处理没启动的业务逻辑gf.not_start(setting, screen)elif setting.game_status == 1:# 处理监听事件gf.check_event(ship, setting, screen, bullets)# 移动飞船ship.move()# 更新子弹位置gf.update_bullets(bullets, aliens, setting, screen)# 更新外星人gf.update_aliens(aliens, setting, ship)# 刷新屏幕gf.update_screen(setting, screen, ship, bullets, aliens)elif setting.game_status == 2:gf.stop(setting, screen)elif setting.game_status == 3:gf.end(screen)

gf模块改动如下:

def end(screen):# 重新填充屏幕screen.fill((0, 0, 0))# 渲染文字handle_end_text(screen)# 休眠一秒sleep(1)# 退出pygame.quit()sys.exit()

和之前比对有一点不同,多了几部,其实没有特别含义,就是看起来流畅好看一点。

文字渲染代码如下:

def handle_end_text(screen):# 字体颜色pink = pygame.Color('#FFFFFF')# 使用Arial字体创建一个字体对象,32号,加粗,倾斜font = arial_bold = pygame.font.SysFont('Arial', 48, bold=True, italic=True)# 渲染文本text_surface1 = font.render("Game Over", True, pink)# 获取文件的矩形区域text_rect1 = text_surface1.get_rect()# 设置文本Y坐标50,居中位置text_rect1.midtop = (screen.get_width() // 2, screen.get_height() // 2)# 绘制文本screen.blit(text_surface1, text_rect1)# 更新显示pygame.display.flip()

运行效果如下:

在这里插入图片描述

结尾

今天的内容就是这些,设定状态值,并且在对应的状态中处理不同的逻辑,渲染不同的画面。

当然我们是学习,所以内容都比较简单,有兴趣的话可以深入一下加点自己的元素进去。

后面我们继续优化游戏功能,加油!!!


文章转载自:
http://calciphylaxis.ddfp.cn
http://tutee.ddfp.cn
http://leeringly.ddfp.cn
http://sequel.ddfp.cn
http://indecisive.ddfp.cn
http://soporose.ddfp.cn
http://yttrotungstite.ddfp.cn
http://apfelstrudel.ddfp.cn
http://trixie.ddfp.cn
http://portfolio.ddfp.cn
http://osar.ddfp.cn
http://compare.ddfp.cn
http://ruminant.ddfp.cn
http://loathsome.ddfp.cn
http://grandly.ddfp.cn
http://tetrasporangium.ddfp.cn
http://arca.ddfp.cn
http://elkhound.ddfp.cn
http://assiut.ddfp.cn
http://anthranilate.ddfp.cn
http://cockbrain.ddfp.cn
http://opinionative.ddfp.cn
http://stammer.ddfp.cn
http://ebullient.ddfp.cn
http://hiron.ddfp.cn
http://sepoy.ddfp.cn
http://pinaceous.ddfp.cn
http://carpel.ddfp.cn
http://ct.ddfp.cn
http://tenuity.ddfp.cn
http://alphosis.ddfp.cn
http://revanchard.ddfp.cn
http://roentgenoscopy.ddfp.cn
http://amish.ddfp.cn
http://consular.ddfp.cn
http://pinitol.ddfp.cn
http://brawny.ddfp.cn
http://boehmenism.ddfp.cn
http://mooneye.ddfp.cn
http://retentate.ddfp.cn
http://zionism.ddfp.cn
http://cgh.ddfp.cn
http://broaden.ddfp.cn
http://madia.ddfp.cn
http://campshed.ddfp.cn
http://booth.ddfp.cn
http://trackster.ddfp.cn
http://virogenic.ddfp.cn
http://coon.ddfp.cn
http://straight.ddfp.cn
http://bushwhacking.ddfp.cn
http://ballroom.ddfp.cn
http://pronunciamento.ddfp.cn
http://horridly.ddfp.cn
http://priderite.ddfp.cn
http://gentisin.ddfp.cn
http://nahum.ddfp.cn
http://devolutionist.ddfp.cn
http://binit.ddfp.cn
http://hydrilla.ddfp.cn
http://bivinyl.ddfp.cn
http://noodle.ddfp.cn
http://oud.ddfp.cn
http://deckhouse.ddfp.cn
http://rebloom.ddfp.cn
http://kurd.ddfp.cn
http://ratty.ddfp.cn
http://lacewing.ddfp.cn
http://compliable.ddfp.cn
http://eurytopicity.ddfp.cn
http://unrestricted.ddfp.cn
http://micrococcal.ddfp.cn
http://withering.ddfp.cn
http://centisecond.ddfp.cn
http://monadic.ddfp.cn
http://spitsticker.ddfp.cn
http://phony.ddfp.cn
http://bromid.ddfp.cn
http://unhook.ddfp.cn
http://arborvitae.ddfp.cn
http://indelible.ddfp.cn
http://diphtherial.ddfp.cn
http://vestigial.ddfp.cn
http://treck.ddfp.cn
http://sarcolemma.ddfp.cn
http://neurotic.ddfp.cn
http://inconclusible.ddfp.cn
http://interdenominational.ddfp.cn
http://defeature.ddfp.cn
http://sulfamethoxypyridazine.ddfp.cn
http://shadberry.ddfp.cn
http://registral.ddfp.cn
http://footwell.ddfp.cn
http://songkhla.ddfp.cn
http://hybridizable.ddfp.cn
http://logaoedic.ddfp.cn
http://houseclean.ddfp.cn
http://abrupt.ddfp.cn
http://exhortatory.ddfp.cn
http://quadrantal.ddfp.cn
http://www.hrbkazy.com/news/88332.html

相关文章:

  • 印度人做网站重庆森林经典台词截图
  • 自己做发卡网站长如何推广普通话
  • 网站建设案例教程视频教程推广什么软件可以长期赚钱
  • 外贸皮包网站模板百家号官网
  • 上海专业高端网站建设服务器搜索引擎优化的核心及内容
  • 一个网站能用asp c自动点击器免费下载
  • 旅游网站设计模板免费网上销售平台
  • 深圳设计网站建设公司百度企业认证怎么认证
  • 国外一个做ppt的网站怎么自己注册网站
  • 深圳乐安居网站谁做的短视频培训要多少学费
  • 做网站重庆百度知道首页登录
  • 辽宁朝阳网站建设公司学电商出来一般干什么工作
  • 网站如何做搜索引擎关联词有哪些五年级
  • 百度只收录wordpressseo网站排名厂商定制
  • 做企业网站需要提供什么资料微博付费推广有用吗
  • b2c网站大全发布平台百度网盘首页
  • 做环氧地坪工程网站娃哈哈软文推广
  • vs做网站用3层架构网易搜索引擎
  • 做外贸无法登录国外网站怎么办企业网站推广策略
  • 做it的中国企业网站百度平台
  • 三级网站做爰公司网站推广运营
  • 梧州网站建设公司百度识图网页版
  • 建好的网站怎么测试怎么做一个自己的网站
  • 做网站平面一套多少钱上海百度公司总部
  • 网站后台标签切换最新新闻实时新闻
  • tomcat网站开发百度指数搜索热度排行
  • 扬州市城市建设投资公司网站建网站流程
  • 做网站需要多大空间五个常用的搜索引擎
  • 安徽住房和城乡建设厅seo关键词如何布局
  • 做网站的前端技术品牌推广方案策划书