笨方法学python是一本不错的python入门书籍。
书的最后一节是一个web版的游戏程序,以下是程序代码:

1.项目的目录结构如下所示:
skeleton\
    app.py
    map.py
    templates\
        layout.html
        show_room.html
        you_died.html

2.游戏地图结构 map.py
其中Room类是游戏场景,包括场景名称 name,描述 description,通往下一场景的可能路径集合 paths。

定义了游戏中设计到的7个场景。

# -*- coding:utf-8 -*-
class Room(object):def __init__(self, name, description): self.name = name self.description = description self.paths = {}  def go(self, direction): return self.paths.get(direction, None) def add_paths(self, paths): self.paths.update(paths)central_corridor = Room("Central Corridor",
"""
#25外星战机入侵了你的飞船,并且摧毁了你的部队。你是最后一个幸存者,你的最终任务是从武器室拿到炸弹,将炸弹放在驾驶舱,跳进分离仓之后,炸掉飞船。
你现在正在往武器室跑去,这时,一个外星人跳了出来,可怕的红色皮肤,暗淡肮脏的牙齿,丑陋的服装围绕着他那充满憎恶的身体。他正在关闭通往武器室的大门,并且掏
出武器对准了你。
"""
)laser_weapon_armory=Room("Laser Weapon Armory",
"""
幸运的是你知道外星人是由意念组成的。
你讲了一个你知道的外星笑话。
&$%@#$#%#@*&^$%$@#^&@%~$@%%!@~^^@#
外星人停止了动作,试着不发出笑声,最终禁不住大笑起来,并且停不下来。
当他笑的时候,你跑上前去,一枪命中他的眉心,将他放倒。然后跳进武器室。
你一个前空翻进入武器室,仔细地检查武器室是否藏有更多的外星人。死一般的寂静,太安静了。
你站起来,跑向武器室的角落,在盒子里找到了炸弹。盒子上有一个键盘,你需要输入密码才能将炸弹取出来。如果你输错10次,炸弹将永远被锁住无法取出。密码是4位数>字。
"""
)the_bridge=Room("The Bridge",
"""
盒子咔哒一声打开了,密封破裂,毒气逸出。
你一把抓起炸弹,尽可能快递跑向驾驶舱,你必须把炸弹安置在合适的地点。
你闯入驾驶舱,手臂下夹着炸弹,惊奇地发现有5个外星人正在试图控制飞船。他们中的每一个都比上一个拥有更加丑陋的服装。他们没有拿出武器,因为他们看见了你手臂>下的炸弹,并且不希望引爆它。
"""
)escape_pod=Room("Escape Pod",
"""
你拉出手臂下炸弹的导火线,外星人们举起手来,开始流汗。
你缓慢地退向门口,打开门,然后小心翼翼地把炸弹放在地上,拉出导火线。然后跳出驾驶舱,按下关闭按钮,门锁住了,外星人们无法逃出去。
现在炸弹已经安放好了,你跑向逃生通道。
你不顾一切地冲过飞船,以确保在整个飞船爆炸之前到达分离仓。看起来没有外星人在船上了,所以几乎没有遇到任何阻碍。你成功到达分离仓,然后你需要选择一个。他们
中的一些已经被摧毁了,但是你没有时间去检查。总共有5个分离仓,你将选择哪一个呢?
"""
)the_end_winner=Room("The End",
"""
你跳进了2号分离舱 ,按下发动按钮。分离舱很容易地向下方的地球滑去。当它飞向地球时,你往回看,发现你的飞船像一颗明亮的星星一样炸开了,同时炸掉了恶灵的飞船
。你赢了!
"""
)the_end_loser=Room("The End",
"""
你随便跳进一个分离舱,按下发动按钮。分离舱逃向未知的空间,然后因为外壳破裂而爆炸,把你的身体压成肉酱。
"""
)
escape_pod.add_paths({'2':the_end_winner,'*':the_end_loser
})generic_death=Room("death","You died.")the_bridge.add_paths({'throw the bomb':generic_death,'slowly place the bomb':escape_pod
})laser_weapon_armory.add_paths({'0132':the_bridge,'*':generic_death
})central_corridor.add_paths({'shoot!':generic_death,'dodge!':generic_death,'tell a joke':laser_weapon_armory
})START=central_corridor

3.游戏引擎设计
游戏引擎,也就是我们的web应用程序入口,定义了起始场景。将场景作为参数传递给场景信息显示模板show_room.html,显示当前场景描述信息。玩家输入动作指令,提交表单后,根据当前场景以及输入的指令,确定下一场景并显示。因为Http协议的无状态性,当前场景可以通过两种方式传递:(1)通过web.py框架的session机制 (2)通过<input type="hidden" value="">隐藏域的方式。这里我们选择第一种方式。

import web
from map import *
import pdb
urls=('/game','GameEngine','/','Index',
)app=web.application(urls,globals())if web.config.get('_session') is None:store = web.session.DiskStore('sessions')session = web.session.Session(app,store,initializer={'room':None,'count':0})web.config._session = session
else:session = web.config._session
render = web.template.render('templates/',base="layout")class Index(object):def GET(self):session.room = START#输入错误密码次数初始化session.count = 0 web.seeother("/game")class GameEngine(object):def GET(self):if session.room:return render.show_room(room=session.room)else:#场景为None,则跳转到death界面return render.you_died()def POST(self):form = web.input(action=None)if session.room and form.action:result = session.room.go(form.action)
#                       pdb.set_trace()#如果你输错10次,炸弹将永远被锁住无法取出if session.room.name=='Laser Weapon Armory' and (result==None or result.name=='death') and session.count<10:#输入错误密码次数累计session.count=session.count+1else:session.room = resultweb.seeother("/game")if __name__=="__main__":app.run()

4.接着创建模板页,模板放在templates文件夹下.
mkdir templates
首先创建一个基础模板页 layout.html

$def with (content)
<html>
<head>
<title>Gothons From Planet Percal #25</title>
</head>
<body>
$:content
</body>
</html>

场景信息显示页面  show_room.html

$def with (room)
<h1>$room.name</h1>
<pre>
$room.description
</pre>
$if room.name=="death":<p><a href="/">Play Again?</a></p>
$else:<p><form action="/game" method="POST">-<input type="text" name="action"><input type="SUBMIT"></form></p>

场景为None失败,提示界面 you_died.html

<h1>You Died!</h1>
<p>Looks like you bit the dust</p>
<p><a href="/">Play Again</a></p>

5.运行:python app.py

6.结果:

python--笨方法学python 习题52相关推荐

  1. 笨方法学python 习题37

    还是在笨方法学python中... 本节的习题是看一下作者列出的python中的各种运算符,尝试来理解这些符号. 在这里,我只列出了一些自己不会的,通过查百度得到得答案,这里来列举一下. (另外有不怎 ...

  2. 笨方法学python习题4

    变量和命名 #笨方法学python_习题4#定义变量 cars = 100 space_in_a_car = 4.0 drivers = 30 passengers = 90#计算 cars_not_ ...

  3. 笔记 | 笨方法学Python

    整理 | 阿司匹林 出品 | 人工智能头条(公众号ID:AI_Thinker) Python 有多好应该不用多说了,毕竟它是"钦定的"最接近 AI 的语言.(当然,PHP 才是最好 ...

  4. 《 笨方法学 Python 》_ 目录

    < 笨方法学 Python >(第 3 版)书中代码是 Python 2 版本,本着学习 Python 3 的目的,用 Python 3 完成本书的习题,代码也已上传到 Github. 作 ...

  5. 笨方法学Python(二)

    笨方法学Python,习题16 - 21 版本:3.8.0 编辑器:Visual Studio Code 习题16到21讲的是文件的读写和函数的基础,可以通过一个实例来同时练习他们.在下列情景中,我将 ...

  6. 笨方法学python 15章疑问

    ** 笨方法学python 15章疑问 在15张中教我们读取文件,但是当我测试能否打开我之前写的py格式的文本时出现了这一幕 文件打开后然后又出现了 File "15.py", l ...

  7. 《笨方法学python》_《笨办法学Python》 第46课手记

    <笨办法学Python> 第46课手记 这节课制作了一个Python的项目骨架,花了我一个晚上和一个早上的时间,原因是我下载的pdf里面只有OX S的命令行,而没有win下的.我为此在知道 ...

  8. 笨方法学python第四版当当_“笨办法”学Python(第3版)

    ZedShaw完善了这个堪称世上较好的Python学习系统.只要跟着学习,你就会和迄今为止数十万Zed教过的初学者一样获得成功. 在这本书中,你将通过完成52个精心设计的习题来学会Python.阅读这 ...

  9. 《笨方法学PYTHON》——fourteenthlesson

    习题27:记住逻辑关系 这一道习题讲了些逻辑运算,属于计算机的基础知识 and--与 or--或 not--非 !=(not equal)--不等于 ==(equal)--等于 >=(great ...

  10. python求15 17 23 65 97的因数_笨方法学python,Lesson15,16,17

    Exercise 15 代码 from sys import argv script, filename = argv txt = open(filename) print "Here is ...

最新文章

  1. (C++)1009 Product of Polynomials
  2. FastDFS分布式文件系统工作原理
  3. java 字符串缓冲池 String缓冲池
  4. 介绍OpenHub框架
  5. 大涨50%之后 瑞幸咖啡美股盘前再涨逾30%
  6. python怎么打印路径,python 打印路径的几种结果
  7. 不用找,你想要的凹凸贴图素材都在这里
  8. perl novel可变剪接识别(3)
  9. vue脚手架安装时出现Error EPERM operation not permitted这个错误
  10. 为企业出海“搭桥”,汇量科技靠什么出圈?
  11. 摩托车头盔防护膜—给你不一样的安全感
  12. 微信公号开发之图文消息全攻略
  13. 安卓实现截图功能的两种方式
  14. G6309列车02车05D号
  15. 年轮广场-NC13583(暴力)
  16. 个税起征点上调至5000,用Python算一算能留下多少私房钱
  17. Java中String类的学习
  18. JDK环境配置与含义
  19. python有什么好玩的书_史上最全的Python书排行榜|你想知道的都在这里
  20. replace()中的/g是什么意思?

热门文章

  1. 中国古典养生术中的心理放松的方法
  2. C语言使用EsayX库实现简易贪吃蛇
  3. 用C语言写一个可以选择关卡添加关卡的小游戏,推箱子
  4. 转行软件测试薪资10K | 手中有粮心中有底,在任何时候都是真理
  5. 科目三考试总结--附送马陆驾校考点路线图
  6. 线性代数学习(一):大致矩阵介绍
  7. 7-4 例4-3游泳池改造预算分数 10
  8. 推荐一套幽默的创意设计
  9. setsockopt常用设置
  10. Mac系统下PHP7.2和Yaf框架安装