Pygame ou tkinter ?

Fermé
Meurtrierx - 20 nov. 2014 à 21:51
Meurtrierx Messages postés 3 Date d'inscription jeudi 20 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014 - 22 nov. 2014 à 14:01
Bonjour,
Je débute en programmation et j'ai programmé un jeu (très très simple ^^) dans le but principal non pas de le commercialiser --' mais de m'améliorer et comprendre le langage python.
Tout d'abord pouvez-vous me dire si mon programme est bien codé ? (mal formulé ,sale ,bug , ...)
Ensuite j'aimerai faire un affichage graphique j'ai vogué sur le net et j'ai trouvé : pygame et tkinter . Lequel d'entre eux me conseillez-vous, ou faut-il les mélanger ? (si possible pourquoi)
Et enfin : mieux vaut commencer sur un langage , le maîtriser et en apprendre d'autre ou en commencer plusieurs a la fois ? (j'aimerai commencer c++)

Merci d'avoir lu ce pavé et d'avoir pris le temps de répondre ^^ (je suis nouveau sur le forum)

Bonne soirée.

 from random import *
import pickle
import time
rejouer =1
nommos = ['Loup','Ours','Cerbère','Dragon','Hades']
degatmos = [8,15,35,60,450]
viemos = [50,95,120,200,13500]
argentmos = [6,20,50,100,10000]
xpmos = [10,34,70,128,10000]
mobtué = 0
t2 = time.clock()


print("               VOUS JOUER A MON JEU !!!")

#Chargement
reprendrepartie = input("Charger ? oui/non \n")
if reprendrepartie == 'oui':
    f = open('Monfichier', 'rb')
    viemaxj = pickle.load(f)
    viej = pickle.load(f)
    degatj = pickle.load(f)
    argentj = pickle.load(f)
    xpj = pickle.load(f)
    xpmax = pickle.load(f)
    niveauj = pickle.load(f)
    f.close()
    print("Vous avez : ",degatj,"dégats")
    print("Vous avez actuellement :",viej, "/",viemaxj,"pv")
    print("Votre argent : ",argentj,"krik")
    print("Vous êtes niveau :",niveauj,"et",xpj,'/',xpmax,'xp')
    
else :
    viemaxj = 150
    argentj = 100
    degatj = 20
    viej = 150
    niveauj = 1
    xpj = 0
    xpmax = 50
while rejouer == 1 :
    
    menu = int(input("\n1.combat 2.soigner 3.boutique 4.stats 5.sauvegarder 6.quitter \n"))
    
#Combat
    if menu == 1 :
        monstr = int(input("Quel monstre voulez vous affronter ? \n 1 - Loup        4 - Dragon \n 2 - Ours \n 3 - Cerbère \n"))
        monstre = monstr - 1             
        degatmob = degatmos[monstre]
        viemob = viemos[monstre]
        xpmob = randint((xpmos[monstre]/2),(xpmos[monstre]))
        argentmob = randint((argentmos[monstre]/2),(argentmos[monstre]))
        print("combat contre ",nommos[monstre])
        
        for i in range (1,100,1) :
            
            
            if viej < 1:
                print("Vous avez perdu")
                argentj = argentj/2
                break
            if viemob < 1 :
                print("Vous avez gagné ! Vous obtenez",argentmob,"krik et",xpmob,'xp')
                argentj = argentj + argentmob
                xpj = xpj + xpmob
                print("Vous avez désormais ",argentj,"krik et",xpj,'/',xpmax,'xp')
                mobtué = mobtué + 1
                if xpj >= xpmax :
                    xpj = xpj -xpmax
                    xpmax = 1.5*xpmax
                    niveauj = niveauj + 1
                    viemaxj = viemaxj +8
                    degatj = degatj + 2
                    print("Vous changez de niveau ! ->",niveauj)
                break
            
            choix = int(input("1 combattre, 2 informations, 3 fuir \n"))
            if choix == 1 :
                viej = viej - degatmob
                print("Il vous reste ",viej,"/",viemaxj,"pv")
                viemob = viemob-degatj
                print("Il reste" , viemob,"pv a",nommos[monstre])
            if choix == 2 :
                print(" Il a ",degatmob," dégats, ",viemob,"pv et peut rapporter entre ",(argentmos[monstre]/2),"à",(argentmos[monstre]),"krik et",(xpmos[monstre]/2),"à",(xpmos[monstre]),'xp')
            if choix == 3 :
                print("vous prenez la fuite")
                break
#Soin            
    if menu == 2 :
        if argentj >= 10 :
            viej = viemaxj 
            argentj = argentj-10
            print("Vous avez maintenant ",viej," pv et ",argentj,"krik")
        else :
            print("Vous n'avez plus assez d'argent ou votre choix est erroné.")
#Boutique        
    if menu == 3 :
        print("Vous avez actuellement : ",argentj,"krik")
        choixboutique = int(input("Que voulez vous augmenter ? \n (1) 15 vie = 25 krik \n (2) 1 degat = 25 krik \n"))
        if choixboutique != 1 and choixboutique !=2 or argentj < 25:
            print("Vous n'avez plus assez d'argent ou votre choix est erroné")
        if choixboutique == 1 and argentj >= 25 :
            viemaxj = viemaxj + 15
            argentj = argentj - 25
            print("vie joueur : ",viemaxj,"il vous reste :",argentj,"krik")
        if choixboutique == 2 and argentj >= 25 :
            argentj = argentj -25
            degatj = degatj +1
            print("degats joueur : ",degatj,"il vous reste :",argentj,"krik")
        
#Stats
    if menu == 4 :
            print("Vous avez : ",degatj,"dégats")
            print("Vous avez actuellement :",viej, "/",viemaxj,"pv")
            print("Votre argent : ",argentj,"krik")
            print("Depuis votre dernière connexion vous avez tué",mobtué,"monstres")
#Sauvegarde
    if menu == 5 :
        f = open('Monfichier', 'wb')
        pickle.dump(viemaxj,f)
        pickle.dump(viej,f)
        pickle.dump(degatj,f)
        pickle.dump(argentj,f)
        pickle.dump(xpj,f)
        pickle.dump(xpmax,f)
        pickle.dump(niveauj,f)
        f.close()
        print("Sauvegarde effectuée !")
        
#Quitter
    if menu == 6 :
        t1 = time.clock()
        print("Vous avez quitté le jeu après",(t1-t2),"sec d'utilisation.")
        
        rejouer = 0


1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
20 nov. 2014 à 22:50
Quelques remarques sur ton code :
mobtué = 0 -> pas d'accent dans les noms de variable.

Ton programme n'est pas facile à lire car tu n'utilises pas des fonctions.

Ensuite à la place des if, ça serait mieux d'utiliser switch().

for i in range (1,100,1) :=> utilise plutôt xrange()

Pour le graphique, cela dépend du type de graphique que tu souhaites faire. A mon avis, tu souhaites faire des fenêtres ? Dans ce cas, utilise plutôt tkinter (ou d'autres comme pyQt), mais pas pygame.

Sinon, ton programme est vraiment simple. Je te conseille vraiment d'approfondir le python, de faire des programmes plus complexes (au moins pour gérer les algorithmes), te familiariser avec les classes, etc. Après, tu pourras envisager de changer :-).

Cdlt,
0
Meurtrierx Messages postés 3 Date d'inscription jeudi 20 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014
Modifié par Meurtrierx le 21/11/2014 à 19:46
Déjà merci d'avoir pris le temps de le lire .

Je viens de corriger cet accent.
Les fonctions ? je connais mais j'aimerai savoir pourquoi les utiliser si l'on ne l'utilise pas plusieurs fois dans le code ? (comme ce programme) Cela ne fait que rajouter une ligne de code supplémentaire non ?

Je ne connaissais pas switch() ni xrange() , je m'en vais l'apprendre ^^

Oui , ce sont des fenêtres que j'aimerai faire (peut-être plus tard des mouvements mais pas pour le moment ^^)

Je débute donc oui ce programme est simple mais j'essaierai de l'approfondir avant le c++ car pour avoir essayer le c++ (en 1h) je préfère apprendre python :)

Je suis d'accord mon niveau en python est surement désastreux a vos yeux mais c'est le début (je reste le meilleur de ma classe en terminale S option ISN ^^)

Merci. :)


petit pb :
"En Python, l'instruction switch n'existe pas ; il faut la remplacer par une suite de si/sinon, ou en passant par un lambda-calcul."
"Pour info, xrange n'existe plus en Python3 et range est devenu "générateur" i.e. a le comportement de xrange 2.x"


-> Donc plus de switch et xrange est devenu range en 3.4 (la version que j'utilise)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
21 nov. 2014 à 22:29
Ah, au temps pour moi. Je suis encore en Python 2 :-).
Non, ton niveau n'est pas désastreux. Loin de là ;-). Si je te conseille de continuer, c'est plutôt pour améliorer l'algorithmique.
Pour la fonction, effectivement, ici ce n'est pas forcément nécessaire. Mais cela améliore quand même la lisibilité. Mais effectivement, trouve un programme plus compliqué à faire :-).
0
Meurtrierx Messages postés 3 Date d'inscription jeudi 20 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
Modifié par Meurtrierx le 21/11/2014 à 23:26
Je suis en train de faire avec des fonctions cela m'a amener bcp d'erreur mais j'ai finis par comprendre des trucs sympa genre "global" donc finalement c'est pas mal comme technique , j'envoie le code des que finis.

Je viens de finir mais j'ai un soucis , ma fonction 'combat' revient quand par ex je suis dans les 'stats'

code :
from random import *
import pickle
import time

def chargement () :
with open('Monfichier', 'rb') as f:
global viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax
viemaxj = pickle.load(f)
viej = pickle.load(f)
degatj = pickle.load(f)
argentj = pickle.load(f)
xpj = pickle.load(f)
xpmax = pickle.load(f)
niveauj = pickle.load(f)
f.close()
print("Vous avez : ",degatj,"dégats")
print("Vous avez actuellement :",viej, "/",viemaxj,"pv")
print("Votre argent : ",argentj,"krik")
print("Vous êtes niveau :",niveauj,"et",xpj,'/',xpmax,'xp')

def nouvellepartie () :
global viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax
viemaxj = 150
argentj = 100
degatj = 20
viej = 150
niveauj = 1
xpj = 0
xpmax = 50

def sauvegarde () :
with open('Monfichier', 'wb') as f :
global viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax
pickle.dump(viemaxj,f)
pickle.dump(viej,f)
pickle.dump(degatj,f)
pickle.dump(argentj,f)
pickle.dump(xpj,f)
pickle.dump(xpmax,f)
pickle.dump(niveauj,f)
print("Sauvegarde effectuée !")

def boutique () :
global viemaxj,argentj,degatj
print("Vous avez actuellement : ",argentj,"krik")
choixboutique = int(input("Que voulez vous augmenter ? \n (1) 15 vie = 25 krik \n (2) 1 degat = 25 krik \n"))
if choixboutique != 1 and choixboutique !=2 or argentj < 25:
print("Vous n'avez plus assez d'argent ou votre choix est erroné")
if choixboutique == 1 and argentj >= 25 :
viemaxj = viemaxj + 15
argentj = argentj - 25
print("vie joueur : ",viemaxj,"il vous reste :",argentj,"krik")
if choixboutique == 2 and argentj >= 25 :
argentj = argentj -25
degatj = degatj +1
print("degats joueur : ",degatj,"il vous reste :",argentj,"krik")
def soin ():
if argentj >= 10 :
viej = viemaxj
argentj = argentj-10
print("Vous avez maintenant ",viej," pv et ",argentj,"krik")
else :
print("Vous n'avez plus assez d'argent ou votre choix est erroné.")

def statsmob () :
global monstre,degatmob,viemob,xpmob,argentmob
monstr = int(input("Quel monstre voulez vous affronter ? \n 1 - Loup 4 - Dragon \n 2 - Ours \n 3 - Cerbère \n"))
monstre = monstr - 1
degatmob = degatmos[monstre]
viemob = viemos[monstre]
xpmob = randint((xpmos[monstre]/2),(xpmos[monstre]))
argentmob = randint((argentmos[monstre]/2),(argentmos[monstre]))
print("combat contre ",nommos[monstre])

def victoiredefaiteniveauxp () :
global argentj,argentmob,xpj,xpmax,mobtue,degatj
if viej < 1:
print("Vous avez perdu")
argentj = argentj/2
menu()
if viemob < 1 :
print("Vous avez gagné ! Vous obtenez",argentmob,"krik et",xpmob,'xp')
argentj = argentj + argentmob
xpj = xpj + xpmob
print("Vous avez désormais ",argentj,"krik et",xpj,'/',xpmax,'xp')
mobtue += 1
if xpj >= xpmax :
xpj = xpj -xpmax
xpmax = 1.5*xpmax
niveauj += 1
viemaxj = viemaxj +8
degatj = degatj + 2
print("Vous changez de niveau ! ->",niveauj)
menu = int(input("\n1.combat 2.soigner 3.boutique 4.stats 5.sauvegarder 6.quitter \n"))


def combat () :
global viej,degatmob,viemob
choix = int(input("1 combattre, 2 informations, 3 fuir \n"))
if choix == 1 :
viej = viej - degatmob
print("Il vous reste ",viej,"/",viemaxj,"pv")
viemob = viemob-degatj
print("Il reste" , viemob,"pv a",nommos[monstre])
if choix == 2 :
print(" Il a ",degatmob," dégats, ",viemob,"pv et peut rapporter entre ",(argentmos[monstre]/2),"à",(argentmos[monstre]),"krik et",(xpmos[monstre]/2),"à",(xpmos[monstre]),'xp')
if choix == 3 :
print("vous prenez la fuite")
menu = int(input("\n1.combat 2.soigner 3.boutique 4.stats 5.sauvegarder 6.quitter \n"))


def stats () :
print("Vous avez : ",degatj,"dégats")
print("Vous avez actuellement :",viej, "/",viemaxj,"pv")
print("Votre argent : ",argentj,"krik")
print("Depuis votre dernière connexion vous avez tué",mobtue,"monstres")

def menu () :
global rejouer
menu = int(input("\n1.combat 2.soigner 3.boutique 4.stats 5.sauvegarder 6.quitter \n"))
if menu == 1 :
statsmob()
for i in range(1,100,1) :
victoiredefaiteniveauxp ()
combat ()
if menu == 2 :
soin()
if menu == 3 :
boutique()
if menu == 4 :
stats()
if menu == 5 :
sauvegarde()
if menu == 6 :
t1 = time.clock()
print("Vous avez quitté le jeu après",(t1-t2),"sec d'utilisation.")
rejouer = 0


rejouer =1
nommos = ['Loup','Ours','Cerbère','Dragon','Hades']
degatmos = [8,15,35,60,450]
viemos = [50,95,120,200,13500]
argentmos = [6,20,50,100,10000]
xpmos = [10,34,70,128,10000]
mobtue = 0
t2 = time.clock()



print(" VOUS JOUER A MON JEU !!!")

#Chargement
reprendrepartie = input("Charger ? oui/non \n")
if reprendrepartie == 'oui':
chargement()

else :
nouvellepartie()

while rejouer == 1 :
menu()
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
22 nov. 2014 à 00:27
Nan, global c'est pas bien. A utiliser avec parcimonie...
Il vaut mieux envoyer les variables en argument dans les fonctions.

Je ne suis pas sûr d'avoir bien saisie ton erreur ?
0
Meurtrierx Messages postés 3 Date d'inscription jeudi 20 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014
Modifié par Meurtrierx le 22/11/2014 à 14:55
J'ai essayer au maximum de faire avec arguments (mais parfois je sèche)
Par contre si quelqu'un pourrai m'aider , tout marche sauf les combats (je vous laisse essayer vous verrez) .
J'ai une question : comment utiliser break dans une fonction ? ou y-a-t-il un équivalent ?

remarque : sur ce code je pense que les fonctions ne font que compliquer le prgm ^^

from random import *
import time,sys,pickle,os

def chargement () :
with open('Monfichier', 'rb') as f:
global viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax
viemaxj = pickle.load(f)
viej = pickle.load(f)
degatj = pickle.load(f)
argentj = pickle.load(f)
xpj = pickle.load(f)
xpmax = pickle.load(f)
niveauj = pickle.load(f)
f.close()
print("Vous avez : ",degatj,"dégats")
print("Vous avez actuellement :",viej, "/",viemaxj,"pv")
print("Votre argent : ",argentj,"krik")
print("Vous êtes niveau :",niveauj,"et",xpj,'/',xpmax,'xp')

def nouvellepartie () :
global viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax
viemaxj = 150
argentj = 100
degatj = 20
viej = 150
niveauj = 1
xpj = 0
xpmax = 50

def sauvegarde (viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax) :
with open('Monfichier', 'wb') as f :

pickle.dump(viemaxj,f)
pickle.dump(viej,f)
pickle.dump(degatj,f)
pickle.dump(argentj,f)
pickle.dump(xpj,f)
pickle.dump(xpmax,f)
pickle.dump(niveauj,f)
print("Sauvegarde effectuée !")

def boutique (viemaxj,argentj,degatj) :

print("Vous avez actuellement : ",argentj,"krik")
choixboutique = int(input("Que voulez vous augmenter ? \n (1) 15 vie = 25 krik \n (2) 1 degat = 25 krik \n"))
if choixboutique != 1 and choixboutique !=2 or argentj < 25:
print("Vous n'avez plus assez d'argent ou votre choix est erroné")
if choixboutique == 1 and argentj >= 25 :
viemaxj = viemaxj + 15
argentj = argentj - 25
print("vie joueur : ",viemaxj,"il vous reste :",argentj,"krik")
if choixboutique == 2 and argentj >= 25 :
argentj = argentj -25
degatj = degatj +1
print("degats joueur : ",degatj,"il vous reste :",argentj,"krik")

def soin (argentj,viej,viemaxj):
if argentj >= 10 :
viej = viemaxj
argentj = argentj-10
print("Vous avez maintenant ",viej," pv et ",argentj,"krik")
else :
print("Vous n'avez plus assez d'argent ou votre choix est erroné.")

def statsmob () :
global monstre,degatmob,viemob,xpmob,argentmob
monstre = int(input("Quel monstre voulez vous affronter ? \n 0 - Loup 3 - Dragon \n 1 - Ours \n 2 - Cerbère \n"))
degatmob = degatmos[monstre]
viemob = viemos[monstre]
xpmob = randint((xpmos[monstre]/2),(xpmos[monstre]))
argentmob = randint((argentmos[monstre]/2),(argentmos[monstre]))
print("combat contre ",nommos[monstre])

def victoiredefaiteniveauxp (viej,argentj,argentmob,xpj,xpmax,mobtue,degatj,condition) :

if viej < 1:
print("Vous avez perdu")
argentj = argentj/2
viej=100
condition = 1
if viemob < 1 :
print("Vous avez gagné ! Vous obtenez",argentmob,"krik et",xpmob,'xp')
argentj = argentj + argentmob
xpj = xpj + xpmob
print("Vous avez désormais ",argentj,"krik et",xpj,'/',xpmax,'xp')
mobtue += 1
if xpj >= xpmax :
xpj = xpj -xpmax
xpmax = 1.5*xpmax
niveauj += 1
viemaxj = viemaxj +8
degatj = degatj + 2
print("Vous changez de niveau ! ->",niveauj)



def combat (viej,degatmob,viemob,condition) :

choix = int(input("1 combattre, 2 informations, 3 fuir \n"))
if choix == 1 :
viej = viej - degatmob
print("Il vous reste ",viej,"/",viemaxj,"pv")
viemob = viemob-degatj
print("Il reste" , viemob,"pv a",nommos[monstre])
if choix == 2 :
print(" Il a ",degatmob," dégats, ",viemob,"pv et peut rapporter entre ",(argentmos[monstre]/2),"à",(argentmos[monstre]),"krik et",(xpmos[monstre]/2),"à",(xpmos[monstre]),'xp')
if choix == 3 :
print("vous prenez la fuite")
condition = 1


def stats () :
print("Vous avez : ",degatj,"dégats")
print("Vous avez actuellement :",viej, "/",viemaxj,"pv")
print("Votre argent : ",argentj,"krik")
print("Depuis votre dernière connexion vous avez tué",mobtue,"monstres")

def menu (rejouer) :
global condition
menu = int(input("\n1.combat 2.soigner 3.boutique 4.stats 5.sauvegarder 6.quitter \n"))
condition = 0
if menu == 1 :
statsmob ()
if condition == 0 :
for i in range(1,100,1) :
victoiredefaiteniveauxp (viej,argentj,argentmob,xpj,xpmax,mobtue,degatj,condition)
combat (viej,degatmob,viemob,condition)
if menu == 2 :
soin(argentj,viej,viemaxj)
if menu == 3 :
boutique(viemaxj,argentj,degatj)
if menu == 4 :
stats()
if menu == 5 :
sauvegarde(viemaxj,argentj,degatj,viej,niveauj,xpj,xpmax)
if menu == 6 :
t1 = time.clock()
print("Vous avez quitté le jeu après",(t1-t2),"sec d'utilisation.")
os.system("pause")
sys.exit()


rejouer =1
nommos = ['Loup','Ours','Cerbère','Dragon','Hades']
degatmos = [8,15,35,60,450]
viemos = [50,95,120,200,13500]
argentmos = [6,20,50,100,10000]
xpmos = [10,34,70,128,10000]
mobtue = 0
t2 = time.clock()



print(" VOUS JOUER A MON JEU !!!")

#Chargement
reprendrepartie = input("Charger ? oui/non \n")
if reprendrepartie == 'oui':
chargement()

else :
nouvellepartie()

while rejouer == 1 :
menu(rejouer)
0