C# Vykreslování nahodných polí!
Napsal: 10 bře 2015 19:34
od GonCz
Ahoj, začínám se učit základy csharpu a teď konekrétně hru snake. Není to klasickej snake, ale pomoci šipek se může pohybovat kam chce, ale nemůže na jedno políčko stoupnout 2x. Nicméně, teď se mi to podařilo doprogramovat, ale jen tak se mi vykreslujou náhodně políčka, jak bych už na ně šlapnul. viz obrázek.
A ještě tam je takovej malej problém, který mě ani zas tak tolik netrápí. Jde o to, že když přejdu ze souřadnice 9 na 10 a pak zpátky zase na souřadnici 9, tak se ale nezobrazí 9, ale 90. Čili, když přejdu z jednociferného čísla na dvojciferné, tak se mi na zpátek už na jednociferné nevrátí.
Tady ještě přikládám kódy jednotlivých tříd:
Program.cs
Nabidka.cs
HerniSvet.cs
StavHry.cs
případně program na stažení: http://leteckaposta.cz/744528950
A ještě tam je takovej malej problém, který mě ani zas tak tolik netrápí. Jde o to, že když přejdu ze souřadnice 9 na 10 a pak zpátky zase na souřadnici 9, tak se ale nezobrazí 9, ale 90. Čili, když přejdu z jednociferného čísla na dvojciferné, tak se mi na zpátek už na jednociferné nevrátí.
Tady ještě přikládám kódy jednotlivých tříd:
Program.cs
► Zobrazit spoiler
Kód: Vybrat vše
using System;
namespace SnakeGame
{
class Program
{
static void Main(string[] args)
{
bool hraPokracuje = true;
while (hraPokracuje) {
int vysledekVolby = Nabidka.ZobrazHlavniNabidku();
const int novaHra = 0;
const int instrukce = 1;
const int konec = 2;
switch (vysledekVolby)
{
case novaHra:
Console.Clear();
HerniSvet hs = new HerniSvet();
HerniSvet herniSvet = new HerniSvet();
while(herniSvet.StavHry== StavHry.Probiha) {
herniSvet.ZpracovaniPohybu();
herniSvet.AktualizujZobrazeni();
herniSvet.zkontrolujPolicko();
}
switch (herniSvet.StavHry)
{
case StavHry.Vyhra:
Console.Clear();
Console.WriteLine("Vyhrál jste!");
break;
case StavHry.Prohra:
Console.Clear();
Console.WriteLine("Prohrál jste!");
break;
case StavHry.Ukonceni:
Console.Clear();
Console.WriteLine("Hra byla ukončena!");
break;
}
Console.ReadKey();
break;
case instrukce:
Console.Clear();
Console.WriteLine("Instrukce:\n\nOvladání pomocí šipek.\n\nCíl: Posbírat všechny předměty a projít východem.");
Console.ReadKey();
break;
case konec:
hraPokracuje = false;
break;
}
}
}
}
}
Nabidka.cs
► Zobrazit spoiler
Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SnakeGame
{
class Nabidka
{
public static int ZobrazHlavniNabidku()
{
String[] vyberNabidek = new String[3];
vyberNabidek[0] = "Nová hra";
vyberNabidek[1] = "Instrukce";
vyberNabidek[2] = "Konec";
int zvolenaPolozka = 0;
bool vyberDokoncen = false;
Console.Clear();
while (!vyberDokoncen)
{
Console.SetCursorPosition(0, 3);
for (int i = 0; i < vyberNabidek.Length; i++)
{
if (zvolenaPolozka == i)
{
Console.BackgroundColor = ConsoleColor.Blue;
}
Console.WriteLine(vyberNabidek[i]);
Console.ResetColor();
}
ConsoleKeyInfo StisknutaKlavesa = Console.ReadKey(true);
if (StisknutaKlavesa.Key == ConsoleKey.DownArrow)
{
zvolenaPolozka++;
if (zvolenaPolozka == vyberNabidek.Length)
{
zvolenaPolozka = 0;
}
}
if (StisknutaKlavesa.Key == ConsoleKey.UpArrow)
{
zvolenaPolozka--;
if (zvolenaPolozka < 0)
{
zvolenaPolozka = vyberNabidek.Length - 1;
}
}
else if (StisknutaKlavesa.Key == ConsoleKey.Enter)
{
vyberDokoncen = true;
}
}
return zvolenaPolozka;
}
}
}
HerniSvet.cs
► Zobrazit spoiler
Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SnakeGame
{
class HerniSvet
{
private int[,] herniMapa;
const int mapaSirka = 24;
const int mapaVyska = 24;
public const int prekazka = 3;
public const int predmet = 2;
public const int vychod = 1;
public int zbyvajiciPredmety = 0;
public HerniSvet()
{
herniMapa = new int[mapaSirka, mapaVyska];
for (int y = 0; y < mapaVyska; y++)
{
herniMapa[0, y] = prekazka;
herniMapa[mapaSirka - 1, y] = prekazka;
}
for (int x = 0; x < mapaVyska; x++)
{
herniMapa[x, 0] = prekazka;
herniMapa[x, mapaVyska - 1] = prekazka;
}
for (int a = 0; a < mapaVyska - 8; a++)
{
herniMapa[5, a] = prekazka;
}
for (int b = 11; b < mapaVyska-1; b++)
{
herniMapa[10, b] = prekazka;
}
for (int b = 0; b < mapaVyska - 10; b++)
{
herniMapa[14, b] = prekazka;
}
for (int b = 11; b < mapaVyska - 1; b++)
{
herniMapa[19, b] = prekazka;
}
for (int b = 18; b < mapaSirka - 1; b++)
{
herniMapa[b, 5]=prekazka;
}
for (int b = 18; b < mapaSirka - 1; b++)
{
herniMapa[5, b] = prekazka;
}
herniMapa[3,2 ] = predmet;
herniMapa[22, 22] = vychod;
herniMapa[1, 21] = predmet;
herniMapa[7,22] =predmet;
herniMapa[9, 12] = predmet;
herniMapa[11, 3] = predmet;
herniMapa[11, 11] = predmet;
herniMapa[13, 20] = predmet;
herniMapa[15, 13] = predmet;
herniMapa[19, 1] = predmet;
herniMapa[22, 4] = predmet;
herniMapa[22, 7] = predmet;
zobrazHerniSvet();
}
public StavHry StavHry = StavHry.Probiha;
private int x = 1, y = 1;
static int PredchoziX = 1, PredchoziY = 1;
void zobrazHerniSvet()
{
Console.SetCursorPosition(mapaSirka + 2, 0);
Console.WriteLine("Předměty: " + zbyvajiciPredmety+"/11");
for (int y = 0; y < mapaVyska; y++)
{
for (int x = 0; x < mapaVyska; x++)
{
if (herniMapa[x, y] == prekazka)
{
Console.SetCursorPosition(x, y);
Console.Write('#');
}
else if (herniMapa[x, y] == predmet)
{
Console.SetCursorPosition(x, y);
Console.ForegroundColor = ConsoleColor.Green;
Console.Write('*');
Console.ResetColor();
}
else if (herniMapa[x, y] == vychod)
{
Console.SetCursorPosition(x, y);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write('O');
Console.ResetColor();
}
}
}
}
public void ZpracovaniPohybu()
{
Console.SetCursorPosition(x, y);
Console.BackgroundColor = ConsoleColor.Red;
Console.Write('X');
Console.ResetColor();
ConsoleKeyInfo stisknutaKlavesa = Console.ReadKey(true);
switch (stisknutaKlavesa.Key)
{
case ConsoleKey.DownArrow:
y++;
break;
case ConsoleKey.UpArrow:
y--;
break;
case ConsoleKey.LeftArrow:
x--;
break;
case ConsoleKey.RightArrow:
x++;
break;
case ConsoleKey.Escape:
StavHry= StavHry.Ukonceni;
break;
}
}
public void AktualizujZobrazeni()
{
Console.SetCursorPosition(PredchoziX, PredchoziY);
herniMapa[PredchoziX, PredchoziY] = prekazka;
Console.BackgroundColor = ConsoleColor.Green;
Console.Write('"');
Console.SetCursorPosition(x, y);
Console.BackgroundColor = ConsoleColor.Red;
Console.Write('X');
Console.ResetColor();
PredchoziX = x;
PredchoziY = y;
}
public void zkontrolujPolicko()
{
if (herniMapa[x, y] == prekazka)
{
StavHry = StavHry.Prohra;
}
if(herniMapa[x,y]==predmet){
herniMapa[x,y] = 0;
zbyvajiciPredmety++;
}
else if (herniMapa[x, y] == vychod && zbyvajiciPredmety == 11)
{
StavHry = StavHry.Vyhra;
}
else if (herniMapa[x, y] == vychod && zbyvajiciPredmety < 11)
{
StavHry= StavHry.Prohra;
}
Console.SetCursorPosition(mapaSirka + 2, 0);
Console.WriteLine("Předměty: " + zbyvajiciPredmety + "/11");
if (zbyvajiciPredmety == 11)
{
Console.SetCursorPosition(mapaSirka + 2, 0);
Console.WriteLine("Posbírané všechny předměty, nyní dodji do cíle!");
}
Console.SetCursorPosition(mapaSirka + 42, 2);
Console.WriteLine(x);
Console.SetCursorPosition(mapaSirka + 42, 3);
Console.WriteLine(y);
}
}
}
StavHry.cs
► Zobrazit spoiler
Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SnakeGame
{
enum StavHry
{
Probiha, Prohra, Vyhra, Ukonceni
}
}
případně program na stažení: http://leteckaposta.cz/744528950