على هذه الصفحة
برمجة كود فيديو بوكر
مقدمة
إليكم الفيديو الخاص بي حول برمجة لعبة فيديو البوكر.
فيما يلي الكود الذي تم تطويره في الفيديو.
#تضمين <iostream>
#تضمين <time.h>
بطاقة هيكلية
{
int r؛
int s;
};
إعداد باطل(باطل)؛
صفقة باطلة(باطلة)؛
رسم باطل (int c1، int c2، int c3، int c4، int c5)؛
int score(بطاقة الصفقة[]);
int score_array[2598960];
مجموعة البطاقات[52]؛
int draw_combinations_array[] = { 1533939, 178365, 178365, 16215, 178365, 16215, 16215, 1081, 178365, 16215, 16215, 1081, 16215, 1081, 1081, 47, 178365, 16215, 16215, 1081, 16215, 1081, 1081, 47, 16215, 1081, 1081, 47, 1081, 47, 1};
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، 473، 7095، 7095، 163185، 7095، 163185، 163185، 7669695 }؛
__int64 tot_combinations[52]؛
ثابت char* اسم اليد_المصفوفة[] = {
"خسارة"، "جاك أو أفضل"، "زوجان"، "ثلاثة من نفس النوع"، "ستريت"، "فلاش"، "فول هاوس"، "أربعة من نفس النوع"، "ستريت فلش"، "رويال فلش"، "المجموع"
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، count، score_deal_array[52]، sc؛
توزيع البطاقات[5]؛
لـ (i = 0؛ i <= 51؛ i++)
{
مجموعة الأوراق[i].r = (int)(i / 4)؛
سطح السفينة[i].س = i % 4؛
score_deal_array[i] = 0؛
tot_combinations[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 << اسم_اليد_المصفوفة[i] << "\t" << النتيجة_الصفقة_[i] << "\n";
}
صفقة باطلة
{
int i، c1، c2، c3، c4، c5؛
int count = 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", اسم_اليد_المصفوفة[i]، مصفوفة_الفوز[i]، مجموع_التركيبات[i]);
}
رسم باطل (int c1، int c2، int c3، int c4، int c5)
{
int i,j, d1, d2, d3, d4, d5, index, sc, draw_score_array[32][10];
int count = 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 = score_array[العدد]؛
المؤشر = 0؛
إذا ((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؛
رسم_مصفوفة_النقاط[الفهرس][sc]++;
العد++؛
}
}
}
}
}
ضعف الطاقة؛
ضعف الحد الأقصى للتغير = 0؛
int best_play = 0؛
لـ (i = 0؛ i <= 31؛ i++)
{
القيمة = 0.0؛
لـ (j = 0؛ j <= 9؛ j++)
ev += draw_score_array[i][j] * win_array[j]؛
ev /= draw_combinations_array[i];
إذا (ev > max_ev)
{
الحد الأقصى للقيمة = القيمة؛
أفضل_لعب = i؛
}
}
لـ (j = 0؛ j <= 9؛ j++)
{
tot_combinations[j] += draw_score_array[best_play][j]* weighting_array[best_play];
}
}
int score(بطاقة الصفقة[])
{
مستقيم، مسطح؛
إذا ((deal[0].s == deal[1].s) && (deal[0].s == deal[2].s) && (deal[0].s == deal[3].s) && (deal[0].s == deal[4].s))
تدفق = 1؛
آخر
تدفق = 0؛
إذا ((deal[0].r != deal[1].r) && (deal[1].r != deal[2].r) && (deal[2].r != deal[3].r) && (deal[3].r != deal[4].r))
{
إذا ((deal[0].r + 4) == deal[4].r)
مستقيم = 1؛
وإلا إذا ((deal[4].r == 12) && (deal[3].r == 3)) // عجلة
مستقيم = 1؛
آخر
مستقيم = 0؛
}
آخر
مستقيم = 0؛
إذا ((مستقيم == 1) و(مسح == 1))
{
إذا (deal[0].r == 8)
العودة 9؛
آخر
العودة 8؛
}
وإلا إذا (المسح == 1)
العودة 5؛
وإلا إذا (مستقيم == 1)
العودة 4؛
وإلا إذا ((deal[0].r == deal[3].r) || (deal[1].r == deal[4].r))
العودة 7؛
وإلا إذا ((deal[0].r == deal[2].r) && (deal[3].r == deal[4].r))
العودة 6؛
وإلا إذا ((deal[0].r == deal[1].r) && (deal[2].r == deal[4].r))
العودة 6؛
وإلا إذا ((deal[0].r == deal[2].r) || (deal[1].r == deal[3].r) || (deal[2].r == deal[4].r))
العودة 3؛
وإلا إذا ((deal[0].r == deal[1].r) && (deal[2].r == deal[3].r))
العودة 2؛
وإلا إذا ((deal[0].r == deal[1].r) && (deal[3].r == deal[4].r))
العودة 2؛
وإلا إذا ((deal[1].r == deal[2].r) && (deal[3].r == deal[4].r))
العودة 2؛
وإلا إذا ((deal[0].r == deal[1].r) && (deal[0].r >= 9))
العودة 1؛
وإلا إذا ((deal[1].r == deal[2].r) && (deal[1].r >= 9))
العودة 1؛
وإلا إذا ((deal[2].r == deal[3].r) && (deal[2].r >= 9))
العودة 1؛
وإلا إذا ((deal[3].r == deal[4].r) && (deal[3].r >= 9))
العودة 1؛
آخر
العودة 0؛
}