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