开发基于TurnBased的战斗游戏

2024-06-23 19:55:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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()  


Tags: namegamefalseifdef玩家unit单位
1条回答
网友
1楼 · 发布于 2024-06-23 19:55:36

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

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()

相关问题 更多 >

    热门问题