![]() |
| | #1 (permalink) | ||
| Registered User Join Date: Sep 2003 Location: Bucuresti | labirint
Buna. Eu tin cursuri de calculatoare in gradinite si fiind si studenta la Informatica economica in ASE mi-am pus intrebarea oare cum se face un joc cu labirintul pe care il joc cu copiii. Labirintul arata ca in imaginea atasata. Copilul trebuie sa traseze o linie de la punctul verde la punctul rosu. Daca copilul incerca sa traseze drumul peste pereti se aude un sunet de avertizare. Cand labirintul e completat si se apasa pe punctul rosu se anima imaginea colorata (aici extraterestrul). Cum se face oare un asemenea joc? Cum stie programul ca jucatorul trece peste pereti? Ma intreb cum se codifica chestia asta. | ||
|
| | #2 (permalink) | ||
| Registered User Join Date: Nov 2001 Location: Bucharest, Romania |
Ok, se poate face in mai multe feluri dar un mod simplu care este perfect adecvat cazului tau ar fi cu o masca de coliziune. Deci ai desenul labirintului si mai ai o alta imagine, monocroma de exemplu, care contine alb unde se poate desena si negru unde este perete. Iar testul se face destul de simplu: cand incerci sa desenezi un pixel verifici daca masca de coliziune iti permite (adica daca la pozitia respectiva in imaginea monocroma ai alb). Testul se poate dezvolta si pentru o linie (analog cu un pixel se verifica toti pixelii ce compun linia). | ||
|
| | #3 (permalink) | ||
| Registered User Join Date: Sep 2003 Location: Bucuresti |
E interesant ce-mi spui dar ai putea, te rog, sa-mi exemplifici cu un cod scurt (in C sau in alt limbaj). Nu mi-e clar cum identifici locul pixelilor ce compun linia ce urmeaza sa se traseze, aceasta putand fi mai groasa. Eu m-am apucat deja sa fac un joc cu labirint in Flash si o sa-ti povestesc cum l-am gandit sa-mi spui daca tu vezi vreo solutie mai usoara. | ||
|
| | #4 (permalink) | ||
| Registered User Join Date: Nov 2001 Location: Bucharest, Romania |
Pai va trebui sa desenezi linia cu o functie facuta de tine (care sa deseneze pixelii care formeaza linia) si asa tu vei fi cea care decide care pixeli formeaza linia. Eu la flash nu ma pricep ca sa-ti dau un exemplu, dar in C as putea sa fac un mic exemplu, dar va trebui sa-l integrezi tu in restul programului. | ||
|
| | #5 (permalink) | ||
| Registered User Join Date: Sep 2003 Location: Bucuresti |
Nu mai e nevoie de cod pt ca am inteles ce vroiai sa-mi spui. Merci pt idee. Acum sa-ti arat cum arata labirintul la care lucrez eu. Nu te speria ca apar 1000 de porumbei. Asta e o faza intermediara si specifica flash-ului. E destul de nasol de gestionat un asemenea labirint in Flash. Am impartit labirintul in 50 de bucatele si in fiecare bucatica am pus cate un filmulet (care e mereu acelasi) cu porumbelul care poate sa se uite la stanga, la dreapta sau sa dispara. Facilitatile de programare ale Flash-ului sunt destul de limitate. Ma gandesc acum cum s-ar face in C. Probabil as avea o matrice ce ar codifica cele 50 de bucatele ale labirintului si anume ma gandesc ca as avea cate o coloana cu numarul bucatelei din stanga, dreapta, sus, jos (informatii pe care le am si in flash) pozitia porumbelului (stanga, dreapta), coordonatele. Ce e nasol in C e ca e mai greu sa scapi de patratul alb din spatele bitmapului. Nu cred ca e suficient sa folosesti un gif cu background transparent, nu? E destul de dificil si asa, mi se pare mie. Eu ca sa fac un asemenea joc in flash as sta cam 3 zile. In plus, porumbelul trebuie sa culeaga floricelele deci alta problema care nu stiu cum s-ar face in C. Tu cum crezi ca s-ar face jocul asta in C? Merci ca ai avut rabdare sa citesti ditamai mesajul. | ||
|
| | #6 (permalink) | ||
| Registered User Join Date: Nov 2001 Location: Bucharest, Romania |
Asa, sa vad daca inteleg bine, tu vrei ca jucatorul sa se plimbe prin labirint cu porumbelul si sa culeaga floricele, am inteles bine ? In C (ma rog aici includ C, C++ si toate SDK-urile adiacente) ar fi mai multe solutii: - sa ai o poza cu labirintul si o maska de colisiune (in care sa ai si informatii despre floricele sau alte itemuri pe care vrei sa le culeaga jucatorul). Cu metoda asta ar fi usor de desenat labirinturi noi dar ar fi mai greu de prelucrat inputul (pentru ca probabil vrei ca porumbelul sa stea exact la mijlocul drumului si mai e chestia cu alesul drumului la intersectii). - o lata metoda ar fi sa ai o harta vectoriala, adica drumurile sa fie definite prin conexiuni intre anumite puncte. In felul asta scapi de problema cu mersul (pentru ca poti sa tii exact porumbelul pe linia dintre cele doua puncte dar e mai greu de definit harta si iti trebuie si functii care sa o deseneze). Ramane problema cu alegerea drumului la intersectii dar stii exact in fiecare intersectie ce drumuri poti alege. - o alta solutie ar fi sa ai o matrice cu harta in care sa scrii la fiecare punct informatii despre ce contine labirintul in pozitia aia, dar mi se pare o solutie destul de inflexibila si demodata | ||
|
| | #8 (permalink) | ||
| Registered User Join Date: Nov 2001 Location: Bucharest, Romania |
Enginul unui joc ... probabil ca sunt multe definitii si nu voi incerca sa dau una, dar voi incerca sa te ajut sa intelegi cat mai bine. Enginul este acea parte din codul jocului care se ocupa de functii generale, care nu sunt legate de jocul respectiv. Deci enginul poate fi denumit o grupare de module care dau functionalitatea jocului respectiv, dar care nu au nici o legatura cu gameplay-ul. In general enginul unui joc este refolosibil si poate fi folosit la multe alte jocuri fara modificari. De exemplu un engine contine un modul de render, unul de input, management de fisiere, network, tot felul de managere, si de la caz la caz module de collision, fizica, partitionare de spatiu, si asa mai departe. | ||
|
| | #9 (permalink) | ||
| Registered User Join Date: Aug 2001 Location: Bucuresti |
Cred ca cel mai bine ar fi sa adaptezi unul din tutorialele lui NeHe, in speta nr. 21 http://nehe.gamedev.net/lesson.asp?index=05 | ||
|
| Advertisment | |
![]() |
|
| Thread Tools | |
|
|