Hogyan kezdjek bele ebbe a programozási feladatba?
Szóval van egy elég fontos feladat (egyetemhez kell), de sajna nem tudok mit kezdeni vele. Nem vagyok béna programozó, egyáltalán nem. De valahogy mégis ehhez a feladathoz nem tudok hozzákezdeni. Esetleg valaki tud tanácsot adni, vagy hogy, hogy kezdjek bele? A programot C# nyelven kell Objektum Orientáltba (OOP-ben) kell megírni.
A feladat: [link]
Na szóval helyzetjelentés...
Mint kiderült egész jól haladok és tényleg nem olyan nehéz. Az értelmezéssel voltak a gondok. A pathfinding, a matrix mérete és a falak kezdőkoordinátái mennek. De ahol nagyon elakadtam és mindjárt megőrülök az a dx, dy-onos rész, ahol ki kéne rajzolni a teljes falakat. Az valahogy sehogyse megy. Esetleg valaki tud segíteni?
Már megint bénázol..
A falak kirajzolása:
FALAK.BE nevű állomány első sora:
10 5 3
Azt jelenti, hogy 10 x 10-es a négyzet, 5 fal van benne és három kiindulópont.
A második (és a többi 4) sor:
2 2 1 4
Azt jelenti, hogy bal alsó sorból számolva a második függő, és szintén második vizszintes cellán kezdődik a fal, egy tégla (vagy cella) vastag és felfelé 4 cella magas.
A következő a 4. vizszintes és a 2. függőleges cellánál indul, 5 cella hosszú (ez már vizszintesen, mivel az van elöl) és 1 cella vastag.
A harmadik a 3. és 5. cellánál indul, 6 cella hosszú (vizszintesen) és 1 cella vastag.
A negyedik fal 5. és 3. cellától indul, 1 cella vastag és két cella magas (függőlegesen).
Az ötödiket nyilván tudod.
A kezdőpontok meg gondolom már egyértelműek.
4,4
6,3
2,5
Alapban nullára inicializálsz egy 10 x 10 -es 2D tömböt, majd a falak pozicióját hozzáadod a tömb aktuális értékeihez. Ezután a kiindulópontok pozicióját adod hozzá a tömb aktuális pozíciójához.
Végig scanneled a tömböt és lesz egy pont, ahol a tömbelem értéke 3 lesz (nulla a terület, plusz 2 a fal plusz egy a kiinduló pozició). Ez azt jelenti, hogy nem kell vizsgálnod semmit, hiszen a pozíció éppen a falban van, ami lehetetlenné teszi a terület széléhez jutást, tehát a FALAK.KI kimeneti állományba a "NEM" szó kerül.
Léphetsz is a következő kiinduló pont vizsgálatára.
Én a helyedben legalább két algoritmust tennék be, választhatóan. Az egyik lenne a korábban említett körbe vizsgálat, a másik meg kihasználná, hogy a falak a négyzet széleivel párhuzamosak, azaz, módszeresen csak le, jobbra, balra vagy fel mozognék, keresve a köv. szabad pontot.
Sőt, ha jót akarsz magadnak, akkor még költségelemzést is vizsgálsz és írsz ki. Ez gondolom tudod mi, nem egyéb, mint a megtett lépések száma.
Ez a feladat egyébként azért is nagyon jó, mert ebben elválik a sz@r a májtól, tehát a tanár ennek alapján tudni fogja a jövőre nézve, hogy ki kivel van (ki mennyit ér).
Azt gondolom nem kell hangsúlyoznom, hogy úgy kell megírnod, hogy (szinte) bármilyen tartalmú bemeneti állománnyal működjön, tehát ha a négyzet 25 x 30-as, vagy 72 x 100-as akkor is, ha a falak és a kiinduló pontok száma több vagy kevesebb, akkor is.
A fal egyébként a speckóban limitálva van, 1000 x 1000-ben, ugynígy a falak száma is <= 1000, a kiinduló pontok maximuma viszont csak 5 lehet.
A szivatásról:
Addig örülj, amíg így "szivatnak" mert ez mind a javadat szolgálja. Ettől válsz nokedliből szakemberré, ettől és hasonlóktól fog megváltozni a látásmódod, javulni az algoritmizáló képességed, ezek és ehhez hasonlók kombinációja fogja adni a majdan írandó programjaid alapját.
Ha jól megnézed, rájöhetsz, hogy egy sima, nagyon basic PACMAN játék sem implementálható az ezen feladat által megkivánt ismeretek nélkül és akkor még hol vagyuk a GTA 5-től..
Ezért furulyáznak - és ezért nem érnek sokat - az önképző "programozók", mert őket nem "szivatta" ilyesmikkel soha senki.
Ez talán azért lehet, mert nem veszed figyelembe, hogy a négyzet bal alsó sarkából kell kiindulni.
Amúgy hülyeséget írtam, a négyszög, mint terület, soha nem lehet eltérő oldalú, hiszen az egyik oldal van csak mehatározva a bemeneti file-ban is. Tehát, a terület mindig négyzetes.
Const
FIELD = 0;
WALL = 1;
START_POS = 2;
array[x,y] = FIELD;
array[x,y] = array[x,y] + WALL;
array[x,y] = array[x,y] + START_POS;
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!