WOO logo

在這一頁

程式設計視訊撲克程式碼

簡介

程式設計視訊撲克程式碼

這是我關於編程視訊撲克的影片。

以下是影片中開發的程式碼。

#include <iostream>
#包括<時間.h>

結構卡
{
int r;
int s;
};

無效設定(無效);
無效交易(無效);
無效繪製(int c1,int c2,int c3,int c4,int c5);
int 分數(發牌[]);

int 分數數組[2598960];
卡片組[52];
int draw_combinations_array[] = { 1533939, 178365, 178365, 16215, 178365, 16215, 16215, 1081, 178365, 16215, 1685, 1015, 1015, 1015, 1015,151 1081, 47, 178365, 16215, 16215, 1081, 16215, 1081, 1081, 47, 16215, 1081, 1081, 47, 1081, 47, 41, 47, 1081, 47, 471;
int weighting_array[] = { 5, 43, 43, 473, 43, 473, 473, 7095, 43, 473, 473, 7095, 473, 7095, 7095, 163185, 43, 473, 473, 7095, 473, 7095, 7095, 163185, 473, 7095, 7095, 163185, 7095, 163185, 163185, 7669695 };
__int64 tot_combinations[52];

const char* hand_name_array[] = {
"輸","J 或更好","兩對","三條","順子","同花","葫蘆","四條","同花順","皇家同花順","總數" };
int win_array[] = { 0,1,2,3,4,6,9,25,50,800 };


int main()
{
time_t 開始時間,結束時間;
開始時間 = 時間(NULL);
設定();
交易();
結束時間 = 時間(NULL);
printf("總秒數=\t%i\n", (int)endtime - (int)begtime);
}

無效設定(無效)
{
int i,c1,c2,c3,c4,c5,計數,score_deal_array[52],sc;
發牌[5];
對於(i = 0;i <= 51;i++)
{
甲板[i].r = (int)(i / 4);
甲板[i]。s = i % 4;
得分交易數組[i] = 0;
總組合數[i] = 0;
}
計數=0;
對於(c1 = 0;c1 <= 47;c1++)
{
交易[0] = 甲板[c1];
對於(c2 = c1 + 1;c2 <= 48;c2++)
{
交易[1] = 甲板[c2];
對於(c3 = c2 + 1;c3 <= 49;c3++)
{
交易[2] = 甲板[c3];
對於(c4 = c3 + 1;c4 <= 50;c4++)
{
交易[3] = 甲板[c4];
對於(c5 = c4 + 1;c5 <= 51;c5 ++)
{
交易[4] = 牌組[c5];
sc = 分數(交易);
分數數組[計數] = sc;
得分交易數組[sc]++;
計數++;
}
}
}
}
}
std::cerr << "count =\t" << count << "\n";
對於(i = 0;i <= 9;i++)
std::cerr << hand_name_array[i] << "\t" << score_deal_array[i] << "\n";
}


無效交易(無效)
{
int i,c1,c2,c3,c4,c5;
int 計數 = 0;
對於(c1 = 0;c1 <= 47;c1++)
{
對於(c2 = c1 + 1;c2 <= 48;c2++)
{
對於(c3 = c2 + 1;c3 <= 49;c3++)
{
對於(c4 = c3 + 1;c4 <= 50;c4++)
{
對於(c5 = c4 + 1;c5 <= 51;c5 ++)
{
繪製(c1,c2,c3,c4,c5);
計數++;
如果((計數%1000)==0)
std::cerr << count << "\n";
}
}
}
}
}
對於(i=9;i>=0;i--)
printf("%s\t%i\t%I64i\n", hand_name_array[i], win_array[i], tot_combinations[i]);
}

無效繪製(int c1,int c2,int c3,int c4,int c5)
{
int i,j, d1, d2, d3, d4, d5, 索引, sc, draw_score_array[32][10];
int 計數 = 0;
對於(i = 0;i <= 31;i++)
{
對於(j = 0;j <= 9;j++)
draw_score_array[i][j] = 0;
}
對於(d1 = 0;d1 <= 47;d1++)
{
對於(d2 = d1 + 1;d2 <= 48;d2++)
{
對於 (d3 = d2 + 1; d3 <= 49; d3++)
{
對於(d4 = d3 + 1;d4 <= 50;d4++)
{
對於(d5 = d4 + 1;d5 <= 51;d5++)
{
sc = 分數數組[計數];
索引=0;
if ((d1 == c1) || (d2 == c1) || (d3 == c1) || (d4 == c1) || (d5 == c1))
索引 += 16;
如果((d1 == c2)||(d2 == c2)||(d3 == c2)||(d4 == c2)||(d5 == c2))
索引+=8;
如果((d1 == c3)||(d2 == c3)||(d3 == c3)||(d4 == c3)||(d5 == c3))
索引 += 4;
如果((d1 == c4)||(d2 == c4)||(d3 == c4)||(d4 == c4)||(d5 == c4))
索引 += 2;
如果((d1 == c5)||(d2 == c5)||(d3 == c5)||(d4 == c5)||(d5 == c5))
索引+=1;
draw_score_array[索引][sc]++;
計數++;
}
}
}
}
}
雙倍 ev;
雙倍max_ev = 0;
int best_play = 0;
對於(i = 0;i <= 31;i++)
{
ev = 0.0;
對於(j = 0;j <= 9;j++)
ev += draw_score_array[i][j] * win_array[j];
ev /= draw_combinations_array[i];
如果(ev>max_ev)
{
最大有效值 = 有效值;
最佳發揮=我;
}
}
對於(j = 0;j <= 9;j++)
{
tot_combinations[j] += draw_score_array[best_play][j]* weighting_array[best_play];
}
}

int 分數(發牌[])
{
int 順子,同花;
如果((交易[0].s == 交易[1].s)&&(交易[0].s == 交易[2].s)&&(交易[0].s == 交易[3].s)&&(交易[0].s == 交易[4].s))
沖洗=1;
別的
沖洗=0;
如果((交易[0].r!=交易[1].r)&&(交易[1].r!=交易[2].r)&&(交易[2].r!=交易[3].r)&&(交易[3].r!=交易[4].r))
{
如果((交易[0].r + 4)==交易[4].r)
直=1;
else if ((deal[4].r == 12) && (deal[3].r == 3)) // 輪子
直=1;
別的
直=0;
}
別的
直=0;
if ((順子 == 1) && (同花 == 1))
{
如果(交易[0].r == 8)
返回 9;
別的
返回 8;
}
否則,如果(刷新==1)
返回 5;
否則,如果(直==1)
返回 4;
否則如果 ((交易[0].r == 交易[3].r) || (交易[1].r == 交易[4].r))
返回 7;
否則,如果((交易[0].r == 交易[2].r)&&(交易[3].r == 交易[4].r))
返回 6;
否則,如果((交易[0].r == 交易[1].r)&&(交易[2].r == 交易[4].r))
返回 6;
否則,如果((交易[0].r == 交易[2].r)||(交易[1].r == 交易[3].r)||(交易[2].r == 交易[4].r))
返回 3;
否則,如果((交易[0].r == 交易[1].r)&&(交易[2].r == 交易[3].r))
返回 2;
否則,如果((交易[0].r == 交易[1].r)&&(交易[3].r == 交易[4].r))
返回 2;
否則,如果((交易[1].r == 交易[2].r)&&(交易[3].r == 交易[4].r))
返回 2;
否則,如果((交易[0].r == 交易[1].r)&&(交易[0].r >= 9))
返回 1;
否則,如果((交易[1].r == 交易[2].r)&&(交易[1].r >= 9))
返回 1;
否則,如果((交易[2].r == 交易[3].r)&&(交易[2].r >= 9))
返回 1;
否則,如果((交易[3].r == 交易[4].r)&&(交易[3].r >= 9))
返回 1;
別的
返回 0;
}

連結

我的視訊撲克分析方法