Zdravím,
jednoho večera jsem si jen tak psal kód a implementaci pokeru. Jenže problém je v tom, že tam nemám reference. Nevím, proč se to v paměti neodkazuje a nepospojuje. :-(
Tam, kde mám napsáno v komentáři doopravit referenci (u třech případů), tak tam mi překladač háže NULL reference. Poradíte mi? :-) Hledal jsem to asi dvě hodiny a nic. :-)) Moc děkuju.
using System;
using System.Collections;
namespace Poker
{
// TŘÍDA KARTY ----------------------------------------------
class Karty
{
// úložiště pro naše karty (zamíchané)
public Stack zamíchanéKarty;
// úložiště pro naše karty (nezamíchané)
public ArrayList nezamíchanéKarty;
// implicitní konstruktor (načteme karty)
public Karty()
{
// nezamíchané karty
nezamíchanéKarty = new ArrayList();
// zamíchané karty
zamíchanéKarty = new Stack();
// přidáme nezamíchané karty do Listu
nezamíchanéKarty.Add("2 srdcová");
nezamíchanéKarty.Add("2 kulová");
nezamíchanéKarty.Add("2 křížová");
nezamíchanéKarty.Add("2 piková");
nezamíchanéKarty.Add("3 srdcová");
nezamíchanéKarty.Add("3 kulová");
nezamíchanéKarty.Add("3 křížová");
nezamíchanéKarty.Add("3 piková");
nezamíchanéKarty.Add("4 srdcová");
nezamíchanéKarty.Add("4 kulová");
nezamíchanéKarty.Add("4 křížová");
nezamíchanéKarty.Add("4 piková");
nezamíchanéKarty.Add("5 srdcová");
nezamíchanéKarty.Add("5 kulová");
nezamíchanéKarty.Add("5 křížová");
nezamíchanéKarty.Add("5 piková");
nezamíchanéKarty.Add("6 srdcová");
nezamíchanéKarty.Add("6 kulová");
nezamíchanéKarty.Add("6 křížová");
nezamíchanéKarty.Add("6 piková");
nezamíchanéKarty.Add("7 srdcová");
nezamíchanéKarty.Add("7 kulová");
nezamíchanéKarty.Add("7 křížová");
nezamíchanéKarty.Add("7 piková");
nezamíchanéKarty.Add("8 srdcová");
nezamíchanéKarty.Add("8 kulová");
nezamíchanéKarty.Add("8 křížová");
nezamíchanéKarty.Add("8 piková");
nezamíchanéKarty.Add("9 srdcová");
nezamíchanéKarty.Add("9 kulová");
nezamíchanéKarty.Add("9 křížová");
nezamíchanéKarty.Add("9 piková");
nezamíchanéKarty.Add("10 srdcová");
nezamíchanéKarty.Add("10 kulová");
nezamíchanéKarty.Add("10 křížová");
nezamíchanéKarty.Add("10 piková");
nezamíchanéKarty.Add("J srdcový");
nezamíchanéKarty.Add("J kulový");
nezamíchanéKarty.Add("J křížový");
nezamíchanéKarty.Add("J pikový");
nezamíchanéKarty.Add("Q srdcová");
nezamíchanéKarty.Add("Q kulová");
nezamíchanéKarty.Add("Q křížová");
nezamíchanéKarty.Add("Q piková");
nezamíchanéKarty.Add("K srdcový");
nezamíchanéKarty.Add("K kulový");
nezamíchanéKarty.Add("K křížový");
nezamíchanéKarty.Add("K pikový");
nezamíchanéKarty.Add("A srdcové");
nezamíchanéKarty.Add("A kulové");
nezamíchanéKarty.Add("A křížové");
nezamíchanéKarty.Add("A pikové");
}
// metoda, která vloží do zásobníku zamíchané karty
public void vložitDoZásobníku()
{
foreach (object b in nezamíchanéKarty)
{
// zamíchané karty je datová struktura zásobník :-)
// vložíme zamíchané karty do zásobníku
zamíchanéKarty.Push(b);
}
}
// metoda pro výpis všech karet (zamíchaných) v zásobníku
public void vypsatKarty()
{
foreach (object k in zamíchanéKarty)
{
Console.Write("{0} \n", k);
}
}
}
// TŘÍDA HRÁČ -----------------------------------------------
class Player
{
// třídní veřejná proměnná (hráčovy karty)
public object[] Karty;
// implicitní konstruktor vytvoří pole, kde budou dvě karty
public Player()
{
Karty = new object[2];
}
// metoda zobrazí hráčovi karty
public void hracoviKarty()
{
Console.Write("\n {0}, {1} ", Karty[0], Karty[1]);
}
}
// TŘÍDA DEALER ---------------------------------------------
class Dealer
{
// karty na které vidí pouze dealer (privátní datová složka)
private Karty b;
private Hra h;
// implicitní konstruktor
public Dealer(Karty _b, Hra _h)
{
this.b = _b;
this.h = _h;
}
// metoda, pro zamíchání karet (což umí dealer)
public void zamíchatKarty()
{
Random n = new Random();
for (int i = 0; i < b.nezamíchanéKarty.Count; i++)
{
// nahodí nám číslo od 0 až 51
int kartaNaPřehození = n.Next(b.nezamíchanéKarty.Count - 1);
object kartaDočasná = b.nezamíchanéKarty[i];
b.nezamíchanéKarty[i] = b.nezamíchanéKarty[kartaNaPřehození];
b.nezamíchanéKarty[kartaNaPřehození] = kartaDočasná;
}
b.vložitDoZásobníku();
}
public void rozdatKarty()
{
// rozdáme první kartu
for (int i = 0; i < h.poleHráčů.Length; i++)
{
// doopravit referenci
h.poleHráčů[i].Karty[0] = b.zamíchanéKarty.Pop();
}
// rozdáme druhou kartu
for (int i = 0; i < h.poleHráčů.Length; i++)
{
// doopravit referenci
h.poleHráčů[i].Karty[1] = b.zamíchanéKarty.Pop();
}
}
}
// TŘÍDA HRA ------------------------------------------------
class Hra
{
public Player[] poleHráčů;
// implicitní konstruktor
public Hra()
{
poleHráčů = new Player[0];
}
// explicitní konstruktor
public Hra(int pocetHracu)
{
poleHráčů = new Player[pocetHracu];
}
// metoda pro výpis dvou karet všech hráčů v herně
public void vypsatKartyHráčů()
{
for (int i = 0; i < poleHráčů.Length; i++)
{
// doopravit referenci
poleHráčů[i].hracoviKarty();
}
}
}
// TŘÍDA PROGRAM - hlavní třída -----------------------------
class Program
{
static void Main(string[] args)
{
// vytvoříme nový balíček karet
Karty b = new Karty();
// a ke stolu usedne 10 hráčů
Hra h = new Hra(10);
// a nového dealera, který nám převezme karty a hru
Dealer dealer = new Dealer(b, h);
// dealer zamíchá karty :-)
dealer.zamíchatKarty();
// dealer rozdá karty :-)
dealer.rozdatKarty();
// a vypíšeme karty hráčů
h.vypsatKartyHráčů();
// vypíšeme všechny karty
b.vypsatKarty();
Console.ReadKey();
}
}
}