Tällä sivulla
Videopokerin ohjelmointikoodi
Johdanto
Tässä on videoni videopokerin ohjelmoinnista.
Alla on videolla kehitetty koodi.
#sisältää <iostream>
#include <aika.h>
rakennekortti
{
int r;
kokonaisluku s;
};
void setup(void);
mitätön sopimus(mitätön);
void draw(int c1, int c2, int c3, int c4, int c5);
int pisteet(kortinjako[]);
int pisteet_taulukko[2598960];
korttipakka[52];
int piirrä_yhdistelmät_taulukko[] = { 1533939, 178365, 178365, 16215, 178365, 16215, 16215, 16215, 1081, 178365, 16215, 16215, 1081, 16215, 1081, 1081, 47, 178365, 16215, 16215, 1081, 16215, 1081, 1081, 47, 16215, 1081, 1081, 47, 16215, 1081, 1081, 47, 1081, 47, 47, 1 };
int painotustaulukko[] = { 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 yhdistelmät yhteensä[52];
vakio char* käden_nimi_taulukko[] = {
"Häviö", "Jätkät tai parempi", "Kaksi paria", "Kolmoset", "Suora", "Värisuora", "Täyskäsi", "Neljä samanlaista", "Värisuora", "Kuningasvärisuora", "Yhteensä" };
int voittotaulukko[] = { 0,1,2,3,4,6,9,25,50,800 };
kokonaisluku pää()
{
time_t alkamisaika, päättymisaika;
aloitusaika = aika(NULL);
asennus();
sopimus();
lopetusaika = aika(NULL);
printf("Yhteensä sekunnit=\t%i\n", (int)loppumisaika - (int)alkuaika);
}
mitätön asetus(mitätön)
{
kokonaisluku i, c1, c2, c3, c4, c5, määrä, pistemääräjakotaulukko[52], sc;
kortin jako[5];
for (i = 0; i <= 51; i++)
{
pakka[i].r = (kokonaisluku)(i / 4);
kansi[i].s = i % 4;
pisteet_sopimus_taulukko[i] = 0;
yhdistelmät_yhteensä[i] = 0;
}
määrä = 0;
for (c1 = 0; c1 <= 47;c1++)
{
jako[0] = pakka[c1];
for (c2 = c1 + 1; c2 <= 48; c2++)
{
jako[1] = pakka[c2];
for (c3 = c2 + 1; c3 <= 49; c3++)
{
jako[2] = pakka[c3];
for (c4 = c3 + 1; c4 <= 50; c4++)
{
jako[3] = pakka[c4];
for (c5 = c4 + 1; c5 <= 51; c5++)
{
jako[4] = pakka[c5];
sc = pisteet(sopimus);
pisteet_taulukko[määrä] = sc;
pisteet_sopimus_taulukko[sc]++;
määrä++;
}
}
}
}
}
std::cerr << "määrä =\t" << määrä << "\n";
for (i = 0; i <= 9; i++)
std::cerr << käden_nimi_taulukko[i] << "\t" << pistemäärä_jako_taulukko[i] << "\n";
}
mitätön sopimus (mitätön)
{
kokonaisluku i, c1, c2, c3, c4, c5;
kokonaislukumäärä = 0;
for (c1 = 0; c1 <= 47;c1++)
{
for (c2 = c1 + 1; c2 <= 48; c2++)
{
for (c3 = c2 + 1; c3 <= 49; c3++)
{
for (c4 = c3 + 1; c4 <= 50; c4++)
{
for (c5 = c4 + 1; c5 <= 51; c5++)
{
piirrä(c1,c2,c3,c4,c5);
määrä++;
jos ((määrä % 1000)==0)
std::cerr << määrä << "\n";
}
}
}
}
}
for (i=9; i>=0; i--)
printf("%s\t%i\t%I64i\n", käden_nimi_taulukko[i], voittotaulukko[i], yhdistelmät_yhteensä[i]);
}
void draw(int c1, int c2, int c3, int c4, int c5)
{
int i,j, d1, d2, d3, d4, d5, indeksi, sc, piirrä_pisteet_taulukko[32][10];
kokonaislukumäärä = 0;
for (i = 0; i <= 31; i++)
{
for (j = 0; j <= 9; j++)
piirrä_pisteet_taulukko[i][j] = 0;
}
for (d1 = 0; d1 <= 47; d1++)
{
for (d2 = d1 + 1; d2 <= 48; d2++)
{
kohteelle (d3 = d2 + 1; d3 <= 49; d3++)
{
for (d4 = d3 + 1; d4 <= 50; d4++)
{
for (d5 = d4 + 1; d5 <= 51; d5++)
{
sc = pisteet_taulukko[määrä];
indeksi = 0;
if ((d1 == c1) || (d2 == c1) || (d3 == c1) || (d4 == c1) || (d5 == c1))
indeksi += 16;
jos ((d1 == c2) || (d2 == c2) || (d3 == c2) || (d4 == c2) || (d5 == c2))
indeksi += 8;
jos ((d1 == c3) || (d2 == c3) || (d3 == c3) || (d4 == c3) || (d5 == c3))
indeksi += 4;
jos ((d1 == c4) || (d2 == c4) || (d3 == c4) || (d4 == c4) || (d5 == c4))
indeksi += 2;
jos ((d1 == c5) || (d2 == c5) || (d3 == c5) || (d4 == c5) || (d5 == c5))
indeksi += 1;
piirrä_pisteet_taulukko[indeksi][sc]++;
määrä++;
}
}
}
}
}
kaksinkertainen ev;
kaksinkertainen max_ev = 0;
int paras_peli = 0;
for (i = 0; i <= 31; i++)
{
e = 0,0;
for (j = 0; j <= 9; j++)
ev += piirrä_pisteet_taulukko[i][j] * voitto_taulukko[j];
ev /= piirrä_yhdistelmätaulukko[i];
jos (arvo > maks._arvo)
{
maks_arvo = arvo;
paras_peli = i;
}
}
for (j = 0; j <= 9; j++)
{
tot_combinations[j] += draw_score_array[paras_peli][j]* weighting_array[paras_peli];
}
}
int score(korttijako[])
{
suora, tasainen;
jos ((sopimus[0].s == sopimus[1].s) && (sopimus[0].s == sopimus[2].s) && (sopimus[0].s == sopimus[3].s) && (sopimus[0].s == sopimus[4].s))
huuhtelu = 1;
muu
huuhtelu = 0;
jos ((sopimus[0].r != sopimus[1].r) && (sopimus[1].r != sopimus[2].r) && (sopimus[2].r != sopimus[3].r) && (sopimus[3].r != sopimus[4].r))
{
jos ((sopimus[0].r + 4) == sopimus[4].r)
suora = 1;
muuten jos ((deal[4].r == 12) && (deal[3].r == 3)) // pyörä
suora = 1;
muu
suora = 0;
}
muu
suora = 0;
jos ((suora == 1) && (värisuora == 1))
{
jos (deal[0].r == 8)
paluu 9;
muu
paluu 8;
}
muuten jos (flush == 1)
paluu 5;
muuten jos (suora == 1)
paluu 4;
muuten jos ((deal[0].r == deal[3].r) || (deal[1].r == sopimus[4].r))
paluu 7;
muuten jos ((sopimus[0].r == sopimus[2].r) && (sopimus[3].r == sopimus[4].r))
paluu 6;
muuten jos ((sopimus[0].r == sopimus[1].r) && (sopimus[2].r == sopimus[4].r))
paluu 6;
muuten jos ((sopimus[0].r == sopimus[2].r) || (sopimus[1].r == sopimus[3].r) || (sopimus[2].r == sopimus[4].r))
paluu 3;
muuten jos ((sopimus[0].r == sopimus[1].r) && (sopimus[2].r == sopimus[3].r))
paluu 2;
muuten jos ((sopimus[0].r == sopimus[1].r) && (sopimus[3].r == sopimus[4].r))
paluu 2;
muuten jos ((sopimus[1].r == sopimus[2].r) && (sopimus[3].r == sopimus[4].r))
paluu 2;
muuten jos ((deal[0].r == deal[1].r) && (deal[0].r >= 9))
paluu 1;
muuten jos ((deal[1].r == deal[2].r) && (deal[1].r >= 9))
paluu 1;
muuten jos ((deal[2].r == deal[3].r) && (deal[2].r >= 9))
paluu 1;
muuten jos ((deal[3].r == deal[4].r) && (deal[3].r >= 9))
paluu 1;
muu
palauta 0;
}