Pomoc w rozbudowaniu

0

Witam oto prosta "gra" na zaliczenie, mam pomysł na jej rozbudowanie tylko nie wiem jeszcze jak to zrobić aby działało. Np żeby do zebrania było kilka punktów w postaci zer "0" i po zebraniu wszystkich obok planszy wyświetlał się jakiś komunikat.

#include <stdio.h> 
#include <stdlib.h> 
 
//definiujemy zawodnika jako kod 64, czyli '@'
#define PLAYER 64 
 
int main() 
{ 
  FILE * plik; 
 
  int i,j;
  //jako plansza do gry posłuży nam tablica o wymiarach 10x11
  //jedenasty znak to znak nowej linii
  int mapa[10][11]; 
  int posx=5, posy=5; 
  char klawisz; 
 
  plik=fopen ("mapa.map","r"); 
 
  for(i=0;i<10;i++){ 
    for(j=0;j<11;j++){ 
      mapa[i][j] = fgetc(plik); 
    } 
  } 
  fclose (plik); 
 
  printf("Wciśnij klawisz aby rozpocząć..."); 
  while(scanf("%c",&klawisz)!=EOF) 
  { 
    system("cls"); 
    //pod kodem '32' poniżej kryje się spacja;
    //ruch postacią możemy wykonać tylko gdy docelowe pole jest spacją
    if(klawisz=='j' && mapa[posy][posx-1]==32)posx--; 
    if(klawisz=='l' && mapa[posy][posx+1]==32)posx++; 
    if(klawisz=='i' && mapa[posy-1][posx]==32)posy--; 
    if(klawisz=='k' && mapa[posy+1][posx]==32)posy++; 
    for(i=0;i<10;i++){ 
      for(j=0;j<11;j++){ 
        if(j==posx && i==posy){ 
          printf("%c",PLAYER); 
        } else{ 
          printf("%c",mapa[i][j]); 
        } 
      } 
    } 
    printf("\n"); 
  }
  if(j==posx && 9==posy)  {printf("Gratulacje!!");}
} 

Mapa znajduje się w załączniku tylko trzeba zmienić jej rozszerzenie na map (strona nie akceptuje takiego rozszerzenia)

0

U mnie na linuksie wyświetla tak na start :

 ##### ####
#   ###  #
#        #
#        #
#        #
@        #
#     ####
#     #
#     #
#######

A @ powinna być na pozycji 5-5 u ciebie też tak jest ?
Jeśli tak to musisz popracować na wypisywaniem.

Co do zjadania zer . to wystarczy wrzucić jakąś liczbę zer na plansze i licznik zjedzonych porównywać z liczbą wpisanych na plansze '0' .

0

znak '@' oraz cyferki umieszczaj od razu na mapie.
Dużo tu trzeba jeszcze poprawić, zaś zrobiłem tylko minimalne zmiany doprowadzające do stanu działania

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define PLAYER '@'
#define SIZEY 10
#define SIZEX 11

int main() 
  { 
   FILE * plik; 
   int mapa[SIZEY][SIZEX],y,x,px,py,cnt;
   char znak,klawisz; 
 
   plik=fopen("mapa.map","r"); 
   for(y=0;y<SIZEY;++y) for(x=0;x<SIZEX;++x) mapa[y][x]=fgetc(plik); 
   fclose(plik); 
 
   for(;;)
     { 
      system("cls");
      cnt=0;
      for(y=0;y<SIZEY;++y)
        {
         for(x=0;x<SIZEX;++x)
           {
            znak=mapa[y][x];
            if(znak==PLAYER) { px=x; py=y; }
            if(isdigit(znak)) ++cnt;
            printf("%c",znak);
           }
        }
      printf("\n");
      if(!cnt) break;
      klawisz=getchar();
      if(klawisz=='j' && ( mapa[py][px-1]==' ' || isdigit(mapa[py][px-1]) ) ) { mapa[py][px]=' '; mapa[py][px-1]=PLAYER; }
      if(klawisz=='l' && ( mapa[py][px+1]==' ' || isdigit(mapa[py][px+1]) ) ) { mapa[py][px]=' '; mapa[py][px+1]=PLAYER; }
      if(klawisz=='i' && ( mapa[py-1][px]==' ' || isdigit(mapa[py-1][px]) ) ) { mapa[py][px]=' '; mapa[py-1][px]=PLAYER; }
      if(klawisz=='k' && ( mapa[py+1][px]==' ' || isdigit(mapa[py+1][px]) ) ) { mapa[py][px]=' '; mapa[py+1][px]=PLAYER; }
      while(getchar()!='\n') {}
     } 
   printf("Gratulacje!!");
   getchar();
   return 0;
  }
0

@zidu89
U mnie wszystko wyświetla się odpowiednio. Wiem tylko (jest to napisane na linuksie) że był problem z systemowym poleceniem Linux "Clear" i w windowsie musiałem na cls zamienić.
@_13th_Dragon
Ddzięki wielkie, postaram się to jeszcze jakoś rozwinąć. Jako że to moje początki właściwie z C, może to trochę zająć. Powiem również ile z zaliczenia :).

@Edit: Dragon ten program który wysłałeś wyświetla mi mapę i Od razu napis gratualcję. Pytanie: taki miałeś zamiar czy coś jest nie tak?
Pozdrawiam Trup

0

Jeśli mógłbym prosić o to żebyś powiedział co dokładnie zmieniłeś żebym wiedział co mam dalej robić. Starałem się zrozumieć wszystko z kursów internetowych ale to nie to samo co zdobywanie wiedzy w praktyce.

0

znak '@' oraz cyferki umieszczaj od razu na mapie.
Którego słowa nie rozumiesz?

##### ####
#   ###  #
# 3      #
#   @  5 #
#        #
#        #
#  0  ####
#     #   
# 1   #   
#######   
0

Nie byłem w stanie sobie tego wyobrazić, ale już wszystko zrozumiałe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1