static void Main(string[] args) { Console.WriteLine("Morpion start!, choisir taille du morpion: "); string inputUser = Console.ReadLine(); Morpion morpion = new Morpion(int.Parse(inputUser)); while (true) { morpion.AfficherMorpion(); int choixI = int.Parse(Console.ReadLine()); int choixJ = int.Parse(Console.ReadLine()); Tour tour = new Tour(choixI, choixJ); morpion.JouerUneCase(tour); morpion.DeterminerSymbolGagnant(); Symbol?gagnant = morpion.DeterminerSymbolGagnant(); if (gagnant == Symbol.x) { morpion.AfficherMorpion(); Console.WriteLine("la croix gagne!"); Console.ReadKey(true); return; } else if (gagnant == Symbol.o) { morpion.AfficherMorpion(); Console.WriteLine("le rond gagne!"); Console.ReadKey(true); return; } } }
public static Symbol?DeterminerSymbolGagnant(Morpion morpion) { //Pour chaques lignes // si toutes les cases de cette ligne ont le même symboles // et que ce symbole n'est pas "vide" // alors le symbol gagnant est le symbol de la 1ère case de la ligne // je retourne le symbole gagnant for (int indexLigne = 0; indexLigne < 3; indexLigne++) { if (morpion.Cases[indexLigne, 0].SymbolCourant != null && morpion.Cases[indexLigne, 0].SymbolCourant == morpion.Cases[indexLigne, 1].SymbolCourant && morpion.Cases[indexLigne, 0].SymbolCourant == morpion.Cases[indexLigne, 2].SymbolCourant) { return(morpion.Cases[indexLigne, 0].SymbolCourant); } } //Pour chaques colonnes // si toutes les cases de cette colonne ont le même symboles // et que ce symbole n'est pas "vide" // alors le symbole gagnant est le symbole de la 1ère case de la colonne // je retourne le symbole gagnant for (int indexColonne = 0; indexColonne < 3; indexColonne++) { if (morpion.Cases[0, indexColonne].SymbolCourant != null && morpion.Cases[0, indexColonne].SymbolCourant == morpion.Cases[1, indexColonne].SymbolCourant && morpion.Cases[0, indexColonne].SymbolCourant == morpion.Cases[2, indexColonne].SymbolCourant) { return(morpion.Cases[0, indexColonne].SymbolCourant); } } //Pour les 2 diagonales // si toutes les cases de cette diagonale ont le même symboles // et que ce symbole n'est pas "vide" // alors le symbole gagnant est le symbole de la 1ère case de la diagonale // je retourne le symbole gagnant if (morpion.Cases[0, 0].SymbolCourant != null && morpion.Cases[0, 0].SymbolCourant == morpion.Cases[1, 1].SymbolCourant && morpion.Cases[0, 0].SymbolCourant == morpion.Cases[2, 2].SymbolCourant) { return(morpion.Cases[0, 0].SymbolCourant); } if (morpion.Cases[2, 0].SymbolCourant != null && morpion.Cases[2, 0].SymbolCourant == morpion.Cases[1, 1].SymbolCourant && morpion.Cases[2, 0].SymbolCourant == morpion.Cases[0, 2].SymbolCourant) { return(morpion.Cases[0, 0].SymbolCourant); } //Sinon // Il n'y a aucun gagnant return(null); }
public static void JouerUneCase(Morpion morpion, Tour tourAJouer) { //1ère étape : récupère dans la grille de morpion la cellule qui correspond au tour à jouer Case laCaseJouee = morpion.Cases[tourAJouer.IndexLigneJouee, tourAJouer.IndexColonneJouee]; //2ème étape : sur cette case, je lui positionne le symbole du joueur courant Symbol symbolAPositionnerDansCaseJouee = morpion.SymboleDuJoueurQuiDoitJouer; Case.PositionnerSymbol(laCaseJouee, symbolAPositionnerDansCaseJouee); //3ème étape : j'inverse le joueur courant Symbol leProchainSymbolQuiDoitJouer = morpion.SymboleDuJoueurQuiDoitJouer == Symbol.Croix ? Symbol.Rond : Symbol.Croix; morpion.SymboleDuJoueurQuiDoitJouer = leProchainSymbolQuiDoitJouer; }