鱼C论坛

 找回密码
 立即注册
查看: 1141|回复: 5

[作品展示] 037乌龟吃鱼练习题的一些思考

[复制链接]
发表于 2020-2-8 22:20:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我把037的例题1乌龟吃鱼那个题更形象地写出来了,写了三个小时,我觉得我比小甲鱼的更直观,附上代码供大家讨论。

import random as r
import  time


def change_loc(loc_x ,loc_y ,ob) :  #将哪个对象的什么位置添加到列表里
    temp = list(game_map[loc_x - 1])
    temp[loc_y - 1] = ob
    temp = ''.join(temp)
    game_map[loc_x - 1] = temp
    return game_map


class Tortoise :
    #定义🐢类的属性和方法
    def __init__(self) :
        self.strength = 100
        self.loc_x = r.randint(1 ,10 )
        self.loc_y = r.randint(1 ,10 )
        self.loc = [self.loc_x , self.loc_y]

    def move(self) : #仅考虑移动一次
        direction = r.randint(1, 4)  # 用1—4表示移动方向(上下左右)
        if (direction == 1 and self.loc_y != 10) or (direction == 3 and self.loc_y == 1):  # 向上走
            self.loc_y += 1
            print('你的🐢向右走了一步')
        elif (direction == 2 and self.loc_x != 10) or (direction == 4 and self.loc_x == 1):  # 向右走
            self.loc_x += 1
            print('你的🐢向下走了一步')
        elif (direction == 3 and self.loc_y != 1) or (direction == 1 and self.loc_y == 10):  # 向下走
            self.loc_y -= 1
            print('你的🐢向左走了一步')
        elif (direction == 4 and self.loc_x != 1) or (direction == 2 and self.loc_x == 10):  # 向左走
            self.loc_x -= 1
            print('你的🐢向上走了一步')
        self.strength -= 1          #先暂时不考虑体力为0的情况
        self.loc = [self.loc_x, self.loc_y]
        return self.loc

    def eat(self) :
        self.strength += 20
        if self.strength >= 100 :   #判断是否超过体力上限
            self.strength = 100
        print('你的🐢吃了一条🐟,回复20点体力')

class Fish :
    #定义🐟类的属性和方法
    def __init__(self) :
        self.loc_x = r.randint(1 ,10 )
        self.loc_y = r.randint(1 ,10 )
        self.loc = [self.loc_x , self.loc_y]

#初始化🐢和🐟
tortoise = Tortoise()
fish_loclist = []  #用列表存放十条鱼的位置
#将抽象的列表形象化
game_map = []
for w in range(10) :    #初始化地图
    game_map.append('☐☐☐☐☐☐☐☐☐☐')
#把🐢和🐟添加到地图上
for q in range(10) :
    fish = Fish()
    while fish.loc in fish_loclist :   #保证每条🐟的位置不同
        fish = Fish()
    fish_loclist.append(fish.loc)
    game_map = change_loc(fish.loc_x ,fish.loc_y ,'🐟')
game_map = change_loc(tortoise.loc_x ,tortoise.loc_y ,'🐢')
for i in game_map :
    print(i)
#开始迭代🐢吃🐟
while tortoise.strength != 0 :
    print('体力: %d' % tortoise.strength)
    step = r.randint(1 ,2 )
    #while step > 2 :
    #    print('你的🐢只能走一步或者两步')
    #    step = int(input('请输入要走的步数:'))
    while step :
        #print(tortoise.loc) #debug
        game_map = change_loc(tortoise.loc_x, tortoise.loc_y, '☐')
        tortoise.move()
        #print(tortoise.loc) #debug
        game_map = change_loc(tortoise.loc_x, tortoise.loc_y, '🐢')
        #判断🐢和🐟是否重合
        if tortoise.loc in fish_loclist :
            fish_loclist.remove(tortoise.loc)
            tortoise.eat()
        step -= 1
    time.sleep(0.7)
    for i in game_map:
        print(i)
    if tortoise.strength == 0 :
        print('体力为零,游戏结束,你输了')
    if len(fish_loclist) == 0 :
        print('🐟都被吃光了,你赢了')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-8 22:21:47 | 显示全部楼层
其中🐢和&#128031分别是乌龟和鱼的emoji,无奈论坛好像不能识别,大伙凑合看吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-15 19:23:31 | 显示全部楼层
果然新人发帖没人理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-15 19:24:55 | 显示全部楼层
本帖最后由 枵央 于 2020-5-17 19:51 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-15 19:25:27 | 显示全部楼层
本帖最后由 枵央 于 2020-5-17 19:51 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 16:41:26 | 显示全部楼层
今天才动手了乌龟吃鱼,楼主加了上下左右和位置重叠的判断,值得学习,看着挺长,但思路挺清晰的!
(自娱自乐属实
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表