Обобщённые классы

Разработать модель посещения увеселительного заведения посетителями. Бар предлагает выбор напитков, характеризующихся названием, крепостью и стоимостью, за наличный расчет. Посетитель может заказать напиток в зависимости от имеющихся финансов и настроения; упасть под стол (в случае достижения средней стадии) или попросить вызвать скорую (в случае достижения тяжелой стадии). Бармен готовит напитки и может вызвать одну из служб - скорую или полицию. Продемонстрировать работу модели взаимодействия бармена с несколькими, в том числе случайными, посетителями. Составить отчеты о прибыльности вечера в увеселительном заведении.

Определите текущую репутацию заведения (на основании количества инцидентов за вечер).

Не понимаю как передавать и накапливать или снижать значения(в данном случае состояние увеличиваться, а финансы уменьшаться),необходимо 3 или более обобщённых классов. прикрепляю код,который у меня есть сейчас.Буду благодарен за любую помощь.

Если нужно могу позже прикрепить код,который у меня сейчас написан. Там 3 обобщённых класса также методы, свойства и конструкторы.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)//первая форма 
        {
            Visitor<uint> visitor = new Visitor<uint>(0, 0, 0);//экземпляр класса посетитель
            uint mood = visitor.Visiter_mood();
            uint Finance = visitor.Visiter_Finance();
            Бар<uint, string> бар = new Бар<uint, string>(0, Finance, mood, 0, "", 0);//экземпляр класса бар
            uint krepost = 0, cost = 0, condition = 0;
            string name = "";
            Barmen<uint, string> barmen = new Barmen<uint, string>(0, Finance, mood, krepost, name, cost, 0);экземпляр класса бармен
            //barmen.Vodka(/*ref krepost,ref cost,ref name, ref condition*/);
            int x = 0;// 
            while (x == 0)//сделано для быстрой проверки кода
            {
                x = barmen.drink();
            }
        }
    }//это Form1, сделано в form load для быстрой проверки

internal class Visitor<T1>
    {
//эти переменные должны будут передаваться и/или изменяться
        protected T1 Finance;
        protected T1 mood;
        protected T1 condition;
//
        public UInt32 finance
        {
            set { (uint)Finance = value; }
            get
            {
                return Convert.ToUInt32(Finance);
            }
        }
        public uint Mood
        {
            set
            {
                dynamic condition = 0;
                Random random = new Random();
                dynamic mood = random.Next(0, 10);
                //return (uint)mood;
            }
            get
            {
                return Convert.ToUInt32(mood);
            }
        }
        public Visitor(T1 _condition, T1 _Finance, T1 _mood)// конструктор класса
        {
            Finance = _Finance;
            mood = _mood;
            condition = _condition;
        }
        public uint Visiter_mood()//задание настроения через рандом
        {
            dynamic condition = 0;
            Random random = new Random();
            dynamic mood = random.Next(1, 2);
            return (uint)mood;
        }
        public uint Visiter_Finance()задание финансов посетителя также с помощью рандома
        {
            Random random = new Random();
            dynamic Finance = random.Next(1000, 10000);
            return (uint)Finance;
        }
    }//это первый класс посетитель, все основные значения, которые как-то изменяются находятся в этом классе

internal class Бар<T1, T2> : Visitor<T1>
    {
        protected T1 krepost;
        protected T2 name;
        protected T1 cost;

        public uint vodka_cost
        {
            get
            {
                dynamic cost = 750;
                return Convert.ToUInt32(cost);
            }
        }
        public string Name { set; get; }
        public uint Cost { set; get; }
        public uint Condition
        {
            set
            {

            }
            //get 
            //{ 

            //}
        }

        public Бар(T1 _condition, T1 _Finance, T1 _mood, T1 _krepost, T2 _name, T1 _cost) : base(_condition, _Finance, _mood)// конструктор класса
        {
            krepost = _krepost;
            name = _name;
            cost = _cost;
        }

        public void Vodka(/*ref uint _krepost, ref uint cost, ref string name, ref uint condition*/)//далее идёт перечисление напитков в виде функций 
        {
            dynamic krepost = 40;
            dynamic name = "Водка";
            dynamic Сost = 750;
            MessageBox.Show("Вы выпили бутылку водки! Попробуйте выжить во избежание инцидентов.", "Повеселитесь!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            dynamic condition = +40;
        }
        public void Strawberry_Daikiri(/*ref uint krepost, ref uint cost, ref string name, ref uint condition*/)
        {
            dynamic krepost = 6;
            dynamic name = "Клубничный дайкири";
            dynamic cost = 340;
            MessageBox.Show("Вы выпили клубничный дайкири! Вы только начали?", "Повеселитесь!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            dynamic condition = +8;

        }
        public void lager(/*ref uint krepost, ref uint cost, ref string name, ref uint condition*/)
        {
            dynamic krepost = 4;
            dynamic name = "Лагер";
            dynamic cost = 120;
            MessageBox.Show("Вы выпили лагер! Вы только начали?", "Повеселитесь!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            dynamic condition = +4;
        }
        public void Martini(/*ref uint krepost, ref uint cost, ref string name, ref uint condition*/)
        {
            dynamic krepost = 15;
            dynamic name = "Мартини";
            dynamic cost = 560;
            MessageBox.Show("Вы выпили бокал Мартини! Вы только начали?", "Повеселитесь!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            dynamic condition = +20;
        }
        public void blue_lagoon(/*ref uint krepost, ref uint cost, ref string name, ref uint condition*/)
        {
            dynamic krepost = 12;
            dynamic name = "Голубая лагуна";
            dynamic cost = 420;
            MessageBox.Show("Вы выпили коктейль Голубая лагуна! Осторожней с водкой. :)", "Повеселитесь!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            dynamic condition = +14;
        }

    }//этот класс хранит в себе возможные напитки для посетителя в виде функций и наследует класс посетитель, здесь по сути переменные постоянные

internal class Barmen<T1, T2> : Бар<T1, T2>
    {
        protected T1 Stage;
        public Barmen(T1 _condition, T1 _Finance, T1 _mood, T1 _krepost, T2 _name, T1 _cost, T1 _stage) : base(_condition, _Finance, _mood, _krepost, _name, _cost)// конструктор класса
        {
            Stage = _stage;
        }
//здесь уже сами методы для работы с переменными и заключительный этап
        Random random = new Random();
        public int drink()
        {
            if (Convert.ToUInt32(base.condition) >= 70)
            {
                dynamic Stage = random.Next(0, 2);
                if (Stage == 1)
                {
                    MessageBox.Show("Вы упали под стол! Осторожней с водкой. :)", "Повеселитесь!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
            else
            {
                drink2[] drink2 = new drink2[5];//попытка воспользоваться структурой, но не совсем понимаю как это сделать
                if (Convert.ToUInt32(mood) <= 2)
                {

                    //base.Visiter_Finance();
                    //base.Visiter_mood();
                    //base.Vodka(/*ref krepost, ref cost, ref name, ref condition*/);
                    //base.Finance -= (dynamic)base.cost;
                    base.finance = base.finance - base.vodka_cost;
                }
                else if (Convert.ToUInt32(mood) <= 4)
                {

                    base.Visiter_Finance();
                    base.Visiter_mood();
                    base.Martini(/*ref krepost, ref cost, ref name, ref condition*/);
                    base.finance -= base.Cost;
                }
                else if (Convert.ToUInt32(mood) <= 5)
                {
                    base.Visiter_Finance();
                    base.Visiter_mood();
                    base.blue_lagoon(/*ref krepost, ref cost, ref name, ref condition*/);
                    base.Finance -= (dynamic)base.cost;
                    base.finance -= base.Cost;
                }
                else if (Convert.ToUInt32(mood) <= 7)
                {
                    base.Visiter_Finance();
                    base.Visiter_mood();
                    base.lager(/*ref krepost, ref cost, ref name, ref condition*/);
                    base.Finance -= (dynamic)base.cost;
                    base.finance -= base.Cost;
                }
                else if (Convert.ToUInt32(mood) <= 8)
                {
                    base.Visiter_Finance();
                    base.Visiter_mood();
                    base.Strawberry_Daikiri(/*ref krepost, ref cost, ref name, ref condition*/);
                    base.Finance -= (dynamic)base.cost;
                    base.finance -= base.Cost;
                }
                return 0;
            }
        }

    }//заключительный класс, здесь происходят все действия с посетителем, через свойства или функции, а также изменяются переменные из первого класса, наследует класс бар и посетитель

Ответы (0 шт):