» »

[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?

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

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




		
		}
	}

}




 DEL KODE

DEL KODE



 JAVLJENA NAPAKA

JAVLJENA NAPAKA



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:

            if ((string)prva == "K" || (string)prva == "Q" || (string)prva == "1" || (string)prva == "F") {


Spet pišeš enako kodo ?

An0N ::

Žal tako mora biti, saj 1 predstavlja izključno 10.

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…

Math Freak ::

Zamenjaj vrstni red druge in tretje zanke ... takoj za K, Q, 1, F mora priti A.

hunter01 ::

Kot ti je Math Freak odpisal.

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…

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

Math Freak ::

@Spura

Če bi pozorno prebral to temo, bi videl, zakaj je tvoja rešitev napačna.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# program za pretvorbo v desetiško število z rekurzijo

Oddelek: Programiranje
81479 (1202) MrStein
»

[C#] do - while

Oddelek: Programiranje
81332 (1054) garamond
»

C# Menjalec Valut (EUR to ...)

Oddelek: Programiranje
71625 (1538) Goran's Blog

[C#]naloga iz metod!

Oddelek: Programiranje
81661 (1494) Ziga Dolhar
»

[C#] razlaga

Oddelek: Programiranje
161595 (1312) krastača

Več podobnih tem