edodo7
Messages postés14Date d'inscriptionvendredi 15 janvier 2016StatutMembreDernière intervention28 février 2016
-
15 janv. 2016 à 19:32
hbouia
Messages postés112Date d'inscriptionmardi 30 juillet 2013StatutMembreDernière intervention22 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"
hbouia
Messages postés112Date d'inscriptionmardi 30 juillet 2013StatutMembreDernière intervention22 novembre 202212 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 :
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
Messages postés112Date d'inscriptionmardi 30 juillet 2013StatutMembreDernière intervention22 novembre 202212 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)]
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
Messages postés14Date d'inscriptionvendredi 15 janvier 2016StatutMembreDernière intervention28 février 2016
>
hbouia
Messages postés112Date d'inscriptionmardi 30 juillet 2013StatutMembreDernière intervention22 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
hbouia
Messages postés112Date d'inscriptionmardi 30 juillet 2013StatutMembreDernière intervention22 novembre 202212
>
hbouia
Messages postés112Date d'inscriptionmardi 30 juillet 2013StatutMembreDernière intervention22 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
17 janv. 2016 à 01:40
17 janv. 2016 à 11:35
ce qui donne :
Le nombre de 'X' dans la ligne 0, peut être obtenu comme suit
ce qui donne :
...
J'espère que ça peut t'aider,
cordialement
hb
17 janv. 2016 à 15:09
Merci
17 janv. 2016 à 15:53
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