文字冒险游戏

打卡: 面向对象

import random

# 主角属性
class Dumdum:
    def __init__(self, name, blood, speed, smart):
        self.name = name
        self.blood = blood
        self.speed = speed
        self.smart = smart
    def award(self, award):
        self.award = award
        if self.award == 1:
            self.blood += int(self.blood*0.15)
            print("生命+15%")
        if self.award == 2:
            self.speed += self.speed*0.15
            print("敏捷+1")
        if self.award == 3:
            self.smart += 1
            print("智慧+1")

# 怪兽属性
class Boss:
    def __init__(self, name, blood, speed, smart):
        self.name = name
        self.blood = blood
        self.speed = speed
        self.smart = smart

# 定义各种游戏:
class Game:
    def __init__(self, game):
        self.game = game
        # 计算题:
        if self.game == "计算题":
            cal = ["add", "mul", "sub", "div"]
            self.game = cal[random.randrange(0, len(cal))]
            if self.game == "add":
                x = random.randrange(0, 100)
                y = random.randrange(0, 100)
                self.sym = "+"
                self.x = x
                self.y = y
                z = self.x + self.y
                self.z = z
            if self.game == "mul":
                x = random.randrange(0, 20)
                y = random.randrange(0, 20)
                self.x = x
                self.y = y
                self.sym = "X"
                z = self.x * self.y
                self.z = z
            if self.game == "sub":
                x = random.randrange(0, 200)
                y = random.randrange(0, x)
                self.x = x
                self.y = y
                self.sym = "-"
                z = self.x - self.y
                self.z = z
            if self.game == "div":
                x = random.randrange(0, 200)
                y = random.randrange(0, x)
                self.x = x
                self.y = y
                self.sym = "/"
                z = self.x / self.y
                self.z = int(z)
        # 英文题
        if self.game == "英文题":
            self.z = {"中国": "China", "美国(缩写)": "US", "日本": "Japan", "德国": "Germany", "英国(缩写)": "UK"}
            z_key = []
            # 随机出单词
            for word in self.z:
                z_key.append(word)
            z = random.randrange(0, len(z_key))
            self.z_key = z_key[z]
            self.z_value = self.z[self.z_key]
        

print(" 游戏名:靠脸的游戏\n\t\t游戏开始!")
dumdum = Dumdum(input("Please enter name:"), 100, 10, 10)
print("主角名字: {}\n血量:{}\n敏捷:{}\n智慧:{}".format(dumdum.name, dumdum.blood, dumdum.speed, dumdum.smart))
level = 0
while True:

    if level == 0:
        print("{}!是否开始游戏?".format(dumdum.name))
        str = input("1  是!  2   否!\n")
        if str == '1':
            print("游戏开始!")
            level += 1
            # 3、进入关卡(play level) 显示属性和在哪一层
            print("{},你在第{}层".format(dumdum.name, level))
        if str == '2':
            print("退出游戏!")
            print('你已经退出游戏!')


# 第一层:
    if level == 1:
        boss = Boss("万", 50, 5, 5)
        print("{}:I am afraid!".format(boss.name))
        while True:
            boss_attack = Game('计算题')
            print("{} {} {} = ".format(boss_attack.x, boss_attack.sym, boss_attack.y))
            while True:
                z = input("Please enter number:")
                if z == "smart":
                    dumdum.smart -= 1
                    if dumdum.smart < 0:
                        print("你的智慧不足!")
                        break
                    print("你用了你的智慧!你的智慧值还有{}!".format(dumdum.smart))
                    z = boss_attack.z
                    break
                try:
                    z = int(z)
                    break
                except ValueError:
                    print("非法字符! 请输入一个数字!不支持小数 请四舍五入!")
                    print("{} {} {} = ".format(boss_attack.x, boss_attack.sym, boss_attack.y))

            # 检测你输入的答案:
            if boss_attack.z == z:
                boss.blood -= (random.randrange(0, (20+int(dumdum.blood/dumdum.speed))))
                print("{}还有{}点血".format(boss.name, boss.blood))
            if boss_attack.z != z:
                blood = random.randrange(int(boss.blood/boss.speed), 50)
                dumdum.blood -= blood
                print("你掉了{}点血,还有{}".format(blood, dumdum.blood))

            # 通关的加成选择
            if boss.blood <= 0:
                print("1、blood +1.5%  2、speed +1.5%  3、smart +1请选择加成:")
                print("\t\t1  血量+15%\t2  速度+15%\t3 智慧+1\t\t    ")
                while True:
                    award = input("")
                    try:
                        award = int(award)
                        break
                    except ValueError:
                        print("ValueError")
                # 下一关切换
                if award in (1, 2, 3):
                    dumdum.award(award)
                    level += 1
                    print("{}!\naward: \nblood: {}\t speed: {}\t smart: {}".format(dumdum.name, dumdum.blood, dumdum.speed, dumdum.smart))
                    print("通过第一关!")
                    break
            # 主角血量不足
            if dumdum.blood < int(boss.blood/boss.speed):
                level -= 1
                break


# 第二层:
    elif level == 2:
        boss = Boss("土", 75, 7.5, 7.5)
        print("{}: I am a good monster!".format(boss.name))
        while True:
            # 出题
            boss_attack = Game('英文题')
            # 答题
            while True:
                print("{}的英文是什么?请输入你的答案:".format(boss_attack.z_key))
                z = input()
                if z == "smart":
                    dumdum.smart -= 1
                    if dumdum.smart < 0:
                        print("你的智慧不足!")
                        break
                    print("你用了你的智慧!你的智慧值还有{}!".format(dumdum.smart))
                    z = boss_attack.z
                    break
        
                # 返回的是Boolean类型
                if z.isalpha() == True:
                    break
                else:
                    print("请正确输入!支持中文输入!不支持数字和特殊符号!")
                    
            # 检测你输入的答案:
            if boss_attack.z == z:
                boss.blood -= (random.randrange(0, (20 + int(dumdum.blood/dumdum.speed))))
                print("{}还有{}点血".format(boss.name, boss.blood))
            if boss_attack.z != z:
                blood = random.randrange(int(boss.blood/boss.speed), 50)
                dumdum.blood -= blood
                print("你掉了{}点血,还有{}".format(blood, dumdum.blood))

            # 通关的加成选择
            if boss.blood <= 0:
                print("1、blood +1.5%  2、speed +1.5%  3、smart +1请选择加成:")
                print("\t\t1  血量+15%\t2  速度+15%\t3 智慧+1\t\t    ")
                while True:
                    award = input("")
                    try:
                        award = int(award)
                        break
                    except ValueError:
                        print("ValueError")
                # 下一关切换
                if award in (1, 2, 3):
                    dumdum.award(award)
                    level += 1
                    print("{}!\naward: \nblood: {}\t speed: {}\t smart: {}".format(dumdum.name, dumdum.blood,
                                                                                   dumdum.speed, dumdum.smart))
                    print("通过第二关!")
                    break
            # 主角血量不足
            if dumdum.blood < int(boss.blood / boss.speed):
                level -= 1
                break
	elif level == 3:
		print("恭喜你通关了!") 
		break

# 检测
    if level == 0:
        print("Restart!")
        str = input("是否继续游戏y:继续  q:退出:")
        if str == 'q':
            print("游戏结束!")
            break
        if str == 'y':
            print("游戏继续!")
            dumdum = Dumdum(input("Please enter name:"), 100, 10, 10)
            level += 1
发布了18 篇原创文章 · 获赞 3 · 访问量 1062

猜你喜欢

转载自blog.csdn.net/hjh_cos/article/details/103844152