Forum >> Programmazione Python >> Videogames >> Sistema combattimento random

Pagina: 1

Ciao son di nuovo qui, stavo seguendo un tutorial che mostrava come eseguire un mini game di combattimento testuale, ma mi ritrovo con degli errori, ho provato a risolverli ma senza successo. Questo e il codice:
#!/usr/bin/python

# -*- coding: UTF-8 -*-

import sys

import os

import random

class Player:

    def __init__(self, nome):

        self.nome = nome

        self.maxvita = 100

        self.vita = self.maxvita

        self.attacco = 10

        self.oro = 0

        self.poz = 0

class Goblin:

    def __init__(self, nome):

        self.nome = nome

        self.maxvita = 50

        self.vita = self.maxvita

        self.attacco = 5

        self.orolasciato = 10

GoblinID = Goblin("Goblin")        

class Zombie:

    def __init__(self, nome):

        self.nome = nome

        self.maxvita = 70

        self.vita = self.maxvita

        self.attacco = 7

        self.orolasciato = 15

ZombieID = Zombie("Zombie") 

def main():

    os.system('clear')

    print ("Benvenuto in questa fantastica avventura!\n")

    print ("1.) Inizio")

    print ("2.) Carica")

    print ("3.) Esci")

    scelta = input(">")

    if scelta == "1":

        inizio()

    elif scelta == "2":

        pass

    elif scelta == "3":

        sys.exit()

    else:

        print("Comando invalido, riprova.")

        main()

def inizio():

    os.system('clear')

    print ("Ciao, qual'è il tuo nome?")

    scelta = input("> ")

    global PlayerID

    PlayerID = Player(scelta)

    inizio1()

def inizio1():

    os.system('clear')

    print ("Nome: %s" % PlayerID.nome)

    print ("Attacco: %i" % PlayerID.attacco)

    print ("Oro: %d" % PlayerID.oro)

    print ("Pozioni: %d" % PlayerID.poz)

    print ("Vita: %i/%i" % (PlayerID.vita, PlayerID.maxvita))

    print ("1.) Combattimento")

    print ("2.) Inventario")

    print ("3.) Salva")

    print ("4.) Esci")

    scelta = input("> ")

    if scelta == "1":

        precombattimento()

    elif scelta == "2":

        inventario()

    elif scelta == "3":

        pass

    elif scelta == "4":

        sys.exit()

    else:

        inizio1()

def precombattimento():

    global nemico

    nemiconum = random.randint(1, 2)

    if nemiconum == 1:

        nemico = GoblinID

    else:

        nemico = ZombieID

    combattimento()    

            

def combattimento():

    os.system('clear')

    print ("%s      vs      %s" % (PlayerID.nome, nemico.nome))

    print ("%s's Vita: %d/%d     %s's Vita: %i/%i" %(PlayerID.nome, PlayerID.vita, PlayerID.maxvita, nemico.nome, nemico.vita, nemico.maxvita))

    print ("Pozioni %i " % PlayerID.poz)

    print ("1.) Attacco")

    print ("2.) Bevi pozione")

    print ("3.) Scappa")

    scelta = input("> ")

    if scelta == "1":

        attaccodef()

    elif scelta == "2":

        bevipot()

    elif scelta == "3":

        scappa()

    else:

        combattimento()

        

def attaccodef():

    os.system('clear')

    PAttacco = random.randint(PlayerID.attacco/2, PlayerID.attacco)

    NAttacco = random.randint(nemico.attacco/2, nemico.attacco)

    if PAttacco == PlayerID.attacco/2:

        print ("L'hai mancato!")

    else:

        nemico.vita -= PAttacco

        print ("Hai colpito e fatto %i danni!" % PAttacco)

    scelta = input("> ")

    if nemico.vita <= 0:

        vittoria()

    os.system('clear')

    if NAttacco == nemico.attacco/2:

        print ("Il nemico ti ha mancato!")

    else:

        PlayerID.vita -= NAttacco

        print ("Il nemico ti ha causato %i danni!" % NAttacco)

    scelta = input("> ")

    if PlayerID.vita <= 0:

        morte()

    else:

        combattimento()

def bevipot():

    os.system('clear')

    if PlayerID.poz == 0:

        print ("Tu non hai pozioni da usare!")

    else:

        PlayerID.vita += 50

        if PlayerID.vita > PlayerID.maxvita:

            PlayerID.vita = PlayerID.maxvita

        print ("Hai bevuto una pozione!")

    scelta = input("> ")

    combattimento()

        

def scappa():

    os.system('clear')

    scappanum = random.randint(1, 3)

    if scappanum == 1:

        print ("Sei riuscito a scapapre!")

        scelta = input("> ")

        inizio1()

    else:

        print ("Hai fallito, non sei riuscito a scapare!")

        scelta = input("> ")

        os.system('clear')

        NAttacco = random.randint(nemico.attacco/2, nemico.attacco)

        if NAttacco == nemico.attacco/2:

            print ("Il nemico ti ha mancato!")

        else:

            PlayerID.vita -= NAttacco

            print ("Il nemico ti ha causato %i danni!" % NAttacco)

        scelta = input("> ")

        if PlayerID.vita <= 0:

            morte()

        else:

            combattimento()

    

def morte():

    os.system('clear')    

    print ("Sei morto")

    scelta = input("> ")    

    main()

    

def vittoria():

    os.system('clear')

    nemico.vita = nemico.maxvita

    PlayerID.oro += nemico.orolasciato 

    print ("Tu hai sconfitto %s" % nemico.nome)

    print ("Tu hai recuperato %i oro" % nemico.orolasciato) 

    scelta = input("> ")

    inizio1()

    

def inventario():

    os.system('clear')

    pass


main()

Questo e il log dell'errore: premetto che sto usando un emulatore di python sul cellulare, ma vedo che mi da lo stesso errore su PC, sia con Linux che Windows
Traceback (most recent call last):           File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 188, in <module>
    main()
  File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 42, in main
    inizio()
  File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 57, in inizio
    inizio1()
  File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 72, in inizio1
    precombattimento()
  File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 89, in precombattimento
    combattimento()
  File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 101, in combattimento
    attaccodef()
  File "/storage/emulated/0/qpython/projects3/.last_tmp.py", line 112, in attaccodef
    NAttacco = random.randint(nemico.attacco/2, nemico.attacco)
  File "/data/user/0/org.qpython.qpy3/files/lib/python32.zip/random.py", line 215, in randint
  File "/data/user/0/org.qpython.qpy3/files/lib/python32.zip/random.py", line 179, in randrange
ValueError: non-integer arg 1 for randrange()
1|HWVNS-H:/ $

EDIT: ehm avrei risolto per il momento, ho sostituito "random.randrange" o "random.randint" com'era nel tutorial con "random.uniform" e sembra funzionare correttamente, può essere una cosa legata alla versione di python? magari il ragazzo che ha fatto il tutorial usava una vecchia versione il video risale al 2016








--- Ultima modifica di erik84 in data 2019-02-13 20:58:32 ---

--- Ultima modifica di erik84 in data 2019-02-13 20:59:43 ---


Pagina: 1



Esegui il login per scrivere una risposta.