Mi a hiba a kódban? (C#)
Az első while ciklus felfordítja a bank lefele fordított lapját, és megmondja az értékét(ez jól működik). A második while ciklus megmondja a bank második lapjának értékét(ez is jól működik). A 3. while ciklus ugyebár akkor fut le, hogy ha az előző két while ciklus összeredménye 17 alatt van. Nos ha 17 alatt van akkor kér egy lapot a bank, és úgy pontozza. Viszont mikor 2 lapja van a banknak és úgy játszik, akkor jó eredményt ad ki pontra. Viszont, ha már három(vagy több) lapja van a banknak tehát a 3. while ciklus is lefut, akkor már rossz eredményt ad. :S Mitől van ez? Bátran kérdezzetek, hogy melyik változónak mia szerepe ha nem tudnátok véletlen. Ez a kód:
private void megallok_Click(object sender, EventArgs e)
{
hely = 363;
lapok[0].Image = elolap.Images[bank_elso_lapja];
lapnev = elolap.Images.Keys[bank_elso_lapja];
x = 0;
while (azonos == false)
{
if (lapnev.Contains(lapokneve[x]))
{
ertek = x;
if (x == 12 || x == 25 || x == 38 || x == 51)
{
if (bankpontja + 11 <= 21)
{
bankpontja += 11;
azonos = true;
}
else
{
bankpontja++;
azonos = true;
}
}
else if (x == 8 || x == 9 || x == 10 || x == 11 || x == 21 || x == 22 || x == 23 || x == 24 || x == 34 || x == 35 || x == 36 || x == 37 || x == 47 || x == 48 || x == 49 || x == 50)
{
bankpontja += 10;
azonos = true;
}
else
{
bankpontja += ertek + 2;
azonos = true;
}
}
x++;
}
v = veletlentomb[1];
lapnev = elolap.Images.Keys[v];
azonos = false;
x = 0;
while (azonos == false)
{
if (lapnev.Contains(lapokneve[x]))
{
ertek = x;
if (x == 12 || x == 25 || x == 38 || x == 51)
{
if (bankpontja + 11 <= 21)
{
bankpontja += 11;
azonos = true;
}
else
{
bankpontja++;
azonos = true;
}
}
else if (x == 8 || x == 9 || x == 10 || x == 11 || x == 21 || x == 22 || x == 23 || x == 24 || x == 34 || x == 35 || x == 36 || x == 37 || x == 47 || x == 48 || x == 49 || x == 50)
{
bankpontja += 10;
azonos = true;
}
else
{
bankpontja += ertek + 2;
azonos = true;
}
}
x++;
}
bool bank_tullepte = true;
while(bank_tullepte==false)
{
if (bankpontja < 17)
{
v = veletlentomb[lap];
lapok[lap].Image = elolap.Images[lap];
lapok[lap].Location = new Point(hely, 74);
lapnev = elolap.Images.Keys[v];
azonos = false;
x = 0;
while (azonos == false)
{
if (lapnev.Contains(lapokneve[x]))
{
ertek = x;
if (x == 12 || x == 25 || x == 38 || x == 51)
{
if (bankpontja + 11 <= 21)
{
bankpontja += 11;
azonos = true;
}
else
{
bankpontja++;
azonos = true;
}
}
else if (x == 8 || x == 9 || x == 10 || x == 11 || x == 21 || x == 22 || x == 23 || x == 24 || x == 34 || x == 35 || x == 36 || x == 37 || x == 47 || x == 48 || x == 49 || x == 50)
{
bankpontja += 10;
azonos = true;
}
else
{
bankpontja += ertek + 2;
azonos = true;
}
}
x++;
}
}
else if (bankpontja > 17||bankpontja>21)
{
bank_tullepte = true;
}
}
Előre is köszönöm.
"lapok[lap].Image = elolap.Images[lap]; " ez a sor helyett:
"lapok[lap].Image = elolap.Images[v]; " az utolsó while ciklus elején van :) (dupla while ciklus és a küldős while elején van)
Gondolom tegnap is te írtál :) Szóval írtad, hogy nagyon kezdő vagy. Ez esetben próbálkozz inkább C++ -al, vagy egyéb nyelvvel elsőre, mert ha OOP-vel kezded, akkor nem fog menni. Ez kb. olyan, mintha a tó közepébe ugranál, hogy megtanulj úszni. Nagyobb eséllyel fulladsz meg, minthogy úszni megtanulj.
De azért leírom, bár ha kezdő vagy nem biztos, hogy megérted. Szóval. Ezt az egész cuccot úgy ahogy van le lehet cserélni valami ilyesmire:
while(bankpontja < 17)
{
/*
növeli a bank pontját egy 1-10 közötti random számmal, visszatérési értéke pedig egy Image, amit megjelenítesz
*/
huzottlap = Hit(bankpontja);
Megjelenit(huzottlap);
}
if(bankpontja > 21)
{
kiir("banknak túl sok!");
}
else if (bankpontja >= jatekospontja)
{
kiir("bank nyert!");
}
else
{
kiir("játékos nyert!");
}
bool bank_tullepte = true;
while(bank_tullepte==false)...
nna emiatt nem fog történni semmi
de mégse :O. Hisz azt csak akkor kell true ra álíltani, amikor már a bank pontja tullépte vagy elérte a 17 et. tehát akár még 2 lapot vagy akár 3 at is kérhet. szal van alapból 2 lapja, és ha pl az 5+5 akkro az 10 kap rá 2 t az 12 még 3-at az 15 és rá egy 2-t az 17 akkor fog csak megállni. azt pedig ott az else ben true ra is álíltom
else if (bankpontja > 17||bankpontja>21)
{
bank_tullepte = true;
}
Akkor valami más lesz nem?
Nem merem kijelenteni h tökéletesen működik de vagy egy tucatszor kipépróbáltam és működött anynit változtattama kódon, hogy:
else if (bankpontja > 17||bankpontja>21)
{
bank_tullepte = true;
}
ehhelyett:
else if (bankpontja >= 17||bankpontja>21)<-egyenlőségjelet
{
bank_tullepte = true;
}
Így ahogy én láttam jól számolja
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!