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 面向对象 编程范式 编程是程序员用特定的语法 ...
 
随机推荐
- ES(ElasticSearch)学习总结
			
基本概念 一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库.是一个接近实时的搜索平台 ...
 - PAT 1001 A+B 解题报告
			
PAT 1001 A+B 代码链接:传送门 题目链接:传送门 题目简述: 给定两个值a,b: 范围-1000000 <= a, b <= 1000000: 按指定格式输出a+b的结果,例: ...
 - 20145203盖泽双 《Java程序设计》第8周学习总结
			
20145203盖泽双 <Java程序设计>第8周学习总结 教材学习内容总结 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logge ...
 - 改变文件上传input file类型的外观
			
当我们使用文件上传功能时,<input type="file">,但是外观有点不符合口味,如何解决这个问题? <input type="file&quo ...
 - “unauthorized: authentication required”  -- openshift3.9 docker push 报错
			
1.docker tag mybank-tomcat:latest 172.30.25.185:5000/mybank-tomcat:latest 2.当往registrypush镜像的时候, doc ...
 - 关于MySQL存入的时间和取出时间不一致的解决
			
场景:代码运行在Linux-A上,new Date() 生成的时间比当前时间早13个小时,导致存入数据库内的时间也早13个小时,但前台读取展示出来的时间又是正常的.在数据库直接select now() ...
 - lua虚拟机概述
			
何为虚拟机 用于模拟计算机运行的程序.是个中间层,它处于脚本语言和硬件之间的一个程序.每一门脚本语言都会有自己定义的opcode("操作码"),可以理解为这门程序自己定义的&quo ...
 - springboot快速入门(一)——HelloWorld搭建
			
一.起步 1.先导 凡技术必登其官网的原则,官网走一波:https://projects.spring.io/spring-boot/#quick-start 极力推荐一个springboot教程:h ...
 - 2017-2018-1 20155210 《信息安全系统设计基础》 实现mypwd
			
2017-2018-1 20155210 <信息安全系统设计基础> 实现mypwd 作业要求: 1.学习pwd命令 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 ...
 - python基础学习1-内置函数
			
#!/usr/bin/env python # -*- coding:utf-8 -*- 系统内置函数 n =abs(-1) #绝对值 print(n) #bytes()函数 s="离开&q ...