Diskuze: pexeso dva hráči
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


class Program
{
static int[,] pexeso = new int[6, 6];
static int souradnice_karty_1_x, souradnice_karty_1_y, souradnice_karty_2_x, souradnice_karty_2_y, hodnota_karta_1, hodnota_karta_2, body, souradnice_karty;
static string prvni_hrac, druhy_hrac;
static void Main(string[] args)
{
Napln();
while (true)
{
Console.WriteLine(Vypis_skryte());
Console.WriteLine("");
Console.WriteLine(vypis(pexeso));
Console.WriteLine("");
Otoc_karty();
Console.WriteLine("");
Console.WriteLine("Vaše první karta na souřadnicích: " + (souradnice_karty_1_y + 1) + "y " + "a " + (souradnice_karty_1_x + 1) + "x " + "má hodnotu: " + hodnota_karta_1);
Console.WriteLine("Vaše druhá karta na souřadnicích: " + (souradnice_karty_2_y + 1) + "y " + "a " + (souradnice_karty_2_x + 1) + "x " + "má hodnotu: " + hodnota_karta_2);
Console.WriteLine("");
Porovnej();
Konec();
}
}
static void Napln()
{
pexeso[0, 0] = 16;
pexeso[0, 1] = 7;
pexeso[0, 2] = 17;
pexeso[0, 3] = 2;
pexeso[0, 4] = 18;
pexeso[0, 5] = 9;
pexeso[1, 0] = 15;
pexeso[1, 1] = 8;
pexeso[1, 2] = 3;
pexeso[1, 3] = 6;
pexeso[1, 4] = 16;
pexeso[1, 5] = 11;
pexeso[2, 0] = 2;
pexeso[2, 1] = 6;
pexeso[2, 2] = 4;
pexeso[2, 3] = 8;
pexeso[2, 4] = 12;
pexeso[2, 5] = 14;
pexeso[3, 0] = 3;
pexeso[3, 1] = 10;
pexeso[3, 2] = 1;
pexeso[3, 3] = 5;
pexeso[3, 4] = 15;
pexeso[3, 5] = 11;
pexeso[4, 0] = 18;
pexeso[4, 1] = 13;
pexeso[4, 2] = 1;
pexeso[4, 3] = 10;
pexeso[4, 4] = 14;
pexeso[4, 5] = 4;
pexeso[5, 0] = 12;
pexeso[5, 1] = 5;
pexeso[5, 2] = 9;
pexeso[5, 3] = 17;
pexeso[5, 4] = 13;
pexeso[5, 5] = 7;
}
static string vypis(int[,] _pole)
{
string vypis = "";
for (int i = 0; i <= _pole.GetUpperBound(0); i++)
{
for (int j = 0; j <= _pole.GetUpperBound(1); j++)
{
vypis += _pole[i, j] + " ";
}
vypis += "\n";
}
return vypis;
}
static void Otoc_karty()
{
do
{
souradnice_karty_1_y = Zadej_kartu("1 karty: y");
souradnice_karty_1_x = Zadej_kartu("1 karty: x");
hodnota_karta_1 = pexeso[souradnice_karty_1_y, souradnice_karty_1_x];
do
{
souradnice_karty_2_y = Zadej_kartu("2 karty: y");
souradnice_karty_2_x = Zadej_kartu("2 karty: x");
}
while (souradnice_karty_1_x == souradnice_karty_2_x & souradnice_karty_1_y == souradnice_karty_2_y);
hodnota_karta_2 = pexeso[souradnice_karty_2_y, souradnice_karty_2_x];
if (pexeso[souradnice_karty_1_y, souradnice_karty_1_x] == 0)
{
if (pexeso[souradnice_karty_2_y, souradnice_karty_2_x] == 0)
{
Console.WriteLine("Karty už jsou vybrány");
Console.WriteLine(" ");
}
Console.WriteLine("Zadej znova");
Console.WriteLine(" ");
Console.WriteLine(" ");
}
}
while (pexeso[souradnice_karty_1_y, souradnice_karty_1_x] == 0 & pexeso[souradnice_karty_2_y, souradnice_karty_2_x] == 0);
}
private static int Zadej_kartu(string _karta)
{
do
{
Console.WriteLine("Zadej souřadnici " + _karta);
while (!int.TryParse(Console.ReadLine(), out souradnice_karty))
{
Console.WriteLine("Neplatný znak, zadejte prosím znovu:");
}
Console.WriteLine("");
}
while (!(souradnice_karty > 0 & souradnice_karty <= 6));
souradnice_karty--;
return souradnice_karty;
}
static void Porovnej()
{
if (hodnota_karta_1 == hodnota_karta_2)
{
body += 1;
pexeso[souradnice_karty_1_y, souradnice_karty_1_x] = 0;
pexeso[souradnice_karty_2_y, souradnice_karty_2_x] = 0;
Console.WriteLine("Máte " + body + " bodů/y");
Console.WriteLine("");
}
else
{
Console.WriteLine("Vaše karty nejsou stejné");
Console.WriteLine("");
Console.WriteLine("Máte " + body + " bodů/y");
Console.WriteLine(" ");
}
}
static string Konec()
{
string konec = "Konec hry";
while (body == 18)
{
Environment.Exit(0);
}
return konec;
}
static string Vypis_skryte()
{
string vysledek_2 = "";
for (int i = 0; i <= pexeso.GetUpperBound(0); i++)
{
for (int j = 0; j <= pexeso.GetUpperBound(1); j++)
{
if (pexeso[i,j] == 0)
{
vysledek_2 += " o ";
}
else
{
vysledek_2 += " x ";
}
}
vysledek_2 += "\n";
}
return vysledek_2;
}
}
uf, ako tak pozerám tak napísať to bez objektov by bol celkom oriešok. Pozri si OOP v C# a po pár lekciách zistíš, že sa tvoje pexeso dá urobiť omnoho jednoduchšie a elegantnejšie. a len taká malá rada
static string Konec()
{
string konec = "Konec hry";
while (body == 18)
{
Environment.Exit(0);
}
return konec;
}
použi tu skôr if namiesto whilu, pretože keby si tam nemal Enviroment.Exit(0) tak by sa ti to zacyklilo.
Thomson:2.3.2018 17:45
Díky za radu. Mě je jasný že to de napsat jedno lépe ale je to "jenom" projekt do školy. A jinak se kouknu.
DarkCoder:2.3.2018 19:05
Mě je jasný že to de napsat jedno lépe ale je to "jenom" projekt do školy.
I projekt do školy je projekt jako každý jiný. A představa o povědomí, že to jde napsat lépe a neudělat to tak, je naprosto nemyslitelná. Myslíš, že je správné k tomu přistupovat s vědomím: "Takto to bude stačit.." ? Budeš-li se pokaždé snažit o lepší řešení, nejen že si vštípíš správné návyky, ale ještě ke všemu tomu budou tvé další a důležitější projekty mnohem efektivnější a ty si pak můžeš s klidným pocitem říci "Udělal jsem dobrou práci!"
Jinač ukončení hry prováděj na základě množství otočených/neotočených karet, nikoli počtu získaných bodů.
Thomson:2.3.2018 19:54
Tak já jsem napsal že se kouknu. Takže se to pokusím ještě předělat, navíc tento projekt pak budu muset ještě předělat do Xamarinu. Ale jinak Díky.
Zobrazeno 7 zpráv z 7.