程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。

创建Web游戏今天小编教大家如何用Python编程语言创建Web游戏,如果你能完成,你就可以算是一个能力相当不错的Python初学者了。虽然还需要多读一些书,多

大家好,今天来为大家分享程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

今天我将教大家如何使用Python编程语言创建网页游戏。如果你能完成它,你就可以算是一个具有相当能力的Python初学者了。虽然还需要看更多的书,写更多的程序,但是你已经具备了进一步学习的基础。接下来的学习只是时间、动力和资源的问题。

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

这是一个巨大的练习。预计需要一周到一个月的时间才能完成。最好的方法是一点一点地做,每晚完成一点,并确保上一步已正确完成,然后再进行下一步。

重构习题43中的游戏

您已在两个练习中修改了Gothonweb 项目,您将在本练习中再次修改它。您学习的修改技术称为“重构”,或者我喜欢称之为“修复”。重构是一个编程术语,指清理旧代码或向旧代码添加新功能的过程。您以前实际上做过类似的事情,只是不知道术语。重构是软件开发中最常见的事情。

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

注意

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

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

1. 我们必须将房间描述预先放置在每个房间的if-else 结构部分中。这样房间的顺序就不会被打乱,这对我们的游戏来说是一件好事。这是您稍后将修改的内容。

2在原版游戏中,我们使用了特殊的代码来生成一些内容,比如炸弹激活键码、船舱选择等,这次我们在制作游戏时会使用默认值,但是在后面的附加练习中,我会要求您将这些功能添加到游戏中。

3.我为游戏中所有错误决策的失败结局写了一个generic_death,你需要完成这个功能。您需要添加原始游戏的所有结局并确保代码正确运行。

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

上面的代码基本写完了,接下来就是必须继续写的自动测试tests/map_test.py了。

地图测试.py

1 from noose.tools import *2 from gothonweb.map import *3 4 def test_room():5 gold=Room(‘GoldRoom’, 6 ”’这个房间里有金子,你可以抢。北边有a7门。 ”’)8 assert_equal(gold.name, ‘GoldRoom’)9 assert_equal(gold.paths, {})10 11 def test_room_paths():12 center=Room(‘Center’, ‘测试室位于中心。’)13 North=Room(‘North’, ‘北边的测试室。’)14 South=Room(‘South’, ‘南边的测试室。’)15 16 center.add_paths({‘north’: North, ‘南边’: 南})17 assert_equal(center.go(‘北’), 北)18 assert_equal(center.go(‘南’), 南)19 20 def test_map():21 start=Room(‘开始’, ‘你可以向西走,进入一个洞。’)22 west=Room(‘Trees’, ‘这里有树,你可以向东走。’)23 down=Room(‘Dungeon’, ‘这里很黑,你可以走向上。’)24 25 start.add_paths({‘west’: west, ‘down’: down})26 west.add_paths({‘east’: start})27 down.add_paths({‘up’: start}) 28 29assert_equal(start.go(‘west’), west)30assert_equal(start.go(‘west’).go(‘east’),start)31assert_equal(start.go(‘down’).go( ‘向上’),开始)32 33 def test_gothon_game_map():34 assert_equal(START.go(’射击!’),generic_death)35 assert_equal(START.go(’闪避!’),generic_death)36 37 room=START.go (‘讲一个笑话’)38 assert_equal(room, Laser_weapon_armory) 您在本练习中的任务是完成地图并允许自动化测试全面检查整个地图。这包括将所有generic_death 对象修复为游戏中实际失败的结局。让您的代码成功运行并使您的测试尽可能全面。稍后我们将对地图进行一些修改,这些测试将用于确保修改后的代码仍然可以正常工作。

会话和用户跟踪

在运行的Web 应用程序中的某个位置,您需要跟踪一些信息并将其与用户的浏览器关联起来。在HTTP协议的框架中,Web环境是“无状态的”,这意味着你的每个请求都是独立于其他请求的。如果您请求页面A,输入一些数据,然后单击页面B 的链接,则您发送到页面A 的所有数据都将消失。

此问题的解决方案是为Web 应用程序设置一个小型数据存储,并为每个浏览器进程提供一个唯一的编号,以跟踪浏览器正在执行的操作。这种存储通常使用数据库或存储在磁盘上的文件来实现。在lpthw.web这个小框架中实现这样的功能是非常容易的。这是一个例子。

会话.sample.py

1 导入web2 3 web.config.debug=False4 5 urls=(6 ‘/count’, ‘count’,7 ‘/reset’, ‘reset’8 )9 app=web.application(urls, locals())10 store=web.session.DiskStore(‘sessions’)11 session=web.session.Session(app, store, 初始化=[‘count’: 0])12 13 类count:14 def GET(self):15 session.count +=116 return str(session.count)17 18 class reset:19 def GET(self):20 session.kill()21 return ”22 23 if __name__==’__main__’:24 app.run()为了实现这个功能,你需要创建一个sessions/文件夹作为程序的session存储位置。创建完成后,运行程序,然后检查/count 页面并刷新页面以查看计数是否累加。关闭浏览器后,程序会“忘记”之前的位置,这正是我们游戏所需要的。有一种方法可以让浏览器永远记住一些信息,但这使得测试和开发变得更加困难。如果您返回到/reset 页面,然后访问/count 页面,您可以看到您的计数器已重置,因为您已经关闭了会话。

您需要花一些时间来理解这段代码。请注意会话启动时计数值如何设置为0。另外查看sessions/下的文件是否可以打开。以下是我打开Python 会话并解码的方法:

导入pickle导入base64 base64.b64decode(open(‘sessions/XXXXX’).read())'(dp1\nS’count’\np2\nI1\nsS’ip’\np3\nV127.0.0.1\np4\nsS ‘session_id’\np5\nS’XXXX’\np6\ns.’ x=base64.b64decode(open(‘sessions/XXXXX’).read()) pickle.loads(x){‘count’: 1, ‘ip ‘: u’127.0.0.1’, ‘session_id’: ‘XXXXX’}所以,会话实际上是使用pickle、base64等库写入磁盘的字典,存储和管理会话的方法有很多种,大概有以下几种。 Python的web框架有很多,所以了解它们的工作原理并不是很重要,当然,如果你需要调试或清除会话,了解一点还是有用的。

创建引擎

您应该已经编写了游戏地图及其单元测试代码。现在,您被要求制作一个简单的游戏引擎来运行游戏中的各个房间,收集玩家的输入并记住玩家的位置。我们将使用您刚刚学到的对话来制作一个简单的引擎:

1、针对新用户推出新游戏;

2向用户展示房间;

3.接收用户输入;

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

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

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

应用程序.py

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。

1 import web2 from gothonweb import map3 4 urls=(5 ‘/game’, ‘GameEngine’,6 ‘/’, ‘Index’,7 )8 9 app=web.application(urls, globals())10 11 # 小如果web.config.get(‘_session’) 为None:13 store=web.session.DiskStore(‘sessions’)14 session=web.session.Session(app, store,15initializer=[ ‘房间’: 无])16 web.config._session=session17 else:18 session=web.config._session19 20 render=web.template.render(‘templates/’, base=’layout’)21 22 23 class Index(object ):24 def GET(self):25 # 用于以起始值“设置”会话26 session.room=map.START27 web.seeother(‘/game’)28 29 30 class GameEngine(object):31 32 def GET( self):33 if session.room:34 return render.show_room(room=session.room)35 else:36 # 为什么在这里?你需要它吗?37 return render.you_died()38 39 def POST(self):40 form=web. input(action=None)41 42 # 这里有一个错误,你能修复它吗?43 if session.room and form.action:44 session.room=session.room.go(form.action)45 46 web.seeother(‘ /game’)47 48 if __name__==’__main__’:49 app.run() 在这个脚本中你可以看到更多的新东西,但最棒的是整个基于网页的游戏引擎只需要一个小文件。这是可以做到的。该脚本中最具技术性的部分是恢复会话的行。这对于在调试模式下重新加载代码是必需的。否则,每次刷新网页时,会话就会消失,游戏将无法继续。

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

在终端中输入以下内容:

导出PYTHONPATH=$PYTHONPATH:如果您使用的是Windows,请在PowerShell 中输入以下内容:

$env:PYTHONPATH=’$env:PYTHONPATH;’你只需要为每个shell 会话输入一次,但是如果你在运行Python 代码时看到导入错误,你需要执行上面的命令,或者因为你上次执行错误导致了导入错误。

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

show_room.html

$def with (room)h1 $room.name /h1pre$room.description/pre$if room.name==’death’: pa href=’/’再玩一次?/a/p$else: p form action=’ /game’ method=’POST’ – input type=’text’ name=’action’ input type=’SUBMIT’ /form /p这个用于显示游戏中房间的模板。接下来,需要使用一个模板,当用户跑到地图边缘时告诉用户其角色的死亡信息,即templates/you_died.html 模板。

你_死了.html

h1你死了!/h1p看起来你已经死了。/ppa href=’/’再玩一次/a/p准备好这些文件后,你可以做以下事情。

1. 再次运行测试代码tests/app_tests.py,即可测试游戏。由于会话的存在,您可能无法实现多次点击,但您应该能够进行一些基本测试。

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

3. 运行python bin/app.py 脚本来尝试您的游戏。

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

期末考试

有没有感觉我一下子给了你很多信息?是的,我希望你在学习技能的同时能有一些可以修改的东西。为了完成这个练习,我将为您提供最后一组练习,您需要自己完成。你会发现你到目前为止写的游戏并不是很好。这只是您的代码的第一个版本。你当前的任务是让游戏更加完善,实现以下功能。

1.修复代码中我提到的和没有提到的所有bug。如果您发现新的错误,可以告诉我。

2改进所有自动化测试以测试更多内容,直到您无需浏览器即可测试所有内容。

3.使HTML页面看起来更加美观。

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

5. 完善游戏地图,使游戏尽可能大并具备所有功能。

6为用户提供一个“帮助系统”,以便他们可以查询每个房间中可用的命令。

7向游戏添加新功能,添加您想到的任何功能。

8. 创建多张地图并允许用户选择他们想要玩的一张。您的bin/app.py 应该能够运行提供给它的任何地图,因此您的引擎可以支持多种不同的游戏。

9最后,使用您在练习48 和49 中学到的知识来创建更好的输入处理器。您手头上已经有了大部分必要的代码,您只需要改进语法并将其连接到您的输入表单和游戏引擎即可。

祝你好运!

常见问题回答

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

您需要阅读并理解带有重新加载器的会话:http://webpy.org/cookbook/session_with_reloader。

我看到了ImportError。

路径错误、Python 版本错误、PYTHONPATH 设置不正确、缺少__init__.py 文件、拼写错误,全部检查。

用户评论

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
命该如此

一直想学习 Python 写游戏,但这篇文章太棒了!案例讲解清晰易懂,感觉完全可以跟着做一遍尝试!

    有12位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
瑾澜

标题写的确实像我这种小白读起来很诱人哈哈!可惜我现在Python基础还比较弱,等练练级后再来试试看吧。

    有6位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
墨城烟柳

终于找到一篇用Python做网页游戏的教程了!之前一直是理论学习,现在有实际案例就方便多了,期待能顺利完成这个入门项目。

    有17位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
余温散尽ぺ

我接触过一些Web游戏开发框架,感觉Python的优势在于代码简洁易读。这款案例应该很适合初学者快速上手,期待看到更多丰富的案例分享!

    有6位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
七级床震

网页游戏好玩,但做起来难度还是蛮大的吧?这位作者说轻松入门有点浮夸,毕竟需要一定的编程基础才能理解这些代码。

    有10位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
一生只盼一人

我尝试了教程里的部分内容,发现Python确实很适合开发Web游戏,语法简单直观。期待能深入学习和实践,打造出自己喜欢的游戏作品!

    有14位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
裸睡の鱼

这个案例的思路很有启发性,可以作为基础,再去探索更复杂的网页游戏开发技术。感觉Python确实是一个强大的工具!

    有10位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
素颜倾城

对于新手来说,直接上手做Web游戏有点难度吧?还是先熟悉下Python的基础知识比较好,例如数据结构和算法等。建议添加一些入门学习资源。

    有7位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
。婞褔vīp

虽然我之前做过一些网页游戏的开发,但Python的开发方式还是比较新颖。这个案例可以帮助我学习新的技术和思路,扩展我的游戏开发能力范围。

    有13位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
抚涟i

教程内容确实详细,代码示例也很清晰易懂。新手想学习Web游戏开发,这家Python就不错的选择!

    有15位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
花容月貌

说“轻松入门”,可能对于已经学习过编程的读者来说比较容易理解,但对于零基础的新手来说,还是需要一定的学习门槛和耐心才能上手。

    有12位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
你的眸中有星辰

这个案例很有创意! 能够用Python轻松创作Web游戏确实很吸引人。希望以后能看到更多这样的分享,让越来越多的人了解Python的魅力!

    有17位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
心悸╰つ

感觉网页游戏开发技术越来越普及了,未来掌握一些Python开发技巧也将会越来越重要!期待学习到更多的知识和技能,打造出属于自己的独特作品。

    有5位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
陌上花

学习Python做Web游戏需要一定的编程基础,如果没有任何经验的人可能会觉得比较困难。但坚持学习和实践总能收获成果!

    有18位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
青衫负雪

网页游戏行业竞争激烈,开发优秀的网页游戏更考验技术实力和创意想法。希望通过学习这个案例,能提升自己的编程能力和游戏设计水平!

    有9位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
有你,很幸福

做Web游戏确实很有趣!不过Python并不是唯一的语言选择,其他语言如JavaScript和C#也有很多好资源可以参考。选择适合自己程度的语言才是最重要的。

    有7位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
◆乱世梦红颜

虽然这个案例看起来很吸引人,但我还是觉得在动手实践之前需要先进行一些编程基础的学习,否则很容易遇到各种困惑和问题!

    有15位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
青瓷清茶倾城歌

非常赞赏作者分享这种优秀教程! 期待通过学习Python创造出更有趣、更有挑战性的网页游戏,并与其他开发者交流和学习!

    有8位网友表示赞同!

程序员如何使用Python编程来创建网页游戏。完成此案例即可轻松上手。
清羽墨安

这个案例让我想起了自己最初接触编程的感受,虽然会有各种挑战,但只要坚持下去就能不断进步!

    有13位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/173014.html

(0)
小su的头像小su
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注