С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 5
Регистрация: 30.08.2012
Сообщений: 155
1

Если карты равны, сравнивать следующие 2 (игра Пьяницы)

24.05.2015, 13:28. Показов 555. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пишу игру "Пьяницы" на 2х игроков, всего 36 карт.
По правилам карты раздаются поровну, потом каждый игрок достает по одной своей карте и их номиналы сравниваются. Если номинал карты Игрока № 1 больше, он кладет свою карту на карту Игрока № 2 и кладет под свою колоду.
Если номинал карты Игрока № 2 больше, он кладет свою карту на карту Игрока № 1 и кладет под свою колоду тоже.
А вот если карты одинаковые, то каждый игрок сначала кладет рубашкой вниз еще по 1й своей карте, и кладет еще по одной карте рубашкой вверх и эти карты уже сраниваются. Дальше аналогично: если карта 1го игрока больше, он кладет всю свою стопку на стопку игрока номер 2 и кладет под низ своей колоды и если карта 2го игрока больше, он кладет всю свою стопку на стопку игрока номер 1 и кладет под низ своей колоды.
Я реализовала случаи если одна из карт больше, но как реализовать если они равны? Я использую goto (не кидать помидорами), чтобы если равны, возвращаться к остальным условиям, но таким образом условия работают уже со следующими двумя картами. а эти просто теряются, и из-за этого к концу игры карт остается около 20. Кроме того, не могу реализовать этот момент: "А вот если карты одинаковые, то каждый игрок сначала кладет рубашкой вниз еще по 1й своей карте", т.е. не могу реализовать так, чтобы эти карты не сравнивались, но и не исчезали
Вот фрагменты кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
struct Card
{
int dostoinstvo; //достоинство карты
char mast; //масть
};
int main(int argc, char argv[])
{
setlocale(LC_ALL, "Russian");
srand(time(0));
const int all_cards = 36;
// массив карт
vector<Card> Cards{
{ 6, 'B' }, { 6, 'T' }, { 6, 'P' },
{ 6, 'C' }, { 7, 'B' }, { 7, 'T' },
{ 7, 'P' }, { 7, 'C' }, { 8, 'B' },
{ 8, 'T' }, { 8, 'P' }, { 8, 'C' },
{ 9, 'B' }, { 9, 'T' }, { 9, 'P' },
{ 9, 'C' }, { 10, 'B' }, { 10, 'T' },
{ 10, 'P' }, { 10, 'C' }, { 11, 'B' }, // 11 - валет, 12 - дама, 13 - король, 14 - туз
{ 11, 'T' }, { 11, 'P' }, { 11, 'C' },
{ 12, 'B' }, { 12, 'T' }, { 12, 'P' },
{ 12, 'C' }, { 13, 'B' }, { 13, 'T' },
{ 13, 'P' }, { 13, 'C' }, { 14, 'B' },
{ 14, 'T' }, { 14, 'P' }, { 14, 'C' }
};
//тасуем карты
random_shuffle(Cards.begin(), Cards.end());
std::cout « "All cards: " « Cards.size() « endl;
 
// 2 игрока
deque<Card> Player1, Player2;
//раздача карт
for (int i = 0; i < Cards.size(); i++)
{
if (i % 2 == 0) Player1.push_back(Cards[i]); //колода першого гравця
 
if (i % 2 != 0) Player2.push_back(Cards[i]); //колода другого гравця
}
std::cout « "Player1 cards: " « Player1.size() « endl;
std::cout « "Player2 cards: " « Player2.size() « endl;
 
 
while (!(Player1.empty() || Player2.empty())) //процесс игры
{
loop1: 
Card& p_card1 = Player1.front(); //выделили карту из 1-й колоды
Card& p_card2 = Player2.front(); //выделили карту из 2-й колоды
Card card1 = p_card1;
Card card2 = p_card2;
Player1.pop_front(); //взяли карту из 1-й колоды
Player2.pop_front(); //взяли карту из 1-й колоды
 
if (card1.dostoinstvo > card2.dostoinstvo)
{
 
if (card1.dostoinstvo == 14 && card2.dostoinstvo == 6)
{
 
Player2.push_back(card1);
Player2.push_back(card2);
 
}
Player1.push_back(card2);//добавили в конец 1-й колоды 2-ю карту
Player1.push_back(card1); //добавили в конец 1-й колоды 1-ю карту
}
 
if (card2.dostoinstvo > card1.dostoinstvo)
{
if (card2.dostoinstvo == 14 && card1.dostoinstvo == 6)
{
 
Player1.push_back(card2);//добавили в конец 1-й колоды 2-ю карту
Player1.push_back(card1); //добавили в конец 1-й колоды 1-ю карту
 
}
 
Player2.push_back(card1);
Player2.push_back(card2); //добавили в конец 1-й колоды
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2015, 13:28
Ответы с готовыми решениями:

Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями
2)Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом,...

Если числа равны, то каждое число удвоить, а если не равны, то разделить на 2
даны числа а и в.Если числа равны, то каждое число удвоить,а если не равны, то разделить на 2.

Если числа не равны, то заменить меньшее из них большим, а если равны — заменить нулями
Даны целые числа m и n. Если числа не равны, то заменить меньшее из них большим, а если равны -...

Если числа не равны, то заменить меньшее из них большим, а если равны — заменить нулями
Даны целые числа m и n. Если числа не равны, то заменить меньшее из них большим, а если равны -...

0
24.05.2015, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2015, 13:28
Помогаю со студенческими работами здесь

Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
РЕШИТЕ пожалуйста 1) Даны целые числа m,n. Если числа не равны, то заменить каждое из них одним...

Если числа не равны,то заменив каждое из них одним и тем же числом, равным большему из исходных,а если равны то заменив числа нулями.
Даны целые числа ш,и: Если числа не равны,то заменив каждое из них одним и тем же числом, равным...

Сравнивать числа из 1 и 2 столбца и если совпадают, то пишется true, а если нет, то false
помогите, пожалуйста, исправить код так чтобы сравнивались числа из 1 и 2 столбца и если совпадают,...

Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны, то присвоить переменным нулевые значения.
Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru