Poker (null reference) – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Poker (null reference) – .NET – Fórum – Programujte.comPoker (null reference) – .NET – Fórum – Programujte.com

 

RePRO0
Super člen
13. 7. 2010   #1
-
0
-

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

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
liborb
~ Redaktor
+18
Guru
14. 7. 2010   #2
-
0
-

V konstruktoru Hra tu chybí inicializace jednotlivých prvků pole poleHráčů, něco jako:



for (int i = 0; i < poleHráčů.Length; i++)
{
poleHráčů[i] = new Player();
}


BTW: možná je to jenom můj předsudek, ale diakritika v názvech tříd, funkcí, proměnných .... :smile19:

Nahlásit jako SPAM
IP: 85.207.166.–
RePRO0
Super člen
14. 7. 2010   #3
-
0
-

To liborb : Diakritiku vůbec nepíšu. Dokonce to píšu vždy celé v angličtině, ale aby to bylo srozumitelné pro vás, pro čechy, tak to píšu v beta verzi česky. :-))

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
RePRO0
Super člen
14. 7. 2010   #4
-
0
-

To RePRO : Jinak děkuju Libore. Valí to hezky. :-)

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

Podobná vlákna

Poker — založil xeonikx

NULL — založil Sss

Reference — založil Míša

Realloc a NULL — založil olgo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý