Всем привет,
сегодня мы будем делать игровой автомат.
Суть, у нас будет форма с 3 барабанами, каждый барабан будет содержать только цифры от 0 до 9. Игроку при старте игры будет даваться стартовые $100, он может делать ставки 5-10-15 и т.д до $50, после нажатия рычага, у игрока 5 попыток, выигрыш зависит от количества совпадений и ранга чисел, максимальный выигрыш привязан к 7-7-7
Кому лень читать — вот исходник [download-attachment id=»1453″ title=»Avtomat-Bandit»].
Примечание: знак двоеточие читать как — «выставляем значение»
Итак, погнали:
1) Создаем проект Windows Forms называем его «avtomat-bandit».
2) Задаем для формы размеры 620×500, атрибут формы FormBorderStyle: FixedSingle — чтобы отключить возможность масштабировать форму.
3) Изменяем атрибут name для Form на name:»Однорукий бандит»
4) Сделаем «барабан» для этого кидаем на форму 3 Label и выставляем им size: 96
5) Добавляем ниже 2 кнопки, для верхней выставляем name:»Погнали!», для нижней name: «Сделать ставку».
6) Теперь реализуем баланс и кол-во неиспользуемых попыток, для этого на уровне верхней кнопки кидаем label, его св-ву text:»Баланс: $100″
7) Ниже добавляем еще одну метку для ее атрибута text:»Выбрать ставку: »
8) справа от этой метки добавляем numericUpDown, для его атрибута value:5 — это значение по умолчанию. Далее, атрибутам increment:5,minimum:5,maximum:50 — Думаю, с min и max все понятно, increment — это значение на которое будет уменьшаться\увеличиваться ставка, в зависимости от нажимаемой кнопки.
9) Ниже добавляем еще один label, для его атрибута text:»Осталось попыток: 0″
10) Последний штрих — кидам на форму 6 таймеров. Первые 3 таймера будут запускать барабаны, они будут иметь следующие имена name:dvg1, name:dvg2, name: dvg3 — всем выставляем interval:25, вторые три таймера будут по очереди останавливать первые три таймера, они будут иметь следующие имена
и интервалы:
name:stop1, inverval:1500
name:stop2, Interval:2500
name:stop3, Interval:3500
С формой мы закончили:
Теперь код:
1) В первую очередь, добавляем переменные, перед public Form()
int balance = 100; //Исходный баланс. int counter_money = 0; //Текущий ставка. int counter_try = 0; //Счетчик попыток. int win_money = 0; //Выигранные деньги. bool IsActive = true; //Активность кнопки "Погнали!"
2) Теперь создаем обработчики для события Tick, для первых 3-х таймеров
private void dvg1_Tick(object sender, EventArgs e) { Random random = new Random(); //Создаем экземпляр класса Random int dvg = random.Next(8); // Получаем случайное число от 0-7 label1.Text = dvg.ToString(); //Выводим полученное число. } private void dvg2_Tick(object sender, EventArgs e) { Random random = new Random(); int dvg = random.Next(8); label2.Text = dvg.ToString(); } private void dvg3_Tick(object sender, EventArgs e) { Random random = new Random(); int dvg = random.Next(8); label3.Text = dvg.ToString(); }
3) Создаем обработчики для события Tick, для последних 3-х таймеров
private void stop1_Tick(object sender, EventArgs e) { dvg1.Enabled = false; //Останавливаем таймер запускающий первый барабан. stop1.Enabled = false; //Останавливаем таймер останавливающий первый барабан. } private void stop2_Tick(object sender, EventArgs e) { dvg2.Enabled = false; stop2.Enabled = false; } private void stop3_Tick(object sender, EventArgs e) { counter_try--; //Уменьшаем число попыток. dvg3.Enabled = false; stop3.Enabled = false; Win_Money(); //Проверяем выиграли ли мы что-нибудь :) if (IsActive) { if (counter_try != 0) //Если число попыток больше 0, то даем возможность нажать на кнопку "Погнали!" еще раз, если нет, то блокируем кнопку "Погнали!", и выводим информационное окно. { label6.Text = "Осталось попыток: " + counter_try; button1.Enabled = true; } else { label6.Text = "Осталось попыток: " + counter_try; MessageBox.Show("Делайте новую ставку!", "Попытки закончились...", MessageBoxButtons.OK, MessageBoxIcon.Information); button2.Enabled = true; } } }
4) Собственно пишем метод, который будет определять есть ли пары у выпавших чисел
private void Win_Money() { if (label1.Text == "0" && label2.Text == "0" && label3.Text == "0") Upd_Win_Money(17); if (label1.Text == "1" && label2.Text == "1" && label3.Text == "1") Upd_Win_Money(10); if (label1.Text == "2" && label2.Text == "2" && label3.Text == "2") Upd_Win_Money(11); if (label1.Text == "3" && label2.Text == "3" && label3.Text == "3") Upd_Win_Money(12); if (label1.Text == "4" && label2.Text == "4" && label3.Text == "4") Upd_Win_Money(13); if (label1.Text == "5" && label2.Text == "5" && label3.Text == "5") Upd_Win_Money(14); if (label1.Text == "6" && label2.Text == "6" && label3.Text == "6") Upd_Win_Money(15); if (label1.Text == "7" && label2.Text == "7" && label3.Text == "7") Upd_Win_Money(20); if ((label1.Text == "0" && label2.Text == "0") || (label2.Text == "0" && label3.Text == "0")) Upd_Win_Money(7); if ((label1.Text == "1" && label2.Text == "1") || (label2.Text == "1" && label3.Text == "1")) Upd_Win_Money(1); if ((label1.Text == "2" && label2.Text == "2") || (label2.Text == "2" && label3.Text == "2")) Upd_Win_Money(2); if ((label1.Text == "3" && label2.Text == "3") || (label2.Text == "3" && label3.Text == "3")) Upd_Win_Money(3); if ((label1.Text == "4" && label2.Text == "4") || (label2.Text == "4" && label3.Text == "4")) Upd_Win_Money(4); if ((label1.Text == "5" && label2.Text == "5") || (label2.Text == "5" && label3.Text == "5")) Upd_Win_Money(5); if ((label1.Text == "6" && label2.Text == "6") || (label2.Text == "6" && label3.Text == "6")) Upd_Win_Money(6); if ((label1.Text == "7" && label2.Text == "7") || (label2.Text == "7" && label3.Text == "7")) Upd_Win_Money(10); }
5) Пишем метод который будет рассчитывать выигрыш
private void Upd_Win_Money(int number) { win_money = counter_money * number; //умножаем ставку на коэффициент получаем кол-во выигранных денег DialogResult result = MessageBox.Show("Вы выиграли: $" + win_money, "Поздравляем!", MessageBoxButtons.OK, MessageBoxIcon.Warning); //Выводим поздравления. balance = balance + win_money; //Прибавляем выигрыш к балансу label4.Text = "Баланс: $" + balance; //Выводим обновленный балансе button1.Enabled = false; //Блокируем кнопку "Погнали!" button2.Enabled = true; //Открываем кнопку "Сделать ставку" IsActive = false; //Это костыль, может кто-то предложит как от него отказаться )) if (result == DialogResult.OK) { MessageBox.Show("Делайте новую ставку!", "Новая игра", MessageBoxButtons.OK, MessageBoxIcon.Warning); label6.Text = "Осталось попыток: 0"; // Скидываем оставшиеся попытки. } }
6) Ну теперь можно заняться инициализацией переменных, для этого создаем еще один метод
private void Init_Counter(decimal counter) { counter_money = Convert.ToInt32(counter); //Получаем ставку из элемента numericUpDown balance = balance - counter_money; //Вычитаем ставку из баланса. label4.Text = "Баланс: $" + balance; // Выводим обновленный баланс counter_try = 5; // Зачисляем 5 попыток. label6.Text = "Осталось попыток: " + counter_try; //Выводим кол-во попыток на форму. }
7) Теперь кнопка «Сделать ставку»
private void button2_Click(object sender, EventArgs e)
{
Init_Counter(numericUpDown1.Value); //Вызываем инициализирующий метод
button1.Enabled = true; // Открываем доступ к кнопке «Погнали!»
button2.Enabled = false; //ЗАкрываем доступ к кнопке «Сделать ставку».
}
8) И последний кусок кода для кнопки «Погнали!»
private void button1_Click(object sender, EventArgs e) { //активируем таймеры dvg1.Enabled = true; dvg2.Enabled = true; dvg3.Enabled = true; stop1.Enabled = true; stop2.Enabled = true; stop3.Enabled = true; IsActive = true; button1.Enabled = false; //Пока барабаны крутятся кнопка "Погнали!" заблокирована. }
В общем-то всё, запускаем и получаем удовольствие от игры.
Если есть предложения как улучшить игру кидайте в комменты, если найдете ошибки тоже пиши в комментах)
Я ещё добавила Form1_Activated {button1.Enabled = false}.
Если кнопка 2 была не нажата, барабан крутился и попытки уходили в минус.
Сделала интервал у stop1 больше, чем у stop2, чтобы цифры на барабане появлялись по порядку
У вас есть идея как можно улучшить автомат? сделать его интересней
Спасибо за пищу для рассуждения!
Сайт в избранное добавил, жду ещё 10101 пример что можно поделать!
Постараюсь больше внимания уделять сайту.
На какой программе вы работаете? И сделайте больше проектов пожааалуйста)
«На какой программе вы работаете?» — Visual Studio 2017 Enterprise
Извините можете помочь? У меня программа не работает((
что конкретно «не работает»,если не знаете как описать отправьте скриншот ошибки сюда rabota683@gmail.com
7) Ниже добавляем еще одну метку для ее атрибута text:»Выбрать ставку: »
Все работает. Однако сразу же нашёл баг, баланс может списываться до бесконечности. Объявил новую переменную BalCheck и добавил в самое начало Init_Counter строку «balance = BalCheck;». Затем в поле кнопки 2 добавил проверку баланса(balance < 0) и вывел сообщение об окончании средств на балансе, заблокировал кнопку "Погнали!" и присвоил переменной balance значение BalCheck(balance = BalCheck). И всё заработало.
«И всё заработало» — это хорошо, мне приятно, что люди не только просто копируют примеры, но и работают с кодом внутри.
Переменной counter_try необходимо присвоить counter_money, иначе всегда добавляет 5 попыток, даже если выбрать 10-15-50