Problém se spawnem – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém se spawnem – .NET – Fórum – Programujte.comProblém se spawnem – .NET – Fórum – Programujte.com

 

GunSpawn0
Newbie
27. 5. 2014   #1
-
0
-

Ahoj všem,
mám tu menší problém. Udělal jsem v C# hru, něco na způsob hada a všechny prvky jsou náhodně generovány, ale problém je v tom, že když hru spustím, tak se had nejdřív na obrazovce neobjeví vůbec a když dám šipku doprava, tak se objeví u posledního generovaného prvku (v tomto případě východ). [Nevšímejte si věcí, jakože překážkama se dá projít, to jsem ještě neřešil]. Zde je kód

using System;

 namespace Upg.Snake
 {
     enum StavHry
     {
         Probiha,Vyhra,Prohra,Ukonceni
     }

     class HerniSvet
     {
         private int[,] Mapa;
         private int x = 1, y = 1;
         int predchoziX = 1, predchoziY = 1;
         int zbyvajiciPredmety;
         int pocetPredmetu = 4;
         int pocetPrekazek = 4;
         int pocetVychodu = 1;
         const int MapaSirka = 24;
         const int MapaVyska = 24;
         const int Prekazka = 3;
         const int Predmet = 2;
         const int Vychod = 1;
         Random nahoda = new Random();
         public StavHry stavHry = StavHry.Probiha;


         public int X
         {
             get
             {
                 return x;
             }
             set
             {
                 if (value >= 1 && value < MapaSirka - 1)
                 {
                     if (Mapa[value, y] == Prekazka)
                     {
                         return;
                     }
                     Mapa[x, y] = Prekazka;
                     x = value;
                 }

             }
         }

         public int Y
         {
             get
             {
                 return y;
             }
             set
             {
                 if(value >=1 && value < MapaVyska -1)
                 {
                     if (Mapa[x,value] == Prekazka)
                     {
                         return;
                     }
                     Mapa[x, y] = Prekazka;
                     y = value;
                 }
             }
         }

         public void ZkontrolujPolicko()
         {
             if (Mapa[x,y] == Predmet)
             {
                 Mapa[x, y] = 0;
                 zbyvajiciPredmety--;
             }
             else if (Mapa[x,y] == Vychod && zbyvajiciPredmety == 0)
             {
                 stavHry = StavHry.Vyhra;
             }
             else if (Mapa[x,y] == Vychod && zbyvajiciPredmety > 0)
             {
                 stavHry = StavHry.Prohra;
             }
             if(Mapa[x-1,y] == Prekazka && Mapa[x,y-1] == Prekazka && Mapa[x+1,y] == Prekazka && Mapa[x,y+1] == Prekazka)
             {
                 stavHry = StavHry.Prohra;
             }
         }

         public void AktualizujZobrazeni()
         {
             Console.SetCursorPosition(predchoziX, predchoziY);
             Console.BackgroundColor = ConsoleColor.White;
             Console.Write(" ");
             Console.SetCursorPosition(x, y);
             Console.BackgroundColor = ConsoleColor.Red;
             Console.Write("X");
             Console.ResetColor();
             predchoziX = x;
             predchoziY = y;
             Console.SetCursorPosition(MapaSirka + 2, 0);
             Console.WriteLine("Předmětů zbývá sebrat: " + zbyvajiciPredmety);
         }

         public void ZpracovaniPohybu()
         {
             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 HerniSvet()
         {
             Mapa = new int[MapaSirka, MapaVyska];

             for (int y = 0; y < MapaVyska; y++)
             {
                 Mapa[0, y] = Prekazka;
                 Mapa[MapaSirka - 1, y] = Prekazka;
             }
             for (int x = 0;x < MapaSirka;x++)
             {
                 Mapa[x, 0] = Prekazka;
                 Mapa[x, MapaVyska - 1] = Prekazka;
             }
             for (int i = 0; i < pocetPrekazek; i++)
             {
                 x = nahoda.Next(1, 23);
                 y = nahoda.Next(1, 23);
                 Mapa[x,y] = Prekazka;
             }
             for (int i = 0; i < pocetPredmetu; i++)
             {
                 x = nahoda.Next(1, 23);
                 y = nahoda.Next(1, 23);
                 while (Mapa[x,y] == Prekazka)
                 {
                     x = nahoda.Next(1, 23);
                     y = nahoda.Next(1, 23);
                 }
                 Mapa[x, y] = Predmet;
             }
             for (int i = 0; i < pocetVychodu;i++)
             {
                 x = nahoda.Next(1, 23);
                 y = nahoda.Next(1, 23);
                 while(Mapa[x,y] == Prekazka || Mapa[x,y] == Predmet)
                 {
                     x = nahoda.Next(1, 23);
                     y = nahoda.Next(1, 23);
                 }
                 Mapa[x, y] = Vychod;
             }

                 for (int Y = 0; Y < MapaVyska; Y++)
                 {
                     for (int X = 0; X < MapaSirka; X++)
                     {
                         if (Mapa[X, Y] == Predmet)
                         {
                             zbyvajiciPredmety++;
                         }
                     }
                 }
             ZobrazHerniSvet();
         }

         private void ZobrazHerniSvet()
         {
             for(int y = 0;y < MapaVyska; y++)
             {
                 for(int x = 0; x < MapaSirka; x++)
                 {
                     if (Mapa[x,y] == Prekazka)
                     {
                         Console.SetCursorPosition(x, y);
                         Console.Write("#");
                     }
                     else if (Mapa[x, y] == Predmet)
                     {
                         Console.ForegroundColor = ConsoleColor.Green;
                         Console.SetCursorPosition(x, y);
                         Console.Write("*");
                         Console.ResetColor();
                     }
                     else if (Mapa[x,y] == Vychod)
                     {
                         Console.ForegroundColor = ConsoleColor.Yellow;
                         Console.SetCursorPosition(x, y);
                         Console.Write("@");
                         Console.ResetColor();
                     }
                 }
             }
         }
     }

     class Program
     {
         const int NovaHra = 0;
         const int Instrukce = 1;
         const int Konec = 2;

         static void Main(string[] args)
         {
             HlavniNabidka.ZobrazHlavniNabidku();
             bool hraPokracuje = true;

             while (hraPokracuje)
             {
                 int vysledekVolby = HlavniNabidka.ZobrazHlavniNabidku();
                 switch (vysledekVolby)
                 {
                     case NovaHra:
                         Console.Clear();
                         HerniSvet herniSvet = new HerniSvet();
                         while (herniSvet.stavHry == StavHry.Probiha)
                         {
                             herniSvet.ZpracovaniPohybu();
                             herniSvet.ZkontrolujPolicko();
                             herniSvet.AktualizujZobrazeni();
                         }
                         switch (herniSvet.stavHry)
                         {
                             case StavHry.Ukonceni:
                                 Console.Clear();
                                 Console.WriteLine("Hra ukončena uživatelem.");
                                 break;
                             case StavHry.Vyhra:
                                 Console.Clear();
                                 Console.WriteLine("VYhrál jsi!");
                                 break;
                             case StavHry.Probiha:
                                 Console.Clear();
                                 Console.WriteLine("Prohrál jsi!");
                                 break;
                         }
                         Console.ReadKey();
                         break;
                     case Instrukce:
                         Console.Clear();
                         Console.Write("Instrukce\nOvládání:");
                         Console.Write("šipky");
                         Console.Write("\nCíl hry:Sesbírej všechny předměty (*) a dojdi k východu (@). Cestou se vyhni překážkám (#)");
                         Console.ReadKey();
                         break;
                     case Konec:
                         hraPokracuje = false;
                         break;
                 }
             }
         }
     }
     class HlavniNabidka
     {
         public static int ZobrazHlavniNabidku()
         {
             string[] polozkyNabidky = new string[3];
             polozkyNabidky[0] = "Nová hra";
             polozkyNabidky[1] = "Instrukce";
             polozkyNabidky[2] = "Konec";

             int zvolenaPolozka = 0;
             bool vyberDokoncen = false;

             Console.Clear();

             while (!vyberDokoncen)
             {
                 Console.SetCursorPosition(0, 3);

                 for (int i = 0; i < polozkyNabidky.Length; i++)
                 {
                     if (zvolenaPolozka == i)
                     {
                         Console.BackgroundColor = ConsoleColor.Blue;
                     }
                     Console.WriteLine(polozkyNabidky[i]);
                     Console.ResetColor();
                 }
                 ConsoleKeyInfo StisknutaKlavesa = Console.ReadKey(true);
                 if (StisknutaKlavesa.Key == ConsoleKey.DownArrow)
                 {
                     zvolenaPolozka++;
                     if (zvolenaPolozka == polozkyNabidky.Length)
                     {
                         zvolenaPolozka = 0;
                     }
                 }
                 else if (StisknutaKlavesa.Key == ConsoleKey.UpArrow)
                 {
                     zvolenaPolozka--;
                     if (zvolenaPolozka < 0)
                     {
                         zvolenaPolozka = polozkyNabidky.Length - 1;
                     }
                 }
                 else if (StisknutaKlavesa.Key == ConsoleKey.Enter)
                 {
                     vyberDokoncen = true;
                 }
             }
             return zvolenaPolozka;
         }
     }
 }
Nahlásit jako SPAM
IP: 84.244.117.–
Dobrá firma nebude bazírovat na tom, jakou máš školu nebo kurz, ale na tom, co umíš a co jsi schopen firmě přinést... Michal Štěpánek
p3can
~ Anonymní uživatel
312 příspěvků
27. 5. 2014   #2
-
0
-

misty chaoticky kod.

misto Console.ReadKey pouzivej Console.KeyAvailable a pak ReadKey + este tam nekde pridej nejaky delay.

dal tam mas property X,Y ale behem kodu tam mas cykli s ridicima promenyma X Y x y coz muze byt matouci, na urcitych mistech pouzivas backfield x misto property X.

Nahlásit jako SPAM
IP: 77.92.213.–
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, 59 hostů

Podobná vlákna

Problém v C — založil Robin

Problem — založil Ghosta

Problém — založil pali6

Problem — založil roonill

Problem s LIKE — založil Lordest

 

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