Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2022, 11:38   #1
Radon33
Пользователь
 
Регистрация: 22.10.2021
Сообщений: 34
По умолчанию Игра "Пьяница"

Подскажите, что я не так сделал? Всегда выводит "Игра закончена за 6 ходов" и "Результат игры: ничья"
Код:
using System;
using System.Collections;
using System.Collections.Generic;

namespace А2
{
    public class Queue<T>
    {
        private int _Front = -1;//позиция головы
        private int _Rear = -1;//позиция хвоста
        private int _Count = 0;//количество элементов
        private readonly int _Size;//размер массива
        private readonly T[] _Array;//массив типа Т
        public Queue(int Size)//конструктор с массивом нужной длины
        {
            this._Size = Size;
            this._Array = new T[Size];
        }
        public bool IsFull()//проверка, заполнена ли очередь
        {
            return _Rear == _Size - 1;
        }
        public bool IsEmpty()//возвращает true, если очередь пуста
        {
            return _Count == 0;
        }
        public void Enqueue(T Item)//добавление элементов в очередь
        {
            if (this.IsFull())
                //throw new Exception("Очередь полностью заполнена.");
            _Array[++_Rear] = Item;
            _Count++;
        }
        public T Dequeue()//удаление элемента из очереди
        {
            if (this.IsEmpty())
                throw new Exception("Очередь не заполнена.");
            T value = _Array[++_Front];
            _Count--;
            if (_Front == _Rear)
            {
                _Front = -1;
                _Rear = -1;
            }
            return value;
        }
        public int Size
        {
            get { return _Size; }
        }
        public int Count
        {
            get { return _Count; }
        }
        public T Peek()//считывание верхнего элемента
        {
            if (this.IsEmpty())
                throw new Exception("Очередь не заполнена.");
            T value = _Array[_Front + 1];
            return value;
        }
        public IEnumerator GetEnumerator()//получение данных при помощи foreach
        {
            if (this.IsEmpty())
                throw new Exception("Очередь не заполнена.");
            for (int i = _Front + 1; i <= _Rear; i++)
                yield return _Array[i];
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int kol1 = 5;
            int kol2 = 5;

            Queue<int> koloda1 = new Queue<int>(kol1);
            Queue<int> koloda2 = new Queue<int>(kol2);
            int tekushaKarta;

            Console.WriteLine("Введите " + kol1 + " карт первого игрока");
            for (int i = 0; i < 5; i++)
            {
                tekushaKarta = int.Parse(Console.ReadLine());
                koloda1.Enqueue(tekushaKarta);
            }
            Console.WriteLine("Введите " + kol2 + " карт второго игрока");
            for (int i = 0; i < 5; i++)
            {
                tekushaKarta = int.Parse(Console.ReadLine());
                koloda2.Enqueue(tekushaKarta);
            }
            int winner = 0;
            int hodi = 0;

            int tekushaKarta1;
            int tekushaKarta2;

            while (++hodi < 1000000 && !koloda1.IsEmpty() && !koloda2.IsEmpty())
            {
                tekushaKarta1 = koloda1.Peek();
                tekushaKarta2 = koloda2.Peek();

                koloda1.Dequeue();
                koloda2.Dequeue();
                if (tekushaKarta1 == 0 && tekushaKarta2 == 9)
                {
                    koloda1.Enqueue(tekushaKarta1);
                    koloda1.Enqueue(tekushaKarta2);
                }
                else if (tekushaKarta1 > tekushaKarta2)
                {
                    koloda1.Enqueue(tekushaKarta1);
                    koloda1.Enqueue(tekushaKarta2);
                }
                if (tekushaKarta2 == 0 && tekushaKarta1 == 9)
                {
                    koloda2.Enqueue(tekushaKarta1);
                    koloda2.Enqueue(tekushaKarta2);
                }
                else if (tekushaKarta2 > tekushaKarta1)
                {
                    koloda2.Enqueue(tekushaKarta1);
                    koloda2.Enqueue(tekushaKarta2);
                }
                if (koloda1.IsEmpty())
                {
                    winner = 2;
                }
                if (koloda2.IsEmpty())
                {
                    winner = 1;
                }
            }
            Console.WriteLine("Игра окончена за " + hodi + " ход(ов)");
            if (winner != 1 || winner != 2)
            {
                Console.WriteLine("Результат игры: ничья!");
            }
            else
            {
                if (winner == 1 && winner == 2)
                {
                    Console.WriteLine("Выиграл игрок номер " + winner);
                }
            }
        }
    }
}
Radon33 вне форума Ответить с цитированием
Старый 19.03.2022, 01:04   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Чтобы выводить выигравшего:
Код:
if (winner == 0)
{
    Console.WriteLine("Результат игры: ничья!");
}
else
{
    Console.WriteLine("Выиграл игрок номер " + winner);
}
Вы создаете очереди вместимостью 5 элементов каждая, а потом тут же заполняете их 5 картами. А куда класть карты при проигрыше? Массив _Array используется не как кольцевой буфер, поэтому вместимость очереди падает со временем, если не выбираются все элементы очереди.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Игра Пятнашки. Помогите пожалуйста добавить окно "Вы выиграли", когда комбинация будет собрана правильно, и добавить кнопку "Новая игра" Аня20 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2017 08:12
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
игра "worms", доработка игры "косынка". C# den790 Фриланс 11 09.12.2011 10:53