Python Forum
problem on creating a small game
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
problem on creating a small game
#1
hello, i am making a little card game like hearstone more or less.
but i encounter a difficulty when i try to fight the cards.
I do not understand and therefore cannot resolve the error that python reports to us

#Importation de tous les modules utiles
from random import *
from math import *

#CREATION DES DEFINITIONS

#Tirage au sort pour savoir qui pose la première carte
def quicommence():
    premier=randint (1,2)
    return premier


#Chargement des cartes
def loadCards(nomFichier,sep=','):
    with open(nomFichier,encoding='utf8') as fichier:
        entete = fichier.readline()
        entete = entete[:-1].strip(' ').split(sep)
        jeu = []
        for ligne in fichier:
            carte = {}
            ligne = ligne.strip('\n').split(sep)
            for i in range(len(ligne)):
                    if ligne[i] == '':
                        continue
                    if entete[i] in ['mana','attaque','pv','defense']:
                        carte[entete[i]] = int(ligne[i])
                    else :
                        carte[entete[i]] = ligne[i]
            jeu.append(carte)
        return jeu

cartesCreatures = loadCards("creatures.csv")


#affichage des cartes(worgens)
def displayCard(carte):

    # récupération des différents mots composant le nom
    listeMot = carte['nom'].split(' ')

    # longueur du plus long mot
    m = 0
    for mot in listeMot :
        if len(mot) > m : m = len(mot)

    # constantes de texte
    blanc = ' ' * (m-2)
    rule = '-'*(m+4)
    empty = '|  ' + blanc + '  |'
    masque = '{:^'+str(m+2)+'}' # pour centrer les noms

    # Construction du haut
    haut = '|' + chr(ord('\u26A1')) + str(carte['attaque']) + blanc  + str(carte['defense']) + chr(ord('\u2745')) + '|'

    # Construction du bas
    bas =  '|' + chr(ord('\u2665')) + str(carte['pv']) + blanc  + str(carte['mana']) + chr(ord('\u0271')) + '|'

    # Affichage
    print(rule)
    print(haut)
    print(empty)
    for mot in listeMot :
        print('|' + masque.format(mot) + '|')
    print(empty)
    print(bas)
    print(rule)


#Définition de la pioche qui est aléatoire.
def piochecarte (source, destination, nbcartes):
    for i in range(nbcartes):
        index = randint(0, len(source)-1)
        destination.append(source[index])


#Attribution du nombres de cartes
def nbcartes():
    for i in [jeu]:
        i=64
    for i in [deck1]:
        i=32
    for i in [deck2]:
        i=32


#Création de la valeur de la carte (Worgens)
def valeurdelacarte(carte):
    print ('valeurdelcarte',carte)
    return carte['attaque']*3-carte['defense']


#Gestion des combats
def combatcarte(cartejoueur,carteIa):
    print('combatcarte',cartejoueur,carteIa)
    scorecartejoueur = valeurdelacarte(cartejoueur)
    scorecarteIa = valeurdelacarte(carteIa)
    if  scorecartehumain > scorecarteIa :
        humainscores = humainscores + 1
        print ("vous avez gagné cette manche")
    elif scorecarteIa > scorecartehumain :
        Iascores = Iascores + 1
        print ("vous avez perdu cette manche")
    else :
        print ("vous avez fait égalité")
    return 
    
    
#Définition du tour de jeu de l'humain
def cartejoueur():
    for carte in main1:
        displayCard(carte)
    indexcarte = int(input("votre choix: "))
    while indexcarte < 1 or indexcarte > len(main1) :
        print(indexcarte," choix invalide !")
        indexcarte = int(input("votre choix: "))
    carteajouerhumain = main1[indexcarte - 1 ]
    main1.pop(indexcarte-1)
    print()
    print("vous avez choisi: ")
    displayCard (carteajouerhumain)


#Définition du tour de jeu de l'IA
def carteIa():
    indexcarte = randint(0, len(main2)-1)
    carteajouerIa = main2[indexcarte - 1]
    main2.pop(indexcarte-1)
    displayCard (carteajouerIa)
    


#CREATION DES VARIABLES
tonpere = []
deck1 = []
deck2 = []
main1 = []
main2 = []
humainscores = 0
Iascores = 0


#ORGANISATION DU JEU

print("Pour décider qui pose la première carte nous allons faire un tirage aléatoire, le joueur désigner posera la première carte et commencer le combat")
if quicommence() == 1 :
    print("joueur désigner: Humain")
else :
    print("joueur désigner: Orc")
print()


#Utilisation de la fonction qui permet de prendre 32 cartes aléatoirement pour créer les 2 decks
piochecarte(cartesCreatures,deck1,32)
piochecarte(cartesCreatures,deck2,32)


#Utilisation de a fonction piochecarte permettant de créer les mains avec 3 cartes issues du deck
piochecarte(deck1,main1,3)
piochecarte(deck2,main2,3)



#Affichage des mains et de a carte choisi par l'humain et l'IA
if quicommence() == 1 :
    print("vos carte : ")
    cartejoueur()
    print ()
    print("la carte de l'Orc: ")
    carteIa ()
    print()
else :
    print("la carte de l'Orc: ")
    carteIa ()
    print()
    print("vos carte : ")
    cartejoueur()
    print ()

while humainscores < 10 or  Iascores < 10 :
    combatcarte (cartejoueur,carteIa)
    print('combatcarte',cartejoueur,carteIa)
    print ("votre score est de : ",humainscores)
    print()
    print("le score de l'Orc est de : ",Iascores )
    print()
if humainscore == 10 :
    print ("Vous êtes le grand vainqueur!!!!!!")
else :
    print ("Vous avez perdu! ")
Error:
Traceback (most recent call last): File "C:\Users\yohan\OneDrive\Bureau\projet info\Nouveau dossier\fin.py", line 180, in <module> combatcarte (cartejoueur,carteIa) File "C:\Users\yohan\OneDrive\Bureau\projet info\Nouveau dossier\fin.py", line 95, in combatcarte scorecartejoueur = valeurdelacarte(cartejoueur) File "C:\Users\yohan\OneDrive\Bureau\projet info\Nouveau dossier\fin.py", line 89, in valeurdelacarte return carte['attaque']*3-carte['defense'] TypeError: 'function' object is not subscriptable
i hope could you help me
cordially
Reply
#2
In that line (180) you pass the two functions, rather than the values returned by those functions. Probably something more like combatcarte (cartejoueur(),carteIa()) is intended.
Reply
#3
thank you but it still doesn't work
Reply
#4
Does it help to use int()?

return int(carte['attaque']*3) - int(carte['defense'])
Reply
#5
[quote="michael1789" pid='132807' dateline='1607574619']
Does it help to use int()?

return int(carte['attaque']*3) - int(carte['defense'])
[/quote

thank but it doesn't work
Reply
#6
I don't have your csv files so can't test myself. What error are you getting, and where?
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  quiz game - problem with loading statements from file lapiduch 2 1,080 Apr-20-2023, 06:13 PM
Last Post: deanhystad
  Need some help creating a word game wthiierry 4 2,412 Nov-01-2022, 12:29 PM
Last Post: perfringo
  Problem with my Black Jack game... JengaBenga 2 1,297 Sep-27-2022, 01:10 PM
Last Post: JengaBenga
  Quoridor game. Problem: inserting player positions and walls in a checkerboard Roidesflammes 1 3,162 Aug-03-2021, 06:52 PM
Last Post: riii
  Code: Creating a basic python game? searching1 5 3,436 Nov-12-2018, 05:18 AM
Last Post: searching1
  Small game (school project) Ganesh 7 5,673 Nov-08-2017, 09:04 PM
Last Post: Ganesh

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020