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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
#1

Интеллект бота в игре "Покер на костях" - C++

31.03.2013, 22:27. Просмотров 1270. Ответов 7
Метки нет (Все метки)

Вот правила
Кликните здесь для просмотра всего текста
Необходимо так же 5 кубиков. Цель игры: составить наиболее выгодную покерную комбинацию из пяти игральных костей. Количество игроков может быть любым, но лучше всего, если число играющих не будет превышать пяти. Каждый игрок кидает одну игральную кость, чтобы определить очерёдность ходов. Начинает тот у кого выпала старшая кость. Каждый игрок кидает все пять игральных костей, после чего он может заявить, что доволен результатами или перекинуть любое количество костей (от одной до пяти).
Возможны следующие комбинации (в порядке убывания):
Покер — пять костей одного вида
Каре — четыре кости одного вида
Фулл хаус — три кости одного вида + пара
Тройка — три кости одного вида
Две пары — две кости одного вида и две кости другого вида
Пара — две кости одного вида
Наивысшее очко — в случае, если ни у кого не выпало покерной комбинации выигрывает игрок с наивысшей суммой очков среди пяти несовмещающихся в комбинацию баллов, выпавших на игральных костях.
Если комбинации двух игроков одинаковы (например, у двух игроков по Каре), то выигрывает тот у кого выше очки, выпавшие на костях. Если у игроков одинаковые комбинации, то они разыгрывают партию друг с другом.

Все выходит, но не могу понять, как сделать, чтобы комп понял, какие ему менять кости.(Играют игрок и компьютер) Есть идея сделать, что если у компьютера покер, каре или фулл хаус, то костей он не меняет. Если не сложно - помогите.

Добавлено через 45 минут
помогите плз

Добавлено через 1 час 17 минут
help please
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 22:27     Интеллект бота в игре "Покер на костях"
Посмотрите здесь:
C++ Исходники игры "Покер"
Имитировать нажатие клавиш (программа для "макросов" в игре) C++
Случайное распределение кораблей по полю в игре "морской бой" C++
C++ Загрузка информации из файла (система рекордов в игре "Змейка")
Сделать статистику игроков в игре "Крестики-нолики" C++
Алгоритм ходов компьютера в карточной игре "Дурак" C++
C++ Как реализовать взаимодействие классов в игре "Змейка"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
salam
160 / 141 / 12
Регистрация: 10.07.2012
Сообщений: 720
01.04.2013, 04:55     Интеллект бота в игре "Покер на костях" #2
Цитата Сообщение от Pepsy Посмотреть сообщение
комп понял, какие ему менять кости
я, например, тоже этого не понимаю. мне кажется, нет строго математической стратегии. посему объясните нам свою.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
01.04.2013, 05:27     Интеллект бота в игре "Покер на костях" #3
Все выходит, но не могу понять, как сделать, чтобы комп понял, какие ему менять кости.(Играют игрок и компьютер) Есть идея сделать, что если у компьютера покер, каре или фулл хаус, то костей он не меняет. Если не сложно - помогите.
У тебя ж карты записаны в массиве. 5 карт - 5 элементов массива. Создай массив int из 5 элементов. Ты от определил, что у тебя каре 4 карты одной масти. Берешь массив карт и если карта входит в каре, то номер карты записываешь номером элемента массива int mass[номер карты порядковый из пяти]; и пишешь равным 1. и так для всех карт, А затем для того чтобы определить какие карты менять перебираешь массив mass и уже если элемент массива не равен 1, то эту карту можно менять. Я вроде так делал уже не помню.
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
06.04.2013, 20:00  [ТС]     Интеллект бота в игре "Покер на костях" #4
Вот сделал для каре:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for( int a=0, b=1, c=2, d=3; c<5; d++)
{
if (d==a||d==b||d==c) continue;
if (comp[a]==comp[b]==comp[c]==comp[d])
{
intel[a]=intel[b]=intel[c]=intel[d]=false;
kare=true;
}
if (d==4)
{
a++;
b++;
c++;
d=-1;
}
}
if(comp[0]==comp[1]==comp[3]==comp[4])
{
intel[0]=intel[1]=intel[3]=intel[4]=false;
kare=true;
}
Все остальное тоже понял как, кроме Фулл Хауса. Как его сделать?

Добавлено через 13 минут
Если поможет - вот код Тройки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(int a=0, b=1, c=2; b<5; c++)
                        {
                            if(c==a||c==b) continue;
                            if(comp[a]==comp[b]==comp[c])
                            {
                                intel[a]=intel[b]=intel[c]=false;
                                three=true;
                            }
                            if (c==4)
                            {
                                a++;
                                b++;
                                c=-1;
                            }
                        }
                        if (comp[0]==comp[2]==comp[4]) three=true;
comp[] - массив значений костей
intel[] - массив , с помощью которого определяется, менять кость или нет.

Добавлено через 1 час 9 минут
Актуально.

Добавлено через 1 час 5 минут


Добавлено через 17 минут
Помогите плз(((

Добавлено через 56 минут
Актуально

Добавлено через 51 минуту
Темко, вверх

Добавлено через 10 часов 15 минут
Актуально.

Добавлено через 2 часа 4 минуты


Добавлено через 7 часов 53 минуты
Актуально.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.04.2013, 02:41     Интеллект бота в игре "Покер на костях" #5
Не знаю ну мб можно как то. Ну ты сначала определяшь значение карт, то есть по очереди, что у тебя есть начиная от самой старшей комбинации. От смотришь сначала покер у тебя или нет. Так у тебя не покер делаешь проверка if(переменная != "poker") значит проверяешь на каре, короче нету у тебя каре, делаешь снова проверку if(переменная != "poker" && переменная != "kare") то мы делаем проверку на фул хаус. Как ее можно делать? Да фиг знает. Ну у тебя есть массив карт от 0 до 5 выбраных создай массив значений int от 0 до 5 например int massZ[5]={0}; мы его элементам присвоили 0, дальше проверяешь в цикле берешь первый элемент сравниваешь со всеми элементами по масти, кроме своего номера и счетчик ведешь в от примерно так
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
int count;
massZ[5];
int flag=0;//если тройка найдена будет равно 1.
for(int i=0;i<5;i++)
{
   //obnyl9em massZ
   for(int k=0;k<5;k++)
      mass[k]==0;
   for(int j=0;j<5;j++)
      if(comp[i]=comp[j]&&i!=j)
     {
        count++;
        massZ[j]=1;
     }
   if(count==2)
  {
      mass[i]=1;
      //тут какой нить переменной присвой один чтобы ясно было что тройка найдена
      flag=1;
      break;
  }
}//конец цикла поиска тройки
 
  //проверяем флаг если флаг == 1 то тройка найдена нет значит ничо не делаем
  if(flag==1)
  {
     //ищем двойку для этого нам нужно найти два индекса из массива massZ которые равны 0, ну их всего два будет
    int index1=30;
    int index2=30;
   for(int i=0;i<5;i++)
      if(massZ[i]==0&&index1==30&&index2==30)
        index1=i;
     else if(massZ[i]==0&&index1!=30)
       index2=i;
 
    //сравниваешь карты comp[index1] и comp[index2] по мастям, делаешь проверку
// если одной масти то найдена двойка, присваиваешь переменной = "fylxayc" и поиск остальных комбинаций прекратиться (проверку не пройдут),
//если разной то ничо не делаешь идет дальше проверка.
 
  }
}
Все у тебя в massZ будет храниться карты тройки, то есть элементы значения которых равно 1 будут хранить будет один и тот же номер с элементами из 5 карт. Теперь сделай проверку на двойку точно также, токо уже в другой массив запиши двойку либо в тот же, то ко со значениями например 2, да тебе токо две карты нужно проверить.

Короче примерно так делаешь.
AntonBorisov
0 / 0 / 0
Регистрация: 22.07.2016
Сообщений: 1
22.07.2016, 16:20     Интеллект бота в игре "Покер на костях" #6
Обидно только, что вот пишешь код, все работает. Создаешь онлайн автомат, продаешь его. А с его помощью потом людей разводят. Я сейчас не о том, что по-честному можно проиграть. У меня друг на сайт деньги закинул, а его просто развели. И ни денег нету, ни поиграл нормально. Я на сайте про казино читал, что много кто так делает.
А вы куда продаете свои творения? Или это просто для себя проект?
MansMI
1136 / 933 / 240
Регистрация: 08.01.2012
Сообщений: 3,392
22.07.2016, 20:45     Интеллект бота в игре "Покер на костях" #7
сколько раз "недовольный" может перебрасывать и во сколько каждый раз ему обойдется?

Добавлено через 2 часа 2 минуты
играет бот, перебрасывает один раз количество не попавшее в комбинацию(и)
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
void sort(int*a)
{
    for(int i=4; i; i--)
    for(int j=0; j<i; j++)
        if(a[j]>a[i])
        {
            int t=a[j];
            a[j]=a[i];
            a[i]=t;
        }
}
void print(int*a)
{
    cout<<"Кости: ";
    for(int i=0; i<5; i++) cout<<a[i]<<" ";
    cout<<endl;
}
void calc(int*a,int*c)
{
    *c=c[1]=0;
    int *pc=c;
    int p=*a;
    int nc=0;
    int n=5;
    for(int i=1; i<n; i++)
        if(a[i]==p) nc++;
        else
        {
            p=a[i];
            if(nc) *pc++=nc+1;
            else
            {
                for(int j=i-1; j<n-1; j++) a[j]=a[j+1];
                i--;
                n--;
            }
            nc=0;
        }
    if(nc) *pc=nc+1;
    cout<<"Комбинации: ";
    for(int i=0; i<2; i++) cout<<c[i]<<" ";
    cout<<endl;
}
void comp(int*a,int*c)
{
    int n=5,np=1,nc=0;
    do
    {
        for(int i=nc; i<5; i++)
        {
            a[i]=1+rand()%6;
            if(!np) cout<<a[i]<<" ";
        }
        if(!np) cout<<endl;
        sort(a);
        print(a);
        calc(a,c);
        nc=*c+c[1];
        if(nc<5 && np) cout<<"Переброс: ";
    }while(nc<5 && np--);
}
void main(int argc,char* argv[])
{
    setlocale(LC_ALL,"Rus");
    srand(unsigned(time(0)));
    int a[5],c[2];
    do
    {
        comp(a,c);
        cout<<"Еще?(Enter)\n";
    }while(_getch()==13);
    //system("pause");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 15:26     Интеллект бота в игре "Покер на костях"
Еще ссылки по теме:
C++ Алгоритм хода компьютера в игре "Крестики-Нолики" на неограниченном поле
C++ Как реализовать AI в игре "Морской бой"
Реализовать игровое поле в игре "Тетрис" C++
Интеллект компьютера в игре Крестик-Нолик C++
Ориентация бота в игре C++

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

Или воспользуйтесь поиском по форуму:
AntonPavlob
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 1
07.08.2016, 15:26     Интеллект бота в игре "Покер на костях" #8
Ребят, а если заказывать у программиста писать прогу для онлайн казино, сколько это будет стоить?
А то много раз слышал, что никто уже не доверяет нынешним казино, некоторые даже предпочитают на много реже играть, но делать это в реальном казино. Я сам в Белорусские казино уже несколько лет езжу. Вот немного деньжат выиграл, думаю попробовать свое онлайн казино открыть... Прицениваюсь пока что.
Yandex
Объявления
07.08.2016, 15:26     Интеллект бота в игре "Покер на костях"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru