![]()
编辑推荐 本书教你如何使用流行的Python编程语言来编写计算机游戏,即便你之前没有任何编程经验。 首先,本书带领读者猜数字和Tic Tac Toe这样的游戏,然后开始学习更加高 级的游戏的开发,例如基于文本的Sonar Treasure Hunt游戏以及带有音效和动画的Dodger游戏。在此过程中, 我们还会学习关键的编程和数学概念,这些将使得你的游戏开发技能达到更高的层级。 通过本书,你将学习: 使用组合循环、变量和流程控制语句; 选择合适的数据结构来完成任务,例如列表、字典和元组; 使用pygame模块,为游戏添加图形和动画; 处理键盘和鼠标输入; 编写简单的人工智能程序,从而能够和计算机玩游戏; 使用加密技术把文本信息转换为密码; 调试程序并找出常见错误。 随着你编写每一个游戏,你将打下牢固的Python编程基础,并且能够更好地理解计算机科学的基础知识。 内容推荐 Python是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。本书通过编写一个个小巧、有趣的游戏来教授Python编程,并且采用直接展示游戏的源代码并通过实例来解释编程的原理的方式。全书共21章,12个游戏程序和示例贯穿其中,介绍了Python基础知识、数据类型、函数、流程控制、程序调试、流程图设计、字符串操作、列表和字典、笛卡尔坐标系、密码学基础、游戏AI模拟、动画图形、碰撞检测、声音和图像等方方面面的程序设计知识。本书可以帮助读者在轻松有趣的过程中,掌握Python游戏编程的基本技能。本书适合不同年龄和层次的Python编程初学者阅读。 目录 第1章交互式Shell1 1.1一些简单的数学知识1 1.1.1整数和浮点数2 1.1.2表达式2 1.2计算表达式3 1.3语法错误4 1.4在变量中存储值4 1.5小结8 第2章编写程序9 2.1字符串值10 2.2连接字符串10 2.3在IDLE的文件编辑器中编写程序11 2.3.1创建HelloWorld程序11 2.3.2保存程序12 2.3.3运行程序13 2.4HelloWorld程序如何工作14 2.4.1注释15 2.4.2函数:程序中的小程序15 2.4.3终止程序16 2.5命名变量16 2.6小结17 第3章“猜数字”游戏19 3.1“猜数字”的运行示例20 3.2“猜数字”程序的源代码20 3.3导入random模块21 3.4用random.randint()函数生成随机数22 3.5欢迎玩家23 3.6流程控制语句23 3.6.1使用循环来重复代码23 3.6.2组织语句块24 3.6.3for循环语句25 3.7玩家的猜测26 3.8使用int()函数、float()函数、str()函数和bool()函数来转换值26 3.9布尔数据类型28 3.9.1比较操作符28 3.9.2用条件检查True或False29 3.9.3体验布尔值、比较操作符和条件29 3.9.4=和==的区别30 3.10if语句30 3.11用break语句提早离开循环31 3.12判断玩家是否赢了31 3.13判断玩家是否输了32 3.14小结32 第4章一个讲笑话程序35 4.1Jokes游戏的运行示例35 4.2Jokes游戏的源代码36 4.3代码如何工作36 4.4转义字符37 4.5单引号和双引号38 4.6print()的end关键字形参39 4.7小结39 第5章DragonRealm41 5.1如何玩DragonRealm41 5.2DragonRealm的运行示例42 5.3DragonRealm的流程图42 5.4DragonRealm的源代码43 5.5导入random和time模块44 5.6DragonRealm中的函数44 5.6.1def语句45 5.6.2调用函数45 5.6.3把函数定义放在哪里45 5.7多行字符串46 5.8while语句实现循环46 5.9布尔操作符47 5.9.1and操作符47 5.9.2or操作符48 5.9.3not操作符49 5.9.4布尔操作符的运算49 5.10返回值50 5.11全局作用域和局部作用域51 5.12函数形参52 5.13显示游戏结果53 5.14决定哪个山洞有友善的龙53 5.15游戏循环54 5.15.1在程序中调用函数55 5.15.2询问玩家要不要再玩一局55 5.16小结56 第6章使用调试器57 6.1Bug的类型57 6.2调试器58 6.2.1启动调试器59 6.2.2用调试器单步执行程序60 6.3查找Bug63 6.4设置断点65 6.5使用断点66 6.6小结68 第7章用流程图设计Hangman69 7.1如何玩Hangman69 7.2Hangman的运行示例70 7.3ASCII字符图71 7.4用流程图来设计一个程序71 7.4.1生成流程图72 7.4.2流程图的分支73 7.4.3结束或者重新开始游戏74 7.4.4再猜一次75 7.4.5为玩家提供反馈77 7.5小结78 第8章编写Hangman的代码79 8.1Hangman的源代码79 8.2导入random模块82 8.3常量82 8.4列表数据类型83 8.4.1用索引访问元素83 8.4.2列表连接84 8.4.3in操作符85 8.5调用方法85 8.5.1列表方法reverse()和append()86 8.5.2字符串方法split()86 8.6从单词列表中获取一个神秘单词87 8.7向玩家显示游戏板87 8.7.1list()函数和range()函数88 8.7.2列表和字符串分片89 8.7.3用空格表示神秘单词90 8.8获取玩家的猜测91 8.8.1字符串方法lower()和upper()92 8.8.2离开while循环93 8.9elif语句93 8.10确保玩家输入一个有效的猜测94 8.11询问玩家是否想再玩一局94 8.12回顾Hangman中的函数95 8.13游戏循环96 8.13.1调用displayBoard()函数96 8.13.2让玩家输入他们的猜测96 8.13.3判断字母是否在这个神秘单词中97 8.13.4判断玩家是否获胜97 8.13.5当玩家猜错时97 8.13.6检查玩家是否输了98 8.13.7结束并重新设置游戏98 8.14小结99 第9章Hangman扩展101 9.1添加更多的猜测机会101 9.2字典数据类型102 9.2.1用len()函数获取字典的大小103 9.2.2字典和列表的区别103 9.2.3字典方法keys()和values()104 9.2.4在Hangman中使用单词的字典104 9.3从一个列表中随机选取105 9.4从列表中删除项106 9.5多变量赋值107 9.6向玩家显示单词的分类108 9.7小结109 第10章TicTacToe111 10.1TicTacToe的运行示例112 10.2TicTacToe的源代码113 10.3设计程序116 10.3.1用数据表示游戏板117 10.3.2游戏AI117 10.4导入random模块119 10.5在屏幕上打印游戏板119 10.6让玩家来选择X或O120 10.7决定谁先走121 10.8在游戏板上放置一个标记121 10.8.1列表引用121 10.8.2在makeMove()中使用列表引用124 10.9判断玩家是否获胜125 10.10复制游戏板的数据126 10.11判断游戏板上的格子是否为空127 10.12让玩家输入他们的落子127 10.13短路求值128 10.14从落子列表中选择一个落子130 10.15None值130 10.16创建计算机的AI131 10.16.1计算机判断自己能否落子即获胜132 10.16.2计算机判断玩家是否可以落子即获胜132 10.16.3依次判断角、中心和边133 10.16.4判断游戏板是否满了133 10.17游戏循环134 10.17.1决定玩家的符号和谁先走134 10.17.2运行玩家的轮次134 10.17.3运行计算机的轮次135 10.17.4询问玩家是否再玩一次136 10.18小结136 第11章推理游戏Bagels137 11.1Bagels的运行示例138 11.2Bagels的源代码138 11.3Bagels的流程图140 11.4导入random并定义getSecretNum()140 11.5打乱一组专享数的顺序141 11.5.1用random.shuffle()函数改变列表项的顺序141 11.5.2从打乱次序的数中获取神秘数字142 11.6复合赋值操作符142 11.7计算要给出的线索143 11.8列表方法sort()144 11.9字符串方法join()145 11.10检查字符串中是否只包含数字145 11.11游戏的开始146 11.12字符串插值146 11.13游戏循环147 11.13.1获取玩家的猜测147 11.13.2根据玩家的猜测给出线索148 11.13.3判断玩家的输赢148 11.13.4询问玩家是否再玩一局148 11.14小结149 第12章笛卡尔坐标151 12.1网格和笛卡尔坐标151 12.2负数153 12.3计算机屏幕的坐标系154 12.4数学技巧155 12.4.1技巧1:减号吃掉它左边的加号155 12.4.2技巧2:两个减号合并为一个加号155 12.4.3技巧3:加法的可交换性156 12.5绝对值和abs()函数156 12.6小结157 第13章SonarTreasureHunt游戏159 13.1SonarTreasureHunt的运行示例160 13.2SonarTreasureHunt的源代码162 13.3设计程序167 13.4导入random、sys和math模块167 13.5创建一个新的游戏板167 13.6绘制游戏板168 13.6.1在顶部绘制X轴169 13.6.2绘制海洋170 13.6.3打印出海洋中的行170 13.6.4在游戏板底部绘制X轴坐标171 13.7创建随机的藏宝箱171 13.8判断一次移动是否有效172 13.9在游戏板上进行一次移动172 13.9.1找到最近的藏宝箱的算法172 13.9.2使用列表方法remove()删除值175 13.9.3获取玩家的移动176 13.10为玩家打印出游戏说明177 13.11游戏循环177 13.11.1为玩家显示游戏的状态179 13.11.2处理玩家的移动179 13.11.3找到一个沉没的藏宝箱179 13.11.4判断玩家是否赢了180 13.11.5判断玩家是否输了180 13.11.6用sys.exit()函数终止程序181 13.12小结181 第14章凯撒密码183 14.1密码学和加密184 14.2凯撒密码简介184 14.3凯撒密码的运行示例185 14.4凯撒密码程序的源代码186 14.5设置优选键长度187 14.6决定加密还是解密187 14.7从玩家处得到消息188 14.8从玩家处得到密钥188 14.9加密或解密消息188 14.9.1使用字符串方法find()找到所传递的字符串189 14.9.2加密或解密每个字母190 14.10程序开始191 14.11暴力破解191 14.12添加暴力破解模式192 14.13小结193 第15章Reversegam游戏195 15.1如何玩Reversegam195 15.2Reversegam的运行示例198 15.3Reversegam的源代码200 15.4导入模块和设置常量205 15.5游戏板数据结构205 15.5.1在屏幕上绘制游戏板数据结构205 15.5.2创建一个新的游戏板数据结构206 15.6判断一次落子是否有效207 15.6.1查看8个方向中的每一个方向208 15.6.2发现是否有可以反转的棋子209 15.7判断有效的坐标210 15.7.1得到所有有效移动的一个列表210 15.7.2调用bool()函数211 15.8计算游戏板的得分212 15.9获取玩家的棋子选择212 15.10决定谁先走213 15.11在游戏板上落下一个棋子213 15.12复制游戏板数据结构214 15.13判断一个格子是否在角落上214 15.14获取玩家的移动214 15.15获取计算机的移动216 15.15.1角落移动策略216 15.15.2获取优选得分的移动的列表217 15.16在屏幕上打印分数218 15.17游戏开始218 15.17.1检查僵局218 15.17.2运行玩家的轮次219 15.17.3运行计算机的轮次220 15.18游戏循环221 15.19询问玩家是否再玩一局222 15.20小结222 第16章ReversegamAI模拟223 16.1让计算机和自己下棋224 16.1.1模拟程序1的运行示例224 16.1.2模拟程序1的源代码225 16.1.3删除玩家提示并添加一个计算机玩家226 16.2让计算机自己多玩几次227 16.2.1模拟程序2的运行示例227 16.2.2模拟程序2的源代码227 16.2.3记录多次游戏228 16.2.4注释掉print()函数调用229 16.2.5使用百分数评级AI229 16.3比较不同的AI算法231 16.3.1模拟程序3的源代码231 16.3.2模拟程序3的AI是如何工作的232 16.3.3比较AI235 16.4小结237 第17章创建图形239 17.1安装pygame240 17.2pygame中的HelloWorld240 17.3运行pygameHelloWorld程序的示例240 17.4pygameHelloWorld的源代码241 17.5导入pygame模块242 17.6初始化pygame243 17.7设置pygame窗口243 17.7.1元组243 17.7.2Surface对象244 17.8设置颜色变量244 17.9将文本写到pygame窗口上245 17.9.1使用字体来样式化文本245 17.9.2渲染一个Font对象246 17.9.3使用Rect属性设置文本位置247 17.10用一种颜色填充一个Surface对象248 17.11pygame的绘制函数249 17.11.1绘制一个多边形249 17.11.2绘制直线250 17.11.3绘制圆形250 17.11.4绘制椭圆形251 17.11.5绘制矩形251 17.11.6给像素着色252 17.12Surface对象的blit()方法252 17.13将Surface对象绘制到屏幕上253 17.14事件和游戏循环253 17.14.1获取事件对象253 17.14.2退出程序254 17.15小结254 第18章动画图形255 18.1Animation程序的运行示例255 18.2Animation程序的源代码256 18.3让积木移动和弹回258 18.4设置常量变量258 18.4.1用于方向的常量变量259 18.4.2用于颜色的常量变量260 18.5设置积木数据结构260 18.6游戏循环260 18.6.1处理玩家退出的情况261 18.6.2移动每一个积木261 18.6.3弹跳一个积木262 18.6.4将积木绘制到窗口中新的位置263 18.6.5在屏幕上绘制窗口264 18.7小结264 第19章碰撞检测265 19.1碰撞检测程序的运行示例266 19.2CollisionDetection程序的源代码266 19.3导入模块268 19.4使用一个时钟来同步程序268 19.5创建窗口和数据结构269 19.6设置变量以记录移动270 19.7处理事件270 19.7.1处理KEYDOWN事件271 19.7.2处理KEYUP事件273 19.8转移玩家274 19.9添加新的食物方块274 19.10在屏幕上移动玩家275 19.10.1将玩家绘制到屏幕上275 19.10.2检查碰撞276 19.11在窗口上绘制食物方块276 19.12小结277 第20章声音和图像279 20.1使用精灵添加图像279 20.2声音文件和图像文件280 20.3SpritesandSounds程序的运行示例281 20.4SpritesandSounds程序的源代码281 20.5创建窗口和数据结构284 20.5.1添加一个精灵284 20.5.2改变一个精灵的大小284 20.6创建音乐和声音285 20.6.1添加声音文件285 20.6.2切换和关闭声音285 20.7把玩家绘制到窗口上286 20.8检查碰撞286 20.9在窗口中绘制樱桃287 20.10小结287 第21章带有声音和图像的Dodger289 21.1回顾pygame的基本数据类型289 21.2Dodger的运行示例290 21.3Dodger的源代码291 21.4导入模块295 21.5创建常量295 21.6定义函数296 21.6.1终止和暂停游戏296 21.6.2记录和敌人的碰撞297 21.6.3将文本绘制到窗口297 21.7初始化pygame并设置窗口298 21.8设置Font、Sound和Image对象299 21.9显示开始界面300 21.10开始游戏300 21.11游戏循环302 21.11.1处理键盘事件302 21.11.2处理鼠标移动303 21.12增加新的敌人303 21.13移动玩家角色和敌人305 21.14实现作弊模式306 21.15删除敌人306 21.16绘制窗口307 21.16.1绘制玩家的得分307 21.16.2绘制玩家角色和敌人307 21.17碰撞检测308 21.18游戏结束屏幕308 21.19修改Dodger游戏309 21.20小结310 |