Kezdőoldal » Számítástechnika » Programozás » Hogy lehetne megcsinálni ezt...

Hogy lehetne megcsinálni ezt egyszerűbben azaz hogy ne legyen ennyi iteráció? C# Winform

Figyelt kérdés

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.


2020. márc. 28. 15:32
1 2
 11/12 A kérdező kommentje:

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.

2020. márc. 30. 02:16
 12/12 tabaki ***** válasza:

„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.


[link]

2020. márc. 30. 23:23
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!