Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<array>
- #include<ctime>
- #include"Cin_check.h"
- // для удобства///
- using std::cout;
- using std::endl;
- using std::cin;
- /////////////////
- ///////////// Глобальные переменные что бы не набивать и так не маленькие параметры функций
- static int g_count_diller = 0;
- static int g_count_player = 0;
- static int g_maney_diller = 100;
- static int g_maney_player = 100;
- static int g_reset = 0;
- ///////////////////////////////////////////////////////////////////////////////////////////
- enum Value_of_cards // достоинства карт
- {
- CARD, // 1
- CARD_TWO, // 2
- CARD_THREE, // 3
- CARD_FOUR, // 4
- CARD_FIVE, // 5
- CARD_SIX, // 6
- CARD_SEVEN, // 7
- CARD_EIGHT, // 8
- CARD_NINE, // 9
- CARD_TEN, // 10
- CARD_JACK, // 11
- CARD_QUEEN, // 12
- CARD_KING, // 13
- CARD_ACE, // 14
- CARD_LENGHT, // 15
- };
- enum Suit_of_cards // масть карт
- {
- PEAK, // 1
- CROSS, // 2
- DIAMOND, // 3
- HEART, // 4
- SUIT_LENGHT, // 5
- };
- struct Card // структура параметром которой стоит перечисление
- {
- Value_of_cards rank;
- Suit_of_cards suit;
- };
- int Random();
- void printHend(std::array<Card, 10>& arr);
- int getCardValue(const Card& card);
- void Gamestart(std::array<Card, 52>& deck, std::array<Card, 10>& player_arr, std::array<Card, 10>& diller_arr, int& player_score, int& diller_score, int& random);
- void swapCard(Card& card_a, Card& card_b);
- void shuffleDeck(std::array<Card, 52>& deck);
- void printDeck(const std::array<Card, 52>& deck);
- void printCard(const Card& card);
- void getCardPlayer(std::array<Card, 52>& deck, std::array<Card, 10>& player_arr, int& player_score, int& random);
- void getCardDiller(std::array<Card, 52>& deck, std::array<Card, 10>& diller_arr, int& diller_score, int& random);
- void gameLogick(int& diller_score, int& player_score, std::array<Card, 10>& diller_arr, std::array<Card, 10>& player_arr);
- // возвращает значение полученных карт
- int getCardValue(const Card& card)
- {
- switch (card.rank)
- {
- case CARD_TWO: return 2;
- case CARD_THREE: return 3;
- case CARD_FOUR: return 4;
- case CARD_FIVE: return 5;
- case CARD_SIX: return 6;
- case CARD_SEVEN: return 7;
- case CARD_EIGHT: return 8;
- case CARD_NINE: return 9;
- case CARD_TEN: return 10;
- case CARD_JACK: return 10;
- case CARD_QUEEN: return 10;
- case CARD_KING: return 10;
- case CARD_ACE: return 11;
- }
- return 0;
- }
- // показывает какие карты в руке
- void printHend(std::array<Card,10> &arr)
- {
- for (int i = 0; arr[i].rank != '\0'; i++) // выполнять до того как не найдет в массиве нуль терминатор
- {
- printCard(arr[i]);
- cout<< " ,";
- }
- cout << '\b'; //Cursor moves 1 position backwards
- cout << " "; //Overwrites letter 'i' with space
- // что бы убрать последнюю запятую
- }
- // показывает что за карта в массиве
- void printCard(const Card& card)
- {
- switch (card.rank)
- {
- case CARD_TWO: std::cout << "2"; break;
- case CARD_THREE: std::cout << "3"; break;
- case CARD_FOUR: std::cout << "4"; break;
- case CARD_FIVE: std::cout << "5"; break;
- case CARD_SIX: std::cout << "6"; break;
- case CARD_SEVEN: std::cout << "7"; break;
- case CARD_EIGHT: std::cout << "8"; break;
- case CARD_NINE: std::cout << "9"; break;
- case CARD_TEN: std::cout << "10"; break;
- case CARD_JACK: std::cout << "Валет"; break;
- case CARD_QUEEN: std::cout << "Дама"; break;
- case CARD_KING: std::cout << "Король"; break;
- case CARD_ACE: std::cout << "Туз"; break;
- }
- switch (card.suit)
- {
- case PEAK: std::cout << " Пик"; break;
- case CROSS: std::cout << " Крест"; break;
- case DIAMOND: std::cout << " Бубей"; break;
- case HEART: std::cout << " Черв"; break;
- }
- //std::cout<<std::endl;
- }
- // вывод всех карт
- void printDeck(const std::array<Card, 52>& deck)
- {
- for (const auto& number : deck)
- {
- printCard(number);
- }
- }
- // перемешивание всех карт
- void shuffleDeck( std::array<Card, 52>& deck)
- {
- for (int i = 0; i < 150; i++)
- {
- int r1 = 0 + rand() % (52 - 0), r2 = 0 + rand() % (52 - 0);
- swapCard(deck[r1], deck[r2]);
- }
- }
- // перемещение 2 карт
- void swapCard(Card& card_a, Card& card_b)
- {
- std::swap(card_a, card_b);
- }
- // старт игры(раздачи) игрокам выдаются начальные карты и мешается колода
- void Gamestart(std::array<Card, 52>& deck,std::array<Card,10> &player_arr, std::array<Card,10> &diller_arr, int &player_score, int & diller_score,int &random)
- {
- shuffleDeck(deck);
- random = 0 + rand() % (42 - 0);
- diller_arr[g_count_diller] = deck[random];
- diller_score += getCardValue(deck[random]);
- random++;
- player_arr[g_count_player] = deck[random];
- player_score += getCardValue(deck[random]);
- random++;
- g_count_player++;
- player_arr[g_count_player] = deck[random];
- player_score += getCardValue(deck[random]);
- }
- // игрок хочет взять еще 1 карту
- void getCardPlayer(std::array<Card, 52>& deck, std::array<Card, 10>& player_arr, int& player_score, int& random)
- {
- random++;
- g_count_player++;
- player_arr[g_count_player] = deck[random];
- player_score += getCardValue(deck[random]);
- }
- // дилер хочет взять еще 1 карту
- void getCardDiller(std::array<Card, 52>& deck, std::array<Card, 10>& diller_arr, int& diller_score, int& random)
- {
- random++;
- g_count_diller++;
- diller_arr[g_count_diller] = deck[random];
- diller_score += getCardValue(deck[random]);
- }
- //сравнение результатов и завершение раунда
- void gameLogick(int& diller_score, int& player_score, std::array<Card, 10>& diller_arr, std::array<Card, 10>& player_arr)
- {
- system("cls<NUL");
- if (diller_score > 21)
- {
- cout<< "############################ Black Jack ############################" << endl
- << "### " << "Ваши деньги " << g_maney_player; cout << " ######################### " << "Деньги диллера " << g_maney_diller; cout << " ###" << endl
- << "####################################################################" << endl
- << endl
- << endl
- << "Карты дилера - "; printHend(diller_arr); cout << "= " << diller_score << " очков" << endl
- << endl
- << endl
- << "Ваши карты - "; printHend(player_arr); cout << "= " << player_score << " очков" << endl
- << endl
- << endl;
- cout << "Карты дилера превысили 21 очко,он проиграл раунд" << endl;
- g_maney_diller -= 10;
- system("pause");
- system("cls<NUL");
- }
- else if (player_score > 21)
- {
- cout << "############################ Black Jack ############################" << endl
- << "### " << "Ваши деньги " << g_maney_player; cout << " ######################### " << "Деньги диллера " << g_maney_diller; cout << " ###" << endl
- << "####################################################################" << endl
- << endl
- << endl
- << "Карты дилера - "; printHend(diller_arr); cout << "= " << diller_score << " очков" << endl
- << endl
- << endl
- << "Ваши карты - "; printHend(player_arr); cout << "= " << player_score << " очков" << endl
- << endl
- << endl;
- cout << "Ваши карты превысили 21 очко,вы проиграли раунд" << endl;
- g_maney_player -= 10;
- system("pause");
- system("cls<NUL");
- }
- else if (player_score > diller_score)
- {
- cout << "############################ Black Jack ############################" << endl
- << "### " << "Ваши деньги " << g_maney_player; cout << " ######################### " << "Деньги диллера " << g_maney_diller; cout << " ###" << endl
- << "####################################################################" << endl
- << endl
- << endl
- << "Карты дилера - "; printHend(diller_arr); cout << "= " << diller_score << " очков" << endl
- << endl
- << endl
- << "Ваши карты - "; printHend(player_arr); cout << "= " << player_score << " очков" << endl
- << endl
- << endl;
- cout << "Сумма ваших очков выше чем у дилера,вы выиграли раунд!" << endl;
- g_maney_diller -= 10;
- system("pause");
- system("cls<NUL");
- }
- else if (player_score < diller_score)
- {
- cout << "############################ Black Jack ############################" << endl
- << "### " << "Ваши деньги " << g_maney_player; cout << " ######################### " << "Деньги диллера " << g_maney_diller; cout << " ###" << endl
- << "####################################################################" << endl
- << endl
- << endl
- << "Карты дилера - "; printHend(diller_arr); cout << "= " << diller_score << " очков" << endl
- << endl
- << endl
- << "Ваши карты - "; printHend(player_arr); cout << "= " << player_score << " очков" << endl
- << endl
- << endl;
- cout << "Сумма очков дилера выше чем ваша,вы проиграли раунд!" << endl;
- g_maney_player -= 10;
- system("pause");
- system("cls<NUL");
- }
- else if (player_score == diller_score)
- {
- cout << "############################ Black Jack ############################" << endl
- << "### " << "Ваши деньги " << g_maney_player; cout << " ######################### " << "Деньги диллера " << g_maney_diller; cout << " ###" << endl
- << "####################################################################" << endl
- << endl
- << endl
- << "Карты дилера - "; printHend(diller_arr); cout << "= " << diller_score << " очков" << endl
- << endl
- << endl
- << "Ваши карты - "; printHend(player_arr); cout << "= " << player_score << " очков" << endl
- << endl
- << endl;
- cout << "Очки дилера и ваши равны,ничья!Следующий рануд!" << endl;
- system("pause");
- system("cls<NUL");
- }
- g_reset++;
- }
- int main()
- {
- bool while_lock = true; // переменная для выхода из игры
- srand(Random()); // Сранд с параметром в виде вихря Марсена
- setlocale(0, ""); // рус язык
- /////////////////////////////////// Заполнение массива структурным значением из перечисления
- std::array<Card,52> deck;
- int card = 0;
- for (int suit = 0; suit < SUIT_LENGHT; ++suit)
- for (int rank = 1; rank < CARD_LENGHT; ++rank)
- {
- deck[card].suit = static_cast<Suit_of_cards>(suit);
- deck[card].rank = static_cast<Value_of_cards>(rank);
- ++card;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////
- while (while_lock) ///Цикл глав меню
- {
- system("cls<NUL");
- int menu_value = 0; //глав меню
- int game_menu_value = 0; // меню в игре
- int diller_score = 0; // очки дилера
- std::array <Card,10> diller_hend {}; // то что в руке у дилера
- int player_score = 0; // очки игрока
- std::array <Card, 10> player_hend{}; // то что в руке у игрока
- bool game = true; // продолжение игры
- int random_card = 0; // для того что бы карты не повторялись
- g_maney_diller = 100; // Востановление глоб. переменной для рестарта игры
- g_maney_player = 100; //Востановление глоб. переменной для рестарта игры
- std::cout << "\t\t\tВас приветствует игра Black Jack!" << endl
- << "1) Начать Игру" << endl
- << "2) Прочитать правила игры" << endl
- << "3) Выход" << endl;
- cin >> menu_value;
- Proverka(menu_value);// проверка корректности ввода
- switch (menu_value) // меню
- {
- case 1:
- Gamestart(deck, player_hend, diller_hend, player_score, diller_score, random_card);
- while (game)
- {
- system("cls<NUL");
- ////////////////////////////////////Проверка денег игроков/////
- if (g_maney_diller == 0)
- {
- cout << "Поздравляем!!! Вы разорили диллера!" << endl<<endl;
- system("pause");
- break;
- }
- else if(g_maney_player == 0)
- {
- cout << "Увы диллер переиграл вас..." << endl << endl;
- system("pause");
- break;
- }
- ///////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////Графика игры///////////////////
- cout<< "############################ Black Jack ############################" << endl
- << "### "<<"Ваши деньги "<< g_maney_player; cout << " ######################### "<<"Деньги диллера "<< g_maney_diller; cout << " ###" << endl
- << "####################################################################" << endl
- << endl
- << endl
- << "Карты диллера - "; printHend(diller_hend); cout << "= " << diller_score << " очков" << endl
- << endl
- << endl
- << "Ваши карты - "; printHend(player_hend); cout << "= " << player_score << " очков" << endl
- << endl
- << endl;
- cout<< endl
- << "1)Взять карту" << endl
- << "2)Хватит " << endl
- << "9)Выйти в меню" << endl
- << endl;
- cin >> game_menu_value;
- Proverka(game_menu_value);// проверка корректности ввода
- /////////////////////////////////////////////////////////////////////////////////////////////////////
- switch (game_menu_value) // выбор действий в игре
- {
- case 1: // игрок берет карту и проверяется есть ли перебор
- getCardPlayer(deck, player_hend, player_score, random_card);
- if (player_score > 21)
- {
- gameLogick(diller_score, player_score, diller_hend, player_hend);
- shuffleDeck(deck);
- }
- break;
- case 2: // диллер берет карты после чего идет сравнение кто победил в раунде
- while (true)
- {
- if (diller_score > 17)
- {
- break;
- }
- getCardDiller(deck, diller_hend, diller_score, random_card);
- }
- gameLogick(diller_score, player_score, diller_hend, player_hend);
- shuffleDeck(deck);
- break;
- case 9: // выход в глав меню
- game = false;
- break;
- default:
- break;
- }
- if (g_reset) // Ресет для того что бы повторно начать игру
- {
- menu_value = 0;
- game_menu_value = 0;
- diller_score = 0;
- diller_hend = {};
- player_score = 0;
- player_hend = {};
- game = true;
- random_card = 0;
- g_count_diller = 0;
- g_count_player = 0;
- Gamestart(deck, player_hend, diller_hend, player_score, diller_score, random_card);
- g_reset--;
- }
- }
- break; // выход 1 кейса
- case 2: // правила игры
- system("cls<NUL");
- cout << "Цель игры" << endl
- << "Главная цель игры в блэк джек - победа над дилером."<<endl
- << "Если сумма ваших очков больше, чем сумма очков крупье то вы выигрываете сдачу." << endl
- << "Лучшей комбинацией при игре в блэк джек считается та, которая оценивается 21. " << endl
- << "Если же на руках игрока более 21 очка, то он автоматически проигрывает раздачу. " << endl
- << endl
- << "Значение карт " << endl
- << endl
- << "Карты в блэк джеке оцениваются в соответствии с номиналом.Туз 11 очков, " << endl
- << "а валет, дама и король - 10 очков.Остальные карты оцениваются от 2 до 9. " << endl<<endl;
- system("pause");
- break;// выход 2 кейса
- case 3: // выход из игры
- while_lock = false;
- break;
- default:
- break;// выход 3 кейса
- }
- }
- system("cls<NUL");
- cout << "Cпасибо за игру всего доброго!" << endl;
- system("pause");
- return 1;
- }
Add Comment
Please, Sign In to add comment