Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a kódban? (C#)

Mi a hiba a kódban? (C#)

Figyelt kérdés

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.


2011. okt. 30. 14:52
 1/9 A kérdező kommentje:

"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)

2011. okt. 30. 15:13
 2/9 A kérdező kommentje:
külső while
2011. okt. 30. 15:13
 3/9 _Jessy_ ***** válasza:

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!");

}

2011. okt. 30. 15:48
Hasznos számodra ez a válasz?
 4/9 _Jessy_ ***** válasza:
pontosabban a Hit(bankpontja) helyett Hit(ref bankpontja); kell
2011. okt. 30. 15:49
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:
Igen Jessy én voltam tegnap is. :P Értem én h minden feladatot 100 féle képen meg lehet írni jól. De ez whil ciklusos bizbasz ez működik. :) Hisz az egész blackjack progi ezen megy végig, a játékos ezáltal kér lapot és pontozza a progi, és a banknak is így pontozta az első két lapját. Csak az utolsó lapot HA kér 3. at azt nem pontozza jól. Pedig most odafigyeltem, hogy tuti true ra válthasson az a változó :D(ugyebár a tegnapi után) A progi úgy működik, hogy egy gombra létrehoz 52 pb-t és egy másik tömbel pedig megkever 52 számot 0-51 ig. Ez alapján osztogatja ki a lapokat a pb-k nek mikor kér vagy a játékos vagy ebben az esteben a gép lapot. Végig mindenhól jól számol ezzel a kóddal. kivéve Akkro haa banknak van 3. alpja is tehát első két lapja kisebb mint 17. Ugye ekkro kér még egy lapot és ekkor sajna rosszul számol. NEM TUDOM MÉRT. Ugyan az a kód, hisz láthatod is h az alsó duplawhile ciklus csak annyiban különbözik szinte a felső kettőtöl h dupla while ciklus ami arra szolgál, hogy addig kérjen lapot, amíg 17 alatt van a pontszáma. De ha midenhol jól pontoz a progi, a játék teljességében. Szal játékosnak a laposztásnál, a játékos lapkérésénél, a bank első két lapját, akkor a bank 3. lapját mért nem?
2011. okt. 30. 17:20
 6/9 _Jessy_ ***** válasza:

bool bank_tullepte = true;

while(bank_tullepte==false)...

nna emiatt nem fog történni semmi

2011. okt. 30. 17:33
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:
nem mondod komolyan, hogy megint egy true ra állítási hibát vétettem? Nem hiszem el mien idióta vagyok. Köszönöm szépen. :) Mostmár télleg odafigyelek ezekre a változókra a fene egye meg.
2011. okt. 30. 17:54
 8/9 A kérdező kommentje:

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?

2011. okt. 30. 17:56
 9/9 A kérdező kommentje:

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

2011. okt. 30. 18:10

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!