2

I am trying to code player and mob attacks for a text based RPG game I am making, I have randomint set up for player and mob hitchance and crit chance but I can't figure out how to get a new integer for them every time I restart the loop, it uses the same integer it got the first time it entered the loop.

### GAME VALUES ###
class roll_dice:
    def __init__(self):
        self.spawn = random.randint(1,100)
        self.escape = random.randint(1,100)
        self.playercrit = random.randint(1,100)
        self.playerhitchance = random.randint(1,100)
        self.mobcrit = random.randint(1,100)
        self.mobhitchance = random.randint(1,100)
roll = roll_dice()    


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
    orcMobSpawn()
    while True:
        fight_orc = input(">>> ")
        if fight_orc.lower() == 'a':

            ### PLAYER ATTACK ###
            while True:
                roll.playercrit
                roll.playerhitchance
                if roll.playercrit <= 10 and roll.playerhitchance >= 6:
                    print("You crit orc for",str(userPlayer.atk * 2),"damage!")
                    orcMob.hp = orcMob.hp - userPlayer.atk * 2
                    print("Orc HP:",orcMob.hp)
                    break
                elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
                    print("You hit orc for",str(userPlayer.atk),"damage!")
                    orcMob.hp = orcMob.hp - userPlayer.atk
                    print("Orc HP:",orcMob.hp)
                    break
                elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
                    print("You missed!")
                    break
                elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
                    print("You missed!")
                    break
                elif orcMob.hp <= 0 and userPlayer.hp >= 1:
                    print("Your HP:",str(userPlayer.hp))
                    print("You win!")
                    break
                elif userPlayer.hp <= 0:
                    print("You died!")
                    exit()

            ### ORC ATTACK ###
            while True:
                roll.mobcrit
                roll.mobhitchance
                if orcMob.hp <= 0 and userPlayer.hp >= 1:
                    break
                if roll.mobcrit <= 5 and roll.mobhitchance >= 25:
                    print("\nOrc crit for",str(orcMob.atk * 2),"damage!")
                    userPlayer.hp = userPlayer.hp - orcMob.atk * 2
                    print("Your HP:",str(userPlayer.hp))
                    break
                elif roll.mobcrit >= 5 and roll.mobhitchance >= 25:
                    print("\nOrc hit for",str(orcMob.atk),"damage!")
                    userPlayer.hp = userPlayer.hp - orcMob.atk
                    print("Your HP",str(userPlayer.hp))
                    break
                elif roll.mobcrit <= 5 and roll.mobhitchance <= 25:
                    print("Orc missed!")
                    print("Your HP:",str(userPlayer.hp))
                    break
                elif roll.mobcrit >= 5 and roll.mobhitchance <= 25:
                    print("Orc missed!")
                    print("Your HP:",str(userPlayer.hp))
                    break
        if orcMob.hp <= 0 and userPlayer.hp >= 1:
            break
        elif orcMob.hp >= 1:
            continue
2
  • I think maybe repeat of this: stackoverflow.com/questions/33806022/… Commented Mar 7, 2019 at 22:18
  • Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint() Commented Mar 7, 2019 at 22:22

2 Answers 2

1

The problem is with your roll_dice class. You have the values defined when the class initializes, but then you never update them again. Therefore self.escape or self.spawn will always be the same value after the program starts. The easiest way to solve your problem without rewriting much would be to make another instance of roll_dice() every time you want to roll the dice. Something like:

### GAME VALUES ###
class roll_dice:
    def __init__(self):
        self.spawn = random.randint(1,100)
        self.escape = random.randint(1,100)
        self.playercrit = random.randint(1,100)
        self.playerhitchance = random.randint(1,100)
        self.mobcrit = random.randint(1,100)
        self.mobhitchance = random.randint(1,100)
# roll = roll_dice() # you don't need to make an instance here


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
    orcMobSpawn()
    while True:
        fight_orc = input(">>> ")
        if fight_orc.lower() == 'a':

            ### PLAYER ATTACK ###
            while True:
                roll = roll_dice() # make a new instance with each loop
                roll.playercrit
                roll.playerhitchance
                if roll.playercrit <= 10 and roll.playerhitchance >= 6:
                    print("You crit orc for",str(userPlayer.atk * 2),"damage!")
                    orcMob.hp = orcMob.hp - userPlayer.atk * 2
                    print("Orc HP:",orcMob.hp)
                    break
                elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
                    print("You hit orc for",str(userPlayer.atk),"damage!")
                    orcMob.hp = orcMob.hp - userPlayer.atk
                    print("Orc HP:",orcMob.hp)
                    break
                elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
                    print("You missed!")
                    break
                elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
                    print("You missed!")
                    break
                elif orcMob.hp <= 0 and userPlayer.hp >= 1:
                    print("Your HP:",str(userPlayer.hp))
                    print("You win!")
                    break
                elif userPlayer.hp <= 0:
                    print("You died!")
                    exit()

            ### ORC ATTACK ###
Sign up to request clarification or add additional context in comments.

Comments

1

Use functions like

import random
for x in range(10):
    print random.randint(1,101)

use a array around for a max 100 people and generate random digits to add in your code.

You can also use a array to create random umber structure and then use the numbers to be shuffled and added as you create them

from random import *

items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
shuffle(items)
print items

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.