游戏编程:按一下要求定义一个乌龟类和鱼类并尝试编程

  • 假设游戏场景为范围(x,y)为 0<=x<=10,0<=y<=10
  • 游戏生成1只乌龟和10条鱼
  • 他们的移动方向均随机
  • 乌龟的最大移动能力是2(乌龟可以随机选择移动是1还是2),鱼的最大移动能力是1
  • 当移动到场景边缘,自动向反方向移动
  • 乌龟初始化体力为100(上限)
  • 乌龟每移动一次,体力消耗1
  • 当乌龟和鱼重叠,乌龟吃掉鱼,乌龟体力增加20
  • 鱼不计算体力
  • 当乌龟体力值为0或者鱼的数量为0时,游戏结束
import random as r

class Turtle(object):
def __init__(self):
self.power = 100 # 初始化乌龟的位置
self.x = r.randint(0,10)
self.y = r.randint(0,10) def move(self):
new_x = r.choice([1,2,-1,-2]) + self.x
new_y = r.choice([1,2,-1,-2]) + self.y # 判断 乌龟的移动是否超出了边界 if new_x < 0:
self.x = 0 - (new_x - 0)
elif new_x > 10:
self.x = 10 - (new_x - 10)
else:
self.x = new_x if new_y < 0:
self.y = 0 - (new_y -0)
elif new_y > 10:
self.y = 10 - (new_y - 10)
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(object): def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10) def move(self):
new_x = self.x + r.choice([1,-1])
new_y = self.y + r.choice([1,-1]) if new_x < 0:
self.x = 0 - (new_x - 0)
elif new_x > 10:
self.x = 10 - (new_x - 10)
else:
self.x = new_x if new_y < 0:
self.y = 0 -(new_y - 0)
elif new_y > 10:
self.y = 10 - (new_y - 10)
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("有一条鱼被吃掉了")

最新文章

  1. Percona XtraBackup 备份原理说明【转】
  2. Java中迭代器
  3. ACM/ICPC 之 最小割转网络流(POJ3469)
  4. UVa 10720 - Graph Construction(Havel-Hakimi定理)
  5. C#接口知识大全收藏
  6. ipc.Client: Retrying connect to server: h1/192.168.1.61:9000. Already tried 0 time(s);解决方法
  7. C++问题-UniqueAppObject.cpp(147): error C3861: “GUXClientInit”: 找不到标识符
  8. STM32系统时钟
  9. 类:初识类的事件(有点不明白,怎么普通Precedure可以赋值给TEvent)
  10. 原生js倒计时和显示当前时间
  11. 使用jQuery操作 DOM
  12. 201621123057 《Java程序设计》第1周学习总结
  13. 高效开发者是如何个性化VS Code插件与配置的?
  14. Linux----------Openssh介绍以及用法
  15. 为Ubuntu新创建用户创建默认.bashrc并自动加载
  16. 探索哪个进程使磁盘I/O升高
  17. 20181220 Oracle程序包基本开发逻辑
  18. P2260 [清华集训2012]模积和
  19. BZOJ3514:GERALD07加强版(LCT,主席树)
  20. Android Studio编译慢、卡死和狂占内存怎么破?

热门文章

  1. 那些你可能不知道的 ZooKeeper 知识
  2. 【Prometheus学习笔记】主机监控 -node_exporter
  3. C程序数组算法 — 冒泡法排序【前冒 || 后冒】
  4. IntelliJ IDEA/Android Studio插件开发指南
  5. 实现Web请求后端Api的Demo,实现是通过JQuery的AJAX实现后端请求,以及对请求到的数据的解析处理,实现登录功能
  6. ES系列(三):网络通信模块解析
  7. 02- APP需求分析与APP测试流程
  8. dedecms发布文章排序按发布时间,不是更新时间
  9. Windows中的权限设置、文件压缩、文件加密、磁盘配额和卷影副本
  10. 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现