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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2010, 05:52   #1
sekator
Заблокирован
 
Регистрация: 27.07.2010
Сообщений: 11
Вопрос Консольная игра "Однорукий бандит"

Игра на подобии игровых автоматов!
Идет как лаба! Вот условия :

Цель занятия: Применить оператор цикла for для работы с массивами. Применить на практике алгоритмы суммирования, поиска и сортировки.

Написать игру «Однорукий бандит». Игра должна имитировать работу игрового автомата с тремя барабанами, на которых расположены числа от 0 до 9. Пользователь делает ставку и запускает барабаны. Правила игры следующие:
1. Ставка увеличивается на 30% если итоговое число будет вида 123, 234, 345, 456, ..
2. Ставка увеличивается на 50% если итоговое число будет вида 111, 222, 333, 444, ..
3. Пользователь проигрывает, если на барабанах выпало то, чего нет в пунктах 1 и 2.
Пользователь проигрывает, когда на счету больше нет денег.

------------------------------------------------------------------

Я сидел и написал вроде бы как правильно! Использовав rand() для рандомного заполнения я столкнулся с проблемой чтоб выпало там ну 123 456 789 или 444 555 шанс практически минимален...

Потом я уже подумал, а ну ка я когда получу рандом я отсортирую ну если 564 то будет 456 и юзер выйграет... и даже так шанс выйграть был около 7-10%! А я хотел чтобы около 45%!

Сидел я думал-думал... И придумал а что если я создам переменную пускай и рандомно туда число запишу от 1 до 3! если 1 и 2 то человек выйграл если 3 то проиграл)
вообщем вот код этой моей идеи, он компилится все дела... но почему-то идут проблемы при работе ПО... вот пожалуйста( все внимание на int funk_2()

http://us.ua/41501/

Вот ссылка на .cpp файл! Текст превысил 5000 так что скачайте плз...

Люди добрые помогите ее решить! Я та на каникулах сижу но вот делаю лабы на которые забивал! Теперь за ум взялся и не успокоюсь пока не найду решение! ЗАранее спасибо
sekator вне форума Ответить с цитированием
Старый 30.07.2010, 06:54   #2
sekator
Заблокирован
 
Регистрация: 27.07.2010
Сообщений: 11
Вопрос

Код:
#include <iostream>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;

static float money = 0;
bool work = true;
bool work_baraban_main = true;
const int z = 2;
int mas[z];

void funk_1();
int funk_2();
int funk_3();
int funk_4();
int funk_5();
int funk_6();

template <typename T>

void quickSortR(T a[], int B, int E)
{
	
	long i = B, j = E; 		
	T temp, p;
	p = a[(B+E)/2];
	do{
		while ( a[i] < p ) i++;
		while ( a[j] > p ) j--;
		if (i <= j){
      		temp = a[i];
			a[i] = a[j];
			a[j] = temp;
      		i++;
			j--;
		}
	}while ( i<=j );
	if(B<j)quickSortR(a, B, j);
	if(i<E)quickSortR(a, i, E);
}

void main()
{
	setlocale(LC_ALL, "rus");
	system ("color 0a");
	int vibor_menu = 0;
	cout<<"\t\t\"Однорукий бандит!\"\n\n\t\tЖелаем удачной игры ;)\n";
	system("cls");
	while(work == true)
	{
		system("cls");
		work_baraban_main = true;
		cout<<"1. Игровые правила \n";
		cout<<"2. Крутить барабан \n";
		cout<<"3. Просмотр баланса \n";
		cout<<"4. Пополнить баланс \n";
		cout<<"5. Вывести баланс \n";
		cout<<"6. Выйти \n\n";
		cout<<"Введите номер нужного меню : ";
		cin>>vibor_menu;
		switch(vibor_menu)
		{
		case 1:
			{
				system("cls");
				funk_1();
				break;
			}
		case 2:
			{
				system("cls");
				funk_2();
				break;
			}
		case 3:
			{
				system("cls");
				funk_3();
				break;
			}
		case 4:
			{
				system("cls");
				funk_4();
				break;
			}
		case 5:
			{
				system("cls");
				funk_5();
				break;
			}
		case 6:
			{
				system("cls");
				funk_6();
				break;
			}
		}

	}
	cout<<"Спасибо за игру!\n";
	Sleep(1500);
}

void funk_1()
{
	system("cls");
	cout<<"Пользователь делает ставку и запускает барабаны. Правила игры следующие:\n\n1.Ставка увеличивается на 30% если итоговое число будет вида 123, 234, 345, ..\n\n2.Ставка увеличивается на 50% если итоговое число будет вида 111, 222, 333, ..\n\n3.Пользователь проигрывает, если на барабанах выпало то, чего нет в пунктах 1 и 2.\n\nПользователь проигрывает, когда на счету больше нет денег.\n\n";
	system ("pause");
}

int funk_2()
{
	while(work_baraban_main == true)
	{
		system("cls");
		if(money > 0)
		{
			int temp_stavka;
			int stavka;
			cout<<"Введите вашу ставку : ";
			cin>>temp_stavka;
			if(temp_stavka > 0 && temp_stavka < money && work_baraban_main == true)
			{
				stavka = temp_stavka;
				int z;
				srand(time(NULL));
				z = rand()%3;
				switch(z)
				{
				case 1:
					{
						int x,h,g;
						srand(time(NULL));
						x = rand()%10;
						int mas[2];
						x = x;
						h = x + 1;
						g = h + 1;
						mas[0] = x;
						mas[1] = h;
						mas[2] = g;
						cout<<mas[0]<<" "<<mas[1]<<" "<<mas[2]<<" \nВы выйграли! 30% От ставки!\n";
						int lol;
						lol = ((stavka/100)*30);
						money = money + lol;
						cout<<"На вашем счету : "<<money<<" USD!\n\n\n";
						int chouse;
						cout<<"Играть далее введите 1, выйти введите 2! Ваш выбор : ";
						cin>>chouse;
						if(chouse == 2)
							work_baraban_main == false;
						if(chouse == 1)
							work_baraban_main == true;
						
					}
				case 2:
					{
						int x;
						srand(time(NULL));
						x = rand()%10;
						mas[0] = x;
						mas[1] = x;
						mas[2] = x;
						cout<<mas[0]<<" "<<mas[1]<<" "<<mas[2]<<" \nВы выйграли! 50% От ставки!\n";
						money = (money + 0) + ((stavka/100)*50);
						cout<<"На вашем счету : "<<money<<" USD!\n\n\n";
						int chouse;
						cout<<"Играть далее введите 1, выйти введите 2! Ваш выбор : ";
						cin>>chouse;
						if(chouse == 2)
							work_baraban_main == false;
						if(chouse == 1)
							work_baraban_main == true;
					}
				case 3 && 0:
					{
						int x,h,g;
						srand(time(NULL));
						x = rand()%7;
						int mas[2];
						x = x;
						h = x + 3;
						g = h + 2;
						mas[0] = x;
						mas[1] = h;
						mas[2] = g;
						cout<<mas[0]<<" "<<mas[1]<<" "<<mas[2]<<" \nВы проиграли!\n";
						money = (money + 0) - stavka;
						cout<<"На вашем счету : "<<money<<" USD!\n\n\n";
						int chouse;
						cout<<"Играть далее введите 1, выйти введите 2! Ваш выбор : ";
						cin>>chouse;
						if(chouse == 2)
							work_baraban_main == false;
						if(chouse == 1)
							work_baraban_main == true;


					}
				}
			
			}
			else
			{
				cout<<"Недостаточно средств на счету, выберите ставку меньше чем : "<<money<<"USD \n\n";
				system("pause");
				work_baraban_main = false;
			}
			system("pause");
		}
		else
		{
			cout<<"На Вашем счету недостаточно средст, пополните ваш счет...\n\n";
			system("pause");
			work_baraban_main = false;
		}
	}
	return 0;
}


}
int func 3 + я вырезал) они работают нормально вот func_2 проблемко
sekator вне форума Ответить с цитированием
Старый 30.07.2010, 07:29   #3
sekator
Заблокирован
 
Регистрация: 27.07.2010
Сообщений: 11
Вопрос

Вот я еще подкорректировал... Осталась проблема та что после того как поиграешь раз так 5 в среднем переменная денег обнуляется и записуется например было 10.000 выйграл пускай 100! Бац и переменная не 10.100 а тупо 100 (((

и ругается на нижнею кавычку иногда обишка break и все .. хотя и компилится и работает краткое время! Не пойму в чем проблема...

Код:
int funk_2()
{
	while(work_baraban_main == true)
	{
		system("cls");
		if(money > 0)
		{
			float temp_stavka;
			float stavka;
			cout<<"Введите вашу ставку : ";
			cin>>temp_stavka;
			if(temp_stavka > 0 && temp_stavka < money && work_baraban_main == true)
			{
				stavka = temp_stavka;
				int z;
				srand(time(NULL));
				z = rand()%3;
				switch(z)
				{
				case 1:
					{
						int x,h,g;
						srand(time(NULL));
						x = rand()%10;
						int mas[2];
						x = x;
						h = x + 1;
						g = h + 1;
						mas[0] = x;
						mas[1] = h;
						mas[2] = g;
						cout<<mas[0]<<" "<<mas[1]<<" "<<mas[2]<<" \nВы выйграли! 30% От ставки!\n";
						float lol;
						lol = ((stavka/100)*30);
						money = money + lol;
						cout<<"На вашем счету : "<<money<<" USD!\n\n\n";
						int chouse;
						cout<<"Играть далее введите 1, выйти введите 2! Ваш выбор : ";
						cin>>chouse;
						if(chouse == 2)
							work_baraban_main = false;
						if(chouse == 1)
							work_baraban_main = true;
						break;
						
					}
				case 2:
					{
						int x;
						srand(time(NULL));
						x = rand()%10;
						mas[0] = x;
						mas[1] = x;
						mas[2] = x;
						cout<<mas[0]<<" "<<mas[1]<<" "<<mas[2]<<" \nВы выйграли! 50% От ставки!\n";
						float lol;
						lol = ((stavka/100)*50);
						money = money + lol;
						cout<<"На вашем счету : "<<money<<" USD!\n\n\n";
						int chouse;
						cout<<"Играть далее введите 1, выйти введите 2! Ваш выбор : ";
						cin>>chouse;
						if(chouse == 2)
							work_baraban_main = false;
						if(chouse == 1)
							work_baraban_main = true;
						break;
					}
				case 3 && 0:
					{
						int x,h,g;
						srand(time(NULL));
						x = rand()%7;
						int mas[2];
						x = x;
						h = x + 3;
						g = h + 2;
						mas[0] = x;
						mas[1] = h;
						mas[2] = g;
						cout<<mas[0]<<" "<<mas[1]<<" "<<mas[2]<<" \nВы проиграли!\n";
						money = money - stavka;
						cout<<"На вашем счету : "<<money<<" USD!\n\n\n";
						int chouse;
						cout<<"Играть далее введите 1, выйти введите 2! Ваш выбор : ";
						cin>>chouse;
						if(chouse == 2)
							work_baraban_main = false;
						if(chouse == 1)
							work_baraban_main = true;
						break;


					}
				}
			
			}
			else
			{
				cout<<"Недостаточно средств на счету, выберите ставку меньше чем : "<<money<<"USD \n\n";
				system("pause");
				work_baraban_main = false;
			}
		}
		else
		{
			cout<<"На Вашем счету недостаточно средст, пополните ваш счет...\n\n";
			system("pause");
			work_baraban_main = false;
		}
	}
	return 0;
}
sekator вне форума Ответить с цитированием
Старый 30.07.2010, 08:40   #4
sekator
Заблокирован
 
Регистрация: 27.07.2010
Сообщений: 11
Счастье

Сам сказал сам ответил... Вопрос решен... Темка закрыта
sekator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Игра "четный" "нечетный" bigcat Помощь студентам 1 01.03.2008 00:24