简介:
发表人:蒲成伟
发表时间:2020-5-15
发表目的:保存代码以便后期查询,可以参考,严禁抄袭。。。。
题目要求:
实验内容
在上一实验“姓名大作战小游戏设计开发”的基础上,完成如下要求:
(1)战斗过程采用回合制,每次攻击由游戏者来操纵
(2)引入行动力概念,每个玩家每回合有十点行动力,玩家的每次行动都会消耗一定的行动力,行动力不足时则无法行动,若无特殊技能,本回合剩余行动力将在回合结束后清空。
(3)设定四到六个角色,每个角色拥有自己的特殊技能(例如本回合攻击力上升点、本回合防御力上升点、治愈伤害点、本回合剩余行动力存入下回合使用、本回合行动所消耗行动力降低点、本回合剩余行动力用于增加防御力……等),注:使用角色的特殊技能也要消耗行动力(具体消耗数值自己设定),为了降低编程难度,角色的特殊技能只能对自身属性进行加成,不能攻击对手。
(4)游戏开始时,玩家除了输入自己的姓和名之外,还要选择各自的角色。
(5)游戏开始时,除计算玩家各自的攻击力、防御力、生命值外,还需计算敏捷值(计算规则由自己确定),敏捷值用于增加对方攻击无效的概率(例如生成一个0~敏捷值之间的随机数,将该随机数和防御力相加之后再进行攻击效果判定)
(6)游戏过程:一次攻防算作一个回合,直到某一方生命值为零或负数为止。每个玩家在自己的进攻环节开始前会显示双方的攻击力、防御力、敏捷值、生命值;玩家在自己的进攻环节可以选择“攻击”、“使用技能”、“结束行动”,每次行动后都要计算并显示行动造成的影响和行动后双方的攻击力、防御力、生命值、敏捷值和剩余行动力等信息。
其他特别要求:
1、变量名、类名都要以“姓的全拼和名字的声母作为前缀”,例如学生张三的类名叫Player,那么张三实际的类名叫“ZhangsPlayer”
2、玩家应作为游戏角色的父类存在,游戏过程中只把参与游戏的对象视作玩家,而不对其具体角色进行判断。
3、玩家的各项属性除了玩家自己外,不能由外部程序修改
作者提醒:
对玩法做出了一点改变(1)行动力每局恢复4点,且不会清零,初始值为10点
# 1级标题
代码:
Puscharacter.py
class player:
__xing = None
__Ming = None
__Name = None
__Blood = None
__Defense = None
__Exocet = None
__Stamina = 10
def __init__(self):
self.__Xing = input("请输入你的姓:")
self.__Ming = input("请输入你的名:")
for i in range(len(self.__Xing)):
self.__Exocet = ord(self.__Xing[i])
self.__Exocet /= 200
for j in range(len(self.__Ming)):
self.__Defense = ord(self.__Ming[j])
self.__Defense /= 100
self.__Name = self.__Xing + self.__Ming
self.__Blood = (self.__Exocet * 6 + self.__Defense)
self.__Defense = round(self.__Defense, 0)
self.__Blood = round(self.__Blood, 0)
self.__Exocet = round(self.__Exocet, 0)
# print('{} 的血量为:{} 攻击力:{} 防御力: {}'.format(self.__name, self.__blood, self.__Exocet, self.__Defense))
def inquire(self, blood, exocet, defense): #实例化对象角色时,计算总的生命值
self.__Blood += blood
self.__Exocet += exocet
self.__Defense += defense
return self.__Blood, self.__Exocet, self.__Defense
def get_Name(self):
return self.__Name
def get_Exocet(self):
return self.__Exocet
def get_Stamina(self):
return self.__Stamina
def get_Blood(self):
return self.__Blood
def get_Defense(self):
return self.__Defense
def set_Defense(self, num):
self.__Defense += num
def set_Blood(self, num):
self.__Blood += num
def set_Exocet(self,num):
self.__Exocet += num
def set_Name(self, str):
self.__Name = str
def set_Stamina(self, num):
self.__Stamina += num
class Spell(player):
__blood = 500
__defense = 300
__exocet = 65
__stamina = 10
skill = ['雪舞漫天(攻击加成80)', 80, 0, 0] #攻击力。生命力,体力
def __init__(self):
super(Spell, self).__init__()
self.__blood,self.__defense,self.__exocet=super(Spell, self).inquire(self.__blood, self.__defense, self.__exocet) #将角色的加成属性传递给player
self.__name=super(Spell, self).get_Name()
print(self.get_Name()+"创建 法师 成功")
print("血量:"+str(self.__blood)+" 护甲:"+str(self.__defense)+" 攻击力:"+str(self.__exocet))
class warrior(player):
__blood = 500
__defense = 300
__exocet = 70
__stamina = 8
skill = ['铁铠(生命加持100)', 0, 130,0]
def __init__(self):
super(warrior, self).__init__()
self.__blood,self.__defense,self.__exocet=super(warrior, self).inquire(self.__blood, self.__defense, self.__exocet) #将角色的加成属性传递给player
self.__name=super(warrior, self).get_Name()
print(self.get_Name()+"创建 战士 成功")
print("血量:"+str(self.__blood)+" 护甲:"+str(self.__defense)+" 攻击力:"+str(self.__exocet))
class striker(player):
__blood = 200
__defense = 100
__exocet = 60
__stamina = 10
skill = ['狙击!(攻击+120,生命+10)', 120, 10,0]
def __init__(self):
super(striker, self).__init__()
self.__blood,self.__defense,self.__exocet=super(striker, self).inquire(self.__blood, self.__defense, self.__exocet) #将角色的加成属性传递给player
self.__name=super(striker, self).get_Name()
print(self.get_Name()+"创建 ADC 成功")
print("血量:"+str(self.__blood)+" 护甲:"+str(self.__defense)+" 攻击力:"+str(self.__exocet))
class nurse(player):
__blood = 700
__defense = 400
__exocet = 40
__stamina = 12
skill = ['守护(体力+5,生命+150)',0,150, 5]
def __init__(self):
super(nurse, self).__init__()
self.__blood,self.__defense,self.__exocet=super(nurse, self).inquire(self.__blood, self.__defense, self.__exocet) #将角色的加成属性传递给player
self.__name=super(nurse, self).get_Name()
print(self.get_Name()+"创建 奶妈 成功")
print("血量:"+str(self.__blood)+" 护甲:"+str(self.__defense)+" 攻击力:"+str(self.__exocet))
Pussetup.py
from 姓名大作战进阶重置版 import Puscharacter
import time
def select_role():
print(" ")
print(" ")
print("--------------选择角色---------------")
print("请玩家选择你的角色:")
print("1.法师 2.战士 3.ADC 4.辅助")
while 1:
a = input("你的选择:")
if a == str(1):
return Puscharacter.Spell()
elif a == str(2):
return Puscharacter.warrior()
elif a == str(3):
return Puscharacter.striker()
elif a == str(4):
return Puscharacter.nurse()
else:
print("非法代码,请重新选择角色")
def attack(count,Attacker,Deference):
Attacker_Name=Attacker.get_Name()
Deference_Name=Deference.get_Name()
if count!=1:
print("体力恢复4点")
Attacker.set_Stamina(4)
print("-----------"+str(Attacker_Name)+"的回合开始-------------")
while Attacker.get_Stamina() >= 0 and Deference.get_Blood() >0:
print(" ")
print(" ")
print("-------请选择技能(体力:"+str(Attacker.get_Stamina())+")-----:")
print("1.普通攻击(消耗2体力)")
print("2.秘技:"+str(Attacker.skill[0])+"消耗3体力")
print("3.退出")
tili=[-2,-3,0]
select=int(input("你选择:"))
if select == 1 and Attacker.get_Stamina() >= tili[select-1]:
if Deference.get_Defense() >= Attacker.get_Exocet():
Attacker.set_Stamina(tili[select-1])
Deference.set_Defense(Attacker.get_Exocet())
time.sleep(1)
print("攻击完成:")
print(str(Deference_Name) + "属性如下:")
print("血量:" + str(Deference.get_Blood()) + "护甲:" + str(Deference.get_Defense()))
else:
Attacker.set_Stamina(tili[select - 1])
Deference.set_Blood(-Attacker.get_Exocet()) # 如果护甲值不足以抵挡本次攻击, Blood-=攻击者攻击值,然后 blood+=护甲残值,最后把护甲值赋值为0;
Deference.set_Blood (Deference.get_Defense())
Deference.set_Defense(-Deference.get_Defense())
time.sleep(1)
print("攻击完成:")
print(str(Deference_Name) + "属性如下:")
print("血量:" + str(Deference.get_Blood()) + "护甲:" + str(Deference.get_Defense()))
elif select == 1 and Attacker.get_Stamina() < tili[select-1]:
print("体力不足,请重新选择")
time.sleep(1)
elif select == 2 and Attacker.get_Stamina() >= tili[select-1]:
Attacker.set_Blood(+Attacker.skill[2])
if Deference.get_Defense() >= Attacker.get_Exocet()+Attacker.skill[1]:
Attacker.set_Stamina(tili[select-1])
Deference.set_Defense(Attacker.get_Exocet())
time.sleep(1)
print("攻击完成:")
print(str(Deference_Name) + "属性如下:")
print("血量:" + str(Deference.get_Blood()) + "护甲:" + str(Deference.get_Defense()))
else:
Attacker.set_Stamina(tili[select - 1])
Attacker.set_Exocet(Attacker.skill[1])
Attacker.set_Blood(Attacker.skill[2])
Attacker.set_Stamina(Attacker.skill[3])
time.sleep(1)
print("攻击完成:")
print(str(Deference_Name)+"属性如下:")
print("血量:" + str(Deference.get_Blood()) + "护甲:" + str(Deference.get_Defense()))
elif select == 2 and Attacker.get_Stamina() < tili[select-1]:
print("体力不足,请重新选择")
time.sleep(1)
elif select == 3:
print(str(Attacker.get_Name())+"的攻击回合结束")
print(" ")
print(" ")
break
else:
print("输入无效,请重新选择")
if Deference.get_Blood() <= 0:
return 1 #死亡
else:
return 0 #还活着
if __name__ == '__main__':
print("-----------------------------------------------------------------------------")
print("-----------------------------欢迎来到姓名大作战-------------------------------")
print("-----------------------------------------------------------------------------")
player1 = select_role()
time.sleep(1.5)
player2 = select_role()
for i in range(1,6):
print("游戏将在"+str(6-i)+"秒后开始!")
time.sleep(1)
count = 1
while 1:
print("-----------------------第"+str(count)+"回合开始-----------------------")
time.sleep(1)
if attack(count,player1,player2) == 1:
print(str(player1.get_Name())+"WIN")
break
time.sleep(2)
print("-----------------------第"+str(count+1)+"回合开始-----------------------")
if attack(count+1,player2,player1) == 1:
print(str(player2.get_Name())+"WIN")
break
count += 2