综合举例:

游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。
O    假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10

·      
游戏生成1只乌龟和10条鱼

·      
它们的移动方向均随机

·      
乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1

·      
当移动到场景边缘,自动向反方向移动

·      
乌龟初始化体力为100(上限)

·      
乌龟每移动一次,体力消耗1

·      
当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20

·      
鱼暂不计算体力

·      
当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束

实现代码如下:

  1. import random as r
  2. legal_x = [0, 10]
  3. legal_y = [0, 10]
  4. class Turtle:
  5. def __init__(self):
  6. # 初始体力
  7. self.power = 100
  8. # 初始位置随机
  9. self.x = r.randint(legal_x[0], legal_x[1])
  10. self.y = r.randint(legal_y[0], legal_y[1])
  11. def move(self):
  12. # 随机计算方向并移动到新的位置(x, y)
  13. new_x = self.x + r.choice([1, 2, -1, -2])
  14. new_y = self.y + r.choice([1, 2, -1, -2])
  15. # 检查移动后是否超出场景x轴边界
  16. if new_x < legal_x[0]:
  17. self.x = legal_x[0] - (new_x - legal_x[0])
  18. elif new_x > legal_x[1]:
  19. self.x = legal_x[1] - (new_x - legal_x[1])
  20. else:
  21. self.x = new_x
  22. # 检查移动后是否超出场景y轴边界
  23. if new_y < legal_y[0]:
  24. self.y = legal_y[0] - (new_y - legal_y[0])
  25. elif new_y > legal_y[1]:
  26. self.y = legal_y[1] - (new_y - legal_y[1])
  27. else:
  28. self.y = new_y
  29. # 体力消耗
  30. self.power -= 1
  31. # 返回移动后的新位置
  32. return (self.x, self.y)
  33. def eat(self):
  34. self.power += 20
  35. if self.power > 100:
  36. self.power = 100
  37. class Fish:
  38. def __init__(self):
  39. self.x = r.randint(legal_x[0], legal_x[1])
  40. self.y = r.randint(legal_y[0], legal_y[1])
  41. def move(self):
  42. # 随机计算方向并移动到新的位置(x, y)
  43. new_x = self.x + r.choice([1, -1])
  44. new_y = self.y + r.choice([1, -1])
  45. # 检查移动后是否超出场景x轴边界
  46. if new_x < legal_x[0]:
  47. self.x = legal_x[0] - (new_x - legal_x[0])
  48. elif new_x > legal_x[1]:
  49. self.x = legal_x[1] - (new_x - legal_x[1])
  50. else:
  51. self.x = new_x
  52. # 检查移动后是否超出场景y轴边界
  53. if new_y < legal_y[0]:
  54. self.y = legal_y[0] - (new_y - legal_y[0])
  55. elif new_y > legal_y[1]:
  56. self.y = legal_y[1] - (new_y - legal_y[1])
  57. else:
  58. self.y = new_y
  59. # 返回移动后的新位置
  60. return (self.x, self.y)
  61. turtle = Turtle()
  62. fish = []
  63. for i in range(10):
  64. new_fish = Fish()
  65. fish.append(new_fish)
  66. while True:
  67. if not len(fish):
  68. print("鱼儿都吃完了,游戏结束!")
  69. break
  70. if not turtle.power:
  71. print("乌龟体力耗尽,挂掉了!")
  72. break
  73. pos = turtle.move()
  74. # 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
  75. # 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^
  76. for each_fish in fish[:]:
  77. if each_fish.move() == pos:
  78. # 鱼儿被吃掉了
  79. turtle.eat()
  80. fish.remove(each_fish)
  81. print("有一条鱼儿被吃掉了...")

python游戏编程——乌龟和鱼类场景编程的更多相关文章

  1. Python游戏编程入门

    <Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...

  2. 分享《Python 游戏编程快速上手(第3版)》高清中文版PDF+高清英文版PDF+源代码

    通过编写一个个小巧.有趣的游戏来学习Python,通过实例来解释编程的原理的方式.14个游戏程序和示例,介绍了Python基础知识.数据类型.函数.流程控制.程序调试.流程图设计.字符串操作.列表和字 ...

  3. 《Python游戏编程快速上手》——1.3 如何使用本书

    本节书摘来自异步社区<Python游戏编程快速上手>一书中的第1章,第1.3节,作者[美] Al Sweigart(斯维加特),李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  4. 《Python游戏编程快速上手》|百度网盘免费下载|Python基础编程

    <Python游戏编程快速上手>|百度网盘免费下载| 提取码:luy6 Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. 本书通过编写一个个 ...

  5. Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|

    Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...

  6. Python 第六篇(上):面向对象编程初级篇

    面向:过程.函数.对象: 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊 ...

  7. 【转】以Python为例的Async / Await的编程基础

    转, 原文:https://www.cnblogs.com/middleware/p/11996731.html 以Python为例的Async / Await的编程基础 -------------- ...

  8. Python:使用threading模块实现多线程编程

    转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...

  9. Python全栈开发-Day6-面向对象编程

    本节内容: 面向过程VS面向对象 面向对象编程介绍 类的语法 构造函数.析构函数 私有方法.私有属性 面向对象的特性:封装.继承.多态 1.面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法 ...

随机推荐

  1. 移动端上下滑动事件之--坑爹的touch.js

    下面的方法,不知道是操作方法不对还是啥.  在 zepto.js 里面加那一段代码不起作用 百度的 touch.js 是可以用的,但是使用方式 和 zepto有点不一样. 解决方案:参照这个链接地址 ...

  2. PHP设计模式系列 - 解释器模式

    解释器模式 解释器模式 用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作.解释器模式非常常用,比如PHP的模板引擎 就是非常常见的一种解释器模. 代码: <?php //解释 ...

  3. 利用Intellij IDEA开发Spark程序

    网上例子大多是基于scala的,并且配置基于sbt.scala的eclipse环境超级麻烦,所以下载IDEA. 准备:jdk,IDEA安装(可以不用事先安装sbt和Scala,这在IDEA里都可以pl ...

  4. 2015 ICL, Finals, Div. 2【ABFGJK】

    [题外话:我......不补了......] 2015 ICL, Finals, Div. 2:http://codeforces.com/gym/100637 G. #TheDress[水] (st ...

  5. access数据库及其分页的方法

    首先access数据库的话,感觉针对比较小型的网站比较适合.携带方便,不需要按照特定的sql环境. 当然如果使用access数据库的话 1.首先你先要下载办公五合一(access也是其中之一) 2.w ...

  6. 【转】Python数据处理(四舍五入、除法部分)

    转自:https://www.cnblogs.com/junyiningyuan/p/5338378.html 关于除法 传统除法 对两个整数进行除的运算,同时结果会舍去小数部分,返回一个整数.但如果 ...

  7. jq的innerWidth()遇到的坑

    innerWidth()在元素隐藏的时候是取不到值的,但是取到的是元素的内部尺寸,包括padding和content值,,如果元素隐藏了之后他的content就为空,值为0,所以只有等到元素显示之后再 ...

  8. Unity3D游戏开发从零单排(三) - 极速创建狂拽酷炫的游戏地形

    提要 在Unity工作流程内,地形是一个必不可少的重要元素.不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们须要了解到地形的制作基本概念与,当中对于Unity的地形操作部分须要大量的 ...

  9. ios 开发UI篇—UITextView

    概述 UITextView可滚动的多行文本区域 UITextView支持使用自定义样式信息显示文本,并支持文本编辑.您通常使用文本视图来显示多行文本,例如在显示大型文本文档的正文时. UITextVi ...

  10. 关于NSStringFromClass的一点见解

    今天做项目的时候遇到一个需求,就是子view视图弹出时,屏蔽掉父view的所有手势,然后想到用 UIGestureRecognizerDelegate代理方法,中间省一些文字(无奈脸),言归正传,NS ...