Advertisement
csaki

Blackjack (sietve összedobott verzió, de működik)

Apr 28th, 2013
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.25 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Blackjack
  8. {
  9.     enum Lepes { Hit, Stand, Surrender, Bust, Double, Split }
  10.     enum Kartya { Egy, Ketto, Harom, Negy, Ot, Hat, Het, Nyolc, Kilenc, Tiz, Bubi, Dama, Kiraly, Asz }
  11.     enum Szin { Pikk, Treff, Karo, Sziv }
  12.  
  13.     class Lap
  14.     {
  15.         public readonly int ertek;
  16.         public const int masodErtek = 1;
  17.         public readonly Kartya kartya;
  18.         public readonly Szin szin;
  19.  
  20.         public Lap(Kartya kartya, Szin szin)
  21.         {
  22.             if (kartya == Kartya.Egy)
  23.             {
  24.                 this.kartya = kartya;
  25.                 this.szin = szin;
  26.                 ertek = 1;
  27.             }
  28.             else if (kartya == Kartya.Ketto)
  29.             {
  30.                 this.kartya = kartya;
  31.                 this.szin = szin;
  32.                 ertek = 2;
  33.             }
  34.             else if (kartya == Kartya.Harom)
  35.             {
  36.                 this.kartya = kartya;
  37.                 this.szin = szin;
  38.                 ertek = 3;
  39.             }
  40.             else if (kartya == Kartya.Negy)
  41.             {
  42.                 this.kartya = kartya;
  43.                 this.szin = szin;
  44.                 ertek = 4;
  45.             }
  46.             else if (kartya == Kartya.Ot)
  47.             {
  48.                 this.kartya = kartya;
  49.                 this.szin = szin;
  50.                 ertek = 5;
  51.             }
  52.             else if (kartya == Kartya.Hat)
  53.             {
  54.                 this.kartya = kartya;
  55.                 this.szin = szin;
  56.                 ertek = 6;
  57.             }
  58.             else if (kartya == Kartya.Het)
  59.             {
  60.                 this.kartya = kartya;
  61.                 this.szin = szin;
  62.                 ertek = 7;
  63.             }
  64.             else if (kartya == Kartya.Nyolc)
  65.             {
  66.                 this.kartya = kartya;
  67.                 this.szin = szin;
  68.                 ertek = 8;
  69.             }
  70.             else if (kartya == Kartya.Kilenc)
  71.             {
  72.                 this.kartya = kartya;
  73.                 this.szin = szin;
  74.                 ertek = 9;
  75.             }
  76.             else if (kartya == Kartya.Tiz)
  77.             {
  78.                 this.kartya = kartya;
  79.                 this.szin = szin;
  80.                 ertek = 10;
  81.             }
  82.             else if (kartya == Kartya.Bubi)
  83.             {
  84.                 this.kartya = kartya;
  85.                 this.szin = szin;
  86.                 ertek = 10;
  87.             }
  88.             else if (kartya == Kartya.Dama)
  89.             {
  90.                 this.kartya = kartya;
  91.                 this.szin = szin;
  92.                 ertek = 10;
  93.             }
  94.             else if (kartya == Kartya.Kiraly)
  95.             {
  96.                 this.kartya = kartya;
  97.                 this.szin = szin;
  98.                 ertek = 10;
  99.             }
  100.             else if (kartya == Kartya.Asz)
  101.             {
  102.                 this.kartya = kartya;
  103.                 this.szin = szin;
  104.                 ertek = 11;
  105.             }
  106.         }
  107.     }
  108.  
  109.     class Jatekos
  110.     {
  111.         static protected Random rand = new Random();
  112.         public bool jatszik;
  113.         public int osszErtek
  114.         {
  115.             get
  116.             {
  117.                 int sum = 0;
  118.                 foreach (var x in lapLista)
  119.                 {
  120.                     sum += x.ertek;
  121.                 }
  122.                 return sum;
  123.             }
  124.         }
  125.         protected int _penz;
  126.         public int penz
  127.         {
  128.             get
  129.             {
  130.                 return _penz;
  131.             }
  132.             set
  133.             {
  134.                 if (0 <= value) _penz = value;
  135.                 else //throw new Exception("Nem lehet negatív érték a pénz!");
  136.                     _penz = 0;
  137.             }
  138.         }
  139.         protected List<Lap> lapLista = new List<Lap>();
  140.         protected int _mereszseg;
  141.  
  142.         public int mereszseg
  143.         {
  144.             get
  145.             {
  146.                 return _mereszseg;
  147.             }
  148.             set
  149.             {
  150.                 if (10 <= value && value < 21)
  151.                 {
  152.                     _mereszseg = value;
  153.                 }
  154.             }
  155.         }
  156.  
  157.         public void lapotKap(Lap lap)
  158.         {
  159.             lapLista.Add(lap);
  160.         }
  161.  
  162.         protected int sum;
  163.         protected int hany_asz;
  164.         public virtual Lepes kovetkezoLepes()
  165.         {
  166.             if (penz == 0) return Lepes.Surrender;
  167.             sum = 0;
  168.             hany_asz = 0;
  169.             foreach (var x in lapLista)
  170.             {
  171.                 sum += x.ertek;
  172.                 if (x.kartya == Kartya.Asz)
  173.                 {
  174.                     hany_asz++;
  175.                 }
  176.             }
  177.  
  178.             if (hany_asz < 0 && sum >= 11)
  179.             {
  180.                 do
  181.                 {
  182.                     sum -= 11;
  183.                     sum += Lap.masodErtek;
  184.                     hany_asz--;
  185.                 }
  186.                 while (sum > 21 && hany_asz < 0);
  187.  
  188.                 if (hany_asz == 0 && sum > 21) return Lepes.Bust;
  189.             }
  190.             if (sum > 21) return Lepes.Bust;
  191.             if (sum <= mereszseg) return Lepes.Hit;
  192.             else return Lepes.Stand;
  193.         }
  194.  
  195.         public Jatekos(int penz, int mereszseg)
  196.         {
  197.             this.penz = penz;
  198.             this.mereszseg = mereszseg;
  199.             jatszik = true;
  200.         }
  201.     }
  202.  
  203.     class Oszto : Jatekos
  204.     {
  205.        
  206.  
  207.         public int jatekosokSzama
  208.         {
  209.             get
  210.             {
  211.                 return Jatekbarlang.jatekosLista.Count;
  212.             }
  213.         }
  214.  
  215.         public void AddJatekos(Jatekos jatekos)
  216.         {
  217.             if (jatekos != null) Jatekbarlang.jatekosLista.Add(jatekos);
  218.         }
  219.  
  220.         public void RemoveJatekos(Jatekos jatekos) // nem sok értelme van, de a method overloadinget jól szemlíteti
  221.         {
  222.             if (jatekos != null) Jatekbarlang.jatekosLista.Remove(jatekos);
  223.         }
  224.  
  225.         public void RemoveJatekos(int index) // ----||----
  226.         {
  227.             try
  228.             {
  229.                 Jatekbarlang.jatekosLista.RemoveAt(index);
  230.             }
  231.             catch (ArgumentOutOfRangeException e)
  232.             {
  233.                 Console.WriteLine(e.Message);
  234.             }
  235.         }
  236.  
  237.         public static readonly List<Lap> alapPakli = new List<Lap>();
  238.         List<Lap> keverendo = new List<Lap>();
  239.         public List<Lap> kevert = new List<Lap>();
  240.  
  241.         void masolas()
  242.         {
  243.             keverendo.Clear();
  244.             foreach (var x in alapPakli)
  245.             {
  246.                 keverendo.Add(x);
  247.             }
  248.         }
  249.  
  250.         int index;
  251.         void keveres()
  252.         {
  253.             kevert.Clear();
  254.             while (keverendo.Count > 0)
  255.             {
  256.                 index = rand.Next(keverendo.Count);
  257.                 kevert.Add(keverendo[index]);
  258.                 keverendo.RemoveAt(index);
  259.             }
  260.         }
  261.  
  262.         public void pakliKeveres()
  263.         {
  264.             masolas();
  265.             keveres();
  266.         }
  267.        
  268.         public override Lepes kovetkezoLepes()
  269.         {
  270.             if (penz == 0) return Lepes.Surrender;
  271.  
  272.             sum = 0;
  273.             hany_asz = 0;
  274.             foreach (var x in lapLista)
  275.             {
  276.                 sum += x.ertek;
  277.                 if (x.kartya == Kartya.Asz)
  278.                 {
  279.                     hany_asz++;
  280.                 }
  281.             }
  282.  
  283.             if (hany_asz < 0 && sum >= 11)
  284.             {
  285.                 do
  286.                 {
  287.                     sum -= 11;
  288.                     sum += Lap.masodErtek;
  289.                     hany_asz--;
  290.                 }
  291.                 while (sum > 21 && hany_asz < 0);
  292.  
  293.                 if (hany_asz == 0 && sum > 21) return Lepes.Bust;
  294.             }
  295.  
  296.             if (sum > 21) return Lepes.Bust;
  297.             if (sum == 16) return Lepes.Hit;
  298.             if (sum >= 17) return Lepes.Stand;
  299.  
  300.             if (sum <= mereszseg) return Lepes.Hit;
  301.             else return Lepes.Stand;
  302.         }
  303.  
  304.         int tet;
  305.         int kassza;
  306.         public void jatekIndul()
  307.         {
  308.             kassza = 0;
  309.             tet = rand.Next(5, 20);
  310.             for (int i = 0; i < Jatekbarlang.jatekosLista.Count; i++)
  311.             {
  312.                 if (Jatekbarlang.jatekosLista[i].penz < tet)
  313.                 {
  314.                     RemoveJatekos(i);
  315.                     jatekIndul();
  316.                 }
  317.             }
  318.  
  319.             foreach (var x in Jatekbarlang.jatekosLista)
  320.             {
  321.                 x.penz -= tet;
  322.                 kassza += tet;
  323.             }
  324.  
  325.             pakliKeveres();
  326.  
  327.             for (int i = 0; i < 2; i++)
  328.             {
  329.                 foreach (var x in Jatekbarlang.jatekosLista)
  330.                 {
  331.                     index = rand.Next(kevert.Count);
  332.                     x.lapotKap(kevert[index]);
  333.                     kevert.RemoveAt(index);
  334.                 }
  335.             }
  336.  
  337.             foreach (var x in Jatekbarlang.jatekosLista)
  338.             {
  339.                 if (x.jatszik)
  340.                 {
  341.                     Lepes lepes = x.kovetkezoLepes();
  342.  
  343.                     if (lepes == Lepes.Hit) x.lapotKap(kevert[rand.Next(kevert.Count)]);
  344.                     if (lepes == Lepes.Stand) continue;
  345.                     if (lepes == Lepes.Bust) x.jatszik = false;
  346.                 }                
  347.             }            
  348.             Jatekbarlang.nyertes = Jatekbarlang.jatekosLista[0];
  349.             for (int i = 1; i < Jatekbarlang.jatekosLista.Count; i++)
  350.             {
  351.                 if (Jatekbarlang.nyertes.osszErtek < Jatekbarlang.jatekosLista[i].osszErtek) Jatekbarlang.nyertes = Jatekbarlang.jatekosLista[i];
  352.             }
  353.  
  354.             Jatekbarlang.nyertes.penz += 2 * (kassza / 3);
  355.             this.penz += kassza / 3;
  356.         }        
  357.  
  358.         public Oszto(int penz, int mereszseg)
  359.             : base(penz, mereszseg) { }
  360.     }
  361.  
  362.     class Jatekbarlang
  363.     {
  364.         Random rand = new Random();
  365.         public static List<Jatekos> jatekosLista = new List<Jatekos>();
  366.         void alapFeltolt()
  367.         {
  368.             Oszto.alapPakli.Clear();
  369.             for (int i = 0; i < 4; i++)
  370.             {
  371.                 for (int j = 0; j < 14; j++)
  372.                 {
  373.                     Oszto.alapPakli.Add(new Lap((Kartya)j, (Szin)i));
  374.                 }
  375.             }
  376.         }
  377.  
  378.         public void jatekInditas(int jatekosSzam, int jatekokSzama)
  379.         {
  380.             Oszto o = new Oszto(rand.Next(200, 2000), rand.Next(10, 22));
  381.             for (int i = 0; i < jatekosSzam; i++)
  382.             {
  383.                 jatekosLista.Add(new Jatekos(rand.Next(200,2000), rand.Next(10,22)));
  384.             }
  385.  
  386.             for (int i = 0; i < jatekokSzama; i++)
  387.             {
  388.                 o.jatekIndul();
  389.             }
  390.         }
  391.         public static Jatekos nyertes;        
  392.  
  393.         public Jatekbarlang()
  394.         {
  395.             alapFeltolt();
  396.         }
  397.     }
  398.  
  399.     class Program
  400.     {
  401.         static void Main(string[] args)
  402.         {
  403.             Random rand = new Random();
  404.             Jatekbarlang barlang = new Jatekbarlang();
  405.             barlang.jatekInditas(rand.Next(4, 9), 1);
  406.  
  407.             Console.WriteLine("Nyertes játékos összegyűjtott pénze: {0}", Jatekbarlang.nyertes.penz);
  408.  
  409.             Console.ReadLine();
  410.         }
  411.     }
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement