[Python] 纯文本查看 复制代码# 游戏场景为范围(x,y)为 0<=x<=10,0<=y<=10
# 游戏生成1只乌龟和10条鱼
# 它们的移动方向均随机
# 乌龟的最大移动能力为2(可以随机选择1还是2),鱼儿的最大移动能力为1
# 当移动到场景边缘,自动向反方向移动
# 乌龟初始化体力为100(上限)
# 乌龟每移动一次,体力消耗1
# 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
# 鱼暂不计算体力
# 当乌龟体力值为0(挂掉)或鱼儿的数量为0游戏结束
import random
import time
# 最大最小边界(由于算法关系x和y分别的MAX和MIN差最小为1)
MAP_MIN_X = 0
MAP_MAX_X = 10
MAP_MIN_Y = 0
MAP_MAX_Y = 10
# 符号 正 负
SYMBOL = ['+','-']
# 方向 水平 垂直
DIRECTION = ['horizontal','vertical']
# 鱼群
# 鱼群堆
SHOAL_OF_FISH = []
# 最大数量
MAX_FISH = 10
# 乌龟
# 移动次数
TORTOISE_MOVE_MAX = 2
# 最大体力
TORTOISE_SPIRIT_MAX = 100
class Ainmal():
def __init__(self):
self.x = random.randint(MAP_MIN_X,MAP_MAX_X)
self.y = random.randint(MAP_MIN_Y,MAP_MAX_Y)
def move(self):
self.symbol = SYMBOL[random.randint(0,1)]
self.direction = DIRECTION[random.randint(0,1)]
if self.direction == 'horizontal':
if self.symbol == '+':
self.x = self.x + 1
if self.x > MAP_MAX_X:
self.x = MAP_MAX_X * 2 - self.x
elif self.symbol == '-':
self.x = self.x - 1
if self.x < MAP_MIN_X:
self.x = abs(self.x)
if self.direction == 'vertical':
if self.symbol == '+':
self.y = self.y + 1
if self.y > MAP_MAX_Y:
self.y = MAP_MAX_Y * 2 - self.y
elif self.symbol == '-':
self.y = self.y - 1
if self.y < MAP_MIN_X:
self.y = abs(self.y)
class Tortoise(Ainmal):
def __init__(self,spirit):
Ainmal.__init__(self)
self.spirit = spirit
self.name = '乌龟'
def move(self):
Ainmal.move(self)
self.blood(-1)
self.touch()
def print_position(self):
print("{0}\t({1},{2})\t体力:{3}".format(str(self.name),str(self.x),str(self.y),str(self.spirit)))
def blood(self,flag):
self.spirit = self.spirit + flag
if self.spirit > TORTOISE_SPIRIT_MAX:
self.spirit = TORTOISE_SPIRIT_MAX
def touch(self):
shoal_of_fish_to_move = []
if SHOAL_OF_FISH:
for fish in SHOAL_OF_FISH:
if fish.x == self.x and fish.y == self.y:
shoal_of_fish_to_move.append(fish)
self.blood(20)
for fish_move in shoal_of_fish_to_move:
SHOAL_OF_FISH.remove(fish_move)
class Fish(Ainmal):
def __init__(self,number):
Ainmal.__init__(self)
self.name = '鱼儿 ' + str(number)
def move(self):
Ainmal.move(self)
def print_position(self):
print("{0}\t({1},{2})".format(str(self.name),str(self.x),str(self.y)))
def main():
wugui = Tortoise(TORTOISE_SPIRIT_MAX)
for i in range(0,MAX_FISH):
SHOAL_OF_FISH.append(Fish(i))
while 1:
tortoise_move = random.randint(1,TORTOISE_MOVE_MAX)
for i in range(0,tortoise_move):
wugui.move()
wugui.print_position()
for fish in SHOAL_OF_FISH:
fish.move()
fish.print_position()
print('场上还剩{0}条小鱼'.format(len(SHOAL_OF_FISH)))
print('===============================')
time.sleep(0.5)
if wugui.spirit == 0:
print('小鱼存活,乌龟扑街')
break
elif len(SHOAL_OF_FISH) == 0:
print('小鱼灭绝,乌龟WIN!\t剩余体力:{0}'.format(wugui.spirit))
break
if __name__ == '__main__':
main()