Role Play Game v0.1

Signaler
Messages postés
6
Date d'inscription
mardi 8 avril 2014
Statut
Membre
Dernière intervention
16 avril 2014
-
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/100493-role-play-game-v0-1

Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
20
Je t'ai envoyé un message personnel concernant l'utilisation de tkinter.

Sinon, comme autre interface graphique, tu trouveras tout ce que tu veux ici :
https://wiki.python.org/moin/GuiProgramming

Mais je conseille vivement de commencer en utilisant tkinter (qui a deux gros avantages : built-in et multiplateforme), c'est super pour apprendre à programmer avec interface graphique.
Messages postés
6
Date d'inscription
mardi 8 avril 2014
Statut
Membre
Dernière intervention
16 avril 2014

Un tout grand merci pour ces informations plus qu'utiles !

Depuis le début je pensais que j'étais en python 3 (ce serait logique qu'il soit nativement installé), honte sur moi !

JSON est vraiment intéressant, je te l'accorde :)

J'aurais une dernière question au niveau des interfaces graphiques.
Me conseillerait-tu de continuer avec tkinter, ou de me pencher vers d'autres bibliothèques plus élaborées? (Si compatibles avec python 3 qui est à présent installé bien évidemment !)

Encore un grand merci !
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
20
Une dernière remarque :

Ton jeu est très facile à retranscrire en Python 3 (seulement 3 ou 4 lignes à changer)

Voici les changements à effectuer :

#from Tkinter import *
#from tkFont import *

# A remplacer par :
from tkinter import *
from tkinter.font import *


#Line 30 : self.parent.geometry('{}x{}+{}+{}'.format (w, h, x, y))
# En Python 3, '{}x{}+{}+{}'.format(w, h, x, y) donne '220x100+850.0+490.0' ce qui n'est pas correct, il faut des nombres entiers (pas de 850.0 et 490.0 qui sont des décimaux). Il faut donc écrire ceci :

self.parent.geometry('{}x{}+{}+{}'.format (w, h, int(x), int(y)))

# Line 94 : parent.geometry('{}x{}+{}+{}'.format (w, h, x, y))
# Pareil :

parent.geometry('{}x{}+{}+{}'.format (w, h, int(x), int(y)))


Et voilà, très simple comme j'avais dit :)
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
20
Tu es en Python 2 vu que tu utilises Tkinter et non tkinter (la majuscule disparait en Python 3).

Pour ce qui est de Python 2 vs. Python 3 :

[ Source : https://wiki.python.org/moin/Python2orPython3 ]

(Il faut déjà dire que python.org conseille aux pythonneurs débutants d'apprendre Python 3 si possible.)

Python résume de cette manière ci :

"Short version: Python 2.x is legacy, Python 3.x is the present and future of the language"

Dans l'article cité, ils expliquent que le désavantage de Python 3 par rapport à Python 2 est que certains modules ne sont pas disponible et qu'il y a moins de tutos/docs en Python 3. Cependant, ce n'est plus tout à fait exact, surtout depuis les "Unofficial Packages" (http://www.lfd.uci.edu/~gohlke/pythonlibs/), des modules retranscris en Python 3 par de bons samaritains !
Lorsque j'ai appris Python 3, il y a maintenant un peu plus d'un an, il y avait très peu de tutos/docs et souvent j'étais bloqué car un module existait en Python 2 mais pas en Python 3. Aujourd'hui (avril 2014), tout cela a bien changé et Python 3 est bien plus populaire, il est rare de ne plus trouver le module que l'on cherche.

De plus, Python 3 a maintenant des modules par défaut (built-in) superbes que Python 2 n'a pas !

Python 3 continuera d'évoluer tandis que l'évolution de Python 2 s'arretera un de ces quatre.

Bref, je te recommande de passer à Python 3, tant que tu es au début (un peu s'adapter aux petites différences de syntaxes et la pilule est passée :)).
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
20
Pour installer Python 3.x (la version actuelle étant 3.4.0), rends toi ici : https://www.python.org/downloads/

JSON (JavaScript Object Notation) est une manière d'encoder les données "style javascript", TRES à la manière dont on les encode en Python (c'est pourquoi je te conseille JSON).
Pour faire clair :

Plutôt que d'écrire dans un script .py
variable = { "a": 0, "b": ["c","d"] }

Crée un fichier "fichier.json" dans lequelle tu colle ceci:
{"a": 0, "b": ["c","d"]}
Puis charge la variable dans ton script Python comme ceci :
from json import load

with open("fichier.json", "rt") as file:
    variable = load(file)


Tu pourras donc en une seule ligne de code Python charger une base de donnée aussi grande que tu veux (stockée dans ton fichier JSON). Le plus gros avantage de la méthode est que si tu désire modifier ta variable (rajouter une arme par exemple), il te suffit d'ouvrir ton .json et d'y rajouter l'arme !

Note : les accolades - "{" et "}" - désigne un dictionnaire. Un dictionnaire est comme une liste mais plutôt que de faire correspondre une variable à un indice, il fait correspondre une variable à une variable de valeur (généralement une chaine de caractère).

Un exemple :
variable1 = [ "a", "b", [0, 1] ] # ceci est une liste (type(variable1) is list)
variable2 = {"chaine1": 0, "chaine2": [1, 2], 5: "valeur"}

# Pour accéder aux valeurs d'une liste, on procède comme suit:
print( variable1[0] ) # Affiche "a"
print( variable1[2][1] ) # Affiche 0

# Pour accéder aux valeurs d'un dictionnaire, on procède de la sorte :
print( variable2["chaine1"] ) # Affiche 0
print( variable2["chaine2"][1] ) # Affiche 2
print( variable2[5] ) # Affiche "valeur"

# Note : il est évidemment possible d'avoir un dictionnaire à l'intérieur d'un dictionnaire.



Dans ton code, tu as ceci :

liste_armes = [['Lame de la Purge', (11, 18)],
   ['Lame de feu', (14, 20)],
   ['Epée ensorcelée', (8, 23)],
   ['Double dague', (9, 19)],
   ['Arc corrompu', (10, 18)],
   ['Marteau du profanateur', (13, 24)],
   ['Epée mystique', (8, 17)],
   ['Hache de l\'Empereur', (7, 16)], 
   ['Arc de Naargul', (12, 22)],
   ['Epée de Zraael', (13, 21)]]


Une manières plus facile et beaucoup plus lisible serait d'utiliser un dictionnaire :

liste_armes = {'Lame de la Purge': (11, 18),
   'Lame de feu': (14, 20),
   'Epée ensorcelée': (8, 23),
   'Double dague': (9, 19),
   'Arc corrompu': (10, 18),
   'Marteau du profanateur': (13, 24),
   'Epée mystique': (8, 17),
   'Hache de l\'Empereur': (7, 16), 
   'Arc de Naargul': (12, 22),
   'Epée de Zraael': (13, 21)}


Vu que mon post est assez long et que codes-sources me limite en longueur, je vais créer un deuxième post pour expliquer les principales différences entre Python 2.x et Python 3.x
Afficher les 11 commentaires