Обобщённые классы
Разработать модель посещения увеселительного заведения посетителями. Бар предлагает выбор напитков, характеризующихся названием, крепостью и стоимостью, за наличный расчет. Посетитель может заказать напиток в зависимости от имеющихся финансов и настроения; упасть под стол (в случае достижения средней стадии) или попросить вызвать скорую (в случае достижения тяжелой стадии). Бармен готовит напитки и может вызвать одну из служб - скорую или полицию. Продемонстрировать работу модели взаимодействия бармена с несколькими, в том числе случайными, посетителями. Составить отчеты о прибыльности вечера в увеселительном заведении.
Определите текущую репутацию заведения (на основании количества инцидентов за вечер).
Не понимаю как передавать и накапливать или снижать значения(в данном случае состояние увеличиваться, а финансы уменьшаться),необходимо 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;
}
}
}//заключительный класс, здесь происходят все действия с посетителем, через свойства или функции, а также изменяются переменные из первого класса, наследует класс бар и посетитель