Hogy lehetne megcsinálni ezt egyszerűbben azaz hogy ne legyen ennyi iteráció? C# Winform
Feladat: "Aknakereső"
-Van 1024db pici panel tehát 32x32 sor.
-5db aknát kell elhelyezni.
Működik, de a tanár visszadobta hogy ez így túl sok iteráció, egy munkahely biztos nem fogadná el, gondolkozzak más megoldáson, mert ez így max 2-est ér.
private List<Panel> list = new List<Panel>();
for (int i = 0; i < 5; i++)
{
string randomName = "panel" + r.Next(1, 1025);
foreach (Panel panel in this.Controls.OfType<Panel>())
{
if (panel.Name == randomName)
{
if (!list.Contains(panel))
{
list.Add(panel);
}
else
{
i--;
}
break;
}
}
}
Hogy lehetne elhelyezni 5db aknát 1024 panelen máshogy?
A panelek neve panel1 panel2 ... panel1024
Próbáltam olyat hogy: panelList.Add((Panel)randompanelnévstring);
de természetesen úgy nem lehet.
Nem lehet vagyis inkább nem akarom kirakni most nehogy aztán a tanár megtalálja és azt mondja innen vettem :D Szeret kódrészletek bemásolni a google-be, buktunk már le úgy még amikor csak egy picit is néztünk :D
Amúgy 32*32 sor csillagot legenerálok, majd legenerálom melyik akna (elmentem egy listába) és amikor odamegy a mutató entert nyomva megnézi a lista tartalmazza-e, ha igen akkor game over, ha nem akkor csillag felcserélése szóköre és játszhatunk tovább.
Ennyi, tehát piszok egyszerű dolog, csak én akartam winform-al túlbonyolítani hogy "grafikus" legyen.
„piszok egyszerű dolog”
Ez így tényleg sokkal egyszerűbb, mint a valódi aknakereső játék, ennek a megírásába még az én bicskám se tört bele. Én mindenesetre megpróbálkoztam a grafikus felülettel, ezt találod a mellékelt linken, három változatban. Egyikben sem használok panelokat, hanem csak a #2 hozzászólásban említett rajzolást. Az első kezdéskor, egy alapképre kattintás után, kockánként rajzolja ki a könyvelésre használt tömbnek megfelelő felületet. A kockarajzoló eljárással intéztetem a tömb megfelelő elemének beállítását is (lehetne másképp is), ezért a progi háromféle kockaképet használ:
1. Sima felületű, ez a 0 értéknek felel meg, és a pálya kirajzolásakor használatos.
2. Lyukas, ezt rajzolja ki, ha üres mezőre kattintottál. Ugyanakkor a tömbelem értékét 1-re állítod vele – ez valami rafináltabb játék esetén jelezhetné a programnak, hogy már jártál itt, de ebben nem kap szerepet, úgyis látod a képernyőn.
3. Akna, ezt értelemszerűen akkor rajzolja fel, ha a tömbelem az aknáért felelős 2 értéket tartalmazza. A játék az első akna megtalálásával véget is ér, és a tömböt végigvizsgálva a többit is kirajzolja, miközben az egyéb helyekre a lyukas elemet rakja.
A második verzió abban tér el, hogy a kezdőképernyőt nem rajzolja ki kockánként, hanem az alapkép már eleve a sima felületű mezőket mutatja, a tömb nullázása a háttérben, képernyőakció nélkül történik meg. Ennek megfelelően csak két kis kockára van szükség, egyik a lyukas, másik az elaknásított kocka felrajzolásához. Itt rajz és a tömbkezelés nincs összekötve, mert a rajzolást csak a vizsgálatkor használja a program, a kezdéshez nem.
A harmadik mindössze a méretében tér el az előzőtől.
Még néhány megjegyzés.
– Van egy hiba, aminek az okára nem tudtam rájönni: A kezdés utáni első kattintás eredménytelen, vagy legalábbis nem jelenik meg a képernyőn.
– Az egérkoordináták tömbelemindexekre váltását (és viszont) a gyorsítás érdekében nem osztással-szorzással, hanem bitforgatással oldottam meg, ezért kell a képelemek méretének bináris hatványnak lennie (16 és 512, illetve 32 és 1024 pixel).
– Jóllehet, találat esetén amúgy is megjeleníti az összes aknát, de a teljes képernyő kirajzolásának viszonylagos lassúsága miatt előbb még az éppen aktuálisat is odapöttyinti.
– Néha elég macerás aknát találni, ha elunod, jobb gomb azonnal befejezi a játékot.
– A programok linuxban-Monoban jól futnak, Windowsban nem próbáltam őket.
– Az én sütnivalóm önmagában kevés lett volna, illik megemlítenem, hogy a számomra problémásabb részeket a stackoverflow.com oldalon megjelent válaszokból ügyeskedtem össze.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!