跳转至

Python练习:自定义类

题目1

请编写一个文字游戏程序

玩家扮演 一位领主,要去 都城 参选 国王。 但是路途上有7座森林,每座森林里面可能会碰到一个妖怪: 鹰妖 和 狼妖。

所以你需要雇佣战士对付它们,可以雇佣 弓箭兵 或者 斧头兵

弓箭兵、 斧头兵、 狼妖、鹰妖 具有如下特征

弓箭兵

    雇佣价 100 灵石
    最大生命值 100
    杀伤力 
        杀死鹰妖   损耗生命值 20
        杀死狼妖  :  损耗生命值 80
斧头兵

    雇佣价 120 灵石
    最大生命值 120
    杀伤力 
        杀死鹰妖   损耗生命值 80
        杀死狼妖  :  损耗生命值 20


游戏运行流程如下:

  1. 产生森林和妖怪

程序随机为7座森林分别产生 鹰妖或者狼妖。

然后在屏幕上打印出7座森林里面的妖怪 分别是什么。

注意,只显示10秒钟就会消失(这就是游戏考验玩家的记忆力,暂时可以用 打印20个换行 翻屏实现)。


  1. 雇佣战士

玩家有 1000 灵石,让玩家根据自己记忆的 妖怪种类和数量,选择 雇佣 多少个 弓箭兵 和 斧头兵。

每雇佣一个士兵,给他起一个名字。


  1. 然后开始征途,要通过7座森林,系统不会提示你森林里面是什么妖怪(玩家凭记忆回想),每座森林只能派出一个战士 去 消灭里面的 妖怪, 让玩家选择派出哪个战士。

如果 战士 生命值 损耗完,这个战士就死亡了,如果战士死亡,就得派出另外一名战士杀死妖怪。

每次通过森林后,玩家可以选择是否用灵石给 战士补养;

如果选择补养,消耗1个灵石可以为生命值加1,但是不可能超过最大生命值



这个游戏最后,一定要通过7座森林,才算通关,并且系统显示玩家剩余灵石。

最后 剩余灵石 越多越好,越有机会当选国王。


补充练习

VIP实战班学员请联系老师获取补充练习,并做阶段学习交流

您需要高效学习,找工作? 点击咨询 报名实战班

点击查看学员就业情况

题目1-答案

注意:本题只给出部分参考代码,请读者自行完成后面的部分。

VIP实战班学员 联系老师提交作业,并且和老师交流答题思路。

from random import randint
import time,sys

# 玩家
class Player:

    def __init__(self,stoneNumber):
        self.stoneNumber = stoneNumber # 灵石数量
        self.warriors = {}  # 拥有的战士,包括弓箭兵和斧头兵

# 战士
class Warrior:

    # 初始化参数是生命值
    def __init__(self, strength):
        self.strength = strength

    # 用灵石疗伤
    def healing(self, stoneCount):
        # 如果已经到达最大生命值,灵石不起作用,浪费了
        if self.strength == self.maxStrength:
            return

        self.strength += stoneCount

        # 不能超过最大生命值
        if self.strength > self.maxStrength:
            self.strength = self.maxStrength


# 弓箭兵 是 战士的子类
class Archer(Warrior):
    # 种类名称
    typeName = '弓箭兵'

    # 雇佣价 100灵石,属于静态属性
    price = 100

    # 最大生命值 ,属于静态属性
    maxStrength = 100


    # 初始化参数是生命值, 名字
    def __init__(self, name, strength = maxStrength):
        Warrior.__init__(self, strength)
        self.name = name

    # 和妖怪战斗
    def fightWithMonster(self,monster):
        if monster.typeName== '鹰妖':
            self.strength -= 20
        elif monster.typeName== '狼妖':
            self.strength -= 80
        else:
            print('未知类型的妖怪!!!')



# 斧头兵 是 战士的子类
class Axeman(Warrior):
    # 种类名称
    typeName = '斧头兵'

    # 雇佣价 120灵石
    price = 120

    # 最大生命值
    maxStrength = 120


    # 初始化参数是生命值, 名字
    def __init__(self, name, strength = maxStrength):
        Warrior.__init__(self, strength)
        self.name = name

    # 和妖怪战斗
    def fightWithMonster(self,monster):
        if monster.typeName== '鹰妖':
            self.strength -= 80
        elif monster.typeName== '狼妖':
            self.strength -= 20
        else:
            print('未知类型的妖怪!!!')

# 鹰妖
class Eagle():
    typeName = '鹰妖'

# 狼妖
class Wolf():
    typeName = '狼妖'

# 森林
class Forest():
    def __init__(self,monster):
        # 该森林里面的妖怪
        self.monster = monster

print('''
***************************************
****           游戏开始             ****
***************************************

'''
)

# 森林数量
forest_num = 7

# 森林 列表
forestList = []

# 为每座森林随机产生 鹰妖或者 狼妖
notification = '前方森林里的妖怪是:'  # 显示在屏幕上的内容
for i in range(forest_num):
    typeName = randint(0,1)
    if typeName == 0:
        forestList.append( Forest(Eagle()) )
    else:
        forestList.append( Forest(Wolf()) )

    notification += \
        f'第{i+1}座森林里面是 {forestList[i].monster.typeName}  '

# 显示 妖怪信息
print(notification,end='')