Witam.
Wreszcie wziąłem się za wskaźniki, próbóję napisać coś "w podobie" do gry, po prostu wpisując klasyczne "wsad" i zatwierzając enterem możemy się poruszać po tablicy 10 x 10. Chciałbym prosić o sprawdzenie czy nie ma w kodzie jakichś większych błędów, co można jeszcze poprawić. Chętnie popracowałbym nad jakimś roguelike :D
Pozdrawiam.
#include <stdio.h>
#define WIERSZE 10
#define KOLUMNY 10
void wys_plansza(char [][KOLUMNY]);
void zczytaj(int *, int *);
int pobierz_pierwszy(void);
int main(void){
char plansza [WIERSZE][KOLUMNY]= {
{'o','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'},
{'x','x','x','x','x','x','x','x','x','x'}
};
int x, y;
x = 0; //wysokość
y = 0; //szerokość
wys_plansza (plansza);
while (1){
plansza[x][y] = 'x';
zczytaj(&x, &y);
plansza[x][y] = 'o';
wys_plansza (plansza);
}
return 0;
}
wys_plansza(char plansza[][KOLUMNY]){
int x, y;
for (x = 0; x < WIERSZE; x++) {
for (y = 0; y < KOLUMNY; y++){
putchar(plansza[x][y]);
}
putchar('\n');
}
}
zczytaj(int *x, int *y){
char ruch;
int p = 0;
while (p == 0){
printf("%c ", '$');
ruch = pobierz_pierwszy();
switch (ruch) {
case 'd':
if (*y < (KOLUMNY - 1)){
(*y)++;
p = 1;
break;
}
else if (*y == (KOLUMNY - 1)){
*y = 0;
p = 1;
break;
}
else{
break;
}
case 'a':
if(*y > 0){
(*y)--;
p = 1;
break;
}
else if(*y == 0){
*y = (KOLUMNY - 1);
p = 1;
break;
}
else{
break;
}
case 'w':
if (*x > 0){
(*x)--;
p = 1;
break;
}
else if(*x == 0){
*x = (WIERSZE - 1);
p = 1;
break;
}
else{
break;
}
case 's':
if(*x < (WIERSZE - 1)){
(*x)++;
p = 1;
break;
}
else if(*x == (WIERSZE - 1)){
*x = 0;
p = 1;
break;
}
else{
break;
}
default:
printf("To nie jest prawidłowa wartość!\n");
}
}
}
int pobierz_pierwszy(void){
int ch;
ch = getchar();
while (getchar() != '\n'){
continue;
}
return ch;
}