python游戏编程——乌龟和鱼类场景编程
综合举例:
游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。
O 假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
·
游戏生成1只乌龟和10条鱼
·
它们的移动方向均随机
·
乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
·
当移动到场景边缘,自动向反方向移动
·
乌龟初始化体力为100(上限)
·
乌龟每移动一次,体力消耗1
·
当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
·
鱼暂不计算体力
·
当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束
实现代码如下:
- import random as r
- legal_x = [0, 10]
- legal_y = [0, 10]
- class Turtle:
- def __init__(self):
- # 初始体力
- self.power = 100
- # 初始位置随机
- self.x = r.randint(legal_x[0], legal_x[1])
- self.y = r.randint(legal_y[0], legal_y[1])
- def move(self):
- # 随机计算方向并移动到新的位置(x, y)
- new_x = self.x + r.choice([1, 2, -1, -2])
- new_y = self.y + r.choice([1, 2, -1, -2])
- # 检查移动后是否超出场景x轴边界
- if new_x < legal_x[0]:
- self.x = legal_x[0] - (new_x - legal_x[0])
- elif new_x > legal_x[1]:
- self.x = legal_x[1] - (new_x - legal_x[1])
- else:
- self.x = new_x
- # 检查移动后是否超出场景y轴边界
- if new_y < legal_y[0]:
- self.y = legal_y[0] - (new_y - legal_y[0])
- elif new_y > legal_y[1]:
- self.y = legal_y[1] - (new_y - legal_y[1])
- else:
- self.y = new_y
- # 体力消耗
- self.power -= 1
- # 返回移动后的新位置
- return (self.x, self.y)
- def eat(self):
- self.power += 20
- if self.power > 100:
- self.power = 100
- class Fish:
- def __init__(self):
- self.x = r.randint(legal_x[0], legal_x[1])
- self.y = r.randint(legal_y[0], legal_y[1])
- def move(self):
- # 随机计算方向并移动到新的位置(x, y)
- new_x = self.x + r.choice([1, -1])
- new_y = self.y + r.choice([1, -1])
- # 检查移动后是否超出场景x轴边界
- if new_x < legal_x[0]:
- self.x = legal_x[0] - (new_x - legal_x[0])
- elif new_x > legal_x[1]:
- self.x = legal_x[1] - (new_x - legal_x[1])
- else:
- self.x = new_x
- # 检查移动后是否超出场景y轴边界
- if new_y < legal_y[0]:
- self.y = legal_y[0] - (new_y - legal_y[0])
- elif new_y > legal_y[1]:
- self.y = legal_y[1] - (new_y - legal_y[1])
- else:
- self.y = new_y
- # 返回移动后的新位置
- return (self.x, self.y)
- turtle = Turtle()
- fish = []
- for i in range(10):
- new_fish = Fish()
- fish.append(new_fish)
- while True:
- if not len(fish):
- print("鱼儿都吃完了,游戏结束!")
- break
- if not turtle.power:
- print("乌龟体力耗尽,挂掉了!")
- break
- pos = turtle.move()
- # 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
- # 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^
- for each_fish in fish[:]:
- if each_fish.move() == pos:
- # 鱼儿被吃掉了
- turtle.eat()
- fish.remove(each_fish)
- print("有一条鱼儿被吃掉了...")

python游戏编程——乌龟和鱼类场景编程的更多相关文章
- Python游戏编程入门
<Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...
- 分享《Python 游戏编程快速上手(第3版)》高清中文版PDF+高清英文版PDF+源代码
通过编写一个个小巧.有趣的游戏来学习Python,通过实例来解释编程的原理的方式.14个游戏程序和示例,介绍了Python基础知识.数据类型.函数.流程控制.程序调试.流程图设计.字符串操作.列表和字 ...
- 《Python游戏编程快速上手》——1.3 如何使用本书
本节书摘来自异步社区<Python游戏编程快速上手>一书中的第1章,第1.3节,作者[美] Al Sweigart(斯维加特),李强 译,更多章节内容可以访问云栖社区"异步社区& ...
- 《Python游戏编程快速上手》|百度网盘免费下载|Python基础编程
<Python游戏编程快速上手>|百度网盘免费下载| 提取码:luy6 Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. 本书通过编写一个个 ...
- Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|
Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...
- Python 第六篇(上):面向对象编程初级篇
面向:过程.函数.对象: 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊 ...
- 【转】以Python为例的Async / Await的编程基础
转, 原文:https://www.cnblogs.com/middleware/p/11996731.html 以Python为例的Async / Await的编程基础 -------------- ...
- Python:使用threading模块实现多线程编程
转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...
- Python全栈开发-Day6-面向对象编程
本节内容: 面向过程VS面向对象 面向对象编程介绍 类的语法 构造函数.析构函数 私有方法.私有属性 面向对象的特性:封装.继承.多态 1.面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法 ...
随机推荐
- Python的unittest框架的断言总结
常用的断言方法如下: assertFalse:为假时返回True:self.assertFalse(表达式,“表达式为true时打印的message”) assertTrue:为真时返回True:se ...
- Tomcat6的相关配置
1. Tomcat无安装部署: 本文windows用的是win7,ubuntu用的是12.04 LTS,tomcat版本是1.6 1.1. windows上的tomcat无安装部署 1.1.1. 确认 ...
- 基于jquery分页插件
今天终于完成了基于jquery的分页插件的代码编写,也通过了功能测试,实现了分页功能:由于刚开始写jquery的插件,所以梳理逻辑的时间也很长,整个过程整整一周时间,今天终于搞完了,先将整个分页插件的 ...
- HBase学习之路 (十)HBase表的设计原则
建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很大的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1. BLOOMFILTER 默认是 NONE 是否使用布 ...
- 【原创】大叔经验分享(52)ClouderaManager修改配置报错
Cloudera Manager中修改配置可能报错: Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'MESSAGE ...
- h5py
解决办法: sudo apt-get install libhdf5-dev sudo apt-get install python-h5py
- Spring AOP源码分析(二)动态A0P自定义标签
摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 之前讲过Spring中的自定义注解,如果声明了自定义的注解,那么就一定 ...
- Spring源码分析(三)容器核心类
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在上一篇文章中,我们熟悉了容器的基本用法.在这一篇,我们开始分析Spri ...
- vue实现两重列表集合,点击显示,点击隐藏的折叠效果,(默认显示集合最新一条数据,点击展开,显示集合所有数据)
效果图: 默认显示最新一条数据: 点击显示所有数据: 代码: 说明:这里主要是 这块用来控制显示或者隐藏 根据当前点击的 这个方法里传递的index 对应 isShow 数组里的index ,对 ...
- 【NoSql】之Hbase
Hbase概述 · Hbase是构建在hdfs上的分布式列式存储系统 · Hbase内部管理的文件全部存储在HDFS上面, · Hbase是基于google bigtable 模型开发的,典型的 ...