Jeu du morpion [Résolu]

edodo7 14 Messages postés vendredi 15 janvier 2016Date d'inscription 28 février 2016 Dernière intervention - 15 janv. 2016 à 19:32 - Dernière réponse : hbouia 85 Messages postés mardi 30 juillet 2013Date d'inscription 2 janvier 2018 Dernière intervention
- 17 janv. 2016 à 15:53
Bonjour, j'essaye de réaliser le jeu du morpion(tic tac toe). Cependant je bloque sur la fonction who_wins qui vérifie les lignes,les colonnes et les diagonales afin de dire qui a gagné. Pour l'instant j'arrive à vérifier les lignes et la diagonale allant de gauche à droite. Serait-ce possible d'obtenir de l'aide pour les colonnes et la seconde diagonale?Je ne cherche pas du code tout fait mais plutot une idée qui puisse m'aiguiller et me permettre de l'implémenter moi même. Je précise que mon morpion est de taille N x N sous forme de liste de listes.
Voici mon code:
def who_wins(morpion):
player1_ligne = 0
player2_ligne = 0
player1_colonne = 0
player2_colonne = 0
player1_diago = 0
player2_diago = 0
for i in range(len(morpion)):
for j in range(len(morpion)):
if i == j:
if morpion[i][j] == 'X':
player1_diago += 1
if morpion[i][j] == 'Y':
player2_diago += 1
if morpion[i][j] == 'X':
player1_ligne += 1
player1_colonne += 1
if morpion[i][j] == 'Y':
player2_ligne += 1
player2_colonne += 1
if player1_ligne == len(morpion):
print "joueur1 a gagne"
if player2_ligne == len(morpion):
print "joueur2 a gagne"
player1_ligne = 0
player2_ligne = 0
if player1_diago == len(morpion):
print "joueur1 a gagne"
if player2_diago == len(morpion):
print "joueur2 a gagne"

Merçi à tous.
Afficher la suite 

5 réponses

Répondre au sujet
hbouia 85 Messages postés mardi 30 juillet 2013Date d'inscription 2 janvier 2018 Dernière intervention - 16 janv. 2016 à 21:42
0
Utile
4
Bonjour,
Voici une idée :
Soit m ta matrice d'état contenant que des X et des Y,
n le nombre de lignes et des colonnes.
Vérifier la colonne j (pour player='X') consiste à compter le nombre de True dans la colonne (puis comparer à n ...)
[m[i][j]=='X' for i in range(n)] .count(True)

Soit pour toutes les colonnes :
[[m[i][j]=='X' for i in range(n)] .count(True) for j in range(n)]
si n existe dans cette liste alors 'X' est gagnant ;)
Idem pour la diagonale montante :
[m[i][n-1-i]=='X' for i in range(n)] .count(True)
Bonjour,je ne reconnais pas la syntaxe, est-ce un paradigme de programmation particulier? Je tiens à préciser que je ne maitrise( pour le moment du moins) que la progra impérative et la POO. Serait donc possible d'avoir un équivalent en impératif? Cependant si c'est le seul moyen, hé bien je tâcherais de m'adapter. Merci
hbouia 85 Messages postés mardi 30 juillet 2013Date d'inscription 2 janvier 2018 Dernière intervention - 17 janv. 2016 à 11:35
Supposons que la liste morpion est définie par :
morpion=[['Y', 'X', 'X'], ['X', 'X', 'Y'], ['X', 'Y', 'Y']]

# Listes des colonnes et diagonales :

morpion_en_colonnes=[[morpion[i][j] for i in range(3)] for j in range(3)]
morpion_diag1=[morpion[i][i] for i in range(3)]
morpion_diag2=[morpion[i][2-i] for i in range(3)]

ce qui donne :
# morpion             =  [['Y', 'X', 'X'], ['X', 'X', 'Y'], ['X', 'Y', 'Y']]
# morpion_en_colonnes =  [['Y', 'X', 'X'], ['X', 'X', 'Y'], ['X', 'Y', 'Y']]
# morpion_diag1       =  ['Y', 'X', 'Y']
# morpion_diag2       =  ['X', 'X', 'X']

Le nombre de 'X' dans la ligne 0, peut être obtenu comme suit
n0=['Y', 'X', 'X'].count('X') # où morpion[0].count('X')
ce qui donne :
# n0=2


...

J'espère que ça peut t'aider,
cordialement
hb
edodo7 14 Messages postés vendredi 15 janvier 2016Date d'inscription 28 février 2016 Dernière intervention > hbouia 85 Messages postés mardi 30 juillet 2013Date d'inscription 2 janvier 2018 Dernière intervention - 17 janv. 2016 à 15:09
En effet , c'est un peu plus clair dans mon esprit. Pourrait tu m'expliquer pourquoi faire 2-i dans morpion_diago2 ?
Merci
hbouia 85 Messages postés mardi 30 juillet 2013Date d'inscription 2 janvier 2018 Dernière intervention > hbouia 85 Messages postés mardi 30 juillet 2013Date d'inscription 2 janvier 2018 Dernière intervention - 17 janv. 2016 à 15:53
Dans une matrice nxn, le terme a(i, j) appartient à la diagonale montante si et seulement i + j = n.
Sous python, on commence les indices à 0 et on finit à (n-1).
Les termes de la diagonale montante sont de la forme a(i, (n-1)-i).
hb
Commenter la réponse de hbouia

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.