Posté le 14/02/2016 18:23
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 121 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 23/02/2016 19:54 | # | Fichier joint
Mais je voudrais avoir ça : fichier joint
Ajouté le 23/02/2016 à 19:56 :
Est-ce-qu'il y a une solution.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 23/02/2016 20:54 | #
Il faut utiliser une police monotypée comme Monotype Corsiva ou Lucida Console sous Windows.
Citer : Posté le 23/02/2016 21:17 | #
Excuses moi, je n'ai pas trouvé comment choisir la police.
Ajouté le 24/02/2016 à 12:04 :
J'ai essayé avec ces deux polices mais ça ne marche toujours pas.
Ajouté le 24/02/2016 à 12:05 :
C'est bien comme ceci qu'il faut faire :
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 24/02/2016 12:08 | #
T'utilise Tkinter ?
Si oui, c'est widget.config(font=('Lucida Console', 20, 'bold'))
Remplecer widget par le nom du widget pour lequel tu veux remplacer la police.
Citer : Posté le 24/02/2016 12:15 | #
Ça marche super bien merci beaaauuuucoup
Ajouté le 26/02/2016 à 11:15 :
Bizarre :
def __init__ (self) :
global robot
self.fenetre2 = Tk()
self.fenetre2.title("Achat de vie")
self.fenetre2.geometry("240x110+525+275")
self.fenetre2["bg"] = "blue"
self.question = Label(self.fenetre2, text = ("Vous possédez {} vies et {} pièce d'or.\nCombien voulez-vous acheter de vies(3$) ?".format(robot.vie, robot.argent)))
self.question.pack(padx=5,pady=5)
self.achat = IntVar()
self.achat.set(0)
self.boite = Spinbox(self.fenetre2,from_=0,to=(robot.argent//3),increment=1,textvariable=self.achat)
self.boite.pack(padx=5,pady=5)
self.boutton_valider = Button(self.fenetre2, text="Valider", fg="red", width=10, command=self.achat_vie)
self.boutton_valider.pack(padx=5,pady=5)
self.question = Label(self.fenetre2, textvariable=self.achat)
self.question.pack(padx=5,pady=5)
self.fenetre2.mainloop()
def achat_vie (self) :
global robot
nachat = int(self.achat.get())
robot.vie += nachat
robot.argent -= nachat * 3
self.fenetre2.destroy()
Lorsque j'appuie sur le bouton valider la vie et l'argent de mon robot ne changent pas.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 26/02/2016 11:16 | #
Vérifie que la fonction est bien appelée et que self est bien valide. Parce que je ne suis pas sûr que la commande de tkinter ajoute l'argument self. (Dans le code de tkinter, comme la commande peut potentiellement appeler n'importe quelle fonction, y compris des fonctions en-dehors d'objets, il n'y a pas de raison pour que Python ajoute un self.)
Citer : Posté le 26/02/2016 11:19 | #
La fonction est bien appelé, mais self.achat.get() == 0 et je ne comprends pas pourquoi.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 26/02/2016 12:54 | #
Essaie d'afficher id(self) (un identifiant unique à chaque variable) dans __init__() puis dans achat_vie(). Si la valeur est la même on est sûrs que c'est bon, sinon il y a une possibilité pour que la raison que j'ai évoquée soit la bonne.
Essaie d'affecter en commande une fonction hors de la classe, et dans cette fonction d'appeler la méthode.
Citer : Posté le 26/02/2016 13:23 | #
L'identifiant est le même.
Je n'ai pas compris.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 26/02/2016 13:26 | #
L'identifiant est le même.
Mouais, c'est logique en soi.
self.achat.get() == 0 et je ne comprends pas pourquoi.
Ben évidemment, tu ne fais que self.achat.set(0), faut pas t'attendre à ce que la valeur change toute seule ! x)
Citer : Posté le 26/02/2016 13:56 | #
Mais mon widget Spinbox modifie ma variable tout seul non ?
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 26/02/2016 14:08 | #
Ouais, j'imagine que c'est le but mais... bon, je voudrais pas raconter de conneries donc je vais m'abstenir de faire des hypothèses. (Python manque tellement de clarté sur qu'est-ce qui une variable et qu'est-ce qui est un pointeur...)
Regarde des exemples d'utilisation de SpinBox, je pense que c'est le plus simple.
Citer : Posté le 26/02/2016 14:22 | #
Bizarre, dans tous les exemples que j'ai vu, la valeur change toute seul , du moment qu'on met textvariable=valeur et pas text=valeur.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 26/02/2016 18:45 | #
Pourquoi n'utilises-tu pas les méthodes insert() et get() de la SpinBox sans utiliser de IntVar ?
Citer : Posté le 26/02/2016 18:49 | #
Je ne vois pas comment ???
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 26/02/2016 18:57 | #
Il faut que tu cherches avant de poser les questions !
Citer : Posté le 26/02/2016 19:00 | #
Si tu savais le temps que je passe à chercher des solutions. et crois moi je pose bien moins de questions qu'au début.
Mais je comprends ta réaction
Ajouté le 26/02/2016 à 19:05 :
En plus j'ai beaucoup de mal avec l'anglais et je n'ai strictement rien compris au lien que tu m'as donné
Mais je vais continuer à chercher
Ajouté le 26/02/2016 à 19:28 :
Désolé mais je fais des recherches sur ton élément de réponse depuis tout à l'heure et je n'ai rien trouvé de satisfaisant
Or ça fait deux jours que je suis sur le même problème
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 27/02/2016 10:44 | #
Si tu savais le temps que je passe à chercher des solutions. et crois moi je pose bien moins de questions qu'au début.
Mais je comprends ta réaction
Bon et bien dans ce cas, montre-le : « j'ai trouvé ça, mais je ne comprends pas pourquoi... mais alors, si ... ». Ça, ça montre que tu as cherché et ça incite à t'aider.
En plus j'ai beaucoup de mal avec l'anglais et je n'ai strictement rien compris au lien que tu m'as donné
Ah oui, c'est embêtant ça x)
J'ai testé avec succès le programme suivant :
import tkinter
global spinbox
def f():
global spinbox
print(spinbox.get())
root = tkinter.Tk()
spinbox = tkinter.Spinbox(root, from_ = 0, to = 10, increment = 1, text = 'Value')
spinbox.pack()
button = tkinter.Button(root, text = 'Ok', command = f)
button.pack()
root.mainloop()
Comme tu le vois, la méthode get() suffit amplement à récupérer la valeur.
Citer : Posté le 27/02/2016 12:38 | #
Si tu savais le temps que je passe à chercher des solutions. et crois moi je pose bien moins de questions qu'au début.
Mais je comprends ta réaction
Bon et bien dans ce cas, montre-le : « j'ai trouvé ça, mais je ne comprends pas pourquoi... mais alors, si ... ». Ça, ça montre que tu as cherché et ça incite à t'aider.
Pour get(), je me suis rendu compte que je "l'appliquais" au textvariable du widget et non au widget lui-même, merci beaucoup.
Mais ce qui est bizarre c'est que ceci marchai très bien lorsque j'utilisai un widget Entry.
Et en regardant d'autre exemple, c'est pourtant moi qui devrais avoir raison
Enfin l'important c'est que ça marche Merci
Ajouté le 27/02/2016 à 14:13 :
Encore un problème
Je lance un askyesno de la messagebox de tkinter pour savoir si l'utilisateur veut continuer la partie enregistré, jusque là pas de problème mais après, je ne peut plus entrer de texte (dans mon widget Entry) pour réaliser mon déplacement.
J'ai fait des recherches et de testes sur le focus() et plus particulièrement le focus_set() mais je n'arrive pas à résoudre le problème(que j'avais abandonné il y a 4 jours).
Voici le code :
import sys
import random
from tkinter import *
from tkinter.messagebox import *
class Labyrinthe :
def __init__ (self, nom) :
with open(nom + ".txt", "r") as fichier :
data_carte = fichier.readlines()
for i in range(len(data_carte)) :
data_carte[i] = data_carte[i].strip()
self.carte = (list(data_carte))
self.niveau = nom
def afiche_lab_perso (self) :
image_texte = ""
global robot
n_ligne = 0
for ligne in self.carte :
for i in range(1,4) :
ligne = ligne.replace(str(i), "#")
if n_ligne == robot.position[0] :
image_texte += ligne[0:robot.position[1]] + "X" + ligne[robot.position[1]+1:] + "\n"
else:
image_texte += ligne + "\n"
n_ligne += 1
image_texte = image_texte[:-1]
return image_texte
def enregistrement (self) :
global robot
data = "{} {} {} {} {}".format(robot.position[0], robot.position[1], self.niveau[5], robot.vie, robot.argent)
with open("enregistrement.txt", "w") as fichier :
fichier.write(data)
exit()
class Robot :
def __init__ (self) :
self.position = [1,1]
self.vie = 25
self.argent = 0
def deplacement (self) :
global labyrinthe, interface
deplacement = None
choix = interface.plage_choix.get().upper()
if choix == "" :
choix = "n1"
try :
choix[1]
except IndexError :
choix = choix + "1"
for i in range(int(choix[1:])) :
if choix[0] == "H" :
deplacement = self.verification_deplacement(robot.position[0]-1, robot.position[1])
if choix[0] == "B" :
deplacement = self.verification_deplacement(robot.position[0]+1, robot.position[1])
if choix[0] == "D" :
deplacement = self.verification_deplacement(robot.position[0], robot.position[1]+1)
if choix[0] == "G" :
deplacement = self.verification_deplacement(robot.position[0], robot.position[1]-1)
if deplacement == None :
break
else :
robot.position = deplacement
interface.mise_a_jour()
if robot.vie <= 0 :
showinfo("Labyrinthe", "Vous êtes mort")
robot.vie = 25
robot.argent -= 20
if robot.argent < 0 :
showinfo("Labyrinthe", "Vous avez perdu")
exit()
labyrinthe = Labyrinthe(labyrinthe.niveau)
break
if robot.position == [-1,-1] :
if int(labyrinthe.niveau[5]) < nb_niveau :
labyrinthe = Labyrinthe("level" + str(int(labyrinthe.niveau[5])+1))
robot.position = [1,1]
showinfo("Labyrinthe", "!!! Vous avez passez le niveau !!!")
interface2 = Interface2()
interface.mise_a_jour()
break
else :
showinfo("Labyrinthe", "!!! Vous avez Gagner !!!")
exit
interface.mise_a_jour()
def verification_deplacement (self, pos_ligne, pos_col) :
global labyrinthe
global obstacle
if labyrinthe.carte[pos_ligne][pos_col] == " " :
return [pos_ligne, pos_col]
else :
return obstacle.detection(pos_ligne, pos_col)
class Obstacles :
def __init__ (self) :
self.ennemis = "$"
def detection (self, pos_ligne, pos_col) :
global labyrinthe
if labyrinthe.carte[pos_ligne][pos_col] == "0" :
return self.sortie()
elif labyrinthe.carte[pos_ligne][pos_col] in ["1", "2", "3"] :
labyrinthe.carte[pos_ligne] = labyrinthe.carte[pos_ligne][:pos_col] + " " + labyrinthe.carte[pos_ligne][pos_col+1:]
self.tresore(pos_ligne, pos_col)
return [pos_ligne, pos_col]
elif labyrinthe.carte[pos_ligne][pos_col] == "$" :
labyrinthe.carte[pos_ligne] = labyrinthe.carte[pos_ligne][:pos_col] + " " + labyrinthe.carte[pos_ligne][pos_col+1:]
self.combats()
return [pos_ligne, pos_col]
elif labyrinthe.carte[pos_ligne][pos_col] != " " :
return self.mur()
def combats(self) :
degats = random.randint(1,3)
if degats == 1 :
robot.vie -= random.randint(5,10)
elif degats == 2 :
robot.vie -= random.randint(1,5)
def tresore (self, pos_ligne, pos_col) :
if labyrinthe.carte[pos_ligne][pos_col] == "1" :
robot.argent = robot.argent + random.randint(1,5)
if labyrinthe.carte[pos_ligne][pos_col] == "2" :
robot.argent = robot.argent + random.randint(5,10)
else :
robot.argent = robot.argent + random.randint(0,25)
def sortie (self) :
return [-1,-1]
def mur (self) :
return None
class Interface :
def __init__ (self) :
self.fenetre = Tk()
self.fenetre.title("Labyrinthe")
self.fenetre.geometry("370x310+500+250")
self.fenetre["bg"] = "blue"
self.donnees_texte = StringVar()
self.donnees = Label(self.fenetre, textvariable=self.donnees_texte, justify = "left")
self.donnees.grid(row =1, column =1, columnspan =2, padx =5, pady =5)
self.image_texte = StringVar()
self.image = Label(self.fenetre, textvariable=self.image_texte, justify = "left")
self.image.config(font=('Lucida Console', 10, 'bold'))
self.image.grid(row =2, column =1,rowspan =21, padx =5, pady =5)
self.entry1 = StringVar()
self.plage_choix = Entry(self.fenetre, textvariable=self.entry1)
self.plage_choix.grid(row =5, column =2, padx =2, pady =2)
self.texte = Label(self.fenetre, text="Choisissez votre déplacement :")
self.texte.grid(row =4, column =2, padx =2, pady =2)
self.boutton_valider = Button(self.fenetre, text="Valider", fg="blue", width=10, command = robot.deplacement)
self.boutton_valider.grid(row =7, column =2, padx =2, pady =2)
self.boutton_enregistrement = Button(self.fenetre, text="Enregistrer", fg="red", width=10, command=labyrinthe.enregistrement)
self.boutton_enregistrement.grid(row =20, column =2, padx =2, pady =2)
self.boutton_quitter = Button(self.fenetre, text="Quitter", fg="red", width=10, command=exit)
self.boutton_quitter.grid(row =21, column =2, padx =2, pady =2)
def mise_a_jour (self) :
self.donnees_texte.set("Vous êtes au niveau {}. Vous possédez {} vies et {} pièce d'or.".format(labyrinthe.niveau[5], robot.vie, robot.argent))
self.image_texte.set(labyrinthe.afiche_lab_perso())
self.plage_choix.focus_set()
self.entry1.set("")
class Interface2 :
def __init__ (self) :
global robot
self.fenetre2 = Tk()
self.fenetre2.title("Achat de vie")
self.fenetre2.geometry("240x110+525+275")
self.fenetre2["bg"] = "blue"
self.question = Label(self.fenetre2, text = ("Vous possédez {} vies et {} pièce d'or.\nCombien voulez-vous acheter de vies(3$) ?".format(robot.vie, robot.argent)))
self.question.pack(padx=5,pady=5)
self.achat = IntVar()
self.boite = Spinbox(self.fenetre2, from_=0, to=(robot.argent//3), increment=1, textvariable=self.achat, wrap = True)
self.boite.pack(padx=5,pady=5)
self.boutton_valider = Button(self.fenetre2, text="Valider", fg="red", width=10, command=self.achat_vie)
self.boutton_valider.pack(padx=5,pady=5)
self.question = Label(self.fenetre2, textvariable=self.achat)
self.question.pack(padx=5,pady=5)
self.fenetre2.mainloop()
def achat_vie (self) :
global robot
achat = int(self.boite.get())
robot.vie += achat
robot.argent -= achat * 3
self.fenetre2.destroy()
nb_niveau = 3
obstacle = Obstacles()
robot = Robot()
data = [0,0,1,0,0]
labyrinthe = Labyrinthe("level1")
interface = Interface()
interface.mise_a_jour()
with open("enregistrement.txt", "r") as fichier :
donnees = fichier.readline()
if donnees != "" :
if askyesno("Labyrinthe", "Dèrnièrement, une partie à été enregistré\n voulez-vous la continuer ?"):
data = donnees.split(" ")
for i in range(len(data)) :
data[i] = int(data[i])
with open("level" + str(data[2]) + ".txt", "r") as fichier :
data_carte = fichier.readlines()
for i in range(len(data_carte)) :
data_carte[i] = data_carte[i].strip()
labyrinthe.carte = (list(data_carte))
labyrinthe.niveau = "level" + str(data[2])
robot.position = [data[0], data[1]]
robot.vie = data[3]
robot.argent = data[4]
with open("enregistrement.txt", "w") as fichier :
fichier.write("")
interface.mise_a_jour()
interface.fenetre.mainloop()
J'ai mis tout le code mais le problème se trouve sur les 30 dernière lignes du code et\ou sur la class Interface(je pense).
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 27/02/2016 14:26 | #
J'aurais tendance à me méfier de cette ligne :
De manière générale, évite les importations brutes de noms. Pourquoi ? Parce que tu ne sais pas quels noms sont importés, donc ça peut remplacer des noms existants sans que tu t'en rendes compte.
Préfère toujours :
if tkinter.messagebox.askyesno():
ou :
if messagebox.askyesno():
C'est peut-être la cause du problème.
Citer : Posté le 27/02/2016 14:46 | #
J'ai modifié au profie de :
from tkinter import messagebox
Mais ça ne marche toujours pas
Pourtant, quand je fais interface.mise_a_jour(), le widget Entry est censé avoir le focus, comment ce fait-il que je ne puisse pas écrire dedans
Ajouté le 28/02/2016 à 12:33 :
Bonjour
Es-ce-que vous sauriez (je suis sûr que oui ) comment faire pour que l'on puisse accéder à un fichier depuis un programme Python, et le lire.
Je suppose que ça ressemble à ça :
with open(chemin, "r") as fichier:
data = fichier.readlines()
Mais ça ne marche pas, j'ai :
En sachant que nom = "levell1".
Ma question n'est pas très bien posé mais vous devriez comprendre facilement
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!