Example #1
0
        private static bool MakeNextStep(bool isFirstsStep)
        {
            Player current = isFirstsStep ? first : second;

            EFinish efFinish = EFinish.Play; // признак окончания игры

            int   intBoneyard = 0;           // количество доминушек в базаре, нужно для определения корректности хода игрока
            SBone sb;                        // Чем ходить
            bool  blnEnd;                    // куда ходить

            if (stepsCount == 0)
            {
                int intN = rnd.Next(lBoneyard.Count - 1);
                lGame.Add(lBoneyard[intN]);
                lBoneyard.RemoveAt(intN);
            }
            stepsCount++;

            intBoneyard = lBoneyard.Count;

            intLastTaken = intTaken;
            intTaken     = 0;
            // ход первого игрока
            intBoneyard = lBoneyard.Count;
            bool stepIsDone = current.MakeStep(out sb, out blnEnd);

            states.Add(new State(lGame, first.lHand, second.lHand, (int)Score1, (int)Score2));

            // если ход сделан
            if (stepIsDone)
            {
                // пристраиваем доминушку
                if (SetBone(sb, blnEnd) == false)
                {
                    PrintAll(lGame);
                    Console.WriteLine(
                        "!!!!!!!!Нельзя пристроить кость {0}:{1} ({3})!!!!!! {2}", sb.First, sb.Second, first.PlayerName,
                        !blnEnd ? "слева" + lGame[0].First + ":" + lGame[0].Second : "справа " + lGame[lGame.Count - 1].First + ":" + lGame[lGame.Count - 1].Second);
                    Console.Beep(2000, 1000);
                    Console.ReadLine();
                    return(false);
                }
            }
            else if (intBoneyard == lBoneyard.Count && intBoneyard > 0)                 // если ход не сделан
            {
                Console.WriteLine("!!!!!!!!Надо было добрать!!!!!! " + first.PlayerName);
                Console.ReadLine();
                return(false);
            }

            if (!stepIsDone && !prevStepIsDone)               // рыба
            {
                efFinish = EFinish.Lockdown;
                return(false);
            }
            else if (stepIsDone && first.GetCount() == 0)
            {
                efFinish = EFinish.First;
            }

            prevStepIsDone = stepIsDone;

            Score1 = first.GetScore();
            Score2 = second.GetScore();

            return(true);
        }
Example #2
0
        public static void StartOneGame(bool blnFirst)
        {
            // кто сейчас ходит

            // результат текущего хода игроков =TRUE, если ход состоялся
            bool blnFRes, blnSRes;
            // признак окончания игры
            EFinish efFinish = EFinish.Play;

            // сообщения о результате игры
            string[] arrFinishMsg = { "---", "Победил первый игрок!", "Победил второй игрок!", "Рыба!" };
            // количество доминушек в базаре, нужно для определения корректности хода игрока
            int intBoneyard = 0;
            // Чем ходить
            SBone sb;
            // куда ходить
            bool blnEnd;

            // Инициализация игры
            Initialize();
            // Раздача доминошек в начале игры
            GetHands();
            // первая доминушка - первая из базара
            // определяем случайным образом доминушку из базара
            int intN = rnd.Next(lBoneyard.Count - 1);

            lGame.Add(lBoneyard[intN]);
            lBoneyard.RemoveAt(intN);
            // вывод на экран начального состояния игры

            blnFRes = true;
            blnSRes = true;
            // Первым ходит первый игрок

            intBoneyard = lBoneyard.Count;
            //-----------------------------------------------------------------
            // ИГРА
            do
            {
                // кто ходит? ---- Ходит первый игрок
                if (blnFirst)
                {
                    // количество взятых доминушек
                    intLastTaken = intTaken;
                    intTaken     = 0;
                    // ход первого игрока
                    intBoneyard = lBoneyard.Count;
                    blnFRes     = MFPlayer.MakeStep(out sb, out blnEnd);
                    // если ход сделан
                    if (blnFRes)
                    {
                        // пристраиваем доминушку
                        if (SetBone(sb, blnEnd) == false)
                        {
                            return;
                        }
                    }
                    // если ход не сделан
                    else if (intBoneyard == lBoneyard.Count && intBoneyard > 0)
                    {
                        return;
                    }

                    if (blnFRes == false && blnSRes == false)
                    {
                        // рыба
                        efFinish = EFinish.Lockdown;
                    }
                    else if (blnFRes == true)
                    {
                        // если нет домино, то я выиграл
                        if (MFPlayer.GetCount() == 0)
                        {
                            efFinish = EFinish.First;
                        }
                    }
                }
                // кто ходит? ---- Ходит вторый игрок
                else
                {
                    // количество взятых доминушек
                    intLastTaken = intTaken;
                    intTaken     = 0;
                    // ход первого игрока
                    intBoneyard = lBoneyard.Count;
                    blnSRes     = MSPlayer.MakeStep(out sb, out blnEnd);
                    // если ход сделан
                    if (blnSRes)
                    {
                        // пристраиваем доминушку
                        if (SetBone(sb, blnEnd) == false)
                        {
                            return;
                        }
                    }
                    // если ход не сделан
                    else if (intBoneyard == lBoneyard.Count && intBoneyard > 0)
                    {
                        return;
                    }

                    if (blnFRes == false && blnSRes == false)
                    {
                        // рыба
                        efFinish = EFinish.Lockdown;
                    }
                    else if (blnSRes == true)
                    {
                        // если нет домино, то я выиграл
                        if (MSPlayer.GetCount() == 0)
                        {
                            efFinish = EFinish.First;
                        }
                    }
                }
                // после хода вывести данные на столе--------------------------------------------------------
                MFPlayer.PrintAll();
                MSPlayer.PrintAll();
                //Console.ReadKey()
                // будет ходить другой игрок
                blnFirst     = !blnFirst;
                intBoneyard  = lBoneyard.Count;
                intGameStep += 1;
            }while (efFinish == EFinish.Play);
            // результат текущей игры
            int[] points = new int[2];
            points[0] = MFPlayer.GetScore();
            points[1] = MSPlayer.GetScore();
        }