Posté le 14/02/2016 18:23
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 130 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 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 !!!
Citer : Posté le 28/02/2016 12:58 | #
http://lmgtfy.com/?q=lire+fichier+python
Premier lien : https://openclassrooms.com/courses/apprenez-a-programmer-en-python/les-fichiers-2
Citer : Posté le 28/02/2016 13:18 | #
j'ai essayé :
data = fichier.readlines()
J'avais déjà regardé openclassrooms .
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 28/02/2016 13:46 | #
Le fichier n'a pas été trouvé. Tu es sûr qu'il existe ?
Au passage on écrit « level » avec un seul « l » à la fin.
Citer : Posté le 28/02/2016 13:56 | #
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 28/02/2016 14:40 | #
Tes deux exemples ne concordent pas. Le dossier Cartes est-il dans le dossier courant lors de l'exécution du programme ou dans le dossier supérieur ?
Citer : Posté le 28/02/2016 14:42 | #
Quand tu lances le script, c'est quoi le dossier courant ?
Citer : Posté le 28/02/2016 15:23 | # | Fichier joint
Voilà le dossier : (fichier joint)
Donc si j'ai bien compris, le dossier courant est Roboc (qui est sur le bureau).
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 28/02/2016 15:25 | # | Fichier joint
Et le dossier Cartes : (fichier joint)
Ajouté le 28/02/2016 à 15:39 :
Ajouté le 28/02/2016 à 16:38 :
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
import tkinter
from tkinter import messagebox
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, labyrinthe
data = "{} {} {} {} {}".format(robot.position[0], robot.position[1], labyrinthe.niveau[5:], robot.vie, robot.argent)
with open("enregistrement3.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 :
messagebox.showinfo("Labyrinthe", "Vous êtes mort")
robot.vie = 25
robot.argent -= 20
if robot.argent < 0 :
messagebox.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]
messagebox.showinfo("Labyrinthe", "!!! Vous avez passez le niveau !!!")
interface2 = Interface2()
interface.mise_a_jour()
break
else :
messagebox.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 = tkinter.Tk()
self.fenetre.title("Labyrinthe")
self.fenetre.geometry("370x310+500+250")
self.fenetre["bg"] = "blue"
self.donnees_texte = tkinter.StringVar()
self.donnees = tkinter.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 = tkinter.StringVar()
self.image = tkinter.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 = tkinter.StringVar()
self.plage_choix = tkinter.Entry(self.fenetre, textvariable=self.entry1)
self.plage_choix.grid(row =5, column =2, padx =2, pady =2)
self.texte = tkinter.Label(self.fenetre, text="Choisissez votre déplacement :")
self.texte.grid(row =4, column =2, padx =2, pady =2)
self.boutton_valider = tkinter.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 = tkinter.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 = tkinter.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.entry1.set("")
self.plage_choix.focus_set()
class Interface2 :
def __init__ (self) :
global robot
self.fenetre2 = tkinter.Tk()
self.fenetre2.title("Achat de vie")
self.fenetre2.geometry("240x110+525+275")
self.fenetre2["bg"] = "blue"
self.question = tkinter.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 = tkinter.IntVar()
self.boite = tkinter.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 = tkinter.Button(self.fenetre2, text="Valider", fg="red", width=10, command=self.achat_vie)
self.boutton_valider.pack(padx=5,pady=5)
self.question = tkinter.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("enregistrement3.txt", "r") as fichier :
donnees = fichier.readline()
if donnees != "" :
if messagebox.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("enregistrement3.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).
Par ailleur, je n'ai pas résolu ce problème mais je suis presque sûre que le problème viens du message "askyesno" (car j'ai aussi fait des tests avec des input et ça marche).
Alors si vous avez une idée.
Ps: le problème des fichiers est toujours d'actualité
Je vous en demande beaucoup, mais je dois absolument terminer ce programme ce soir ^^.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 28/02/2016 18:37 | #
Je sais ce qui ne va pas avec ton ouverture de fichier : tu as oublié l'extension !
Pour les afficher, dans l'explorateur de fichier, tu tapes [Alt] puis dans le menu « Outils », « Options des dossiers », il y a dans une liste de case à cochers « Masquer les extensions des fichiers dont le type est connu ». Décoche-la, tu auras alors les extensions.
Il faut que tu ouvres "Cartes/levell1.txt" !
Citer : Posté le 28/02/2016 19:09 | #
Ça marche, merci beaucoup
Par ailleurs, j'ai résolu le problème du message en faisant du bricolage (j'utilise une fenêtre tkinter intermédiaire pour afficher le message puis je la détruit et je crée ma vrai interface graphique) :
obstacle = Obstacles()
robot = Robot()
data = [0,0,1,0,0]
labyrinthe = Labyrinthe("level1")
with open("enregistrement3.txt", "r") as fichier :
donnees = fichier.readline()
if donnees != "" :
fenetre_intermediaire = tkinter.Tk()
fenetre_intermediaire.geometry("1x1+600+350")
if messagebox.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("enregistrement3.txt", "w") as fichier :
fichier.write("")
fenetre_intermediaire.destroy()
interface = Interface()
interface.mise_a_jour()
interface.fenetre.mainloop()
Ajouté le 28/02/2016 à 22:50 :
Merci beaucoup Lephe et DS, j'ai enfin terminé et grâce à vous
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 28/02/2016 23:36 | #
Super
Citer : Posté le 11/03/2016 22:42 | #
Bonjours tout le monde
Voilà, je suis le cour sur Python de openclassrooms et je m’approche à grand pas de la fin .
Or avant de me lancer dans l’apprentissage d'un autre langage, je voudrais réaliser un vrai programme pour mettre en pratique toutes les connaissances que j'ai acquises mais je n'ai pas du tout d'idée de projet . Je fais donc appelle à vous : je voudrai réaliser un jeu original , pas trop compliqué mais qui fasse entre 1000 et 5000 ligne de code (je dit ça un peu au pif; je veux dire un vrai programme mais je voudrais pas y passer plus d'un mois).
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 11/03/2016 22:50 | #
On peut faire des jeux cools pour maximum 1000 lignes de code je pense, surtout en Python.
Bon après c'est léger comme conseil mais tu peux toujours aller voir sur pygame.org. (Dommage qu'ils aient refait le site, l'ancien était limite mieux...)
Citer : Posté le 11/03/2016 23:03 | #
encore un site en anglais qui ne m'inspire pas du tout
Merci quand même
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 11/03/2016 23:07 | #
Faire de la prog n'est pas compatible avec faire l'impasse sur l'anglais. Donc tu ferais mieux de t'y mettre maintenant que plus tard
Citer : Posté le 11/03/2016 23:13 | #
Je m'en doutais DS
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 11/03/2016 23:24 | #
Faire de la prog n'est pas compatible avec faire l'impasse sur l'anglais. Donc tu ferais mieux de t'y mettre maintenant que plus tard
Je plussoie. Il va falloir s'y mettre. C'est in-di-spen-sable.
L'année dernière, à l'occasion de mon projet d'info, j'ai réalisé un Space Invaders.
Ce fut assez intéressant, et c'est accessible pour ton niveau.
Je dois encore pouvoir trouver les sources quelque part si ça t’intéresse.
Citer : Posté le 11/03/2016 23:31 | #
Oui ça m’intéresse
Ajouté le 12/03/2016 à 16:06 :
On peut faire des jeux cools pour maximum 1000 lignes de code je pense, surtout en Python.
A quoi tu pense
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 12/03/2016 18:37 | #
Je vais essayer de te retrouver un lien vers un site qui propose une vingtaines de programmes simples en Python, dont des jeux (dont l'un est en 3D).
Citer : Posté le 12/03/2016 18:39 | #
Pour des jeux simples, tu peux voir les Space Invader, les jeux de stratégie de plateau, les jeux de plateforme, des petits rpg en vue de dessus, de la gestion simple, voire un peu de simulation...