internal static string JeuxJvO(int[,] plateau, int[] piecesJouables, int tour, int[][] piecesCalcul, int niveaux, string[] piecesRep) { bool type = true; int caseCourante = -1; int pieceCourante = -1; IHM.AfficherEcranJeux(plateau, piecesJouables, piecesRep, caseCourante, pieceCourante); string etat = "JEUX"; bool gagner = false; //============================================================================================================ // Départ de la Boucle de jeux pour un Player vs Ordi //============================================================================================================ bool sauvegarde = false; int[] piecesVides = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; while (!gagner) { if (piecesJouables.SequenceEqual(piecesVides)) { IHM.AfficherEgalite(); } IHM.AfficherInfoTour(tour, false, niveaux); // Tour de l'ordinateur if (tour % 2 == 0) { IHM.AfficherConseil(0); int idPiece = ChoisirPiece(piecesJouables, sauvegarde, plateau, tour, type, piecesRep); IHM.AfficherEcranJeux(piecesJouables, piecesRep); sauvegarde = IA.PoserPieceIA(out int position, idPiece, plateau, piecesCalcul); IHM.AfficherEcranJeux(plateau, piecesRep); IHM.AfficherConseil(6); gagner = TesterVictoire(idPiece, position, plateau, piecesCalcul); if (gagner) { etat = "PERDU"; } } // Tour du joueur else { int idPiece = IA.ChoisirPieceIA(piecesJouables, plateau, piecesCalcul, piecesRep); sauvegarde = false; IHM.AfficherConseil(1); IHM.AfficherEcranJeux(piecesJouables, piecesRep); sauvegarde = PoserPiece(out int position, idPiece, plateau, sauvegarde, piecesJouables, tour, type, piecesRep); IHM.AfficherEcranJeux(plateau, piecesRep); IHM.AfficherConseil(6); gagner = TesterVictoire(idPiece, position, plateau, piecesCalcul); if (gagner) { etat = "GAGNER"; } } tour++; } return(etat); }
internal static int ChoisirPiece(int[] piecesJouables, bool sauvegarde, int[,] plateau, int tour, bool type, string[] piecesRep) { bool choix = false; int indice = -1; int pieceCourante = 0; while (indice == -1) { indice = piecesJouables[pieceCourante]; if (piecesJouables[pieceCourante] < 0) { pieceCourante++; } } Pos2Coord(out int ligneCourante, out int colonneCourante, pieceCourante); IHM.AfficherEcranJeux(piecesJouables, piecesRep, pieceCourante); while (!choix) { bool pause = false; System.ConsoleKeyInfo mouvement = Console.ReadKey(); switch (mouvement.Key) { case ConsoleKey.Q: case ConsoleKey.LeftArrow: colonneCourante = (colonneCourante -= 1) % 4; break; case ConsoleKey.D: case ConsoleKey.RightArrow: colonneCourante = (colonneCourante += 1) % 4; break; case ConsoleKey.Z: case ConsoleKey.UpArrow: ligneCourante = (ligneCourante -= 1) % 4; break; case ConsoleKey.DownArrow: case ConsoleKey.S: ligneCourante = (ligneCourante += 1) % 4; break; case ConsoleKey.Spacebar: case ConsoleKey.Enter: if (piecesJouables[pieceCourante] != -1) { piecesJouables[pieceCourante] = -1; choix = true; sauvegarde = false; } break; case ConsoleKey.P: sauvegarde = IHM.AfficherMenuPause(sauvegarde, plateau, piecesJouables, tour, type); pause = true; break; case ConsoleKey.Escape: if (sauvegarde) { Environment.Exit(0); } else { IHM.AfficherQuitter(plateau, piecesJouables, piecesRep, -1, pieceCourante); } break; } if (colonneCourante < 0) { colonneCourante = Math.Abs(colonneCourante + 4); } if (ligneCourante < 0) { ligneCourante = Math.Abs(ligneCourante + 4); } pieceCourante = Coor2Pos(ligneCourante, colonneCourante); //if(piecesJouables[pieceCourante] >= 0) if (pause) { IHM.AfficherEcranJeux(plateau, piecesJouables, piecesRep, -1, pieceCourante); IHM.AfficherInfoTour(tour); } else { IHM.AfficherEcranJeux(piecesJouables, piecesRep, pieceCourante); } } return(pieceCourante); }
internal static bool PoserPiece(out int position, int idPiece, int[,] plateau, bool sauvegarde, int[] piecesJouables, int tour, bool type, string[] piecesRep) { bool choix = false; int caseCourante = 0; int indice = 0; Pos2Coord(out int x, out int y, indice); while (plateau[x, y] != -1) { indice++; Pos2Coord(out x, out y, indice); if (plateau[x, y] == -1) { caseCourante = indice; } } Pos2Coord(out int ligneCourante, out int colonneCourante, caseCourante); IHM.AfficherEcranJeux(plateau, piecesRep, caseCourante); while (!choix) { bool pause = false; System.ConsoleKeyInfo mouvement = Console.ReadKey(); switch (mouvement.Key) { case ConsoleKey.Q: case ConsoleKey.LeftArrow: colonneCourante = (colonneCourante -= 1) % 4; break; case ConsoleKey.D: case ConsoleKey.RightArrow: colonneCourante = (colonneCourante += 1) % 4; break; case ConsoleKey.Z: case ConsoleKey.UpArrow: ligneCourante = (ligneCourante -= 1) % 4; break; case ConsoleKey.S: case ConsoleKey.DownArrow: ligneCourante = (ligneCourante += 1) % 4; break; case ConsoleKey.Spacebar: case ConsoleKey.Enter: if (plateau[ligneCourante, colonneCourante] == -1) { plateau[ligneCourante, colonneCourante] = idPiece; choix = true; sauvegarde = false; IHM.EffacerChoixOrdi(); } break; case ConsoleKey.P: sauvegarde = IHM.AfficherMenuPause(sauvegarde, plateau, piecesJouables, tour, type); pause = true; break; case ConsoleKey.Escape: if (sauvegarde) { Environment.Exit(0); } else { IHM.AfficherQuitter(plateau, piecesJouables, piecesRep, caseCourante, -1, idPiece); } break; } if (colonneCourante < 0) { colonneCourante = Math.Abs(colonneCourante + 4); } if (ligneCourante < 0) { ligneCourante = Math.Abs(ligneCourante + 4); } caseCourante = Coor2Pos(ligneCourante, colonneCourante); if (pause) { IHM.AfficherEcranJeux(plateau, piecesJouables, piecesRep, caseCourante); IHM.AfficherChoixOrdi(idPiece, piecesRep); IHM.AfficherInfoTour(tour); } else { IHM.AfficherEcranJeux(plateau, piecesRep, caseCourante); } } position = caseCourante; return(sauvegarde); }