Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Blackjack
- {
- enum Lepes { Hit, Stand, Surrender, Bust, Double, Split }
- enum Kartya { Egy, Ketto, Harom, Negy, Ot, Hat, Het, Nyolc, Kilenc, Tiz, Bubi, Dama, Kiraly, Asz }
- enum Szin { Pikk, Treff, Karo, Sziv }
- class Lap
- {
- public readonly int ertek;
- public const int masodErtek = 1;
- public readonly Kartya kartya;
- public readonly Szin szin;
- public Lap(Kartya kartya, Szin szin)
- {
- if (kartya == Kartya.Egy)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 1;
- }
- else if (kartya == Kartya.Ketto)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 2;
- }
- else if (kartya == Kartya.Harom)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 3;
- }
- else if (kartya == Kartya.Negy)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 4;
- }
- else if (kartya == Kartya.Ot)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 5;
- }
- else if (kartya == Kartya.Hat)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 6;
- }
- else if (kartya == Kartya.Het)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 7;
- }
- else if (kartya == Kartya.Nyolc)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 8;
- }
- else if (kartya == Kartya.Kilenc)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 9;
- }
- else if (kartya == Kartya.Tiz)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 10;
- }
- else if (kartya == Kartya.Bubi)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 10;
- }
- else if (kartya == Kartya.Dama)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 10;
- }
- else if (kartya == Kartya.Kiraly)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 10;
- }
- else if (kartya == Kartya.Asz)
- {
- this.kartya = kartya;
- this.szin = szin;
- ertek = 11;
- }
- }
- }
- class Jatekos
- {
- static protected Random rand = new Random();
- public bool jatszik;
- public int osszErtek
- {
- get
- {
- int sum = 0;
- foreach (var x in lapLista)
- {
- sum += x.ertek;
- }
- return sum;
- }
- }
- protected int _penz;
- public int penz
- {
- get
- {
- return _penz;
- }
- set
- {
- if (0 <= value) _penz = value;
- else //throw new Exception("Nem lehet negatív érték a pénz!");
- _penz = 0;
- }
- }
- protected List<Lap> lapLista = new List<Lap>();
- protected int _mereszseg;
- public int mereszseg
- {
- get
- {
- return _mereszseg;
- }
- set
- {
- if (10 <= value && value < 21)
- {
- _mereszseg = value;
- }
- }
- }
- public void lapotKap(Lap lap)
- {
- lapLista.Add(lap);
- }
- protected int sum;
- protected int hany_asz;
- public virtual Lepes kovetkezoLepes()
- {
- if (penz == 0) return Lepes.Surrender;
- sum = 0;
- hany_asz = 0;
- foreach (var x in lapLista)
- {
- sum += x.ertek;
- if (x.kartya == Kartya.Asz)
- {
- hany_asz++;
- }
- }
- if (hany_asz < 0 && sum >= 11)
- {
- do
- {
- sum -= 11;
- sum += Lap.masodErtek;
- hany_asz--;
- }
- while (sum > 21 && hany_asz < 0);
- if (hany_asz == 0 && sum > 21) return Lepes.Bust;
- }
- if (sum > 21) return Lepes.Bust;
- if (sum <= mereszseg) return Lepes.Hit;
- else return Lepes.Stand;
- }
- public Jatekos(int penz, int mereszseg)
- {
- this.penz = penz;
- this.mereszseg = mereszseg;
- jatszik = true;
- }
- }
- class Oszto : Jatekos
- {
- public int jatekosokSzama
- {
- get
- {
- return Jatekbarlang.jatekosLista.Count;
- }
- }
- public void AddJatekos(Jatekos jatekos)
- {
- if (jatekos != null) Jatekbarlang.jatekosLista.Add(jatekos);
- }
- public void RemoveJatekos(Jatekos jatekos) // nem sok értelme van, de a method overloadinget jól szemlíteti
- {
- if (jatekos != null) Jatekbarlang.jatekosLista.Remove(jatekos);
- }
- public void RemoveJatekos(int index) // ----||----
- {
- try
- {
- Jatekbarlang.jatekosLista.RemoveAt(index);
- }
- catch (ArgumentOutOfRangeException e)
- {
- Console.WriteLine(e.Message);
- }
- }
- public static readonly List<Lap> alapPakli = new List<Lap>();
- List<Lap> keverendo = new List<Lap>();
- public List<Lap> kevert = new List<Lap>();
- void masolas()
- {
- keverendo.Clear();
- foreach (var x in alapPakli)
- {
- keverendo.Add(x);
- }
- }
- int index;
- void keveres()
- {
- kevert.Clear();
- while (keverendo.Count > 0)
- {
- index = rand.Next(keverendo.Count);
- kevert.Add(keverendo[index]);
- keverendo.RemoveAt(index);
- }
- }
- public void pakliKeveres()
- {
- masolas();
- keveres();
- }
- public override Lepes kovetkezoLepes()
- {
- if (penz == 0) return Lepes.Surrender;
- sum = 0;
- hany_asz = 0;
- foreach (var x in lapLista)
- {
- sum += x.ertek;
- if (x.kartya == Kartya.Asz)
- {
- hany_asz++;
- }
- }
- if (hany_asz < 0 && sum >= 11)
- {
- do
- {
- sum -= 11;
- sum += Lap.masodErtek;
- hany_asz--;
- }
- while (sum > 21 && hany_asz < 0);
- if (hany_asz == 0 && sum > 21) return Lepes.Bust;
- }
- if (sum > 21) return Lepes.Bust;
- if (sum == 16) return Lepes.Hit;
- if (sum >= 17) return Lepes.Stand;
- if (sum <= mereszseg) return Lepes.Hit;
- else return Lepes.Stand;
- }
- int tet;
- int kassza;
- public void jatekIndul()
- {
- kassza = 0;
- tet = rand.Next(5, 20);
- for (int i = 0; i < Jatekbarlang.jatekosLista.Count; i++)
- {
- if (Jatekbarlang.jatekosLista[i].penz < tet)
- {
- RemoveJatekos(i);
- jatekIndul();
- }
- }
- foreach (var x in Jatekbarlang.jatekosLista)
- {
- x.penz -= tet;
- kassza += tet;
- }
- pakliKeveres();
- for (int i = 0; i < 2; i++)
- {
- foreach (var x in Jatekbarlang.jatekosLista)
- {
- index = rand.Next(kevert.Count);
- x.lapotKap(kevert[index]);
- kevert.RemoveAt(index);
- }
- }
- foreach (var x in Jatekbarlang.jatekosLista)
- {
- if (x.jatszik)
- {
- Lepes lepes = x.kovetkezoLepes();
- if (lepes == Lepes.Hit) x.lapotKap(kevert[rand.Next(kevert.Count)]);
- if (lepes == Lepes.Stand) continue;
- if (lepes == Lepes.Bust) x.jatszik = false;
- }
- }
- Jatekbarlang.nyertes = Jatekbarlang.jatekosLista[0];
- for (int i = 1; i < Jatekbarlang.jatekosLista.Count; i++)
- {
- if (Jatekbarlang.nyertes.osszErtek < Jatekbarlang.jatekosLista[i].osszErtek) Jatekbarlang.nyertes = Jatekbarlang.jatekosLista[i];
- }
- Jatekbarlang.nyertes.penz += 2 * (kassza / 3);
- this.penz += kassza / 3;
- }
- public Oszto(int penz, int mereszseg)
- : base(penz, mereszseg) { }
- }
- class Jatekbarlang
- {
- Random rand = new Random();
- public static List<Jatekos> jatekosLista = new List<Jatekos>();
- void alapFeltolt()
- {
- Oszto.alapPakli.Clear();
- for (int i = 0; i < 4; i++)
- {
- for (int j = 0; j < 14; j++)
- {
- Oszto.alapPakli.Add(new Lap((Kartya)j, (Szin)i));
- }
- }
- }
- public void jatekInditas(int jatekosSzam, int jatekokSzama)
- {
- Oszto o = new Oszto(rand.Next(200, 2000), rand.Next(10, 22));
- for (int i = 0; i < jatekosSzam; i++)
- {
- jatekosLista.Add(new Jatekos(rand.Next(200,2000), rand.Next(10,22)));
- }
- for (int i = 0; i < jatekokSzama; i++)
- {
- o.jatekIndul();
- }
- }
- public static Jatekos nyertes;
- public Jatekbarlang()
- {
- alapFeltolt();
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Random rand = new Random();
- Jatekbarlang barlang = new Jatekbarlang();
- barlang.jatekInditas(rand.Next(4, 9), 1);
- Console.WriteLine("Nyertes játékos összegyűjtott pénze: {0}", Jatekbarlang.nyertes.penz);
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement