|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 铁棍阿童木 于 2017-11-17 13:20 编辑
写完伪代码没人回复,回来看小甲鱼的答案,整体思路基本吻合(还是比较开心),契合度大概在85%左右。差别在我把游戏乌龟吃鱼、+体力、-体力等过程混杂在一起了,容易出错。
现在稍作修改代码如下:
- # 游戏场景为范围(x,y):0 <= x <= 10 , 0 <= y <= 10
- # 游戏生成 1 只乌龟(tortoise)和 10 条鱼。
- # 它们的移动方向随机。
- # 乌龟的最大移动能力是 2 (Ta可以随机选择移动 1 还是 2 ),鱼的最大移动能力是 1
- # 当移动到场景边缘,自动向反方向移动
- # 乌龟的初始化体力为100(上限)
- # 乌龟每移动一次消耗体力 1
- # 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
- # 鱼暂不计算体力
- # 当乌龟体力值为 0 (挂掉)或者鱼儿的数量为 0 时,游戏结束。
- import random as r
- # ---------------------------------------------------------------------------
- axis_x = [0,100] # 设定游戏场地的坐标值范围,圈定边界
- axis_y = [0,100] # 因为在其他函数内部只需要引用不需要修改,所以定义为全局变量
- # ---------------------------------------------------------------------------
- # 乌龟类,初始化乌龟的坐标和体力值
- class Tortoise:
- def __init__(self):
- # 初始化乌龟体力值和位置
- self.energy = 100
- self.tt_x = 5
- self.tt_y = 5
- def ttMoving(self):
- # 乌龟移动方法
- new_x = self.tt_x + (r.choice([-1,1]) * r.randint(1,2))
- new_y = self.tt_y + (r.choice([-1,1]) * r.randint(1,2))
- # 检查移动后乌龟的x坐标是否超越边界
- if new_x < axis_x[0]:
- self.tt_x = axis_x[0] - (new_x - axis_x[0])
- elif new_x > axis_x[1]:
- self.tt_x = axis_x[1] - (new_x - axis_x[1])
- else:
- self.tt_x = new_x
- # 然后检查移动后乌龟的y坐标是否超越边界
- if new_y < axis_y[0]:
- self.tt_y = axis_y[0] - (new_y - axis_y[0])
- elif new_y > axis_y[1]:
- self.tt_y = axis_y[1] - (new_y - axis_y[1])
- else:
- self.tt_y = new_y
- # 每次调用移动方法,乌龟体力值减 1
- # 调整好乌龟移动后的坐标后,返回x和y坐标的值
- self.energy -= 1
- return (self.tt_x,self.tt_y)
- # 乌龟吃鱼时的操作
- def eat_Fish(self):
- self.energy += 1
- if self.energy > 100:
- self.energy = 100
- # 鱼儿类,初始化鱼儿的位置,和移动能力
- class Fish:
- def __init__(self):
- # 初始化鱼儿的位置
- self.fs_x = 0
- self.fs_y = 0
- self.step = 1
- def fsMoving(self):
- # 鱼儿移动方法
- new_x = self.fs_x + (r.choice([-1,1]) * self.step)
- new_y = self.fs_y + (r.choice([-1,1]) * self.step)
- # 然后检查鱼儿移动后x坐标是否超越边界
- if new_x < axis_x[0]:
- self.fs_x = axis_x[0] - (new_x - axis_x[0])
- elif new_x > axis_x[1]:
- self.fs_x = axis_x[1] - (new_x - axis_x[1])
- else:
- self.fs_x = new_x
- # 再检查鱼儿移动后y坐标是否超越边界
- if new_y < axis_y[0]:
- self.fs_y = axis_y[0] - (new_y - axis_y[0])
- elif new_y > axis_y[1]:
- self.fs_y = axis_y[1] - (new_y - axis_y[1])
- else:
- self.fs_y = new_y
- # 调整好鱼儿移动后的坐标后,返回x和y坐标的值
- return (self.fs_x,self.fs_y)
- # 游戏启动函数,生成乌龟BOSS和十条鱼儿对象
- def playground():
- # 生成乌龟的实例化对象
- Boss = Tortoise()
- # 生成十条鱼儿的实例化对象
- fishs = []
- for i in range(10):
- new_fish = Fish()
- fishs.append(new_fish)
- # 启动游戏
- while True:
- if len(fishs) == 0:
- print("Game Over\n鱼儿被乌龟吃完了,游戏结束!")
- break
- if Boss.energy == 0:
- print("Game Over\n乌龟累死了,游戏结束!")
- break
- pos = Boss.ttMoving()
- for each_fish in fishs[:]:
- if each_fish.fsMoving() == pos:
- Boss.eat_Fish()
- fishs.remove(each_fish)
- print("有一条鱼儿被吃掉了...")
复制代码
因为我设定的游戏边界是100*100,所以乌龟累死的几率比较大。哈哈啊哈! |
-
|