python小乌龟编程_新手学python ——《小乌龟吃小鱼》小游戏 第二版

[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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值