Jeu du morpion

Résolu
edodo7 Messages postés 14 Date d'inscription vendredi 15 janvier 2016 Statut Membre Dernière intervention 28 février 2016 - 15 janv. 2016 à 19:32
hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022 - 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.
A voir également:

1 réponse

hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022 12
16 janv. 2016 à 21:42
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)
0
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
0
hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022 12
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
0
edodo7 Messages postés 14 Date d'inscription vendredi 15 janvier 2016 Statut Membre Dernière intervention 28 février 2016 > hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022
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
0
hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022 12 > hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022
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
0
Rejoignez-nous