|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 铁棍阿童木 于 2017-11-16 21:36 编辑
动动手1. 乌龟吃鱼小游戏
对于小甲鱼课后布置的游戏练习,我大致写了如下的伪代码,烦请python大神耐心指教,看思路是不是这个思路。
- # 游戏场景为范围(x,y):0 <= x <= 10 , 0 <= y <= 10
- # 游戏生成 1 只乌龟(tortoise)和 10 条鱼。
- # 它们的移动方向随机。
- # 乌龟的最大移动能力是 2 (Ta可以随机选择移动 1 还是 2 ),鱼的最大移动能力是 1
- # 当移动到场景边缘,自动向反方向移动
- # 乌龟的初始化体力为100(上限)
- # 乌龟每移动一次消耗体力 1
- # 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
- # 鱼暂不计算体力
- # 当乌龟体力值为 0 (挂掉)或者鱼儿的数量为 0 时,游戏结束。
- import random
- import time
- 定义一个乌龟类
- class Tortoise:
- 体力值energy = 100
- 移动值step = random.randint(1,2)
- 方向值direction = [-1,1](-1为向左和向下,1为向上和向右)
-
- def __init__(self,tt_x = 5,tt_y = 5) 初始化乌龟位置
- self.tt_x = tt_x
- self.tt_y = tt_y
-
- def 乌龟移动函数ttMoving(self):
- 往x和y坐标随机方向,随机移动 1 或者 2
- new_X = self.tt_x + (random.choice([-1,1]) * random.randint(1,2))
- new_Y = self.tt_y + (random.choice([-1,1]) * random.randint(1,2))
-
- 然后检查移动后X坐标是否越界
- if new_X < axis_X[0]: 表示超出X轴的移动范围
- self.tt_x = axis_X[0] - (new_X - axis_X[0])
- elif new_X > axis_X[1]: 表示超出x轴的移动范围
- self.tt_x = axis_X[1] - (new_X - axis_X[1])
- else:
- self.tt_x = new_X
-
- 再检查移动后Y坐标是否越界
- if new_Y < axis_Y[0]:
- tt_y = axis_Y[0] - (new_Y - axis_Y[0])
- elif new_Y > axis_Y[1]:
- tt_y = axis_Y[1] - (new_Y - axis_Y[1])
- else:
- tt__y = new_Y
-
- return self.tt_x,self.tt_y # 最后返回移动后的乌龟坐标。
-
- 定义一个鱼类
- class Fish:
- 移动值step = 1
- 方向值direction = [-1,1](-1为向左和向下,1为向上和向右)
-
- def __init__(self,pos_x = 0,pos_y = 0) 初始化鱼的位置
- self.fs_x = fs_x
- self.fs_y = fs_y
-
- def 鱼的移动函数fsMoving(self):
- # 往x和y坐标随机方向,随机移动 1
- new_X = self.fs_x + (random.choice([-1,1]) * self.step)
- new_Y = self.fs_y + (random.choice([-1,1]) * self.step)
-
- 然后检查移动后X坐标是否越界
- if new_X < axis_X[0]: 表示超出X轴的移动范围
- self.fs_x = axis_X[0] - (new_X - axis_X[0]
- elif new_X > axis_X[1]: 表示超出x轴的移动范围
- 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
-
- return self.fs_x,self.fs_y 最后返回鱼移动后所在位置。
- 定义一个场景函数,初始化原点,生成乌龟对象和鱼对象
- def enclosure(pos_x = 4,pos_y = 5)
- axis_X = [0,10] X轴的移动范围
- axis_Y = [0,10] Y轴的移动范围
- tt_Boss = Tortoise() # 生成乌龟对象
- fs_Food = Fish # 这里对于如何生成10条鱼有点懵逼,暂时1条。
- while 1: # 游戏开始
- try:
- tt_Boss.ttmoving # 乌龟生成开始移动
- tt_Boss.energy -= 1 # 每移动一次,体力值 - 1
- fs_Food.fsmoving # 鱼儿生成开始移动
- if self.tt_x == self.fs_x and self.tt_y == self.fs_y # 乌龟和鱼儿的坐标重叠
- del fs_Food # 删除鱼类的实例化对象。
- tt_Boss.energy += 20
- continue
- else:
- continue
- except NameError: # 如果捕捉到NameError异常,则说明鱼儿为 0 ,游戏结束。
- print("Game Over\n鱼儿被乌龟吃完了,游戏结束!!")
- break
-
- if tt_Boss.energy == 0:
- print("Game Over\n乌龟累死了,游戏结束!!")
- break
复制代码 |
|