Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // A főprogram:
- class Program
- {
- static void Main(string[] args)
- {
- Palya palya = new Palya(Nehezseg.Konnyu);
- palya.Init();
- palya.Start();
- Console.ReadLine();
- }
- }
- // A pálya osztálya:
- namespace Wumpus
- {
- class Palya
- {
- private Tipus[,] _palya;
- private bool _inicializalva;
- private Pozicio _jatekos = new Pozicio(0, 0);
- private int _nyilak;
- private Nehezseg _nehezseg;
- private Random rand = new Random();
- public Palya(Nehezseg nehezseg)
- {
- _nehezseg = nehezseg;
- }
- public void Init()
- {
- if (_nehezseg == Nehezseg.Egyeni) throw new Exception("Egyéni pálya inicializálásához hívd az InitEgyeniPalya metódust.");
- switch (_nehezseg)
- {
- case Nehezseg.Konnyu:
- InitKonnyuPalya();
- break;
- case Nehezseg.Kozepes:
- InitKozepesPalya();
- break;
- case Nehezseg.Nehez:
- InitNehezPalya();
- break;
- }
- _inicializalva = true;
- }
- public void Start()
- {
- if (!_inicializalva) throw new Exception("A pálya nincs inicializálva!");
- Console.WriteLine("Új játék indult! A választott nehézség: " + _nehezseg);
- while (true)
- {
- switch (_palya[_jatekos.X, _jatekos.Y])
- {
- case Tipus.Jatekos:
- break;
- case Tipus.Wumpus:
- Console.WriteLine("JÁTÉK VÉGE! Felfalt a Wumpus!");
- return;
- case Tipus.Verem:
- Console.WriteLine("JÁTÉK VÉGE! Beleestél egy verembe!");
- return;
- case Tipus.SekelyVerem:
- Console.WriteLine("Egy másik pályán találod magad!");
- if (_nehezseg == Nehezseg.Egyeni)
- {
- // TODO: Egyéni pályák dolgait eltárolni!
- InitEgyeniPalya(_palya.GetLength(0), 0, 0, 0, 0, 0);
- Start();
- return;
- }
- Init();
- Start();
- return;
- case Tipus.Denever:
- Console.WriteLine("Egy denevért találtál! Elteleportálódál máshová!");
- MezoErtekad(1, Tipus.Jatekos);
- break;
- case Tipus.TuleloCsomag:
- Console.WriteLine("Találtál egy túlélő csomagot! Kapsz két plusz nyilat!");
- _nyilak += 2;
- break;
- }
- if (_nyilak == 0)
- {
- Console.WriteLine("JÁTÉK VÉGE! Kifogytál a nyilakból!");
- return;
- }
- _palya[_jatekos.X, _jatekos.Y] = Tipus.Jatekos;
- Console.WriteLine("Jelenlegi pozíciód: ({0}, {1})", _jatekos.X, _jatekos.Y);
- Console.WriteLine("Jelenleg ennyi nyilad van: " + _nyilak);
- Console.WriteLine("Amit érzel: " + Eszleles());
- ConsoleKeyInfo input;
- do
- {
- Console.WriteLine("Mit teszel? Lépsz, vagy nyilazol valamelyik irányba?");
- Console.WriteLine("Üsd le az 'L' betűt a lépéshez vagy az 'N' betűt a nyilazáshoz.");
- input = Console.ReadKey(false);
- if (input.Key != ConsoleKey.L && input.Key != ConsoleKey.N)
- {
- Console.WriteLine("Kérlek, az L vagy az N billentyűk valamelyikét üsd le.");
- }
- } while (input.Key != ConsoleKey.L && input.Key != ConsoleKey.N);
- if (input.Key == ConsoleKey.L) // Lép a játékos
- {
- while (true)
- {
- Console.WriteLine("Melyik irányba szeretnél lépni?");
- Console.WriteLine("A nyíl billentyűkkel választhatsz irányt.");
- input = Console.ReadKey(false);
- if (input.Key != ConsoleKey.RightArrow
- && input.Key != ConsoleKey.LeftArrow
- && input.Key != ConsoleKey.UpArrow
- && input.Key != ConsoleKey.DownArrow)
- {
- Console.WriteLine("Kérlek, a nyíl billentyűk valamelyikét üsd le.");
- continue;
- }
- if (input.Key == ConsoleKey.RightArrow // jobbrát nyomott
- && _jatekos.Y == _palya.GetLength(0) - 1 // de a jobb szélen van
- ||
- input.Key == ConsoleKey.LeftArrow // balrát nyomott
- && _jatekos.Y == 0 // de a bal szélen van
- ||
- input.Key == ConsoleKey.UpArrow // felfelét nyomott
- && _jatekos.X == 0 // de a felső sorban van
- ||
- input.Key == ConsoleKey.DownArrow // lefelét nyomott
- && _jatekos.X == _palya.GetLength(0) - 1) // de az alsó sorban van
- {
- Console.WriteLine("Ebbe az irányba nem léphetsz, mert szélen vagy, kérlek próbáld újra!");
- continue;
- }
- break;
- }
- // Léphet!
- Pozicio temp2 = _jatekos.Clone();
- if (input.Key == ConsoleKey.RightArrow) _jatekos.Y++;
- else if (input.Key == ConsoleKey.LeftArrow) _jatekos.Y--;
- else if (input.Key == ConsoleKey.UpArrow) _jatekos.X--;
- else _jatekos.X++;
- _palya[temp2.X, temp2.Y] = Tipus.Ures;
- }
- else // Nyilazik a játékos
- {
- while (true)
- {
- Console.WriteLine("Melyik irányba szeretnél nyilazni?");
- Console.WriteLine("A nyíl billentyűkkel választhatsz irányt.");
- input = Console.ReadKey();
- if (input.Key != ConsoleKey.RightArrow
- && input.Key != ConsoleKey.LeftArrow
- && input.Key != ConsoleKey.UpArrow
- && input.Key != ConsoleKey.DownArrow)
- {
- Console.WriteLine("Kérlek, a nyíl billentyűk valamelyikét üsd le.");
- continue;
- }
- if (input.Key == ConsoleKey.RightArrow // jobbrát nyomott
- && _jatekos.Y == _palya.GetLength(0) - 1 // de a jobb szélen van
- ||
- input.Key == ConsoleKey.LeftArrow // balrát nyomott
- && _jatekos.Y == 0 // de a bal szélen van
- ||
- input.Key == ConsoleKey.UpArrow // felfelét nyomott
- && _jatekos.X == 0 // de a felső sorban van
- ||
- input.Key == ConsoleKey.DownArrow // lefelét nyomott
- && _jatekos.X == _palya.GetLength(0) - 1) // de az alsó sorban van
- {
- Console.WriteLine("Ebbe az irányba nem nyilazhatsz, mert szélen vagy, kérlek próbáld újra!");
- continue;
- }
- break;
- }
- _nyilak--;
- bool meghaltWumpus;
- if (input.Key == ConsoleKey.RightArrow)
- meghaltWumpus = _palya[_jatekos.X, _jatekos.Y + 1] == Tipus.Wumpus;
- else if (input.Key == ConsoleKey.LeftArrow)
- meghaltWumpus = _palya[_jatekos.X, _jatekos.Y - 1] == Tipus.Wumpus;
- else if (input.Key == ConsoleKey.UpArrow)
- meghaltWumpus = _palya[_jatekos.X - 1, _jatekos.Y] == Tipus.Wumpus;
- else meghaltWumpus = _palya[_jatekos.X + 1, _jatekos.Y] == Tipus.Wumpus;
- if (meghaltWumpus)
- {
- Console.WriteLine("SIKER! Megölted Wumpust! Ennyi nyilad maradt: " + _nyilak);
- return;
- }
- }
- Trace.WriteLine(ToString());
- }
- }
- private string Eszleles()
- {
- StringBuilder sb = new StringBuilder();
- bool wumpus = false;
- bool verem = false;
- bool denever = false;
- Tipus[,] kornyezoMezok = KornyezoMezok(_jatekos);
- foreach (Tipus mezo in kornyezoMezok)
- {
- if (mezo == Tipus.Tiltott || mezo == Tipus.Jatekos)
- continue;
- if (mezo == Tipus.Wumpus)
- wumpus = true;
- else if (mezo == Tipus.Verem || mezo == Tipus.SekelyVerem)
- verem = true;
- else if (mezo == Tipus.Denever)
- denever = true;
- }
- if (!wumpus && !verem && !denever) return "Semmit.";
- if (wumpus) sb.Append("\n- büdöset");
- if (verem) sb.Append("\n- szelet");
- if (denever) sb.Append("\n- zaj");
- return sb.ToString();
- }
- public Tipus[,] KornyezoMezok(Pozicio playerPozicio)
- {
- Tipus[,] mezok = new Tipus[3, 3];
- mezok[1, 1] = Tipus.Jatekos; // A játékos relatív helyzete
- // Felső három
- if (playerPozicio.X != 0) // Nem az első sorban van a játékos
- {
- if (playerPozicio.Y != 0) // és nem az első oszlopban
- mezok[0, 0] = _palya[playerPozicio.X - 1, playerPozicio.Y - 1];
- else // viszont az első oszlopban van
- mezok[0, 0] = Tipus.Tiltott;
- mezok[0, 1] = _palya[playerPozicio.X - 1, playerPozicio.Y];
- if (playerPozicio.Y != _palya.GetLength(0) - 1) // Az utolsó oszlopban van a játékos
- mezok[0, 2] = _palya[playerPozicio.X - 1, playerPozicio.Y + 1];
- else
- mezok[0, 2] = Tipus.Tiltott;
- }
- else // Az első sorban van a játékos
- {
- mezok[0, 0] = Tipus.Tiltott;
- mezok[0, 1] = Tipus.Tiltott;
- mezok[0, 2] = Tipus.Tiltott;
- }
- // Középső három
- if (playerPozicio.Y != 0) // Nem az első oszlopban van a játékos
- mezok[1, 0] = _palya[playerPozicio.X, playerPozicio.Y - 1];
- else // Az első oszlopban van a játékos
- mezok[1, 0] = Tipus.Tiltott;
- if (playerPozicio.Y != _palya.GetLength(0) - 1) // Nem az utolsó oszlopban van a játékos
- mezok[1, 2] = _palya[playerPozicio.X, playerPozicio.Y + 1];
- else // Az utolsó oszlopban van a játékos
- mezok[1, 2] = Tipus.Tiltott;
- // Alsó három
- if (playerPozicio.X != _palya.GetLength(0) - 1) // Nem az utolsó sorban van a játékos
- {
- if (playerPozicio.Y != 0) // és nem is az első oszlopban
- mezok[2, 0] = _palya[playerPozicio.X + 1, playerPozicio.Y - 1];
- else // viszont az első oszlopban
- mezok[2, 0] = Tipus.Tiltott;
- mezok[2, 1] = _palya[playerPozicio.X + 1, playerPozicio.Y];
- if (playerPozicio.Y != _palya.GetLength(0) - 1) // Nem az utolsó oszlopban van
- mezok[2, 2] = _palya[playerPozicio.X + 1, playerPozicio.Y + 1];
- else // Az utolsó oszlopban van
- mezok[2, 2] = Tipus.Tiltott;
- }
- else // Az utolsó sorban van a játékos
- {
- mezok[2, 0] = Tipus.Tiltott;
- mezok[2, 1] = Tipus.Tiltott;
- mezok[2, 2] = Tipus.Tiltott;
- }
- return mezok;
- }
- public void InitEgyeniPalya(int meret, int nyilak, int tuleloCsomagokSzama, int wumpusokSzama, int vermekSzama, int deneverekSzama)
- {
- if (_nehezseg != Nehezseg.Egyeni) throw new Exception("Nem egyéni pálya inicializálásához hívd az Init metódust.");
- _palya = FeltoltUresMezokkel(meret);
- _palya[0, 0] = Tipus.Jatekos;
- _nyilak = nyilak;
- WumpusokElhelyezese(wumpusokSzama);
- TuleloCsomagElhelyezese(tuleloCsomagokSzama);
- VermekElhelyezese(vermekSzama);
- DeneverekElhelyezese(deneverekSzama);
- _inicializalva = true;
- }
- private Tipus[,] FeltoltUresMezokkel(int meret)
- {
- Tipus[,] p = new Tipus[meret, meret];
- for (int i = 0; i < meret; i++)
- {
- for (int j = 0; j < meret; j++)
- {
- p[i, j] = Tipus.Ures;
- }
- }
- return p;
- }
- private void InitKonnyuPalya()
- {
- _palya = FeltoltUresMezokkel(5);
- _palya[0, 0] = Tipus.Jatekos;
- _nyilak = 3;
- WumpusokElhelyezese(1);
- VermekElhelyezese(5);
- DeneverekElhelyezese(2);
- TuleloCsomagElhelyezese(1);
- }
- private void InitKozepesPalya()
- {
- _palya = FeltoltUresMezokkel(8);
- _palya[0, 0] = Tipus.Jatekos;
- _nyilak = 2;
- WumpusokElhelyezese(1);
- VermekElhelyezese(8);
- DeneverekElhelyezese(5);
- TuleloCsomagElhelyezese(1);
- }
- private void InitNehezPalya()
- {
- _palya = FeltoltUresMezokkel(10);
- _palya[0, 0] = Tipus.Jatekos;
- _nyilak = 1;
- WumpusokElhelyezese(1);
- VermekElhelyezese(12);
- DeneverekElhelyezese(8);
- TuleloCsomagElhelyezese(1);
- }
- private void DeneverekElhelyezese(int deneverekSzama)
- {
- MezoErtekad(deneverekSzama, Tipus.Denever);
- }
- private void WumpusokElhelyezese(int wumpusokSzama)
- {
- MezoErtekad(wumpusokSzama, Tipus.Wumpus);
- }
- private void VermekElhelyezese(int vermekSzama)
- {
- for (int i = 0; i < vermekSzama; i++)
- {
- while (true)
- {
- int x = rand.Next(1, _palya.GetLength(0));
- int y = rand.Next(1, _palya.GetLength(0));
- if (_palya[x, y] == 0)
- {
- _palya[x, y] = rand.NextDouble() >= 0.75 ? Tipus.SekelyVerem : Tipus.Verem;
- break;
- }
- }
- }
- }
- private void TuleloCsomagElhelyezese(int csomagSzama)
- {
- MezoErtekad(csomagSzama, Tipus.TuleloCsomag);
- }
- private void MezoErtekad(int hanyszor, Tipus ertek)
- {
- for (int i = 0; i < hanyszor; i++)
- {
- while (true)
- {
- int x = rand.Next(1, _palya.GetLength(0));
- int y = rand.Next(1, _palya.GetLength(0));
- if (_palya[x, y] == 0)
- {
- _palya[x, y] = ertek;
- break;
- }
- }
- }
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < _palya.GetLength(0); i++)
- {
- for (int j = 0; j < _palya.GetLength(1); j++)
- {
- sb.Append((int)_palya[i, j]);
- }
- sb.Append("\n");
- }
- return sb.ToString();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement