I created an extremely basic fight command in Nextcord. The command is like so:
/fight [your character] [your weapon] [your enemy] [enemy's weapon]
Each character and weapon is assigned their own strength, speed, and defense stats. And the stats are all added up to find their final stat. Then it does the same for the enemy and it calculates the outcome.
What I would like to do is make my code more organized, and the command more intricate. For example giving someone who has overall lower statistics a chance to win due to being faster. Currently I feel like a lot of the entering is manual so making new characters is very tedious. Does anyone have any suggestions? Also, I am planning on giving certain characters and weapons negative values for certain stats. Such as giving the katana negative defense and spork negative strength.
My current code for the fight cog:
class fight(commands.Cog):
def __init__(self, client):
self.client = client
testServerID = 948362430256410685
@nextcord.slash_command(name = "fight", description = "does fight stuff idk", guild_ids=[testServerID])
async def fight(self, interaction: Interaction, char1, weapon1, char2, weapon2):
# Speed
sDre = 3
sHenry = 4
sSonic = 10
sNub = 3
sGod = 5
sPewdiepie = 6
# Strength
stDre = 3
stHenry = 6
stSonic = 5
stNub = 4
stGod = 5
sPewdiepie = 6
# Defense
dDre = 6
dHenry = 7
dSonic = 5
dNub = 5
dGod = 5
dPewdiepie = 6
# WeaponStats
# Speed
sKatana = 6
sKnife = 4
sSpork = 1
sNokia = 0
sDiamondSword = 6
# Strength
stKatana = 3
stKnife = 7
stSpork = 6
stNokia = 3
stDiamondSword = 4
# Defense
dKatana = 1
dKnife = 2
dSpork = 2
dNokia = 9
dDiamondSword = 2
# Char1
if char1 == 'Dre':
fighterstat = sDre+stDre+dDre
if char1 == 'Henry':
fighterstat = sHenry+stHenry+dHenry
if char1 == 'Sonic':
fighterstat = sSonic+stSonic+dSonic
if char1 == 'Nub':
fighterstat = sNub+stNub+dNub
if char1 == 'God':
fighterstat = sGod+stGod+dGod
if char1 == 'Pewdiepie':
fighterstat = sDre+stDre+dDre
# Weapon1
if weapon1 == 'Katana':
weaponstat = sKatana+stKatana+dKatana
if weapon1 == 'Knife':
weaponstat = sKnife+stKnife+dKnife
if weapon1 == 'Spork':
weaponstat = sSpork+stSpork+dSpork
if weapon1 == 'Nokia':
weaponstat = sNokia+stNokia+dNokia
if weapon1 == 'DiamondSword':
weaponstat = sDiamondSword+stDiamondSword+dDiamondSword
# Weapon2
if weapon2 == 'Katana':
eweaponstat = sKatana+stKatana+dKatana
if weapon2 == 'Knife':
eweaponstat = sKnife+stKnife+dKnife
if weapon2 == 'Spork':
eweaponstat = sSpork+stSpork+dSpork
if weapon2 == 'Nokia':
eweaponstat = sNokia+stNokia+dNokia
if weapon2 == 'DiamondSword':
eweaponstat = sDiamondSword+stDiamondSword+dDiamondSword
# Char1
if char2 == 'Dre':
efighterstat = sDre+stDre+dDre
if char2 == 'Henry':
efighterstat = sHenry+stHenry+dHenry
if char2 == 'Sonic':
efighterstat = sSonic+stSonic+dSonic
if char2 == 'Nub':
efighterstat = sNub+stNub+dNub
if char2 == 'God':
efighterstat = sGod+stGod+dGod
if char2 == 'Pewdiepie':
efighterstat = sDre+stDre+dDre
fFighter = fighterstat+weaponstat
fEnemy = efighterstat+eweaponstat
win = 'Your character has won the duel! Excellent choice'
lose = 'Your character has lost, try again'
tie = 'You both are equals, try different weapons'
if fFighter < fEnemy:
await interaction.response.send_message(lose)
if fFighter > fEnemy:
await interaction.response.send_message(win)
if fFighter == fEnemy:
await interaction.response.send_message(tie)
print(fFighter)
print(fFighter)
def setup(client):
client.add_cog(fight(client))
Advertisement
Answer
If you would keep data in dictionaries
class Fight(commands.Cog):
testServerID = 948362430256410685
char_speed = {
'Dre': 3,
'Henry': 4,
'Sonic': 10,
'Nub': 3,
'God': 5,
'Pewdiepie': 6,
}
char_strength = {
'Dre': 3,
'Henry': 6,
'Sonic': 5,
'Nub': 4,
'God': 5,
'Pewdiepie': 6,
}
char_defense = {
'Dre': 6,
'Henry': 7,
'Sonic': 5,
'Nub': 5,
'God': 5,
'Pewdiepie': 6,
}
# ... other ...
then you could write it as
@nextcord.slash_command(name="fight", description="does fight stuff idk", guild_ids=[testServerID])
async def fight(self, interaction: Interaction, char1, weapon1, char2, weapon2):
if (char1 in self.char_speed) and (char1 in self.char_strength) and (char1 in self.char_defense):
fighterstat = self.char_speed[char1] + self.char_strange[char1] + self.char_defense[char1]
else:
print('Unknow char1:', char1)
# ... other ...
and if you would need more characters then you would have to only add values to dictionares – without changing rest of code.
You could even read data from file. Or you could add discord command which adds character.
EVentually you could group by character and weapon
class Fight(commands.Cog):
testServerID = 948362430256410685
character = {
'Dre': {'speed': 3, 'strength': 3, 'defense': 6},
'Henry': {'speed': 4, 'strength': 6, 'defense': 7},
'Sonic': {'speed': 10, 'strength': 5, 'defense': 5},
'Nub': {'speed': 3, 'strength': 4, 'defense': 5},
'God': {'speed': 5, 'strength': 5, 'defense': 5},
'Pewdiepie': {'speed': 6, 'strength': 6, 'defense': 6},
}
weapon = {
'Katana': {'speed': 6, 'strength': 3, 'defense': 1},
# ... code ...
}
and then it could be simpler
@nextcord.slash_command(name="fight", description="does fight stuff idk", guild_ids=[testServerID])
async def fight(self, interaction: Interaction, char1, weapon1, char2, weapon2):
if char1 in self.character:
data = self.character[char1]
fighterstat = data['speed'] + data['strange'] + data['defense']
else:
print('Unknow char1:', char1)
# ... other ...