Saboteur Opublikowano 23 Czerwca 2005 Zgłoś Opublikowano 23 Czerwca 2005 mam taki programik kompilowany w linuxie przez: gcc -lcurses snake.c Wszystko w nim gra, waz jest sterowany z klawiatury, koniec gry nastepuje jak gad nalezie na ramke okienka lub sam na siebie, czyli zgodnie z regułami. nie wiem jednak jak zrobic, jakiej funkcji uzyc zeby wrzucic losowo do okienka jakies jabłka czy inne znaki po najechaniu na ktore dostawaloby sie punkt a jego ogon by sie powiększał. Czyli w skrócie - wrzucic znaki na plansze ktore waz musi zbierac a jego odwłok powinien sie powiekszać.. (czyli kwintesencja tej wspanialej gry). Dotychczasowy kod kompiluje sie bez bledow: #include <curses.h>#include <stdio.h>#include <stdlib.h>#define DLUGOSC 100#define START_X 10#define START_Y 10#define LEWO 1#define PRAWO 2#define GORA 3#define DOL 4int x[DLUGOSC];int y[DLUGOSC];int kierunek = PRAWO;int dlugosc=5;//gcc waz.c -lcursesint main(int argc, char*argv[]){ WINDOW *win,*win2; int maxWidth, maxHeight; int i,exit=1; char ch; for(i=0; i<DLUGOSC;i++){x[i]=1;y[i]=1; } initscr(); //inicjalizuje okienka noecho(); //nie ma kursora getmaxyx(stdscr, maxHeight, maxWidth); win=newwin(maxHeight/2,maxWidth,0,0); win2=newwin(maxHeight/2, maxWidth,maxHeight/2,0); nodelay(win,TRUE);//nie czeka na wcisniecie znaczka box(win,0,0); //rysuje dookola okna ramke box(win2,0,0); scrollok(win2,TRUE); //przewijanie w oknie noecho(); while(exit){ch=wgetch(win);switch(ch){ case 'q': exit=0; break; case 's': kierunek=DOL; break; case 'a': kierunek=LEWO; break; case 'd': kierunek=PRAWO; break; case 'w': kierunek=GORA; break;} //skasuj ogonwmove(win, y[dlugosc-1], x[dlugosc-1]);wprintw(win," ");if(1){ //przesun glowe for(i=dlugosc-2;i>=0;i--){ x[i+1]=x[i]; y[i+1]=y[i]; } switch(kierunek){ case LEWO: x[0]--; break; case PRAWO: x[0]++; break; case GORA: y[0]--; break; case DOL: y[0]++; break; } if(x[0]<=0 || x[0]>=maxWidth-1 || y[0]<=0 || y[0]>=maxHeight/2-1){ wprintw(win2,"koniec"); exit = 0; } int n; for(n=1; n<dlugosc; n++){ if(x[0]==x[n] && y[0]==y[n]){ wprintw(win2,"koniec"); exit = 0; } } }wrefresh(win2);for(i=0;i<dlugosc;i++){ wmove(win,y[i],x[i]); if(i==0) wprintw(win,"@"); else wprintw(win,"*");}noecho();wrefresh(win);sleep(1); } endwin(); return 0;} Kto pomoze i naprowadzi?? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ParanoiK Opublikowano 23 Czerwca 2005 Zgłoś Opublikowano 23 Czerwca 2005 Losowana macierz o wymiarach planszy z randomowo losowanymi itemami 4x40001020000100000Coś takiego. Gdy najedzie na id itemu (sprawdzanie przy przeskakiwaniu) wydłuża ogon przez x rund w zależności od pola. O to chodzi? ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Saboteur Opublikowano 24 Czerwca 2005 Zgłoś Opublikowano 24 Czerwca 2005 (edytowane) dzieki, może o to chodzi, ma to być najprościej: jeden rodzaj itemu, powiekszanie ogona o 1 znak.- tak jak w kazdym klasycznym weżu Aha i jedno jabłko naraz na ekranie a nie stado owoców :) Edytowane 24 Czerwca 2005 przez Saboteur Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ParanoiK Opublikowano 26 Czerwca 2005 Zgłoś Opublikowano 26 Czerwca 2005 Generalnie i tak najłatwiej to zrobić na tej samej zasadzie co podałem. Jedzie po współrzędnych macierzy dwuwymiarowej i po prostu sprawdza. ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...