打卡: 面向对象
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