109 lines
2.7 KiB
C++
109 lines
2.7 KiB
C++
#include <ncurses.h>
|
|
#include <ctime>
|
|
|
|
enum dir {
|
|
N = 0, NE = 1, E = 2, SE = 3, S = 4, SW = 5, W = 6, NW = 7
|
|
};
|
|
|
|
dir rotate(dir initial_d, int rot_dir) {
|
|
return (dir)(((int)initial_d + rot_dir + 8) % 8);
|
|
}
|
|
|
|
int main() {
|
|
initscr();
|
|
start_color();
|
|
cbreak();
|
|
noecho();
|
|
keypad(stdscr, TRUE);
|
|
curs_set(0);
|
|
int pos_x = 1;
|
|
int pos_y = 1;
|
|
dir direction = dir::SE;
|
|
mvaddch(pos_y, pos_x, 'O');
|
|
int ch;
|
|
while ((ch = wgetch(stdscr)) != 'q') {
|
|
int rotd = 0;
|
|
int movval = 0;
|
|
switch (ch) {
|
|
case KEY_LEFT:
|
|
rotd = -1;
|
|
break;
|
|
case KEY_RIGHT:
|
|
rotd = 1;
|
|
break;
|
|
case KEY_DOWN:
|
|
movval = -1;
|
|
break;
|
|
case KEY_UP:
|
|
movval = 1;
|
|
break;
|
|
case 'c':
|
|
pos_y = LINES / 2;
|
|
pos_x = COLS / 2;
|
|
default:
|
|
break;
|
|
};
|
|
direction = rotate(direction, rotd);
|
|
switch (direction) {
|
|
case dir::N:
|
|
pos_y -= movval;
|
|
break;
|
|
case dir::S:
|
|
pos_y += movval;
|
|
break;
|
|
case dir::W:
|
|
pos_x -= movval;
|
|
break;
|
|
case dir::E:
|
|
pos_x += movval;
|
|
break;
|
|
case dir::NE:
|
|
pos_x += movval;
|
|
pos_y -= movval;
|
|
break;
|
|
case dir::NW:
|
|
pos_x -= movval;
|
|
pos_y -= movval;
|
|
break;
|
|
case dir::SE:
|
|
pos_x += movval;
|
|
pos_y += movval;
|
|
break;
|
|
case dir::SW:
|
|
pos_x -= movval;
|
|
pos_y += movval;
|
|
break;
|
|
default:
|
|
break;
|
|
};
|
|
clear();
|
|
mvaddch(pos_y, pos_x, 'O');
|
|
switch(direction) {
|
|
case dir::N:
|
|
case dir::S:
|
|
mvaddch(pos_y, pos_x-1, '-');
|
|
mvaddch(pos_y, pos_x+1, '-');
|
|
break;
|
|
case dir::E:
|
|
case dir::W:
|
|
mvaddch(pos_y-1, pos_x, '|');
|
|
mvaddch(pos_y+1, pos_x, '|');
|
|
break;
|
|
case dir::NE:
|
|
case dir::SW:
|
|
mvaddch(pos_y-1, pos_x-1, '\\');
|
|
mvaddch(pos_y+1, pos_x+1, '\\');
|
|
break;
|
|
case dir::NW:
|
|
case dir::SE:
|
|
mvaddch(pos_y+1, pos_x-1, '/');
|
|
mvaddch(pos_y-1, pos_x+1, '/');
|
|
break;
|
|
default:
|
|
break;
|
|
};
|
|
refresh();
|
|
}
|
|
endwin();
|
|
}
|