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
 1/12 A kérdező kommentje:
Jaj alul nem panelList hanem sima list mert ugye a lista neve list simán ugye csak fejből írtam :D
2020. márc. 28. 15:34
 2/12 tabaki ***** válasza:
100%

Meg kell mondjam, én nem sokat értek a kódodból, sem a hozzáfűzött magyarázatodból, de én valahogy úgy csinálnám, hogy létrehoznék egy 1024 üres panelből álló listát, meg egy 5 random számból álló tömböt (ebben elég egyszerű ellenőrizni és kiküszöbölni az ismétlődéseket), utána a tömbelemeknek megfelelő indexű paneleket aknákra változtatnám.

Amúgy meg ez 1024 különböző nevű panel kész horror szerintem. Miért nem lehet egyszerűen kétdimenziós tömböt (vagy egye fene, listák listáját) használni, és indexelni? És szükség van pont panelokra? Én valószínűleg az egészet valami nokedli-méretű byte- vagy int-tömbben könyvelném a háttérben, és egy nagy képfelületnek a megfelelő helyeire csak kirajzoltatnám a becélzott tömbelem tartalmának megfelelő kis kockát – már amennyiben tudnék C#-ban programozni. A panelos megoldás mindenesetre veszettül pocsékolónak tűnik.

2020. márc. 28. 23:11
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:

Rendben, újragondoilom az egészet inkább.


A Panel azért jó erre amúgy mert lehet adni neki színt és border-t, így kis négyzeteket lehet csinálni. Egyet beállítunk utána ctrl c ctrl v egy sort megcsinálva, majd a sort lemásolni 32x. Így 3-4 perc alatt megvolt maga a kinézete a játéknak :D

2020. márc. 28. 23:21
 4/12 anonim ***** válasza:
100%

Tehát a kódodban benne van az 1024 panel rétrehozása egyesével és a nevük beállítva? Ez azért így nem túl szép... Nem ártana aztokat is ciklussal létrehozni.


A túl sok iteráció pedig az, hgoy végigmész az összes vezérlőn és név alapján keresed az aktuális vélelten számút. Elég lenne egy tömmbe berakni minden panelt és abból egy lépésben meg tudnád kapni az objektumot.

2020. márc. 29. 00:02
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:

"Tehát a kódodban benne van az 1024 panel rétrehozása egyesével és a nevük beállítva?"


Visual Studio Winform designerben (Ami grafikus interface) mint mondtam egyet megcsináltam és csak ctrl c ctrl v tehát pár perc volt. Ahogy kész volt egy sor utána az egész sort másoltam nem csak egyet. A nevüket meg magától csinálta panel1 panel2 ... panel1024 tehát nem kellett vele bajlódnom :D


Amúgy úgy lesz akkor hogy létrehozok egy int listát v tömböt abba eltárolom az aknákat így a foreach panelen csak egyszer kell a proginak végigmenni. Remélem így már okés lesz a tanárnak.

2020. márc. 29. 00:10
 6/12 A kérdező kommentje:
Ja és persze köszi a válaszodat :)
2020. márc. 29. 00:11
 7/12 tabaki ***** válasza:

„A Panel azért jó erre amúgy mert lehet adni neki színt és border-t, így kis négyzeteket lehet csinálni.”


De a Panel egy ezenkívül száz egyéb dolgot tudó, bonyolult működésű objektum, nyilván ehhez mért helyfoglalással, ami valószínűleg már önmagában is többszörösen meghaladja azt, amire az egyszerű játék tulajdonképpeni működtető részének szüksége van – ebből hozol létre 1024 darabot. Ez körülbelül olyan, mint okostelefonokkal pasziánszozni. Persze, semmi akadálya, csak drága, indokolatlan, és a telefonok tudásából gyakorlatilag semmit sem használ fel.

2020. márc. 29. 00:57
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:

Első körben szerintem nem az a gond, hogy Panelt használ, hanem hogy ezt kézzel pakolgatta a formra, mind az 1024 darabot... ez így baromi ronda és nem túl rugalmsa.. elég nehéz módosítani a daraszámot például.


Ezeket dinamikusan kéne létrehozni..

2020. márc. 29. 10:44
Hasznos számodra ez a válasz?
 9/12 A kérdező kommentje:
Dobtam a winformot, consolapp lett és minden dinamikus.
2020. márc. 29. 11:11
 10/12 tabaki ***** válasza:
Vasmarokkal ragadtad meg a mondvacsinált probléma szarva közt a tőgyét. A játék működése szempontjából mondhatni teljesen mindegy, hogy jobb sorsra érdemes panelokból vagy konzolos karakterekből rakod ki a felületet, netán pepita bugyis görlökkel táncoltatod el 3D-ben. A döntésedet mégis helyeslem, mert így a grafikus szerkesztő ölmelegéből remélhetőleg visszakerülsz a tervszerű és hatékony gondolkodás terepére, meg aztán, nem mellesleg, a felszín mögött dolgozó tulajdonképpeni program közelébe. Továbbra is érdekes volna látni, mivel próbálkozol, ne átalld bemutatni.
2020. márc. 29. 23:07
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!