K
Kvant
Пишу движок для игры в покер (разновидность - Техасский Холдем)
Возникла проблема:
Дано:
Перед каждой раздачей карт колода перебирается рандомом (тасуется) //проверено-работает
Почле сдачи 2 карт игрокам и сдачи всех 5 общих карт стола просчитывается наличие комбинаций у игроков, например стрит:
Вызов и обработка:
Стриты обсчитываются чётко, ф-ия возвращает старшую карту стрита.
Возникла проблема с флашами. Ф-ия по структуре аналогичная:
(Карты в колоде закодированы интами по принципу XYY, где Х- номер масти от 0 до 3, YY - достоинсто карты от 0 до 12 (от двойки до туза)
Ф-ия int cut(int card) возвращает достоинство карты без масти.
ПРОБЛЕМА:
Ф-ия определения Флаша верно определяет Флаш и возвращает сумму карт флаша (для определения старшего флаша если у нескольких игроков есть флеши по одной масти), НО ОНА НЕ ПОРЕДЕЛЯЕТ ФЛЕШ У ОДНОГО ИЗ ИГРОКОВ (например, если задать кол-во игроков (players) =2 то флеши определяются только у второго игрока. Если 3, то у третьего и иногда первого, но никогда у второго итд. Проверялось на нескольких сотнях флешей.
Помогите пожалуйста разобраться в чем дело? Что не так?
Возникла проблема:
Дано:
Перед каждой раздачей карт колода перебирается рандомом (тасуется) //проверено-работает
Почле сдачи 2 карт игрокам и сдачи всех 5 общих карт стола просчитывается наличие комбинаций у игроков, например стрит:
Код:
int isStraight(int allForUse[players][7],int k){
int count=0;
int flag=-1;
int i;
for(i=0;i<3;i++)
if(cut(allForUse[k][i])-cut(allForUse[k][i+1])==1)
if(cut(allForUse[k][i+1])-cut(allForUse[k][i+2])==1)
if(cut(allForUse[k][i+2])-cut(allForUse[k][i+3])==1)
if(cut(allForUse[k][i+3])-cut(allForUse[k][i+4])==1){
flag=allForUse[k][i];
/*cout << "straight find on player # " << k<<endl;
cout <<"His Hand: ";
for(int v=0;v<7;v++)
cout << allForUse[k][v] << " ";
cout<<endl;*/
break;
}
return flag;
}
Вызов и обработка:
Код:
int str8=-1;
int flush=-1;
for(int h=0;h<players;h++){
str8=isStraight(allForUse,h);
flush=isFlush(allForUse,h);
if (str8!=-1){
cout << "straight find on player # " << h <<endl;
cout <<"His Hand: ";
for(int v=0;v<7;v++)
cout << allForUse[h][v] << " ";
cout<<endl;
cout <<"High card is: " << str8 << endl;
}
if (flush!=-1){
cout << "Flush find on player # " << h <<endl;
cout <<"His Hand: ";
for(int v=0;v<7;v++)
cout << allForUse[h][v] << " ";
cout<<endl;
cout <<"Sum Flush = " << flush << endl;
}
}
Стриты обсчитываются чётко, ф-ия возвращает старшую карту стрита.
Возникла проблема с флашами. Ф-ия по структуре аналогичная:
(Карты в колоде закодированы интами по принципу XYY, где Х- номер масти от 0 до 3, YY - достоинсто карты от 0 до 12 (от двойки до туза)
Ф-ия int cut(int card) возвращает достоинство карты без масти.
Код:
int isFlush(int allForUse[players][7],int k){
int count[4]={0,0,0,0};
int flag=-1;
int i;
for(i=0;i<7;i++){
if(allForUse[k][i]<100)
count[0]++;
if((allForUse[k][i]<200)&&(allForUse[k][i]>=100))
count[1]++;
if((allForUse[k][i]<300)&&(allForUse[k][i]>=200))
count[2]++;
if(allForUse[k][i]>=300)
count[3]++;
}
for(int j=0;j<4;j++)
if(count[j]>=5){
flag=0;
for(int l=0;l<7;l++)
if((allForUse[k][l]>=j*100)&&(allForUse[k][l]<(j+1)*100))
flag=flag+cut(allForUse[k][l]);
cout <<endl;
cout << "Flush find on player # " << k <<endl;
cout <<"His Hand: ";
for(int v=0;v<7;v++)
cout << allForUse[k][v] << " ";
cout<<endl;
}
return flag;
}
ПРОБЛЕМА:
Ф-ия определения Флаша верно определяет Флаш и возвращает сумму карт флаша (для определения старшего флаша если у нескольких игроков есть флеши по одной масти), НО ОНА НЕ ПОРЕДЕЛЯЕТ ФЛЕШ У ОДНОГО ИЗ ИГРОКОВ (например, если задать кол-во игроков (players) =2 то флеши определяются только у второго игрока. Если 3, то у третьего и иногда первого, но никогда у второго итд. Проверялось на нескольких сотнях флешей.
Помогите пожалуйста разобраться в чем дело? Что не так?