コード例 #1
0
ファイル: Program.cs プロジェクト: GuillaumeCreusot/SaleVeau
        /// <summary>
        /// Initialisation des coordonnées des tirs de l'ordinateur
        /// </summary>
        /// <param name="preCoord"></param>
        /// <param name="grilleJoueurMissiles"></param>
        /// <param name="rdn"></param>
        public static void InitialiserPreCoord(int[][] preCoord, int[,] grilleJoueurMissiles, Random rdn)
        {
            int[] coord;

            for (int i = 0; i < 5; i++)
            {
                do
                {
                    coord = Grille.ChoisirCaseVideAlea(grilleJoueurMissiles, rdn);
                } while (Grille.ContenirCoord(preCoord, coord));
                preCoord[i] = coord;
            }
        }
コード例 #2
0
        /// <summary>
        /// Tire sur la case de coordonnées <paramref name="coords"/>[<paramref name="index"/>]
        /// et choisit aléatoirement les prochaines coordonnées
        /// </summary>
        /// <param name="grilleBateauxJoueur"></param>
        /// <param name="grilleMissileJoueur"></param>
        /// <param name="tabToucheBateauxJoueur"></param>
        /// <param name="rdn"></param>
        /// <param name="coords"></param>
        /// <param name="dirs"></param>
        /// <param name="goodDirs"></param>
        /// <param name="typePrecs"></param>
        /// <param name="tabtaillesBateaux"></param>
        /// <param name="index"></param>
        /// <param name="tirDispo"></param>
        public static void ObtenirProchainCoup(int[,] grilleBateauxJoueur
                                               , int[,] grilleMissileJoueur, int[] tabToucheBateauxJoueur
                                               , Random rdn, int[][] coords, int[] dirs, bool[] goodDirs, int[] typePrecs, int[] tabtaillesBateaux, int index, int tirDispo)
        {
            int result = GrilleMissile.Tirer(grilleBateauxJoueur, grilleMissileJoueur
                                             , tabToucheBateauxJoueur, coords[index], tabtaillesBateaux);


            if (Grille.CompterNbCaseVide(grilleMissileJoueur) > tirDispo)
            {
                int[] coordInter;
                do
                {
                    //on en cherche une
                    coordInter = Grille.ChoisirCaseVideAlea(grilleMissileJoueur, rdn);
                } while (Grille.ContenirCoord(coords, coordInter));
                coords[index] = coordInter;
            }
        }
コード例 #3
0
        /// <summary>
        /// Tire sur la case de coordonnées <paramref name="coords"/>[<paramref name="index"/>]
        /// et choisit "intelligement" les prochaines coordonnées
        /// </summary>
        /// <param name="grilleBateauxJoueur"></param>
        /// <param name="grilleMissileJoueur"></param>
        /// <param name="tabToucheBateauxJoueur"></param>
        /// <param name="rdn"></param>
        /// <param name="coords"></param>
        /// <param name="dirs"></param>
        /// <param name="goodDirs"></param>
        /// <param name="typePrecs"></param>
        /// <param name="tabtaillesBateaux"></param>
        /// <param name="index"></param>
        /// <param name="tirDispo"></param>
        public static void ObtenirProchainCoup(int[,] grilleBateauxJoueur
                                               , int[,] grilleMissileJoueur, int[] tabToucheBateauxJoueur
                                               , Random rdn, int[][] coords, int[] dirs, bool[] goodDirs, int[] typePrecs
                                               , int[] tabtaillesBateaux, int index, int tirDispo)
        {
            int result = GrilleMissile.Tirer(grilleBateauxJoueur, grilleMissileJoueur
                                             , tabToucheBateauxJoueur, coords[index], tabtaillesBateaux);

            if (Grille.CompterNbCaseVide(grilleMissileJoueur) > tirDispo)
            {
                //choix de la prochaine coords[index]
                int incx, incy;

                int[] coordInter;

                bool test;

                //si on ne touche rien ou que l'on touche un autre navire que le navire recherché
                if (result == 0 || (result != typePrecs[index] && typePrecs[index] != -1))
                {
                    //si l'on n'a pas encore trouvé de cible
                    if (typePrecs[index] == -1)
                    {
                        do
                        {
                            //on en cherche une
                            coordInter = Grille.ChoisirCaseVideAlea(grilleMissileJoueur, rdn);
                        } while (Grille.ContenirCoord(coords, coordInter));
                        coords[index] = coordInter;
                    }
                    else if (tabToucheBateauxJoueur[typePrecs[index] - 1] != 0)
                    {
                        //on retourne dans la direction opposée
                        RetournerArr(coords[index], ref dirs[index], grilleMissileJoueur, grilleBateauxJoueur, typePrecs[index]);

                        //si on est pas sur le bon axe
                        if (!goodDirs[index])
                        {
                            //on choisis une direction aléatoire
                            dirs[index] = GrilleBateaux.ChoisirRandomDirectionBateau(1, coords[index],
                                                                                     grilleMissileJoueur, rdn);
                        }
                        Grille.IncrementerversDir(dirs[index], out incx, out incy);

                        // on avance d'une case dans la direction dirs[index]
                        coords[index] = new int[] { coords[index][0] + incx, coords[index][1] + incy };
                    }
                    else
                    {
                        dirs[index]      = -1;
                        typePrecs[index] = -1;
                        goodDirs[index]  = false;
                        do
                        {
                            //on en cherche une
                            coordInter = Grille.ChoisirCaseVideAlea(grilleMissileJoueur, rdn);
                        } while (Grille.ContenirCoord(coords, coordInter));
                        coords[index] = coordInter;
                    }
                }

                else
                {
                    //debug
                    if (result == -1)
                    {
                        Console.WriteLine("erreur");
                    }

                    if (typePrecs[index] == -1)
                    {
                        typePrecs[index] = result;
                    }


                    //si la cible n'est pas coulée

                    if (tabToucheBateauxJoueur[typePrecs[index] - 1] != 0)
                    {
                        //si on suit une dirs[index]ection
                        if (dirs[index] != -1 && result == typePrecs[index])
                        {
                            goodDirs[index] = true;
                        }

                        do
                        {
                            //si on n est pas dans la bonne direction
                            if (!goodDirs[index])
                            {
                                dirs[index] = GrilleBateaux.ChoisirRandomDirectionBateau(1, coords[index],
                                                                                         grilleMissileJoueur, rdn);
                            }

                            Grille.IncrementerversDir(dirs[index], out incx, out incy);
                            coords[index] = new int[] { coords[index][0] + incx, coords[index][1] + incy };
                            if (coords[index][0] >= 0 && coords[index][0] < 10 &&
                                coords[index][1] >= 0 && coords[index][1] < 10)
                            {
                                //si la case a déjà été touchée et la case n'est pas déjà ciblée
                                test = grilleMissileJoueur[coords[index][0], coords[index][1]] != 0 && !coords.Contains(coords[index]);
                                if (test)
                                {
                                    //on retourne dans la direction opposée
                                    RetournerArr(coords[index], ref dirs[index], grilleMissileJoueur, grilleBateauxJoueur, typePrecs[index]);
                                }
                            }
                            else
                            {
                                test = true;
                            }
                        } while (test);
                    }

                    else
                    {
                        dirs[index]      = -1;
                        typePrecs[index] = -1;
                        goodDirs[index]  = false;
                        do
                        {
                            //on en cherche une
                            coordInter = Grille.ChoisirCaseVideAlea(grilleMissileJoueur, rdn);
                        } while (Grille.ContenirCoord(coords, coordInter));
                        coords[index] = coordInter;
                    }
                }
            }
        }