Beispiel #1
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();
        }