Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Prochaine révision Les deux révisions suivantes | ||
morpion_console [2008/05/10 06:40] tyrtamos |
morpion_console [2008/05/10 08:49] tyrtamos |
||
---|---|---|---|
Ligne 19: | Ligne 19: | ||
===== Utilisation du programme ===== | ===== Utilisation du programme ===== | ||
+ | Utilisation très simple: il faut lancer le programme dans une console python, par exemple " | ||
+ | Il faut choisir à l' | ||
+ | * si on veut 2 joueurs humains, ou 1 joueur humain contre l' | ||
+ | |||
+ | * si on veut l' | ||
+ | |||
+ | * qui doit commencer: joueur1, joueur2 ou détermination au hasard. | ||
+ | |||
+ | Le programme affiche la grille et, selon le cas, demande le coup à jouer au joueur humain, ou dit quel coup joue le joueur ordinateur. | ||
+ | |||
+ | A la fin, le programme dit s'il y a un gagnant ou pas, et ferme le jeu. | ||
\\ | \\ | ||
===== Principe du codage ===== | ===== Principe du codage ===== | ||
+ | |||
+ | Pour la trame générale du jeu, j'ai utilisé le modèle du jeu damier du présent site ([[modele_jeu_type_damier]]) | ||
+ | |||
+ | Pour l' | ||
+ | |||
+ | Cette fonction " | ||
+ | |||
+ | * calcule s'il y a des coups gagnants. Par exemple avec le pion ' | ||
+ | |||
+ | * calcule s'il y a des coups perdants, c'est à dire gagnant pour l' | ||
+ | |||
+ | * calcule tous les coups possibles (=cases vides), leur affecte des coefficients (que vous pouvez changer) qui dépendent de la position de la case, et les présente sous forme d'une liste de coup [ligne, | ||
+ | |||
+ | * en reprenant cette même liste, la fonction " | ||
+ | |||
+ | Il y a aussi, bien entendu une fonction qui détecte si il y a une configuration gagnante, et donc un gagnant, ou si la grille est pleine sans gagnant. | ||
+ | Et voilà! | ||
\\ | \\ | ||
Ligne 214: | Ligne 242: | ||
############################################################################### | ############################################################################### | ||
def ajouer(pion): | def ajouer(pion): | ||
+ | global aide # dit si l' | ||
# recherche de qui est en train de jouer | # recherche de qui est en train de jouer | ||
Ligne 223: | Ligne 252: | ||
# recherche des positions gagnantes s'il y en a | # recherche des positions gagnantes s'il y en a | ||
LG = coupsgagnants(pion) | LG = coupsgagnants(pion) | ||
- | print "coups gagnants: ", LG | + | |
+ | | ||
# recherche des positions perdantes (=gagnantes pour l' | # recherche des positions perdantes (=gagnantes pour l' | ||
LP = coupsgagnants(pionautre) | LP = coupsgagnants(pionautre) | ||
- | print "coups perdants: ", LP | + | |
+ | | ||
# recherche des positions recommandees avec les coefficients | # recherche des positions recommandees avec les coefficients | ||
Ligne 236: | Ligne 267: | ||
# sélectionne tous les coups possibles dans l' | # sélectionne tous les coups possibles dans l' | ||
LC=coupscoef(c) | LC=coupscoef(c) | ||
- | print u" | + | |
+ | | ||
| | ||
# met au début de cette liste, si possible, un coup efficace | # met au début de cette liste, si possible, un coup efficace | ||
LC=correction(LC, | LC=correction(LC, | ||
- | + | if aide: | |
- | print u" | + | print u" |
# restituer le meilleur coup | # restituer le meilleur coup | ||
Ligne 304: | Ligne 336: | ||
global premier | global premier | ||
global nbjoueurs | global nbjoueurs | ||
+ | global aide # dit si l' | ||
while not self.stop: | while not self.stop: | ||
Ligne 329: | Ligne 362: | ||
else: | else: | ||
pionautre=' | pionautre=' | ||
+ | |||
print self.getName() + " joue ('" | print self.getName() + " joue ('" | ||
self.chx = ajouer(self.pion) | self.chx = ajouer(self.pion) | ||
Ligne 340: | Ligne 374: | ||
else: | else: | ||
pionautre=' | pionautre=' | ||
+ | |||
print self.getName() + " joue ('" | print self.getName() + " joue ('" | ||
self.chx = ajouer(self.pion) | self.chx = ajouer(self.pion) | ||
- | self.coup = raw_input(self.getName() + " joue case " | + | |
- | | + | if aide: |
- | self.chx=eval(self.coup) | + | ch = self.getName() + " joue case " + str(self.chx) + ": " |
- | grille[self.chx[0]][self.chx[1]]=self.pion | + | |
- | time.sleep(0.1) | + | ch = self.getName() + " |
+ | while True: | ||
+ | self.coup = raw_input(ch) | ||
+ | if aide and self.coup=="": | ||
+ | # ici, le jour a choisi le coup proposé | ||
+ | | ||
+ | | ||
+ | try: | ||
+ | # ici, le joueur a entré un choix ligne, | ||
+ | x = eval(self.coup) | ||
+ | if ((type(x)==list or type(x)==tuple) and len(x)==2) \ | ||
+ | and (x[0] in [0,1,2]) and (x[1] in [0,1,2]) \ | ||
+ | and grille[x[0]][x[1]]==' | ||
+ | grille[x[0]][x[1]]=self.pion | ||
+ | break | ||
+ | except: | ||
+ | # ici, le choix entré n'est pas correct | ||
+ | pass | ||
##### => fin du coup du joueur en cours | ##### => fin du coup du joueur en cours | ||
Ligne 373: | Ligne 425: | ||
# type de joueurs: 0=ordinateur, | # type de joueurs: 0=ordinateur, | ||
- | # par défaut: tous à 0 (=ordinateur joue contre lui-même): | + | while True: |
- | x = raw_input(" | + | |
- | if x==" | + | print u"Type de joueurs:" |
- | typejoueurs=[0, | + | print u"[1]: 2 joueurs humains jouent ensemble" |
- | print "vous serez joueur2" | + | print u"[2]: l' |
- | else: | + | print u"[3]: l'ordinateur joue contre lui-même" |
- | typejoueurs=[0, | + | x = raw_input(" |
+ | if x==' | ||
+ | typejoueurs=[1, | ||
+ | break | ||
+ | if x==' | ||
+ | typejoueurs=[0, | ||
+ | break | ||
+ | if x==' | ||
+ | typejoueurs=[0, | ||
+ | break | ||
- | # forme du pion affecté à chaque joueur. | + | # savoir si une aide est demandée: |
+ | while True: | ||
+ | |||
+ | x = raw_input(u" | ||
+ | if x==' | ||
+ | aide=True | ||
+ | break | ||
+ | elif x==' | ||
+ | aide=False | ||
+ | break | ||
+ | else: | ||
+ | pass | ||
+ | |||
+ | # type de pion affecté à chaque joueur. | ||
pions = [' | pions = [' | ||
+ | |||
+ | print u" | ||
# définir celui qui commence, ou définir au hasard | # définir celui qui commence, ou définir au hasard | ||
- | if typejoueurs[1]==1: | + | while True: |
- | | + | |
- | x=raw_input(" | + | print u" |
- | if not (x=='O' | + | print u"[1] le joueur |
- | | + | |
- | else: | + | print u"[3] le joueur qui commence est défini au hasard" |
- | | + | x = raw_input(u"Quel choix voulez-vous? [3 par defaut]: ") |
+ | if x=='1': | ||
+ | premier = 0 | ||
+ | break | ||
+ | elif x==' | ||
+ | premier = 1 | ||
+ | break | ||
+ | elif x=='3' or x=='': | ||
+ | premier = random.randint(0, | ||
+ | break | ||
+ | |||
print " | print " | ||
Ligne 432: | Ligne 518: | ||
verrou.release() | verrou.release() | ||
- | | + | # affichage de la grille |
- | ch="" | + | |
- | if cdcoups%nbjoueurs==0: | + | |
- | + | ||
- | print u" | + | |
- | + | ||
- | | + | |
for i in xrange(0, | for i in xrange(0, | ||
print grille[i] | print grille[i] | ||
- | + | ||
# voir si un gagnant | # voir si un gagnant | ||
- | | + | |
- | if gagnant!="": | + | if x!="": |
+ | if x==pions[0]: | ||
+ | gagnant = " | ||
+ | else: | ||
+ | gagnant = " | ||
+ | |||
print "le gagnant est: " + gagnant | print "le gagnant est: " + gagnant | ||
verrou.release() | verrou.release() | ||
Ligne 452: | Ligne 538: | ||
# condition de fin de jeu | # condition de fin de jeu | ||
if grillepleine(): | if grillepleine(): | ||
+ | |||
print "pas de gagnant!" | print "pas de gagnant!" | ||
verrou.release() | verrou.release() | ||
break | break | ||
+ | |||
+ | # détection du départ d'un nouveau tour numéro ((cdcoups// | ||
+ | ch="" | ||
+ | if cdcoups%nbjoueurs==0: | ||
+ | |||
+ | print u" | ||
# permet au joueur suivant de jouer | # permet au joueur suivant de jouer | ||
Ligne 477: | Ligne 570: | ||
verrou.release() | verrou.release() | ||
+ | |||
print u"A bientôt pour un prochain jeu!" | print u"A bientôt pour un prochain jeu!" | ||
</ | </ | ||
\\ | \\ | ||
- | ===== Exemple de session avec l' | + | ===== Exemple de session avec deux joueurs humains |
+ | Exemple pris ici sans aide de l' | ||
+ | |||
+ | < | ||
+ | Bonjour! En route pour le jeu de morpion! | ||
+ | |||
+ | Type de joueurs: | ||
+ | [1]: 2 joueurs humains jouent ensemble | ||
+ | [2]: l' | ||
+ | [3]: l' | ||
+ | Quel choix voulez-vous? | ||
+ | |||
+ | L' | ||
+ | |||
+ | =====> le joueur1 a le pion ' | ||
+ | |||
+ | Définir qui va commencer | ||
+ | [1] le joueur 1 commence | ||
+ | [2] le joueur 2 commence | ||
+ | [3] le joueur qui commence est défini au hasard | ||
+ | Quel choix voulez-vous? | ||
+ | |||
+ | =====> c'est joueur1 qui commence | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | =====> début du tour 1 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' ', ' ', ' | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | =====> début du tour 2 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' ', ' | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' ', ' | ||
+ | [' ', ' ', ' | ||
+ | |||
+ | =====> début du tour 3 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' ', ' | ||
+ | [' ', ' ', ' | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' ', ' | ||
+ | [' ', ' ', ' | ||
+ | |||
+ | le gagnant est: joueur2 (' | ||
+ | |||
+ | fin du jeu | ||
+ | fin du thread joueur1 | ||
+ | fin du thread joueur2 | ||
+ | |||
+ | A bientôt pour un prochain jeu! | ||
+ | </ | ||
+ | |||
+ | NB: le joueur1 n'est vraiment pas doué, ou alors il est très très distrait :-D | ||
\\ | \\ | ||
===== Exemple de session avec l' | ===== Exemple de session avec l' | ||
+ | Exemple pris ici sans aide de l' | ||
+ | |||
+ | < | ||
+ | Bonjour! En route pour le jeu de morpion! | ||
+ | |||
+ | Type de joueurs: | ||
+ | [1]: 2 joueurs humains jouent ensemble | ||
+ | [2]: l' | ||
+ | [3]: l' | ||
+ | Quel choix voulez-vous? | ||
+ | |||
+ | L' | ||
+ | |||
+ | =====> le joueur1 a le pion ' | ||
+ | |||
+ | Définir qui va commencer | ||
+ | [1] le joueur 1 commence | ||
+ | [2] le joueur 2 commence | ||
+ | [3] le joueur qui commence est défini au hasard | ||
+ | Quel choix voulez-vous? | ||
+ | |||
+ | =====> c'est joueur2 qui commence | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | =====> début du tour 1 | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case: [2, 0] | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 2 | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case: [0, 0] | ||
+ | |||
+ | [' | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 3 | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case: [1, 2] | ||
+ | |||
+ | [' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 4 | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | joueur1 joue (' | ||
+ | joueur1 joue case: [0, 1] | ||
+ | |||
+ | [' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 5 | ||
+ | |||
+ | joueur2 joue (' | ||
+ | joueur2 joue case (ligne, | ||
+ | |||
+ | [' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | pas de gagnant! | ||
+ | |||
+ | fin du jeu | ||
+ | fin du thread joueur1 | ||
+ | fin du thread joueur2 | ||
+ | |||
+ | A bientôt pour un prochain jeu! | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | ===== Exemple de session avec l' | ||
+ | |||
+ | Exemple pris ici avec aide de l' | ||
+ | |||
+ | |||
+ | < | ||
+ | Bonjour! En route pour le jeu de morpion! | ||
+ | |||
+ | Type de joueurs: | ||
+ | [1]: 2 joueurs humains jouent ensemble | ||
+ | [2]: l' | ||
+ | [3]: l' | ||
+ | Quel choix voulez-vous? | ||
+ | |||
+ | L' | ||
+ | |||
+ | =====> le joueur1 a le pion ' | ||
+ | |||
+ | Définir qui va commencer | ||
+ | [1] le joueur 1 commence | ||
+ | [2] le joueur 2 commence | ||
+ | [3] le joueur qui commence est défini au hasard | ||
+ | Quel choix voulez-vous? | ||
+ | |||
+ | =====> c'est joueur1 qui commence | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | =====> début du tour 1 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur1 joue case: [1, 1] | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' | ||
+ | [' ', ' ', ' '] | ||
+ | |||
+ | joueur2 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur2 joue case: [2, 0] | ||
+ | |||
+ | [' ', ' ', ' '] | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 2 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur1 joue case: [0, 2] | ||
+ | |||
+ | [' ', ' ', ' | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | joueur2 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur2 joue case: [2, 2] | ||
+ | |||
+ | [' ', ' ', ' | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 3 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur1 joue case: [2, 1] | ||
+ | |||
+ | [' ', ' ', ' | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | joueur2 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur2 joue case: [0, 1] | ||
+ | |||
+ | [' ', ' | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 4 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur1 joue case: [1, 2] | ||
+ | |||
+ | [' ', ' | ||
+ | [' ', ' | ||
+ | [' | ||
+ | |||
+ | joueur2 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur2 joue case: [1, 0] | ||
+ | |||
+ | [' ', ' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | =====> début du tour 5 | ||
+ | |||
+ | joueur1 joue (' | ||
+ | coups gagnants: | ||
+ | coups perdants: | ||
+ | coups recommandés avant correction: | ||
+ | coups recommandées: | ||
+ | joueur1 joue case: [0, 0] | ||
+ | |||
+ | [' | ||
+ | [' | ||
+ | [' | ||
+ | |||
+ | pas de gagnant! | ||
+ | |||
+ | fin du jeu | ||
+ | fin du thread joueur1 | ||
+ | fin du thread joueur2 | ||
+ | |||
+ | A bientôt pour un prochain jeu! | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Amusez-vous bien! | ||
< | < |