Skocz do zawartości
Saboteur

Gra W Weza

Rekomendowane odpowiedzi

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??

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.



×
×
  • Dodaj nową pozycję...