Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.12.2019
Сообщений: 2

Пьяница в с++

01.12.2019, 21:10. Показов 646. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток, нашёл на просторах киберфорума такой интересный код для игры пьяница, в котором существую правила игры, и в котором все делается автоматически. Прошу о такой вещи как, можно ли после игры вывести сам процесс игры, т.е ходы, и как вообще проходила игра. Спасибо за внимание!


#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iterator>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef int T_card_value;
typedef std::vector<T_card_value> T_card_deck;
/////////////////////////////////////////////////////////////////////////////////////////
enum T_game_result
{
FIRST_IS_DRUNKARD,
SECOND_IS_DRUNKARD,
BOTH_ARE_BITTER_DRUNKARDS
};
/////////////////////////////////////////////////////////////////////////////////////////
void make_rand_hands
(
T_card_deck & deck,
T_card_deck & hand_first,
T_card_deck & hand_second
)
{
std::random_shuffle
(
deck.begin (),
deck.end ()
);

auto deck_half_it = deck.begin() + deck.size() / 2;

std::copy
(
deck.begin (),
deck_half_it,
std::back_inserter ( hand_first )
);

std::copy
(
deck_half_it,
deck.end (),
std::back_inserter ( hand_second )
);
}
/////////////////////////////////////////////////////////////////////////////////////////
void print_hand( T_card_deck const & hand )
{
std::copy
(
hand.begin (),
hand.end (),
std::ostream_iterator< T_card_value > ( std::cout, "\t" )
);
}
/////////////////////////////////////////////////////////////////////////////////////////
bool card_is_higher_than
(
T_card_value A,
T_card_value B
)
{
return A == 0 && B == 9
|| A > B;
}
/////////////////////////////////////////////////////////////////////////////////////////
void transform_hand_of_winner_and_other
(
T_card_deck & hand_of_winner,
T_card_deck & hand_other
)
{
std::rotate
(
hand_of_winner.begin (),
hand_of_winner.begin () + 1,
hand_of_winner.end ()
);

hand_of_winner.push_back
(
hand_other.front()
);

hand_other.erase
(
hand_other.begin()
);
}
/////////////////////////////////////////////////////////////////////////////////////////
void play_with_hands_and_set_result_and_turns _counter
(
T_card_deck & hand_first,
T_card_deck & hand_second,
T_game_result & game_result,
int & turns_counter
)
{
static const int TURNS_TOTAL_MAX = 106;

for( int i = 0; i < TURNS_TOTAL_MAX; ++i )
{
card_is_higher_than
(
hand_first .front(),
hand_second .front()
)
? transform_hand_of_winner_and_other
(
hand_first,
hand_second
)

: transform_hand_of_winner_and_other
(
hand_second,
hand_first
);

if (
hand_first .empty()
|| hand_second .empty()
)
{
game_result = hand_first.empty()
? FIRST_IS_DRUNKARD
: SECOND_IS_DRUNKARD;

turns_counter = i + 1;
return;
}//if
}//for

game_result = BOTH_ARE_BITTER_DRUNKARDS;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
std::locale::global(std::locale(""));
const int card_values[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
srand(unsigned(time(0)));
T_card_deck deck;

std::copy
(
card_values,
card_values + sizeof( card_values ) / sizeof( card_values[0] ),
std::back_inserter( deck )
);

T_card_deck hand_first;
T_card_deck hand_second;

make_rand_hands
(
deck,
hand_first,
hand_second
);

std::cout << "Карты первого игрока:"
<< std::endl;
print_hand( hand_first );

std::cout << std::endl
<< std::endl
<< "Карты второго игрока:"
<< std::endl;
print_hand( hand_second );

T_game_result game_result = T_game_result();
int turns_counter = 0;

play_with_hands_and_set_result_and_turns _counter
(
hand_first,
hand_second,
game_result,
turns_counter
);

std::cout << std::endl
<< std::endl;

if( game_result == BOTH_ARE_BITTER_DRUNKARDS )
{
std::cout << "Оба горькие пьяницы.";
}
else
{
std::cout << (
game_result == FIRST_IS_DRUNKARD
? "Первый"
: "Второй"
)

<< " игрок остался пьяницей за "
<< turns_counter
<< " ходов.";
}//else

std::cout << std::endl;
system("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2019, 21:10
Ответы с готовыми решениями:

Написать программу, моделирующую карточную игру "Пьяница" и определяющую, кто из двух игроков выигрывает
помогите. Я не могу понять. Пжлст. С++ Игорь с Артуром играют в &quot;Пьяницу&quot;. Это такая карточная игра, правила которой описаны ниже. В...

Смоделировать карточную игру "Пьяница"
В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше,...

Реализация карточной игры "Пьяница"
Здравствуйте, у меня возникло 2 проблемы, 1) как в textbox вывести столбик цифр 2) как сделать так, чтобы при нажатии на кнопку у меня...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2019, 21:10
Помогаю со студенческими работами здесь

Отрисовка карт в игре "Пьяница"
Здравствуйте, есть код для игры &quot;Пьяница&quot; в консольном виде, нужно сделать из него WPF-приложение, а конкретно отображать карты. Каким...

Карточная игра "Пьяница"
Выручайте, надо написать Игру Пьяница, очень надо, на любом языке, в интернете находил, но не одна не работает!!!

Игра "Пьяница"
Здравствуйте, нам поставили задачу создать игру &quot;Пьяница&quot; как консольное приложение, часть кода мы с ребятами набросали, а вот что дальше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru