Python 开发基于回合的战斗游戏

Python 开发基于回合的战斗游戏,python,Python,我正在尝试用python创建一个基于回合的rpg游戏。目前,我正在使用列表方法为每个角色显示和创建单独的值。例如,游戏允许玩家设置一组单位进行战斗(最少1个单位,默认为3个)。每个单位都有一个唯一的名称和属性,如生命点(HP)、攻击点(ATK)、防御点(DEF)、经验点(EXP)和等级(默认为1级)。 一个单位可以是一个战士,一辆坦克或者一个在ATK和DEF点上有不同力量的巫师。此外,一个巫师有特殊能力施放可以影响友军和敌军单位的法术(治疗、毒药、治疗、冻结) 每个单元属性点的建议初始值在A部分

我正在尝试用python创建一个基于回合的rpg游戏。目前,我正在使用列表方法为每个角色显示和创建单独的值。例如,游戏允许玩家设置一组单位进行战斗(最少1个单位,默认为3个)。每个单位都有一个唯一的名称和属性,如生命点(HP)、攻击点(ATK)、防御点(DEF)、经验点(EXP)和等级(默认为1级)。 一个单位可以是一个战士,一辆坦克或者一个在ATK和DEF点上有不同力量的巫师。此外,一个巫师有特殊能力施放可以影响友军和敌军单位的法术(治疗、毒药、治疗、冻结)

每个单元属性点的建议初始值在A部分-游戏设置部分的需求详细信息中描述。 游戏将自动设置(1)玩家对人工智能(AI)或(2)双人模式,其中两个团队由相同数量的单位组成。 对于AI团队,单位类型将随机分配或通过特定AI算法分配。单位名称将由玩家指定,而AI单位名称可以用前缀+随机数(例如AI87)定义。对于双玩家模式,每个玩家都可以通过控制台或GUI进行相同的单元选择过程。 对于每个回合,玩家可以选择一个激活的友军单位(非冻结或死亡)对目标单位执行一个动作。严重损坏的单位(即HP等于或小于0)将被视为死亡(或标记为“死亡”)

如何使用面向对象编程方法为每个团队创建带有输入名称的3个字符(可以显示键入的名称和每个字符的信息),而不是使用列表方法

#Menu page
print('Welcome to PSB Battle Game! \n(N)ew game\n(S)ave game\n(Q)uit')

def main():
    selection = input('Choose your option then hit <ENTER> ==> ')
    if selection.upper() == 'N':
        new_game()              
    elif selection.upper() == 'S':
        print('Loading save game...')
        pass
    elif selection.upper() == 'Q':
        print('Exit game...')
        pass
    else:
        print("I don't understand what are you typing.")
        return main()

def new_game():
    print('\nSetting up Player 1 team...\n')
    name_list = []
    for unit_name in range(1,4):
        print(f'Enter a unique name for unit #{unit_name}-> ', end='')
        name = input('')
        repeated = False
        while repeated:
            if name == "":
                continue
        repeated = True
        if name in name_list:
            print('\nUnit name must be unique.\n')
            return new_game()
        if not name.strip():
            print('\nUnit name could not be blank.\n')
            return new_game()
        else:
            print('Name looks good!')
            name_list.append(name)
            print(f'Select unit #{unit_name}, type: (W)arrior, (T)anker, or Wi(Z)ard ==> ', end='')
            role = input('')
            if role.upper() == 'W':
                print('Added ' + str(name_list))
                warrior()
            elif role.upper() == 'T':
                print('Added ' + str(name_list))
                tanker()
            elif role.upper() == 'Z':
                print('Added ' + str(name_list))
                wizard()
            else:
                print("I don't understand what are you typing.")
                return role()


            
def warrior ():
    charac = [1,50,8,3,0,'True','False','False']
    print ('\nWarrior Level 1: ','HP =',charac[1],',''ATK =',charac[2],',''DEF =',charac[3],',''EXP =',charac[4],',''ALIVE =',charac[5],',''POISONED =',charac[6],',''FROZEN =',charac[7])
    print ()    

def tanker ():
    charac = [1,60,5,5,0,'True','False','False']
    print ('\nTanker Level 1: ','HP =',charac[1],',''ATK =',charac[2],',''DEF =',charac[3],',''EXP =',charac[4],',''ALIVE =',charac[5],',''POISONED =',charac[6],',''FROZEN =',charac[7])
    print ()           

def wizard ():
    charac = [1,40,3,2,0,'True','False','False']
    print ('\nWizard Level 1: ','HP =',charac[1],',''ATK =',charac[2],',''DEF =',charac[3],',''EXP =',charac[4],',''ALIVE =',charac[5],',''POISONED =',charac[6],',''FROZEN =',charac[7])
    print ()     

main()  

#菜单页
打印(‘欢迎来到PSB战斗游戏!\n(n)电子战游戏\n(S)ave游戏\n(Q)uit’)
def main():
选择=输入('选择您的选项,然后点击==>')
如果selection.upper()=“N”:
新游戏()
elif selection.upper()=='S':
打印('正在加载保存游戏…')
通过
elif selection.upper()
打印('退出游戏…')
通过
其他:
打印(“我不明白你在键入什么。”)
返回主管道()
def新游戏():
打印('\n设置玩家1团队…\n')
name_list=[]
对于范围(1,4)内的装置名称:
打印(f'为单元#{unit_name}->'输入唯一名称,结束='')
名称=输入(“”)
重复=错误
重复时:
如果名称==“”:
持续
重复=正确
如果名称列表中的名称:
打印('\n打印名称必须唯一。\n')
返回新游戏()
如果不是name.strip():
打印('\n打印名称不能为空。\n')
返回新游戏()
其他:
打印('名称看起来不错!')
名称\u列表。附加(名称)
打印(f'Select unit{unit#u name},键入:(W)arrior,(T)anker或Wi(Z)ard==>,end='')
角色=输入(“”)
如果role.upper()=“W”:
打印('添加'+str(姓名列表))
勇士()
elif role.upper()=“T”:
打印('添加'+str(姓名列表))
油轮()
elif role.upper()==“Z”:
打印('添加'+str(姓名列表))
向导()
其他:
打印(“我不明白你在键入什么。”)
返回角色()
def warrior():
字符=[1,50,8,3,0,'True','False','False']
打印(“\n到达级别1:”、“HP=”、字符[1]、“ATK=”、字符[2]、“DEF=”、字符[3]、“EXP=”、字符[4]、“活着=”、字符[5]、“中毒=”、字符[6]、“冷冻=”、字符[7])
打印()
def罐车():
字符=[1,60,5,5,0,'True','False','False']
打印(“\n链接级别1:”、“HP=”、“charac[1]、“ATK=”、“charac[2]、“DEF=”、“charac[3]、“EXP=”、“charac[4]、“ALIVE=”、“charac[5]、“中毒=”、“charac[6]、“Friented=”、“charac[7])
打印()
def向导():
字符=[1,40,3,2,0,'True','False','False']
打印(“\n向导级别1:”、“HP=”、“charac[1]、“ATK=”、“charac[2]、“DEF=”、“charac[3]、“EXP=”、“charac[4]、“ALIVE=”、“charac[5]、“中毒=”、“charac[6]、“Friented=”、“charac[7])
打印()
main()

您的游戏远不能正常运行。在你设计了一款具有战斗功能和角色类的游戏后,我冒昧地建立了一个游戏的小草图。从这段代码中,您可以进一步包括其他功能,例如机会、移动、更改技能点和其他内容

class Char:
    def __init__(self, name = '', cclass = "Warrior", stats = [1,50,5,5,0,'True','False','False']):
        self.c = cclass
        self.name = name
        self.stats = {'LVL':stats[0],
                      'HP':stats[1],
                      'ATK':stats[2],
                      'DEF':stats[3],
                      'EXP':stats[4],
                      'ALIVE':stats[5],
                      'POISONED':stats[6],
                      'FROZEN':stats[7]}
        self.calc_level()

    def __repr__(self):
        outs = ''
        outs+="Character Name: {0} of class {1}:\n---------------".format(self.name,self.c)
        for k,v in self.stats.items():
            outs+='\n  {0}: {1}'.format(k,v)
        return outs
        
    def calc_level(self):
        self.stats['LVL'] = int(self.stats['EXP']**.5)+1

    def attack(self,other):
        print("\n{0} furiously attacks {1} with {2} attack. {1} has {3} defense.".format(self.name,other.name,self.stats['ATK'],other.stats['DEF']))
        if self.stats['ATK']>=other.stats['DEF']:
            other.stats['HP'] -= self.stats['ATK']
            print("\nThat was a hit! The HP of {0} is now {1}".format(other.name,other.stats['HP']))
        else:
            print("\nYou missed and only made him angrier!")        

        
    
def new_char(existing):
    cc = ''
    accept = False
    while not accept:
        n = input("\nPlease input a new name: ")
        accept = True
        for c in existing:
            if n == c.name:
                accept = False
                print("This name is taken, already")
    while not cc in ['w','t','z']:
        cc = input("\nPlease input a class, noble {0}. (W)arrior, (T)ank, Wi(z)ard: ".format(n)).lower()

    cclasses = {'w':'Warrior','t':'Tank','z':'Wizard'}

    newc = Char(n,cclasses[cc])
    print('\nCharacter successfully created:')
    print(newc)
    return newc

def play(chars):
    print("May the games begin. The following characters are present:\n")
    for c in chars:
        print(c)
        print('')

    game_over = False   
    turn = 0
    while not game_over:
        print("It's the turn of noble {0} {1}. Please select a player to attack:".format(chars[turn].c,chars[turn].name))
        possible = []
        for i in range(len(chars)):
            if not i==turn:
                possible.append(i)
                print(" - ({0}): {1} named {2}".format(i,chars[i].c,chars[i].name))
        sel = -1
        while not sel in possible:
            s = input('Selection: ')
            try:
                sel = int(s)
            except:
                print("That's not a valid choice")

        chars[turn].attack(chars[sel])
        if chars[sel].stats['HP']<=0:
            game_over=True
            print("That was it! {0} has died and the game is over.".format(chars[sel].name))
        turn +=1
        if turn==len(chars):turn=0


def main():
    chars = []
    entry = ''
    print("Welcome to PSB Battle Game!")
    while not entry.lower() in ['q','p']:
        entry = input('\n(N)ew character\n(P)lay game\n(Q)uit\nSelection: ').lower()
        if entry == 'p' and len(chars)<2:
            print("\nYou can't play with only one character. Create characters first")
            entry = '' ## You can't play with only one char
        elif entry == 'n':
            chars.append(new_char(chars))
            entry = ''
        elif entry == 'p':
            play(chars)
        elif entry == 'q':
            print("\nOK, good bye")


main()
类字符:
定义(self,name='',ccclass=“Warrior”,stats=[1,50,5,5,0,'True','False','False']):
self.c=c类
self.name=名称
self.stats={'LVL':stats[0],
“HP”:统计信息[1],
“ATK”:统计数据[2],
“DEF”:统计信息[3],
“EXP”:统计信息[4],
“活动”:统计信息[5],
“中毒”:统计信息[6],
“冻结”:统计信息[7]}
自我计算水平()
定义报告(自我):
出局=“”
outs+=“字符名:{0},属于类{1}:\n------------------------”。格式(self.Name,self.c)
对于self.stats.items()中的k,v:
outs+='\n{0}:{1}'。格式(k,v)
退出
def calc_液位(自身):
self.stats['LVL']=int(self.stats['EXP']**.5)+1
def攻击(自身、其他):
print(“\n{0}使用{2}攻击猛烈攻击{1}。{1}有{3}防御。”.format(self.name,other.name,self.stats['ATK'],other.stats['DEF']))
如果self.stats['ATK']>=other.stats['DEF']:
other.stats['HP']-=self.stats['ATK']
print(“\n这很成功,{0}的HP现在是{1}”。格式(other.name,other.stats['HP']))
其他:
打印(“\n您错过了,只会让他更生气!”)
def新字符(现有):
cc=“”
接受=错误