查看: 667|回复: 0

如何使用Python游戏服务端源码语言来创建网页游戏服务端

[复制链接]

4783

主题

5079

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
18913

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2020-3-15 13:03:14 | 显示全部楼层 |阅读模式
今天小编教大家如何使用Python游戏服务端源码语言来创建网页游戏服务端。如果你能完成它,你可以被认为是一个能力相当好的Python初学者。尽管你仍然需要读更多的书,写更多的程序,但你已经有了进一步学习的基础。下一项研究只是时间、动机和资源的问题。

在这个习题中,我们不会创建一个完整的游戏,相反,我们将在习题42中为游戏创建一个“引擎”,以便游戏可以在浏览器中运行。这将包括在399000 42中重建游戏,在399000 47中混合结构,添加自动测试代码,最后创建一个可以运行游戏的网络引擎。

这是一个非常大的习题。预计你需要一周的时间来完成它。最好的方法是一点一点地来,每天晚上完成它,并确保在继续下一步之前,前一步已经正确完成。

重建习题43场比赛

您已经在两个习题中修改了gothonweb项目,这个习题将被再次修改。你学到的改进技术叫做“重构”,或者用我最喜欢的说法,“修复”重构是一个游戏服务端源码术语,指的是清理旧代码或将新函数添加到旧代码中的过程。你确实做过这样的事,但你只是不知道这个词。重构是软件开发中最常见的事情。

在这个习题中你要做的是将习题47中的可测试房间地图和习题43中的游戏结合起来,创建一个新的游戏结构。游戏的内容不会改变,但我们会“重组”它,使它有一个更好的结构。

第一步是将ex47/game.py的内容复制到gotonweb/map . py中,然后将tests/ex47_tests.py的内容复制到tests/map_tests.py中,然后再次运行nosetests以确认它们仍然可以正常工作。
注意

从现在开始,我不会再显示运行测试的输出。我假设您将回去运行这些测试,并知道什么输出是正确的。

在复制了习题47代码之后,是时候开始重构它以将映射包含在习题43中了。我会在一开始就为你准备好基本的结构,然后你需要完成map.py和map_tests.py的内容

首先要做的是使用Room类来构建地图的基本结构。

你会在教室和地图上发现一些问题。

1.我们必须对之前放置在每个房间的if-else结构部分的房间进行描述。这样,房间的秩序就不会被打乱,这对我们的游戏来说是一件好事。这是您以后要修改的内容。
2.在最初的游戏中,我们使用特殊的代码来生成一些内容,比如炸弹的激活码和船舱的选择。这一次我们将首先使用默认值,但是在接下来的附加练习中,我将要求您将这些函数添加到游戏中。
3.我为游戏中所有错误决定的失败结局写了一个通用的死亡。您需要完成此功能。你需要在原始游戏中添加所有的场景结尾,并确保代码正确运行。

4.我添加了一个标有“*”的新转换模式,以实现游戏引擎中的“捕捉所有操作”功能。

在上述代码基本编写完成后,下面是您必须继续编写的自动测试测试。

你在这习题中的任务是完成地图并让自动测试完全检查整个地图。这包括将所有普通死亡物体修正为游戏的实际失败结束。让您的代码成功运行,让您的测试尽可能全面。稍后,我们将对地图进行一些更改,然后使用这些测试来确保修改后的代码仍然可以正常工作。

会话和用户跟踪
在运行Web应用程序的特定位置,您需要跟踪一些信息并将这些信息与用户的浏览器相关联。在HTTP协议框架下,Web环境是“无状态的”,这意味着每个请求和其他请求是相互独立的。如果您请求页面A,请输入一些数据,然后单击指向页面B的链接,那么您发送到页面A的所有数据都将消失。
这个问题的解决方案是为网络应用程序建立一个小的数据存储,并给每个浏览器进程一个唯一的数字来跟踪浏览器的行为。这种存储通常由存储在磁盘上的数据库或文件来实现。在lpthw.web的小框架中很容易实现这些功能
创建引擎

你应该已经写了游戏地图和它的单元测试代码。现在你必须制作一个简单的游戏引擎来运行游戏中的房间,收集玩家的输入并记住玩家在哪里。我们将利用您刚刚学到的对话制作一个简单的引擎,它可以:
1.为新用户启动新游戏

2.向用户显示房间;

3.接收用户输入;

4.处理游戏中的用户输入;

5.显示游戏结果并继续游戏直到玩家角色死亡。

为了创建这个引擎,你需要移动bin/app.py并创建一个功能齐全的、基于会话的游戏引擎。这里的困难是,我将首先使用基本的HTML文件创建一个非常简单的版本,然后您将完成它。

你可以在这个脚本中看到更多的新东西,但是最棒的是整个基于网络的游戏引擎可以用一个小文件来完成。这个脚本中最技术性的内容是将会话带回来的行,这是在调试模式下重新加载代码所必需的,否则会话将会消失,并且游戏不会在每次刷新网页时继


在运行bin/app.py之前,您需要修改PYTHONPATH环境变量。不知道什么是环境变量?要运行一个基本的Python程序,你必须学习环境变量。像这样使用Python的

如果您使用的是视窗,请在PowerShell中输入以下内容:

对于每个shell会话,您只需要输入一次,但是如果在运行Python代码时看到导入错误,您需要执行上面的命令,或者导入错误是由您上次执行的错误引起的。

接下来,您需要删除模板/hello_form.html和模板/index.html,然后重新创建上面代码中提到的两个模板。下面是一个非常简单的模板/show_room.html供您参考。

这是用于显示游戏中房间的模板。接下来,当用户运行到地图的边界时,您需要使用一个模板来告诉用户他的角色的死亡信息,即templates/you _ die.html
看起来你有点落伍了。

再次播放
准备好这些文件,你可以做以下事情。

1.再次运行测试代码测试/app_tests.py,以便测试游戏。因为对话,你最多只能点击几次,但是你应该能做一些基本的测试。

2.删除sessions/*下的文件,并再次运行游戏以确认游戏从头开始运行。

3. 运行python bin/app.py脚本,试玩一下你的游戏。

为了实现这个功能,需要创建一个sessions/文件夹作为程序的会话存储位置,创建好以后运行这个程序,然后检查/count页面,刷新一下这个页面,看计数会不会累加上去。关掉浏览器后,程序就会“忘掉”之前的位置,这也是我们的游戏所需的功能。有一种方法可以让浏览器永远记住一些信息,不过这会让测试和开发变得更难。如果你回到/reset页面,然后再访问/count页面,你可以看到你的计数器被重置了,因为你已经关掉了这个会话。

你需要花点时间弄懂这段代码,注意会话开始时count的值是如何设为0的,另外再看看sessions/下面的文件,看能不能打开。

所以,会话其实就是使用pickle和base64这些库写到磁盘上的字典。存储和管理会话的方法很多,大概和Python的Web框架那么多,所以了解它们的工作原理并不是很重要。当然如果你需要调试或者清空会话,知道点儿原理还是有用的。

你需要和往常一样刷新和修正你的游戏,慢慢修改游戏的HTML文件和引擎,直到实现游戏需要的所有功能为止。

期末考试

你有没有觉得我一下子给了你超多的信息呢?那就对了,我想要你在学习技能的同时有一些可以用来鼓捣的东西。为了完成这个习题,我将给你最后一套需要你自己完成的练习。你会注意到,到目前为止你写的游戏并不是很好,这只是你的第一版代码而已,你现在的任务就是让游戏更加完善,实现下面的这些功能。

1.修正代码中所有我提到和没提到的bug,如果你发现了新bug,你可以告诉我。

2.改进所有的自动测试,以便可以测试更多的内容,直到你可以不用浏览器就能测到所有的内容为止。
3.让HTML页面看上去更美观一些。

4.研究一下网页登录系统,为这个程序创建一个登录界面,这样人们就可以登录这个游戏,并且可以保存游戏高分。

5.完成游戏地图,尽可能地把游戏做大,功能做全。

6.给用户一个“帮助系统”,让他们可以查询每个房间里可以执行哪些命令。

7.为游戏添加新功能,想到什么功能就添加什么功能。

8.创建多个地图,让用户可以选择他们想要玩的一张地图来进行游戏。你的bin/app.py应该可以运行提供给它的任意地图,这样你的引擎就可以支持多个不同的游戏。

9.最后,使用在习题48和习题49中学到的东西创建一个更好的输入处理器。你手头已经有了大部分必要的代码,只需要改进语法,让它和你的输入表单以及游戏引擎挂钩即可。

祝你好运!

常见问题回答

我在游戏中用了会话(`session)`,不能用nosetests测试。

你需要阅读并了解带reloader的会话:http://webpy.org/cookbook/session_with_reloader
我看到了ImportError。

错误路径,错误Python版本,PYTHONPATH没设置对,漏了__init__.py文件,拼写错误,都检查一下吧。

【GM论坛[www.gmbbs.net]免责声明】
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请告之,本站将立即删除。
   提问发帖求助请点此发帖 https://www.gmbbs.net/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表