Exemplo n.º 1
0
        /// <summary>
        /// Affiche la grille du joueur ou de l'ordi
        /// </summary>
        /// <param name="grilleBateau">grille contenant les bateaux</param>
        /// <param name="grilleMissile"> grille contenant les missiles</param>
        /// <param name="isJoueur">booléen vrai si on affiche la grille du joueur, faux si ordi</param>
        /// <param name="aGagné">-1 si le joueur associé à la grille a perdu, 1 s'il a gagné, 0 si personne n'a encore gagné</param>
        /// <param name="tabBateauxTouches">tableau contenant les restes des bateaux du propriétaire de la grille</param>
        public static void AfficherGrille(int[,] grilleBateau, int[,] grilleMissile, bool isJoueur, int aGagné, int[] tabBateauxTouches, int tour)
        {
            Console.ForegroundColor = ConsoleColor.White;
            if (aGagné == -1)
            {
                Console.ForegroundColor = ConsoleColor.DarkRed;
            }
            if (aGagné == 1)
            {
                Console.ForegroundColor = ConsoleColor.Green;
            }

            if (!isJoueur)
            {
                Console.WriteLine("-----------------------------------------Grille Ordi------------------------------------------------");
            }
            else
            {
                Console.WriteLine("-----------------------------------------Grille Joueur----------------------------------------------");
            }

            int[]  tabBateaux = { 2, 3, 3, 4, 5 };
            string Bateaux    = "\u2560\u2550\u2550\u2550\u2563";


            int  tailleY = grilleBateau.GetLength(0), tailleX = grilleBateau.GetLength(1);
            char x = ' ';

            Console.WriteLine("");
            for (int i = 0; i < 2 * tailleY + 1; i++)
            {
                //Affichage HUD Gauche (Bonne chance pour comprendre même moi j'y arrive plus)

                if (i == 0)
                {
                    Console.Write("    {0} bateaux restants    ", 5 - GrilleBateaux.CompterNombreBateauxCoule(tabBateauxTouches));//Affichage bateaux restants
                }
                else if (isJoueur)
                {
                    //Affichage statut des bateaux Joueur
                    bool afficheHUDBateau = false;
                    for (int j = 0; j < 5; j++)
                    {
                        if (i == 4 * j + 3)
                        {
                            Console.Write("          ");
                            for (int k = 0; k < 5; k++)
                            {
                                if (k < tabBateaux[j])
                                {
                                    Console.ForegroundColor = ConsoleColor.White;
                                    if (tabBateauxTouches[j] - k <= 0)
                                    {
                                        Console.ForegroundColor = ConsoleColor.Yellow;
                                    }
                                    if (tabBateauxTouches[j] == 0)
                                    {
                                        Console.ForegroundColor = ConsoleColor.DarkRed;
                                    }

                                    if (k == tabBateaux[j] - 1)
                                    {
                                        Console.Write(Bateaux[4]);
                                    }
                                    else
                                    {
                                        Console.Write(Bateaux[k]);
                                    }
                                }
                                else
                                {
                                    Console.Write(" ");
                                }
                            }
                            Console.Write("           ");
                            afficheHUDBateau = true;
                        }
                    }
                    if (!afficheHUDBateau)
                    {
                        Console.Write("                          ");
                    }
                }
                else
                {
                    //Affichage statut des bateaux Ordi
                    bool afficheHUDBateau = false;
                    for (int j = 0; j < 5; j++)
                    {
                        if (i == 4 * j + 3)
                        {
                            Console.Write("          ");
                            for (int k = 0; k < 5; k++)
                            {
                                if (k < tabBateaux[j] && tabBateauxTouches[j] == 0)
                                {
                                    Console.ForegroundColor = ConsoleColor.DarkRed;

                                    if (k == tabBateaux[j] - 1)
                                    {
                                        Console.Write(Bateaux[4]);
                                    }
                                    else
                                    {
                                        Console.Write(Bateaux[k]);
                                    }
                                }
                                else
                                {
                                    Console.Write(" ");
                                }
                            }
                            Console.Write("           ");
                            afficheHUDBateau = true;
                        }
                    }
                    if (!afficheHUDBateau)
                    {
                        Console.Write("                          ");
                    }
                }

                //Affichage de l'intérieur de la grille
                for (int j = 0; j < 4 * tailleX + 1; j++)
                {
                    Console.ForegroundColor = ConsoleColor.White;

                    if (aGagné == -1)
                    {
                        Console.ForegroundColor = ConsoleColor.DarkRed;
                    }
                    if (aGagné == 1)
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                    }

                    if (i % 2 == 0)
                    {
                        if (j % 4 == 0)
                        {
                            x = '\u253C';//Affichage de la grille
                        }
                        else
                        {
                            x = '\u2500';//Affichage de la grille
                        }
                    }
                    else
                    {
                        if (j % 4 == 0)
                        {
                            x = '\u2502';//Affichage de la grille
                        }
                        else
                        {
                            if (j % 2 == 0)
                            {
                                x = AfficherCaractere((i - 1) / 2, (j - 1) / 4, isJoueur, grilleBateau, grilleMissile); //Affiche l'intérieur des cases
                            }
                            else
                            {
                                x = ' ';
                            }
                        }
                    }
                    Console.Write(x);
                    Console.ForegroundColor = ConsoleColor.White;
                }

                //Affichage des lignes
                if (i % 2 == 1)
                {
                    Console.Write("ABCDEFGHIJKLMNOPQRSTUVWXYZ"[(i - 1) / 2]);
                }


                //Affichage légende côté ordi

                Console.ForegroundColor = ConsoleColor.White;

                if (i == 0 && !isJoueur)
                {
                    Console.Write("         TOUR :  {0}", tour + 1);
                }
                if (i == 7 && !isJoueur)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("      O");
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write("      :  Bateau touché");
                }
                if (i == 12 && !isJoueur)
                {
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.Write("    \u2560 \u2550 \u2550 \u2563");
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write("   :  Bateau coulé");
                }
                if (i == 17 && !isJoueur)
                {
                    Console.Write("      \u00b7      :  Case vide");
                }



                //Affichage légende côté joueur
                if (i == 11 && isJoueur)
                {
                    Console.Write("   \u2190 \u2191 \u2192 \u2193");
                    Console.Write("   :  Bouger curseur");
                }

                if (i == 1 && isJoueur)
                {
                    Console.Write("      \u2566");
                }
                if (i == 3 && isJoueur)
                {
                    Console.Write("      \u2551");
                }
                if (i == 5 && isJoueur)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("      \u2551");
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write("      :  Bateau touché");
                }
                if (i == 7 && isJoueur)
                {
                    Console.Write("      \u2569");
                }

                if (i == 15 && isJoueur)
                {
                    Console.Write("    Enter    :  Selection");
                }
                if (i == 19 && isJoueur)
                {
                    Console.Write("    Echap    :  Menu");
                }
                Console.Write('\n');
            }

            //Affichage des colonnes
            string str = "                          ";

            for (int i = 0; i < tailleX; i++)
            {
                str += "  " + Convert.ToString(i + 1) + " ";
            }
            Console.WriteLine(str);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Lancement du jeu
        /// </summary>
        public static void Demarrer()
        {
            //constante
            int[] tabTaillesBateaux = { 2, 3, 3, 4, 5 };

            // définition grilles
            int[,] grilleJoueurBateaux  = new int[10, 10];
            int[,] grilleOrdiBateaux    = new int[10, 10];
            int[,] grilleJoueurMissiles = new int[10, 10];
            int[,] grilleOrdiMissiles   = new int[10, 10];


            //définition tableau
            int[] tabToucheBateauxJoueur = tabTaillesBateaux.ToArray();
            int[] tabToucheBateauxOrdi   = tabTaillesBateaux.ToArray();

            //random instance
            Random rdn = new Random();

            //variable difficulté
            int diff = 0;

            //paramètres de l'application
            bool   saveEachTurn = false;
            string nameSave     = "quicksave";
            string path         = Fichier.ObtenirPathSave();

            //chargement des paramètres à partir du fichier parametre
            path = Path.GetDirectoryName(path);
            Fichier.LireSaveParametre(path + "\\" + "parametre.txt", ref saveEachTurn);


            //init variable ordi
            int[][] preCoord = new int[5][] { new int[2], new int[2], new int[2], new int[2], new int[2] };
            int[]   preDir   = new int[] { -1, -1, -1, -1, -1 };
            bool[]  goodDir  = new bool[] { false, false, false, false, false };
            int[]   typePrec = new int[] { -1, -1, -1, -1, -1 };

            //placement bateau aléatoire sur la grille de l'ordinateur
            InitialiserPreCoord(preCoord, grilleJoueurMissiles, rdn);

            //boucle principale
            int  tour = 0;
            bool joueur;
            int  tirsDispos;

            int[] coord;

            //menu principal
            DemarrerMenuPrincipal(ref grilleJoueurBateaux, grilleJoueurMissiles, ref grilleOrdiBateaux,
                                  grilleOrdiMissiles, tabTaillesBateaux, rdn, tabToucheBateauxJoueur, tabToucheBateauxOrdi
                                  , ref diff, ref saveEachTurn, ref preDir, ref typePrec, preCoord, goodDir, ref tour);

            do
            {
                //tour de qui?
                joueur = (tour % 2 == 0);

                //tour du joueur
                if (joueur)
                {
                    //sauvegarde auto
                    if (saveEachTurn)
                    {
                        Fichier.EcrireSavePartie(Fichier.ObtenirPathSave() + "\\" + nameSave,
                                                 new int[][, ] {
                            grilleJoueurBateaux, grilleOrdiBateaux,
                            grilleJoueurMissiles, grilleOrdiMissiles
                        },
                                                 new int[][] { tabToucheBateauxJoueur, tabToucheBateauxOrdi, preDir, typePrec }, preCoord, goodDir, diff, tour);
                    }

                    //affichage grilles
                    InterfaceJoueur.AfficherGrilles(grilleJoueurBateaux, grilleJoueurMissiles, grilleOrdiBateaux, grilleOrdiMissiles, 0, tabToucheBateauxJoueur, tabToucheBateauxOrdi, tour / 2);

                    //nombre de tirs disponible
                    tirsDispos = 5 - GrilleBateaux.CompterNombreBateauxCoule(tabToucheBateauxJoueur);

                    //init coord des tirs
                    int[,] coordTirs = new int[tirsDispos, 2];

                    for (int i = 0; i < coordTirs.GetLength(0); i++)
                    {
                        coordTirs[i, 0] = -1;
                        coordTirs[i, 1] = -1;
                    }

                    //demander les coordonnées des tirs
                    Action menu = () => DemarrerMenuContinue(grilleJoueurBateaux, grilleJoueurMissiles, grilleOrdiBateaux,
                                                             grilleOrdiMissiles, tabTaillesBateaux, rdn, tabToucheBateauxJoueur, tabToucheBateauxOrdi, diff,
                                                             preDir, typePrec, preCoord, goodDir, tour);

                    InterfaceJoueur.DemanderTirs(tirsDispos, 26, coordTirs
                                                 , menu);

                    //salve de tir
                    for (int i = 0; i < tirsDispos && tirsDispos < Grille.CompterNbCaseVide(grilleOrdiMissiles); i++)
                    {
                        coord    = new int[2];
                        coord[0] = coordTirs[i, 0];
                        coord[1] = coordTirs[i, 1];
                        int result = GrilleMissile.Tirer(grilleOrdiBateaux, grilleOrdiMissiles, tabToucheBateauxOrdi, coord, tabTaillesBateaux);
                    }
                }


                //tour de l'ordi
                else
                {
                    //nombres de tirs dispo
                    tirsDispos = tabToucheBateauxOrdi.Length - GrilleBateaux.CompterNombreBateauxCoule(tabToucheBateauxOrdi);

                    //salve
                    for (int i = 0; i < tirsDispos && i < Grille.CompterNbCaseVide(grilleOrdiMissiles); i++)
                    {
                        //Facile
                        if (diff == 0)
                        {
                            Ordi_Facile.ObtenirProchainCoup(grilleJoueurBateaux, grilleJoueurMissiles,
                                                            tabToucheBateauxJoueur
                                                            , rdn, preCoord, preDir,
                                                            goodDir, typePrec, tabTaillesBateaux, i, tirsDispos);
                        }

                        //Difficile
                        else if (diff == 1)
                        {
                            Ordi_Difficile.ObtenirProchainCoup(grilleJoueurBateaux, grilleJoueurMissiles,
                                                               tabToucheBateauxJoueur
                                                               , rdn, preCoord, preDir,
                                                               goodDir, typePrec, tabTaillesBateaux, i, tirsDispos);
                        }
                    }
                }
                tour++;
            } while (Grille.VerifierVictoire(tabToucheBateauxJoueur, tabToucheBateauxOrdi) == 0);

            //Ecran de victoire
            InterfaceJoueur.AfficherVictoire(Grille.VerifierVictoire(tabToucheBateauxJoueur, tabToucheBateauxOrdi), grilleJoueurBateaux, grilleJoueurMissiles, grilleOrdiBateaux, grilleOrdiMissiles, tabToucheBateauxJoueur, tabToucheBateauxOrdi, tour / 2);
        }