Forum » Programiranje » [C#] Blackjack program
[C#] Blackjack program
An0N ::
using System; namespace Blackjack { class MainClass { public static void Main () { string prva; string druga; string tretja; string cetrta; int vsota = 0; Console.Write ("Prosim, vstavite 1. karto: "); prva = Console.ReadLine (); if (prva == "0") { vsota = vsota + 0; } else if (prva == "K" || prva == "Q" || prva == "F" || prva == "1") { vsota = vsota + 10; } else if (int.Parse(prva) <= 9 && int.Parse(prva) >= 2) { vsota = vsota + int.Parse(prva); } else if (prva == "A") { if((vsota+11)<=21) { vsota = vsota + 11; } else { vsota = vsota + 1; } } else { Console.WriteLine("Nepravilen vnos karte!"); } Console.Write ("Prosim, vstavite 2. karto: "); druga = Console.ReadLine (); if (druga == "0") { vsota = vsota + 0; } else if (druga == "K" || druga == "Q" || druga == "F" || druga == "1") { vsota = vsota + 10; } else if (int.Parse(druga) <= 9 && int.Parse(druga) >= 2) { vsota = vsota + int.Parse(druga); } else if (druga == "A") { if((vsota+11)<=21) { vsota = vsota + 11; } else { vsota = vsota + 1; } } else { Console.WriteLine("Nepravilen vnos karte!"); } Console.Write ("Prosim, vstavite 3. karto: "); tretja = Console.ReadLine (); if (tretja == "0") { vsota = vsota + 0; } else if (tretja == "K" || tretja == "Q" || tretja == "F" || tretja == "1") { vsota = vsota + 10; } else if (int.Parse(tretja) <= 9 && int.Parse(tretja) >= 2) { vsota = vsota + int.Parse(tretja); } else if (tretja == "A") { if((vsota+11)<=21) { vsota = vsota + 11; } else { vsota = vsota + 1; } } else { Console.WriteLine("Nepravilen vnos karte!"); } Console.Write("Prosim, vstavite 4. karto: "); cetrta = Console.ReadLine (); if (cetrta == "0") { vsota = vsota + 0; } else if (cetrta == "K" || cetrta == "Q" || cetrta == "F" || cetrta == "1") { vsota = vsota + 10; } else if (int.Parse(cetrta) <= 9 && int.Parse(cetrta) >= 2) { vsota = vsota + int.Parse(cetrta); } else if (cetrta == "A") { if((vsota+11)<=21) { vsota = vsota + 11; } else { vsota = vsota + 1; } } else { Console.WriteLine("Nepravilen vnos karte!"); } if(vsota < 21) { Console.WriteLine("Zelite vnesti še eno karto?"); string dodatna_karta = Console.ReadLine(); if (dodatna_karta == "0") { vsota = vsota + 0; } else if (dodatna_karta == "K" || dodatna_karta == "Q" || dodatna_karta == "F" || dodatna_karta == "1") { vsota = vsota + 10; } else if (int.Parse(dodatna_karta) <= 9 && int.Parse(dodatna_karta) >= 2) { vsota = vsota + int.Parse(dodatna_karta); } else if (dodatna_karta == "A") { if((vsota+11)<=21) { vsota = vsota + 11; } else { vsota = vsota + 1; } Console.WriteLine("Vsota je {0} ", vsota); if (vsota > 21) { Console.WriteLine("Izgubil si igro!"); } else if (vsota == 21) { Console.WriteLine("BLACKJACK!"); } else { Console.WriteLine("Dobil si igro!"); } Console.WriteLine (vsota); } } } } }
Lp, že nekaj časa se ukvarjam z eno nalogo, in sicer ustvariti preprosti Blackjack program. Tole zadevščino sem kar nekaj časa sestavljal skupaj, pa zadevo prevede, vseeno pa vidim da moram imeti neke semantične / logične napake v kodi, saj zadeva ne dela, kot bi morala.
Prosim za nasvet,
Hvala vam.
Lep pozdrav.
An0N
Math Freak ::
Kaj če bi v 166 vrstici dodal dva zavita zaklepaja za začetek in pobrisal 2 zavita zaklepaja na koncu? Koda postane zelo nepregledna, če ne zamikaš zadeve tako kot je treba.
RatedR ::
Svetujem da si tole kodo skopiraš v notepad in pregledaš vse zavite oklepaje, če so na pravih mestih ker maš večinoma sam if...else strukturo.
A kar se pa tiče inputa/outputa je pa pravilno?
A kar se pa tiče inputa/outputa je pa pravilno?
keworkian ::
Tiste stvari ki se ti ponavljajo (4x) jih daj v eno funkcijo, koda se ti bo drastično zmanjšala in lažje boš ugotovil kje je problem :)
Obscenities in B-Flat
An0N ::
Sem začel od znova in zadeva je delovala do točke, kjer sem ustvaril tisti del za asa - "A" ..
Prosim za nasvet,
Hvala.
P.S. - Ker delam zadevo v okviru enega učnega primera iz knjige ne smem uporabiti drugega, kot pa if stavka, eksplicitnih pretvorb, funkcije iz razreda Math in podobnih zadev, ki po običajnih kurikulih predhajajo zanke, polja ipd. Tudi funkcij se ne sme definirati ipd.
using System; namespace Blackjack1 { class MainClass { public static void Main(string[] args) { string prva; string druga; string tretja; string cetrta; string dodatna; int vsota = 0; Console.Write("Prosim, vstavite prvo karto: "); prva = Console.ReadLine (); if ((string)prva == "K" || (string)prva == "Q" || (string)prva == "1" || (string)prva == "F") { vsota = vsota + 10; } else if (2 <= (int.Parse (prva)) && (int.Parse (prva)) < 9) { vsota = vsota + int.Parse (prva); } else if ( (string) prva == "A") { if (vsota + 11 <= 21) { vsota = vsota + 11; } else { vsota = vsota + 1; } } else { Console.WriteLine ("Napačen vnos karte!"); } Console.WriteLine (vsota); } } }
Prosim za nasvet,
Hvala.
P.S. - Ker delam zadevo v okviru enega učnega primera iz knjige ne smem uporabiti drugega, kot pa if stavka, eksplicitnih pretvorb, funkcije iz razreda Math in podobnih zadev, ki po običajnih kurikulih predhajajo zanke, polja ipd. Tudi funkcij se ne sme definirati ipd.
Zgodovina sprememb…
- spremenilo: An0N ()
Math Freak ::
Namesto 1 daj A v delu:
Spet pišeš enako kodo ?
if ((string)prva == "K" || (string)prva == "Q" || (string)prva == "1" || (string)prva == "F") {
Spet pišeš enako kodo ?
Math Freak ::
Ja ampak ti hočeš parsat črko "A", zato ti javi napako. Ne moreš črk spreminjat v število na tak način ...
Zgodovina sprememb…
- spremenilo: Math Freak ()
hunter01 ::
Kot ti je Math Freak odpisal.
Crkne ti tukaj: else if
Če boš to zanko dal na konec, bo delalo toliko časa, dokler ne boš vpisal neke črke, ki jo predhodni if stavki ne obdelajo. (npr, če boš vpisal B bo spet crknlo).
Lahko dodaš še en "konjski" if z vsemi črkami/znaki, ki jih sprejemaš in če ne ustreza sploh ne nadaljuješ.
Crkne ti tukaj: else if
(2 <= (int.Parse (prva)) && (int.Parse (prva)) < 9)- Ker bi rad A castal v int in crkne.
Če boš to zanko dal na konec, bo delalo toliko časa, dokler ne boš vpisal neke črke, ki jo predhodni if stavki ne obdelajo. (npr, če boš vpisal B bo spet crknlo).
Lahko dodaš še en "konjski" if z vsemi črkami/znaki, ki jih sprejemaš in če ne ustreza sploh ne nadaljuješ.
Math Freak ::
namesto
(string)prva == "K"se napiše
prva == "K". Spremenljivki, ki si ji nastavil Console.ReadLine() je že tipa string, nevem zakaj jo hočeš spet spremeniti v string ...
vsota = vsota + 10;se lahko piše krajše kot
vsota += 10. Torej spremenljivki trenutno vrednost povečaš še za 10.
Zgodovina sprememb…
- spremenilo: Math Freak ()
Math Freak ::
Namesto int.Parse("niz") lahko uporabiš int.TryParse("niz",out stevilo), ki najprej preveri, če niz res vsebuje število(recimo "453") ali ne(recimo "24a").
Spura ::
Zakaj.
for (int i = 1;i <= 4;i++) { Console.Write("Prosim vnesite " + i + ". stevilo"); string st = Console.ReadLine(); switch (st) { case "K": case "Q": case "F": case "1": vsota += 10; break; case "9": case "8": .... case "2": vsota += int.Parse(st); break; case "A": ..... default: Console.WriteLine("Napacen vnos karte"); break; } }
Zgodovina sprememb…
- spremenil: Spura ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# program za pretvorbo v desetiško število z rekurzijoOddelek: Programiranje | 1478 (1201) | MrStein |
» | [C#] do - whileOddelek: Programiranje | 1332 (1054) | garamond |
» | C# Menjalec Valut (EUR to ...)Oddelek: Programiranje | 1619 (1532) | Goran's Blog |
⊘ | [C#]naloga iz metod!Oddelek: Programiranje | 1655 (1488) | Ziga Dolhar |
» | [C#] razlagaOddelek: Programiranje | 1595 (1312) | krastača |