这次的小游戏实际上我是一点头绪都没的,后面是收到了黄金同学的启发,同时他也给了我很多意见,还参考和借鉴了他的相关过程,但是还是有一个问题没能解决,就是没办法随机使用技能,(暂时累了,不想想了)同时有点拿剧情凑行数的嫌疑,,
import time
import random
import threading
import copy
def story():
print(‘这是人类历史上的阴影,为了应对强敌,人们制造了大量的克隆人’)
print(‘这早已经不是人们想象中的那样,道德和伦理已经丧失,这里只有活下来的强者’)
time.sleep(0.3)
print(‘他们没有名字,只有代号,他们只有一个任务,那就是为人类挑选出最强的战士’)
def back():
print(‘天空中破碎的黑洞散发出紫色的光芒,传来了地狱般的声音,要么诚服,要么死亡,无数的黑点袭击了人类的聚集地’)
print(‘爆发出来的蓝色的光芒吞噬了一切,幸存下来的人类只能看着自己的家园支离破碎’,在废墟中无能为力的痛哭)
time.sleep(0.3)
print(‘生命诚可贵,但是自由更可贵,诚服于这样的敌人也绝对没有什么好下场,于是剩下的人类开始了这场与神之间的斗争’)
print(’ 人们为了弥补战斗力上的缺陷,被迫只能启用火种计划’)
def tinder plan()
print(‘这是一个绝密的计划,很早之前人们制造大量冬日战士,但是他们没办法控制这些危险的工具,绝大数的人决定毁灭这些武器,但是在这一轮投票中,保守方赢得了绝大多数人的认可,他们提议保留这些战士,为人类的未来留下火种。’)
time.sleep(0.3)
print(‘在牺牲了一部分研究人员和战士的情况下,他们成功将这些怪物冰封于北极,现在讽刺的是,现在能拯救人类的居然是这些冰封中的怪物’)
time.sleep(0.3)
print(‘能消灭怪物的只有怪物,要想消灭怪物的方法就是让自己也变成怪物------冷祁,人类的未来会是怎么样呢?没人说的清楚,但是这是唯一的机会,不行动只能等待灭绝’)
#世界里的魔法清单
MAGIC_BOOKS={
0:[‘光之束缚’,1],
1:[‘诸刃手里剑’,2],
2:[‘致残打击’,0.5],
3:[“龙魂附体”,-1],
4:[‘影狱十字杀’,2],
5:[‘狂风绝曦斩’,1],
6:[‘大荒星陨’,1]
}
class Body():
ACCACK = 1
def __init__(self,IS_HUMAN_= False,NAME_='Ice NPC',LOCATION_={"x":0,"y":0},WAY_ = [],HP_=5,MP_=3,MAX_HP_=5,MAX_MP_=3,ATTACK_=1,MAGIC_ATTACK_=1.3,DEFENSE_=0,LEVEL_=1,EXPRIENCE_=0,MAX_EXPRIENCE_ = 20,FUNCTION_POINT_=0,HAS_MAGIC_=[],POS_NAME_='南昌理工学院南大门'):
self.IS_HUMAN = IS_HUMAN_ #判断是否位人类
self.NAME = NAME_ #姓名
self.WAY = WAY_
self.HP = HP_ #血量
self.MP = MP_ #魔法值
self.MAX_HP = MAX_HP_ #最大血量
self.MAX_MP = MAX_MP_ #最大魔法值
self.ATTACK = ATTACK_ #普通攻击
self.MAGIC_ATTACK = MAGIC_ATTACK_ #魔法攻击
self.DEFENSE = DEFENSE_ #防御
self.POS_NAME = POS_NAME_ #地点
self.HAS_MAGIC = HAS_MAGIC_ #会的魔法
def Display_Magic(self): #显示魔法
for i in self.HAS_MAGIC:
print(MAGIC_BOOKS[i][0]+"每次攻击消耗"+str(abs(MAGIC_BOOKS[i][1]))+"点魔法值")
def Display_Status(self): #显示人物状态
print('\n\r', ' 状态:' + self.NAME)
print("等级:"+str(self.LEVEL)+" 距离下次升级还需"+str(self.MAX_EXPERIENCE-self.EXPERIENCE)+"经验", end='')
print('\n血量:' + '❤' * int(self.HP), '\n 魔法值:' + '⚓' * int(self.MP),'\n 防御:' + '🛡' * int(self.DEFENSE))
print('地点:' + self.POS_NAME)
if self.HAS_MAGIC == []:
print('无魔法')
else:
self.Display_Magic()
#展示战斗状态
def display_status_fighting(self):
print('\n\r', ' 状态:' + self.NAME, end='')
print('\n血量:' + '❤' * int(self.HP), ' 魔法值:' + '⚓' * int(self.MP),' 防御:' + '🛡' * int(self.DEFENSE))
def Attack_One_Time(self,CHOOSE,NPC_): #对敌方进行一次攻击
if CHOOSE == -2:
self.Display_Magic()
elif CHOOSE == -1:
hit = 1 - NPC_.DEFENSE
if hit > 0:
NPC_.HP -= hit
print(self.NAME+"使用普攻攻击了"+NPC_.NAME+"造成了"+str(hit)+"点攻击")
else:
print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了0点攻击")
print("无魔法消耗")
else:
#是否有魔法
if CHOOSE in self.HAS_MAGIC:
if self.MP > MAGIC_BOOKS[CHOOSE][1]: #魔法值是否充足
if MAGIC_BOOKS[CHOOSE][1] > 0 :
hit = self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1] - NPC_.DEFENSE
self.MP -= MAGIC_BOOKS[CHOOSE][1]
if hit > 0:
NPC_.HP -= hit
print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了" + str(
hit) + "点攻击")
print("消耗了" + str(abs(MAGIC_BOOKS[CHOOSE][1])) + "点魔法")
else:
print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了0点攻击")
else:
self.MP += MAGIC_BOOKS[CHOOSE][1]
self.HP -= self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1]
print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "回复了自身" + str(-self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1])+"点生命值")
else:
print("魔法值不足")
hit = 1 - NPC_.DEFENSE
if hit > 0:
NPC_.HP -= hit
print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了" + str(hit) + "点攻击")
else:
print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了0点攻击")
else:
print("你没有此魔法")
hit = 1 - NPC_.DEFENSE
if hit > 0:
NPC_.HP -= hit
print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了" + str(hit) + "点攻击")
else:
print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了0点攻击")
if NPC_.HP <= 0:
return 1
else:
return 0
def talk_to(self, NPC_, NPC_SCRIPT_, delay=0):
# 按剧本和NPC聊天
print('在' + self.POS_NAME + '遇到 ' + NPC_.NAME)
for i in range(len(NPC_SCRIPT_)):
if i % 2 == 1: # 判断当前说话的人
TURN = self.NAME
else:
TURN = NPC_.NAME
print(TURN + ':' + NPC_SCRIPT_[i])
time.sleep(delay)
def display_magic(self): # 显示魔法
print(self.MP,self.NAME + '会如下几种魔法:')
print('魔法名 ,消耗点数')
i = 0
for iMagic in self.HAS_MAGIC:
print('第', i+1, '个魔法:', MAGIC_BOOKS[iMagic])
i = i + 1
#NPC选择最优攻击方式
def Choose_Action(self,NPC_):
if self.HP < 2:
if 3 in self.HAS_MAGIC:
return 3
else:
HAS_MAGIC = [MAGIC_BOOKS[i][1] for i in self.HAS_MAGIC]
HAS_MAGIC.sort()
HAS_MAGIC.reverse()
for i in HAS_MAGIC:
for key, value in MAGIC_BOOKS.items():
if i in value:
if self.MP >= i:
return key
else:
HAS_MAGIC = [MAGIC_BOOKS[i][1] for i in self.HAS_MAGIC]
HAS_MAGIC.sort()
HAS_MAGIC.reverse()
for i in HAS_MAGIC:
for key, value in MAGIC_BOOKS.items():
if i in value:
if self.MP >= i:
return key
return -1
#同属性战斗
def Choose_Action1(self,NPC_,WAY_,index1):
return WAY_[index1]
#玩家提升属性
#挑战NPC
def Fight_With(self,NPC_):
print('【', self.NAME + '开始和' + NPC_.NAME + '战斗! !', '】')
MAX_ROUND = 100
IS_DEAD = 0
for i in range(MAX_ROUND):
if i%2==0:
if self.IS_HUMAN:
self.display_status_fighting() # 显示玩家状态
self.Display_Magic() # 显示玩家魔法
NPC_.display_status_fighting() # 显示NPC状态
HAS_MAGIC = []
for j in self.HAS_MAGIC:
HAS_MAGIC.append(str(j))
HAS_MAGIC = "/".join(HAS_MAGIC)
choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,{}.魔法攻击,查看状态-2):'.format(HAS_MAGIC)))
IS_DEAD = self.Attack_One_Time(NPC_=NPC_, CHOOSE=choose_magic)
IS_DEAD = IS_DEAD * 2 # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
else:
choose_action = self.Choose_Action(NPC_)
IS_DEAD = self.Attack_One_Time(NPC_=NPC_, CHOOSE=choose_action)
IS_DEAD *= 2
if i%2 == 1:
if not NPC_.IS_HUMAN:
choose_action = NPC_.Choose_Action(self)
IS_DEAD = NPC_.Attack_One_Time(NPC_=self, CHOOSE=choose_action)
else:
self.display_status_fighting() # 显示玩家状态
self.Display_Magic() # 显示玩家魔法
NPC_.Display_Status() # 显示NPC状态
HAS_MAGIC = []
for j in self.HAS_MAGIC:
HAS_MAGIC.append(str(j))
HAS_MAGIC = "/".join(HAS_MAGIC)
choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,{}.魔法攻击,查看状态-2):'.format(HAS_MAGIC)))
IS_DEAD = self.Attack_One_Time(NPC_=NPC_, CHOOSE=choose_magic)
IS_DEAD = IS_DEAD*4 #用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
if IS_DEAD>=1:
print('【战斗结束】')
#恢复状态
self.HP = self.MAX_HP
self.MP = self.MAX_MP
NPC_.MP = NPC_.MAX_MP
NPC_.HP = NPC_.MAX_HP
#判断胜利者
if IS_DEAD==2:
print('【',self.NAME+'战胜了'+NPC_.NAME,'】')
VICTORY.append(self)
if self.IS_HUMAN:
self.Add_Attribute()
elif IS_DEAD==4:
VICTORY.append(NPC_)
print('【',NPC_.NAME+'战胜了'+self.NAME,'】')
if NPC_.IS_HUMAN:
NPC_.Add_Attribute()
return IS_DEAD
else:
if i % 2 == 1:
print('【第' + str(1 + int(i / 2)) + '回合结束!】\n===================================')
class World:
#如果只是做简单的话 实际上只要构建好攻击和掉血的机制就差不多了
PLAYER = Body(DEFENSE_=0.5,IS_HUMAN_=True)
def __init__(self):
self.NPCs = {
'school elder sister': Body(NAME_='school elder sister', HAS_MAGIC_=[0, 1,3]),
'ice monster': Body(NAME_='ice monster', HAS_MAGIC_=[2]),
'fire monster': Body(NAME_='fire monster', HAS_MAGIC_=[0])
}
print("欢迎来到最强战士之战的游戏")
# self.PLAYER.NAME = input("请输入玩家姓名")
print('....这个残酷的世界即将开始.....')
welcome_script = 'Hi,' + self.PLAYER.NAME + ',欢迎加入最强战士之战'
# self.display_a_line(script=welcome_script)
print(welcome_script)
def self_NPC_(self):
NPCs = []
t = []
for i in range(10):
NPC = Body(NAME_="克隆人"+str(i),HP_=random.randint(3,6),MP_=random.randint(2,10),HAS_MAGIC_=[random.randint(0,6) for i in range(2)])
NPCs.append(NPC)
VICTORY.append(NPC)
for i in range(5):
NPC1 = random.choice(NPCs)
NPCs.remove(NPC1)
NPC2 = random.choice(NPCs)
NPCs.remove(NPC2)
t1 = threading.Thread(target=self.NPC,args=(NPC1,NPC2))
t.append(t1)
#开启线程
for i in t:
i.start()
#NPC遭遇
def NPC(self,NPC1,NPC2):
print(NPC1.NAME + "与" + NPC2.NAME)
NPC1.talk_to(NPC_=NPC2, NPC_SCRIPT_=SCRIPT_NPC_SCHOOL_SISTER)
NPC1.npc_learn_Magic_from(NPC2)
NPC1.Fight_With(NPC2)
#NPC比赛
def Game(self):
SILVER_MEDAL = []
BRONZE_MEDAL = []
t = []
for i in range(100):
NPC = Body(NAME_="克隆人"+str(i),HP_=random.randint(3,6),MP_=random.randint(2,4),HAS_MAGIC_=[random.randint(0,6) for i in range(2)])
VICTORY.append(NPC)
while len(VICTORY) > 1:
if len(VICTORY) == 4:
BRONZE_MEDAL.extend(VICTORY)
if len(VICTORY) == 2:
SILVER_MEDAL.extend(VICTORY)
for i in range(int(len(VICTORY)/2)):
NPC1 = random.choice(VICTORY)
VICTORY.remove(NPC1)
NPC2 = random.choice(VICTORY)
VICTORY.remove(NPC2)
t1 = threading.Thread(target=NPC1.Fight_With, args=(NPC2,))
t.append(t1)
t1.start()
for i in t:
i.join()
player = [i.NAME for i in VICTORY]
print(player)
VICTORY1 = copy.deepcopy(VICTORY)
BRONZE_MEDAL = list(set(BRONZE_MEDAL) - set(SILVER_MEDAL))
SILVER_MEDAL = list(set(SILVER_MEDAL) - set(VICTORY))
VICTORY.clear()
BRONZE_MEDAL[0].Fight_With(BRONZE_MEDAL[1])
print("金牌:", VICTORY1[0].NAME)
time.sleep(0.3)
print(VICTORY1[0].NAME + ':你们之中一个能打的都没有吗?')
print("银牌:", SILVER_MEDAL[0].NAME)
time.sleep(0.3)
print(SILVER_MEDAL[0].NAME +':死亡在敲门,不,敲门的是我')
print("铜牌:", VICTORY[0].NAME)
time.sleep(0.3)
print(VICTORY[0].NAME +':要么战斗,要么被遗忘')
time.sleep(0.3)
#npc同属性战斗
def With_Game(self):
SILVER_MEDAL = []
BRONZE_MEDAL = []
t = []
for i in range(20):
NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
HAS_MAGIC_=[0,1,3,4,5,6],WAY_= [1,1,0,3,-1,-1,-1,-1])
VICTORY.append(NPC)
for i in range(20,40):
NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
HAS_MAGIC_=[0, 1, 3,4,5,6], WAY_=[0, 1, 0, 3, -1, -1, -1, -1])
VICTORY.append(NPC)
for i in range(40,60):
NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
HAS_MAGIC_=[0,1,3,4,5,6],WAY_= [0,0,3,-1,-1,-1,-1,-1])
VICTORY.append(NPC)
for i in range(60,80):
NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
HAS_MAGIC_=[0,1,3,4,5,6],WAY_= [1,1,3,-1,-1,-1,-1,-1])
VICTORY.append(NPC)
for i in range(80,100):
NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
HAS_MAGIC_=[0,1,3,4,5,6],WAY990_= [-1,-1,0,3,0,-1,-1,-1])
VICTORY.append(NPC)
while len(VICTORY) > 1:
if len(VICTORY) == 4:
BRONZE_MEDAL.extend(VICTORY)
if len(VICTORY) == 2:
SILVER_MEDAL.extend(VICTORY)
for i in range(int(len(VICTORY) / 2)):
NPC1 = random.choice(VICTORY)
VICTORY.remove(NPC1)
NPC2 = random.choice(VICTORY)
VICTORY.remove(NPC2)
t1 = threading.Thread(target=NPC1.Fight_With, args=(NPC2,))
t.append(t1)
t1.start()
for i in t:
i.join()
player = [i.NAME for i in VICTORY]
print(player)
VICTORY1 = copy.deepcopy(VICTORY)
BRONZE_MEDAL = list(set(BRONZE_MEDAL) - set(SILVER_MEDAL))
SILVER_MEDAL = list(set(SILVER_MEDAL) - set(VICTORY))
VICTORY.clear()
BRONZE_MEDAL[0].Fight_With(BRONZE_MEDAL[1])
print("金牌:", VICTORY1[0].NAME)
time.sleep(0.3)
print(VICTORY1[0].NAME+'你们之中一个能打的都没有吗?')
print("银牌:", SILVER_MEDAL[0].NAME)
time.sleep(0.3)
print(SILVER_MEDAL[0].NAME+'死亡在敲门,不,敲门的是我')
print("铜牌:", VICTORY[0].NAME)
time.sleep(0.3)
print(VICTORY[0].NAME+'要么战斗,要么被遗忘')
#随机选择NPC进行交流,学习,战斗
def Draw_NPC(self):
NPCs = [i for i in self.NPCs.keys()]
num = random.randint(0,len(NPCs)-1)
return self.NPCs[NPCs[num]]
#随机选择NPVC
NPC_ = self.Draw_NPC()
#遭遇NPC
self.PLAYER.talk_to(NPC_=NPC_,NPC_SCRIPT_=SCRIPT_NPC_SCHOOL_SISTER)
#向NPC进行学习
self.PLAYER.Learn_Magic_From(NPC_)
#随机挑战NPC
NPC_ = self.Draw_NPC()
self.PLAYER.Fight_With(NPC_)
if name == “main”:
magic_world = World()
# #npc遭遇、交流、战斗
# magic_world.self_NPC_()
# #玩家
# magic_world.run()
back()
story()
#npc比赛
magic_world.Game()
# #npc同属性下比赛
# magic_world.With_Game()
如果有什么方法能改进我的代码,希望各位观众老爷能和我说一声,在这里谢谢了

293

被折叠的 条评论
为什么被折叠?



