Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <clocale>
- #include <string>
- #include <ctime>
- #include <conio.h>
- #include <windows.h>
- using namespace std;
- class Profile {
- public:
- string Name = "Бен Броуд";
- string Class = "Не выбран";
- int Basics = 0;
- int Commons = 0;
- int Rares = 0;
- int Epics = 0;
- int Legendaries = 0;
- void setName(string NameInput) {
- Name = NameInput;
- }
- void setClass(string ClassInput) {
- Class = ClassInput;
- }
- void setRarities(int BasicsInput, int CommonsInput, int RaresInput, int EpicsInput, int LegendariesInput) {
- Basics = BasicsInput;
- Commons = CommonsInput;
- Rares = RaresInput;
- Epics = EpicsInput;
- Legendaries = LegendariesInput;
- }
- void getName() {
- cout << "Имя:" << Name << endl;
- }
- void getClass() {
- cout << "Класс:" << Class << endl;
- }
- };
- class Card {
- public:
- int Rarity = -1;
- int Page = 0;
- int Position = 0;
- void setRarity(int RarityInput) {
- Rarity = RarityInput;
- }
- void setCard(int PageInput, int PositionInput) {
- Page = PageInput;
- Position = PositionInput;
- }
- void getCard() {
- cout << "Страница " << Page + 1 << ", " << Position + 1 << "-ая карта" << endl;
- }
- };
- void Localize();
- void Random();
- void ClearScreen();
- void StartScreen();
- void Menu();
- void InitializeDraftClasses();
- void ShowDraftClasses(string[]);
- string GenerateDraftClasses(int, string[]);
- string ChooseClass(string[]);
- void SetRarities();
- void BuildDeck();
- void GenerateCard(int, int);
- void ShowDeckbyCard();
- void ShowEntireDeck();
- //!!!УБРАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ!!!
- string AllClasses[] = { "Воин", "Шаман", "Разбойник", "Паладин", "Охотник", "Друид", "Чернокнижник", "Маг", "Жрец" };
- string AllRarities[] = { "Базовая", "Обычная", "Редкая", "Эпическая", "Легендарная" };
- Profile Player;
- Card Deck[30];
- Card SortedDeck[30];
- void Localize() {
- setlocale(LC_CTYPE, "rus");
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- }
- void Random() {
- srand(time(NULL));
- }
- void ClearScreen() {
- COORD topLeft = { 0, 0 };
- HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
- CONSOLE_SCREEN_BUFFER_INFO screen;
- DWORD written;
- GetConsoleScreenBufferInfo(console, &screen);
- FillConsoleOutputCharacterA(
- console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
- );
- FillConsoleOutputAttribute(
- console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
- screen.dwSize.X * screen.dwSize.Y, topLeft, &written
- );
- SetConsoleCursorPosition(console, topLeft);
- /*-----------*/
- Player.getName();
- Player.getClass();
- cout << endl;
- }
- void StartScreen() {
- //Предупреждене о Lucida Console
- cout << "\t\t Дружественная арена Hearthstone" << endl;
- cout << "\n\n\n\t\t\tНажмите любую кнопку" << endl;
- cout << "\n\n\n\n\n\t\tEsli tekst otobrazahetsya nekorrektno, \n\tviberite shrift ''Lucida Console'' v nastroykah konsoli" << endl;
- _getch();
- Menu();
- }
- void Menu() {
- int Input = 0;
- string Name;
- do {
- ClearScreen();
- cout << "\t\t Дружественная арена Hearthstone" << endl;
- cout << "\n\t\t\t1. Начать новую арену" << endl;
- cout << "\n\t\t 2. Правила дружеской арены" << endl;
- cout << "\n\t\t\t 3. Выход" << endl;
- Input = ((int)_getch()) - 48;
- } while (Input != 1 && Input != 2 && Input != 3);
- switch (Input) {
- case 1:
- ClearScreen();
- cout << "Введите имя:" << endl;
- cin >> Name;
- Player.setName(Name);
- ClearScreen();
- break;
- case 2:
- ClearScreen();
- cout << "\t\t\t Смысл дружеской арены" << endl;
- cout << "\n Зачастую игроки Hearthstone не могут комфортно играть дуэли " << endl;
- cout << " друг между другом, сталкиваясь с проблемой разницы в наборе" << endl;
- cout << " карт и колод. Также в игре существует режим ''Арена'', уравнивающий" << endl;
- cout << " опытных игроков и новичков, однако он недоступен для дружеской" << endl;
- cout << " дуэли. Эта небольшая утилита призвана решить эту проблему." << endl;
- cout << "\n\t\t\t Как играть" << endl;
- cout << "\n Игрок вводит своё имя, выбирает один из предложенных ему трёх" << endl;
- cout << " классов. Выбрав класс, игрок должен открыть свою коллекцию" << endl;
- cout << " в Hearthstone и создать пустую колоду выбранного класса." << endl;
- cout << " Далее игрок, выбирая при помощи внутриигровых фильтров поиска " << endl;
- cout << " карты определённой редкости, вводит номер последней страницы " << endl;
- cout << " коллекции при включенном фильтре той или иной редкости. После" << endl;
- cout << " этого утилита по очереди показывает игроку редкость, страницу " << endl;
- cout << " и положение на странице очередной карты, а игрок находит " << endl;
- cout << " соответствующую карту в коллекции и добавляет её в свою колоду." << endl;
- cout << " В случае невозможности добавить предложенную карту утилита" << endl;
- cout << " предусматривает перевыбор случайной карты. После добавления" << endl;
- cout << " тридцатой карты игроку для удобства показывается вся колода целиком." << endl;
- cout << "\n\t Нажмите любую кнопку, чтобы вернуться в меню" << endl;
- _getch();
- Menu();
- break;
- case 3:
- exit (0);
- break;
- }
- }
- void InitializeDraftClasses() {
- string DraftClasses[] = { "NULL", "NULL", "NULL" };
- for (int i = 0; i < 3; i++) { //Генерируем три класса для драфта
- DraftClasses[i] = GenerateDraftClasses(i, DraftClasses);
- }
- Player.setClass(ChooseClass(DraftClasses)); //Запоминаем класс игрока
- ClearScreen();
- }
- void ShowDraftClasses(string DraftClasses[]) {
- cout << "Выберите номер класса:" << endl;
- for (int i = 0; i < 3; i++) { //Выводим на экран три класса
- cout << i + 1 << "." << DraftClasses[i] << endl;
- }
- }
- string GenerateDraftClasses(int i, string DraftClasses[]) {
- string GeneratedClass = AllClasses[0 + rand() % 9];
- switch (i) {
- case 0: //Первый класс - выбираем случайный класс
- return (GeneratedClass);
- break;
- case 1: //Второй класс - сравниваем с первым на несовпадение, иначе перезапускаем
- while (GeneratedClass == DraftClasses[i-1]) {
- return GenerateDraftClasses(i, DraftClasses);
- }
- return (GeneratedClass);
- break;
- case 2: //Третий класс - сравниваем с первым и вторым на несовпадение, иначе перезапускаем
- while (GeneratedClass == DraftClasses[i - 1] || GeneratedClass == DraftClasses[i - 2]) {
- return GenerateDraftClasses(i, DraftClasses);
- }
- return (GeneratedClass);
- break;
- }
- }
- string ChooseClass(string DraftClasses[]) {
- ShowDraftClasses(DraftClasses);
- char ClassInput = _getch();
- switch ((int)ClassInput - 48) {
- case 1:
- return DraftClasses[((int)ClassInput - 48) - 1];
- break;
- case 2:
- return DraftClasses[((int)ClassInput - 48) - 1];
- break;
- case 3:
- return DraftClasses[((int)ClassInput - 48) - 1];
- break;
- default:
- ClearScreen();
- cout << "Неверный ввод. Попробуйте ещё раз" << endl;
- return ChooseClass(DraftClasses);
- break;
- }
- }
- void SetRarities() { //!!!ДОБАВИТЬ ПЕРЕГРУЖЕННУЮ ФУНКЦИЮ ДЛЯ ПРОВЕРКИ ВВЕДЕННЫХ ДАННЫХ!!!
- int BasicsInput = 0, CommonsInput = 0, RaresInput = 0, EpicsInput = 0, LegendariesInput = 0;
- for (int i = 0; i < 5; i++) {
- switch (i) {
- case 0:
- cout << "Введите кол-во страниц базовых карт" << endl;
- cin >> BasicsInput;
- break;
- case 1:
- cout << "Введите кол-во страниц обычных карт" << endl;
- cin >> CommonsInput;
- break;
- case 2:
- cout << "Введите кол-во страниц редких карт" << endl;
- cin >> RaresInput;
- break;
- case 3:
- cout << "Введите кол-во страниц эпических карт" << endl;
- cin >> EpicsInput;
- break;
- case 4:
- cout << "Введите кол-во страниц легендарных карт" << endl;
- cin >> LegendariesInput;
- break;
- }
- }
- Player.setRarities(BasicsInput, CommonsInput, RaresInput, EpicsInput, LegendariesInput);
- ClearScreen();
- }
- void BuildDeck() {
- int CardNumber, Chance;
- for (CardNumber = 0; CardNumber < 30; CardNumber++) {
- //!!!СДЕЛАТЬ ПРОГРЕСС БАР!!!
- cout << "Генерируем колоду..." << ((CardNumber + 4) * 3) << "/100" << endl;
- Chance = 0 + rand() % 100;
- if (Chance < 15) { //Базовые
- Deck[CardNumber].setRarity(0);
- GenerateCard(Player.Basics, CardNumber);
- }
- else if (Chance >= 15 && Chance < 45) { //Обычные
- Deck[CardNumber].setRarity(1);
- GenerateCard(Player.Commons, CardNumber);
- }
- else if (Chance >= 45 && Chance < 85) { //Редкие
- Deck[CardNumber].setRarity(2);
- GenerateCard(Player.Rares, CardNumber);
- }
- else if (Chance >= 85 && Chance < 95) { //Эпические
- Deck[CardNumber].setRarity(3);
- GenerateCard(Player.Epics, CardNumber);
- }
- else if (Chance >= 95 && Chance < 100) { //Легендарные
- Deck[CardNumber].setRarity(4);
- GenerateCard(Player.Legendaries, CardNumber);
- }
- }
- ClearScreen();
- }
- void GenerateCard(int Pages, int CardNumber) {
- int Page = 0 + rand() % Pages;
- int Position = 0 + rand() % 8;
- Deck[CardNumber].setCard(Page, Position);
- }
- void ShowDeckbyCard() {
- int RarityFilter = 4; //Фильтрует карты по убыванию редкости
- int CardNumber = 0; //Счетчик карт отфильтрованной колоды
- while (RarityFilter >= 0) {
- for (int i = 0; i < 30; i++) {
- if (Deck[i].Rarity == RarityFilter) {
- cout << CardNumber + 1 << "/30" << endl;
- cout << AllRarities[Deck[i].Rarity] << endl;
- Deck[i].getCard();
- //!!!ОБРАБОТКА ОТСУТСТВИЯ КАРТЫ!!!
- SortedDeck[CardNumber].setCard(Deck[i].Page, Deck[i].Position);
- SortedDeck[CardNumber].setRarity(Deck[i].Rarity);
- CardNumber++;
- cout << "Нажмите любую кнопку";
- _getch();
- }
- ClearScreen();
- }
- RarityFilter--; //Все карты отфильтрованы, переходим к следующей редкости
- }
- }
- void ShowEntireDeck() {
- ClearScreen();
- cout << "Номер \t Редкость \t Страница Карта" << endl;
- cout << "------------------------------------------" << endl;
- for (int CardNumber = 0; CardNumber < 30; CardNumber++) {
- if (SortedDeck[CardNumber].Rarity == 2) {
- cout << CardNumber + 1 << "\t " << AllRarities[SortedDeck[CardNumber].Rarity] << "\t\t " << SortedDeck[CardNumber].Page + 1 << "\t\t" << SortedDeck[CardNumber].Position + 1 << endl;
- cout << "------------------------------------------" << endl;
- }
- else {
- cout << CardNumber + 1 << "\t " << AllRarities[SortedDeck[CardNumber].Rarity] << "\t " << SortedDeck[CardNumber].Page + 1<< "\t\t" << SortedDeck[CardNumber].Position + 1 << endl;
- cout << "------------------------------------------" << endl;
- }
- }
- cout << "Приятной игры!" << endl;
- }
- int main() {
- Localize();
- Random();
- StartScreen();
- InitializeDraftClasses();
- SetRarities();
- BuildDeck();
- ShowDeckbyCard();
- ShowEntireDeck();
- /*---------------*/
- cout << "Конец выполнения" << endl;
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment