《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠
本节书摘来自华章计算机《树莓派Python编程指南》一书中的第2章,第2.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.2 一个Python游戏:猫和老鼠
现在,让我们开始第二个Python程序。这次你将写出一个猫和老鼠的游戏。游戏者使用方向键来控制老鼠,使其保持在猫的前方(由计算机控制猫)。保持时间越长,得分越高。
下面例子中的程序名字是Chapter2-catandmouse.py。
打开一个IDLE3新窗口并输入下面的代码:
" >


代码很多,在仔细读之前可以先试玩几次感受一下。这样也可以检验你的输入是否完全正确。如果程序出错,先检查下输入,然后再试一下。图2-4给出了程序运行界面。
" >
2.2.1 理解变量
程序前两行导入turtle和time模块,接下来的三行:

使用了我们之前接触过但没有深入介绍的概念:变量(variable)。我们可以在变量中存入值以便后面使用。例如,第一行中在变量boxsize中存入200。写完这行,你就可以在程序中使用boxsize,Python将使用正确的值来替代它。这个结构之所以称为变量是因为它可以变化。在我们的这个程序中,boxsize保持不变,但caught和score的值会发生变化。每次需要一个新值时,可以使用单个等号对其重新赋值。这和我们在第一个程序中对window和babbage赋值的做法一样,它们分别保存了screen和turtle。在第3章中我们将介绍变量,以及可以在变量中存储什么值。
2.2.2 定义函数
程序中接下来的代码定义了一些函数。注意在函数checkbounds()中的这一行:
" >
这行是必需的,因为函数无法存取定义在函数外面的变量。这一行告诉Python我们将在本函数中使用变量boxsize,而该变量是在函数外部定义的。
可能最让人困惑的就是这一节:
这段代码告诉窗体当不同的键按下时应该做什么。例如,第一行表示当“向上”键(键盘方向键的向上按键)按下时,运行函数up(我们已经定义好了)。
2.2.3 在游戏中循环
接下来就到了游戏的主循环中:


代码中使用了不同的循环方法。while循环如下:

它表示如果条件(condition)为真,将执行后面的循环代码(loop code)。在程序的变量列表中,可以看到变量caught被赋为False:

因此,这里使用的条件为not caught(因为not False为真,程序开始时该条件为真),程序一直运行到caught被赋值为真,因为not True表示假。这样描述会有点复杂。但如果按字面意思就很容易理解:前面的not表示将真和假反一下。
time.sleep()告诉Python停止在给定的时间,单位为秒。本例中我们随着难度等级(由用户输入一个值存在变量中)增加而减少程序等待时间。你会发现,随着难度增加,猫的运动速度也在增加。
此时也许你很想知道如何记住各个模块中对应的所有方法。比如,怎么才能知道应该使用forward(10)而不是forwards(10)或者move_forwards(10),或者怎么才能知道哪里可以找到向前移动的方法呢?使用Python不需要有超人的记忆力,你只需要知道在哪里可以查看帮助就好了。如果使用IDLE3,按下F1 Python文档就会显示在Web浏览器里。这里有很多有用信息,非常值得浏览一下。例如需要查看turtle模块的信息,只需要在快速查找窗口中输入turtle,然后选择第一项,你将会看到,我们已经使用过它的方法了。
相关文章:
【通俗理解线性代数】 -- 理解行列式
本微信图文主要从几何与变换的角度介绍了行列式的意义。

solr java score_Solr 按照得分score跟指定字段相乘排序
CentOS6.5 mysql 5.5安装CentOS 6 mysql5.5安装配置 1 安装所需软件 2 安装cmake 3 tar.gz形式安装mysql 4 配置与启动 MySQL自5.5版本以后,就开始使用cmake编译工具了.tar ...access数据库select查询top时无效的解决办法access数据库select查询top时有时…

Mantis 缺陷管理系统配置与安装
搭建Mantis 缺陷管理系统 By Snooper 错误必有!欢迎指正! 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written in the PHP scripting language and works with MySQL, MS SQL, and PostgreSQL datab…
【Matlab数据的可视化】自适应绘图函数fplot
今天看到fplot这个函数,于是乎赶快整理出来放到“Matlab数据的可视化”这个板块中,以便更好的完善我们的知识结构。

大数据时代涉军网络舆情引导的“5个结合”
随着信息技术发展,大数据构成了一种新的传播技术环境,重塑了网络舆情生态,给社会舆情体系带来了重大而深刻的变化,使网络舆情在整个社会舆情体系中地位更加凸显、作用更加突出。必须从维护国家政治安全的高度,深入探索…

java http head 请求_http请求头header、请求体body、请求行介绍
HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体。request如果是post才有请求体&a…

全球UML模型共享设计下载中心--www.euml.org上线
全球UML模型共享设计&下载中心euml.org上线euml.org是楚凡科技版权所有的公益站点,为全球UML用户和爱好者提供如下服务:1、在线UML建模工具Trufun eUML。Trufun eUML以Applet形式运行在客户的浏览器中,从而提供在线建模功能。2、模型共享…

你是否对它有一种责任感
它,指开发人员对开发出的产品;它是测试人员所面对的测试产品。你是否对它有一种责任感,是指开发人员是否对它开发出来的产品有责任感,为它骄傲,为它而开心;你是否对它有一种责任感,是指测试人员…
【机器学习】基于粒子群算法的非线性函数寻优
本微信图文介绍了基于粒子群算法的非线性函数寻优过程,并利用Matlab实现。

java递归排雷_C语言实现扫雷小游戏
源代码链接:https://github.com/Sasura321/Minesweeper扫雷游戏也算是一个简单的小项目,这儿是之前写的代码,来写成博文回顾一下。首先,代码要实现几个功能:第一下扫雷时,即使踩中了雷也不能直接炸死;扫雷时࿰…

任意角度旋转图片
/// <summary> /// 任意角度旋转 /// </summary> /// <param name"bmp">原始图Bitmap</param> /// <param name"angle">旋转角度</param> /// <param name"bkColor"…

如何切分用户故事
在把用户故事切分成小块,从而更好地利用敏捷技术时,很多新组建的敏捷团队都会遇到困难。 敏捷社区的成员在多篇文章中为如何有效地切分用户故事提供了指导。 当把庞大的用户故事切分成小块时,是否有一些一般的准则供我们遵循呢? Rachel D…
【机器学习】基于人工鱼群算法的非线性函数寻优
本微信图文介绍了人工鱼群算法的基本原理并对一元非线性函数进行极值寻优。

java9可执行jar_单个java文件打成可执行jar包
1 概述使用JDK自带的jar与java将单个java文件打成可执行jar包并运行。 当然也可以使用IDE完成,使用Maven只需要一个简单的package,但是单个文件嘛,没必要这么“凶狠”。2 新建测试文件著名的Hello World:public class Main{public…

简评游戏人工智能相关的中文书(下)
赖勇浩(http://laiyonghao.com) 游戏开发中的人工智能 2006 年 9 月第一版 AI for Game Develpoers 应该算得上一本质量在中等偏上的书,可惜的是即使中文版是由 O’Reilly Taiwan 公司编译,中文版的质量依然差强人意。小的翻译错误…

化敌为友 运营商组团拥抱OTT为哪般
2月15日,全球9大电信运营商宣布,成立“合作运营联盟”(Partnering Operator Alliance),协力挖掘互联网企业为电信业带来的增长潜力。从几年前的抵御OTT进攻到如今的“合作运营”,这个180度的态度转变后面有…
【机器学习】基于自适应变异粒子群算法的非线性函数寻优
本微信图文详细介绍了自适应变异粒子群算法的基本原理以及在非线性函数寻优中的应用。 —————————–华丽分割线—————————— 我们免费提供本文介绍方法的源码,你可以私信我们领取,如果你在领取源码后觉得有帮助,希望能够转…

php fastcgi配置_IIS7.5配置php(FastCGI)- 自动配置
操作系统是 Windows 2008 R2(Windows7),IIS版本是7.5,php版本是 php-5.3.2-Win32-VC9-x86(安装包),数据库是 mysql-5.5.12-win32。具体配置步骤如下:1、安装IIS7.51)Windows 2008(R2)安装步骤:桌面左下角“服务器管理器…

silverlight之How To:设置ComboBox控件的数据源当ComboBox用来作为DataGrid的某列的编辑控件时...
DataGrid是个可编辑的列表控件,而且可以用已有的输入控件来作为某一列的编辑控件,比如用ComboBox控件来作为某列的编辑控件供用户选择数据,这个时候就要先设置好ComboBox控件的下拉列表项了,在silverlight里怎么做呢? …
【Matlab与线性代数】Matlab中对数组元素引用方法总结
本微信图文主要介绍了Matlab中三种对数组元素的引用方法–下标法、索引法和布尔法。

预计2020年传感器需求超一万亿个
据勒克斯研究报告,移动设备的激增,可穿戴设备的日益流行以及连接式物联网的出现促使对传感器的预期需求向一万亿推进。然而,为了充分发挥这些或其他产品的潜能,仍需对传感器进行创新,以满足功率消耗、敏感度、外形因素…

php文本分割成csv,怎么在php中将文本文件转换为csv文件并输出
怎么在php中将文本文件转换为csv文件并输出发布时间:2021-02-19 17:30:27来源:亿速云阅读:88作者:Leah本篇文章给大家分享的是有关怎么在php中将文本文件转换为csv文件并输出,小编觉得挺实用的,因此分享给大…

一些技术图书编写、推荐、出版人员需要自重
最近在互联网上出现了一个让我比较气愤的技术图书相关的事件,事情由《JavaScript征途》一书在51JS上的贴子引起,有人提出这本书的样张里出现了太多错误,但是慢慢的由于作者(即css8)的“死撑”,“事态慢慢升…
【机器学习】基于人工鱼群算法的多元非线性函数寻优
基于人工鱼群算法的多元非线性函数寻优

媲美光纤!WiFi传输速度已可达100Gbps
当前WiFi的最高传输速率是多少?是11ac技术标准的三频5300Mbps?还是11ad的7Gbps?亦或是11ax的10Gbps?答案是100Gbps!没错,这一足以媲美光纤的传输速度,近日在日本研究人员的努力下成为现实&#…

php sharepoint,如何使用php连接sharepoint
试试这个API在SharePoint中下载WSDL.通常位于以下位置:< sharepoint.url> /subsite/_vti_bin/Lists.asmx?WSDL下载API确保同时保存SoapClientAuth.php和SharePointAPI.php在PHP中// 0: include api in your php script.require_once(SharePointAPI.php);// 1…

使用微波炉的十大忌讳
一、忌超时加热:食品放入微波炉解冻或加热,若忘记取出,如果时间超过2小时,则应丢掉不要,以免引起食物中毒。 二、忌将普通塑料容器放入微波炉加热:一是热的食物会使容器变形,二是普通塑料会放出…

匿名黑客Anonymous实施的8次最强攻击
有 研究证明,Anonymous黑客团体的规模比人们的预期要大的多,并且正在成为全世界范围内最流行一群人。关于他们存在这一事实的新闻首先在社交媒体上 公布于众,上面显示了成员之一盖伊福克斯(Guy Fawkes)炫耀他们的面具。…
【怎样写代码】参数化类型 -- 泛型(一):泛型概述
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn togethe.

php redis set集合操作,php对redis的set(集合)操作
<?phprequire (redistest.php);/*** Class setcache*集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是0(1)。*/classsetcacheext…