Kezdőoldal » Számítástechnika » Programozás » Hogyan tudom megírni ezt a...

Hogyan tudom megírni ezt a bool függvényt?

Figyelt kérdés

Mivel több kérdésem is lenne, készítettem egy fájlt, ahol leírtam a problémáim-> [link]


Minden választ és segítséget előre is köszönök!



2016. márc. 8. 19:26
 1/6 anonim ***** válasza:
Hogyne persze.
2016. márc. 8. 19:41
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

bool update(GAME *game, int dy, dx) { ... }

SYNTAX ERROR!!!

"dx" is undefined variable!

2016. márc. 8. 20:22
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:
pardon, lemaradt a dx elől az int
2016. márc. 8. 20:41
 4/6 anonim ***** válasza:
48%
Használj pastebint a kódhoz, a kérdéseket meg ide írd le, senki nem fogja megnyitni az ilyen szarokat
2016. márc. 8. 21:13
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

0. Kérdés (nincs ilyen de nagyon bökte a szemem):

int dy,dx helyett használj enum-ot. Nem szoktunk kódokban beszélni, és pláne nem definiálunk egy irány meghatározásához két változót mert baj lehet belőle.


typedef enum {UP, DOWN, LEFT, RIGHT} DIRECTION; // C kód, C++-ban nem így kell

//enum DIRECTION {UP, DOWN, LEFT, RIGHT}; // C++ kód, nem keverendő a C-vel

bool update(GAME *game, DIRECTION move);


Ekkor meghívhatod így:

update(&game, LEFT)


Nem írtál nyelvet, ezért innentől feltételezem hogy C.


1. A memcpy() függvénnyel lehet lemásolni egy memóriablokkot, de függvényen belül nem szoktunk lefoglalni semmit amit visszatérési értékként ki akarunk küldeni a függvényből mert azt fel is kell szabadítani valahol. E helyett inkább paraméterként adjuk át a memóriaterület címét, és azt a területet írja a függvény. Ez kívülről is látszódni fog. Így lehet több visszatérési értékei is egy függvények:


char board[4][4];

update(&game, LEFT, board);


Ekkor ha módosítja az update függvény a board elemeit, azt kívülről is látod. Csak nem értem mi értelme lenne. Miért nem a GAME game struktúra állapotát módosítod? Nem az lenne az update lényege hogy frissíti a játék állapotát a lépéstől függően? True ha sikerült frissíteni, false ha nem mozoghatunk az adott irányba.


bool update(GAME *game, DIRECTION move) {

....

game->board[0][0] = 'F';

game->score += 10;

return true;

}


Természetesen úgy csináld ahogy gondolod, én nem gondoltam át a feladatot és nem ismerem a programod. Ha le kell másolni a táblát, akkor kint lefoglalod, átadod a címét, memcpy-val másolsz és visszatérsz.


2. Nem teljesen értem ezt. Erre gondolsz?


if(is_move_possible(game)) {

//csináld ezt

} else {

//csinálj mást

}


3. Nézzél meg egy irányt, mondjuk a balra mozgatást. Legyen a sor:

[1, 1, _, 2, 2, _, 4, 8]


Legyen a * az index ahol a programunk jár, ilyen lépések kellenek a mozgatáshoz:


[1*, 1, _, 2, 2, _, 4, 8] //összevon, továbblép

[2, _*, _, 2, 2, _, 4, 8] //átmozgat

[2, 2*, _, _, 2, _, 4, 8] //összevon, továbblép

[2, 4, _*, _, _, _, 4, 8] //átmozgat

[2, 4, 4*, _, _, _, _, 8] //továbblép

[2, 4, 4, _*, _, _, _, 8] //átmozgat

[2, 4, 4, 8*, _, _, _, _] //továbblép

[2, 4, 4, 8, _*, _, _, _] //nincs mit átmozgatni, vége


Az látható hogy ha üres helyen állunk akkor megkeressük a legközelebbi nem üres helyet és az ottani értéket átmozgatjuk. Ha nincs ilyen akkor nem tudunk többet mozgatni, leállunk. Ha nem üres helyen állunk, akkor megkeressük a legközelebbi nem üres értéket és ha a kettő megegyezik akkor összevonunk és függetlenül attól hogy összevontunk vagy sem, növeljük az indexet, azaz továbblépünk. Ha az indexet nem lehet tovább növelni, akkor az azt jelenti nem tudtunk mozgatni egyszer se, visszatérhetünk false-szal! Próbáld átgondolni.

2016. márc. 8. 21:20
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Nagyon szépen köszönöm a válaszokat, főleg az utolsót! Nagyon sokat segített! Igazán hálás vagyok érte! :)
2016. márc. 8. 21:28

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!