Ich programmiere zurzeit in C, und will einen character 'c' in einem bereich mir W,A,S,D bewegen können. Nun finde ich gerade keine probleme, es funktioniert aber nicht.
HIER DER CODE:
// Die Box hat 3 y Koordinaten zu viel,
// Also hat sie anstatt 20,10==>20,13??
#include <stdio.h>
#include <windows.h>
#define MAX_AREA_X 20
#define MAX_AREA_Y 10
#define MOVEMENT_DELAY 250
#define AREA_BG '.'
#define PLAYERCHAR 'o'
void initialize_area(int x, int y);
void print_area(int x, int y);
void player_init(int x, int y);
void cursor_gotoxy(int spalte, int zeile);
void CursorVisible(int visible);
void player_print(int x, int y);
int player_move(int x, int y);
char areaxy[MAX_AREA_X][MAX_AREA_Y];//2D Matrix
typedef struct player
{
int x;
int y;
} player;
void main()
{
CursorVisible(0);
struct player Spieler;
Spieler.x = 9;
Spieler.y = 5;
initialize_area(MAX_AREA_X, MAX_AREA_Y);
player_init(Spieler.x, Spieler.y);
while (1)
{
print_area(MAX_AREA_X, MAX_AREA_Y);
player_print(Spieler.x, Spieler.y);
player_move(Spieler.x, Spieler.y);
}
}
void initialize_area(int x, int y)
{
for (int ix = 0; ix < x; ix++)
{
for (int iy = 0; iy < y; iy++) areaxy[ix][iy] = AREA_BG;
}
}
void print_area(int x, int y)
{
cursor_gotoxy(0, 0);
for (int y_axis = 0; y_axis < y; y_axis++)
{
for (int x_axis = 0; x_axis < x; x_axis++)
{
printf("%c", areaxy[x_axis][y_axis]);
}
printf("\n");
}
}
void player_init(int x, int y)
{
struct player Spieler_init;
Spieler_init.x = x;
Spieler_init.y = y;
}
void player_print(int x, int y)
{
cursor_gotoxy(x, y);
printf("%c\n", PLAYERCHAR);
}
int player_move(int x, int y)
{
struct player Spieler_bewegen;
char choice;
do
{
scanf_s(" %c", &choice);
switch (choice) {
case 'w':
Spieler_bewegen.y++;
player_print(x,Spieler_bewegen.y);
break;
case 's':
Spieler_bewegen.y--;
player_print(x, Spieler_bewegen.y);
break;
case 'a':
Spieler_bewegen.x--;
player_print(Spieler_bewegen.x, y);
break;
case 'd':
Spieler_bewegen.x++;
player_print(Spieler_bewegen.x, y);
break;
}
player_print(Spieler_bewegen.x, Spieler_bewegen.y);
} while (choice != 'q');
}
void cursor_gotoxy(int spalte, int zeile)
{
COORD coord;
coord.X = spalte;
coord.Y = zeile;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void CursorVisible(int visible)
{
CONSOLE_CURSOR_INFO info;
HANDLE out;
info.bVisible = visible;
info.dwSize = 1;
out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(out, &info);
}