Форум программистов, компьютерный форум CyberForum.ru

Покер. Поиск пар - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ найдите ошибку пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1175712.html
Программа крашится сразу после входа в функцию sortsumma, не могу понять, что не так(функция на 49 строке) #include <stdio.h> #include <stdlib.h> #include <iostream> #include <conio.h> // База данных "Обманутые дольщики" using namespace std; struct str {
C++ Функция умножения полиномов. (исправить ошибку) void Umnog (double *kA, double *kB, int degreeA, int degreeB ,char* path) { int max; max = degreeA + degreeB; int *mul = new int; memset(mul, 0, (max + 1)*sizeof(int)); for (int i = 0; i <= degreeA; i++) { for (int j = 0; j <= degreeB; j++) http://www.cyberforum.ru/cpp-beginners/thread1175709.html
C++ Адресный поиск в структуре по строке
Коллеги, прошу помочь. Задание следующее. Есть структура с несколькими полями, одно из которых - строка. Необходимо сделать именно адресный поиск в этой структуре по строке. Результатом должно быть выведенное поле структуры с этой строкой. Строки уникальны. Прошу помочь. struct vedomost { int code_group; char birth_date; char FIO; int count; } detal; - структура
C++ Инициализация массива объектов через конструктор
class some { public: some(){} some(int b):a(b){} void Set(int b){a=b;} private: int a; };
C++ Составить список из одинаковых элементов двух других списков http://www.cyberforum.ru/cpp-beginners/thread1175675.html
нужна ваша помощь) Даны 2 двузсвязных списка s1 и s2, создать новый список s3, элементами которого будут элементы, входящие одновременно в 2 эти списка.
C++ Команда всем stream-ам Допустим у меня есть такое : std::ofstream foutOne(fileOne); std::ofstream foutTwo(fileTwo); // и std::cout как указать всем ,что на пример precision(5); причем одним махом подробнее

Показать сообщение отдельно
randy92
7 / 7 / 2
Регистрация: 23.04.2014
Сообщений: 59
14.05.2014, 17:26     Покер. Поиск пар
Добрый день, помогите решить задачку из учебника. Хочется самому как-то додуматься до всего, а не искать готовых ответов.

Необходимо создать игру "покер" и постепенно реализовать все его игровые правила. Пока программа умеет только перемешивать и сдавать 5 карт на руку. Следующим шагом нужно "научить" ее распознавать, когда у игрока на руках пара. Привожу код с комментами:

DeckOfCards.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
class DeckOfCards
{
public:
    DeckOfCards();
    void shuffle();
    void deal();
    void cardCombo();
 
private:
    int deck[ 4 ][ 13 ]; //колода карт
    int hand[ 4 ][ 13 ]; //карты, которые в данный момент на руках у игрока
};
DeckOfCards.cpp
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include "DeckOfCards.h"
using namespace std;
 
DeckOfCards::DeckOfCards()
{
    for( int row = 0; row <= 3; row++ )
    {
        for( int column = 0; column <= 12; column++ )
        {
            deck[ row ][ column ] = 0; //Инициализируем колоду и карты на руках нулями
            hand[ row ][ column ] = 0;
        }
    }
    srand( time( 0 ) );
}
 
void DeckOfCards::shuffle()
{
    int row;
    int column;
 
    for( int card = 0; card <= 52; card++ ) // Перемешиваем карты
    {
      do
      {
          row = rand() % 4;
          column = rand() % 13;
      }
      while( deck[ row ][ column ] != 0 );
 
      deck[ row ][ column ] = card;
    }
}
 
void DeckOfCards::deal()
{
    static const char* suit[ 4 ] =
        { "Hearts", "Diamonds", "Clubs", "Spades" };
 
    static const char* face[ 13 ] =
        { "Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
        "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
 
        for( int card = 1; card <= 5; card++ ) //раздаем 5 карт
        {
            for( int row = 0; row <= 3; row++ )
            {
                for( int column = 0; column <= 12; column++ )
                {
                    if( deck[ row ][ column ] == card )
                    {
                        hand[ row ][column ] = card; //заносим в память текущую карту
                        cout << face[ column ] << " of " << suit[ row ] << endl; // просто вывод на экран всех разданных карт
                    }
                }
            }
        }
 
}
 
void DeckOfCards::cardCombo() 
{
 
}
main
C++
1
2
3
4
5
6
7
8
9
10
#include "DeckOfCards.h"
 
int main()
{
    DeckOfCards deckOfCards;
    deckOfCards.shuffle();
    deckOfCards.deal();
 
    return 0;
}
Моя идея такова: создать двумерный массив hand 4 на 13, в котором будут помечаться текущие карты на руках игрока. Затем каким-то образом его просканировать с помощью функции cardCombo() на наличие "пар". Если есть идеи: пишите, либо предлагайте иной способ. Спасибо!

Добавлено через 2 часа 18 минут
Сидел голову ломал, как это реализовать. И идея пришла, хотя пока и в сыром виде. Если кому интересно тоже : читайте далее.
Идея состоит в том, чтобы представить каждую карту на руках в численном виде и записать полученный численный ряд в одномерный массив hand. Вот как я переводил каждую карту в число:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for( int card = 1; card <= 5; card++ ) //раздаем 5 карт
        {
            for( int row = 0; row <= 3; row++ )
            {
                for( int column = 0; column <= 12; column++ )
                {
                    if( deck[ row ][ column ] == card )
                    {
                        hand[ card ] = ((row * 100) + 100) + (column + 1);
                        cout << face[ column ] << " of " << suit[ row ] << endl; // просто вывод на экран всех разданных карт
                        cout << hand[ card ] << endl;
                    }
                }
            }
        }
В результате, количество сотен соответствовало порядковому номеру масти ( 1 = "Hearts", 2 = "Diamonds", 3 = "Clubs", 4 = "Spades"), а оставшееся число - ее достоинство.

чтобы найти пару, применяется следующий алгоритм:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void DeckOfCards::cardCombo()
{
    int amountsOfPairs[ 13 ] = { 0 };
 
    for( int i = 1; i <= 5; i++ )
    {
        amountsOfPairs[ hand[ i ] % 100 ]++;
        cout << " number added...." << endl;
    }
 
    for( int j = 0; j < 13; j++ )
    {
        if( amountsOfPairs[ j ] == 2 )
            cout << "Pair" << endl;
    }
}
Думаю, подобным образом получится реализовать все остальные задачи.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru