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

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

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

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

31.03.2013, 22:27. Просмотров 1302. Ответов 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++
Срочно нужны исходники "Покера" или "21-Очко". Буду очень благодарен за помощь.

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс "вентилятор" содержащий в себе классы:...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
salam
162 / 143 / 12
Регистрация: 10.07.2012
Сообщений: 726
01.04.2013, 04:55 #2
Цитата Сообщение от Pepsy Посмотреть сообщение
комп понял, какие ему менять кости
я, например, тоже этого не понимаю. мне кажется, нет строго математической стратегии. посему объясните нам свою.
ninja2
231 / 187 / 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
231 / 187 / 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
1156 / 948 / 245
Регистрация: 08.01.2012
Сообщений: 3,480
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");
}
AntonPavlob
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 1
07.08.2016, 15:26 #8
Ребят, а если заказывать у программиста писать прогу для онлайн казино, сколько это будет стоить?
А то много раз слышал, что никто уже не доверяет нынешним казино, некоторые даже предпочитают на много реже играть, но делать это в реальном казино. Я сам в Белорусские казино уже несколько лет езжу. Вот немного деньжат выиграл, думаю попробовать свое онлайн казино открыть... Прицениваюсь пока что.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 15:26
Привет! Вот еще темы с ответами:

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Имитировать нажатие клавиш (программа для "макросов" в игре) - C++
Здравствуйте, хочу сделать программу которая по нажатию одной клавиши имитирует нажатие других. Всё это происходит в онлайн игре поэтому...

Загрузка информации из файла (система рекордов в игре "Змейка") - C++
Не получается сделать считывание из файла и загрузки рекорда,помогите.Пытался сам,но всё запорол#include &lt;glut.h&gt; #include &lt;iostream&gt; ...

Случайное распределение кораблей по полю в игре "морской бой" - C++
Привет всем кто читал мой предыдущий пост про векторы в морском боем, в той же фунции появилась новая проблема :) После починки...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.08.2016, 15:26
Ответ Создать тему
Опции темы

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