2020-06-24 11:05:49 +08:00
|
|
|
#include <ncurses.h>
|
2020-06-24 09:51:30 +08:00
|
|
|
#include "game.h"
|
|
|
|
#include "grid.h"
|
|
|
|
#include "vect.h"
|
|
|
|
|
2020-06-24 11:05:49 +08:00
|
|
|
static Grid* grid = 0;
|
2020-06-24 09:51:30 +08:00
|
|
|
|
|
|
|
static bool running = true;
|
|
|
|
static bool do_step = true;
|
2020-06-24 11:05:49 +08:00
|
|
|
static Vect2i cursor;
|
2020-06-24 09:51:30 +08:00
|
|
|
|
|
|
|
void initGame()
|
|
|
|
{
|
2020-06-24 11:05:49 +08:00
|
|
|
int width = 0;
|
|
|
|
int height = 0;
|
|
|
|
// stdscr is screen created by initscr()
|
|
|
|
getmaxyx(stdscr, height, width);
|
|
|
|
|
|
|
|
initGrid(grid, height, width);
|
|
|
|
randomizeGrid(grid);
|
|
|
|
cursor.x = width/2; cursor.y = height/2;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void step() { do_step ^= 1; }
|
|
|
|
|
|
|
|
void updateGame()
|
|
|
|
{
|
|
|
|
if (!grid) return;
|
|
|
|
if (do_step) updateGrid(grid);
|
|
|
|
}
|
|
|
|
|
|
|
|
void drawGame()
|
|
|
|
{
|
|
|
|
if (!grid) return;
|
|
|
|
drawGrid(grid);
|
|
|
|
refresh();
|
2020-06-24 09:51:30 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
bool isRunning() { return running; }
|
|
|
|
|
|
|
|
void handleInput(char ch)
|
|
|
|
{
|
|
|
|
switch (ch) {
|
2020-06-24 11:05:49 +08:00
|
|
|
case 'q':
|
|
|
|
running = false;
|
|
|
|
break;
|
|
|
|
case ' ':
|
|
|
|
do_step ^= 1;
|
|
|
|
break;
|
|
|
|
case 'h':
|
|
|
|
moveVect2i(&cursor, -1, 0);
|
|
|
|
break;
|
|
|
|
case 'j':
|
|
|
|
moveVect2i(&cursor, 0, 1);
|
|
|
|
break;
|
|
|
|
case 'k':
|
|
|
|
moveVect2i(&cursor, 0, -1);
|
|
|
|
break;
|
|
|
|
case 'l':
|
|
|
|
moveVect2i(&cursor, 1, 0);
|
|
|
|
break;
|
|
|
|
case 's':
|
|
|
|
step();
|
|
|
|
break;
|
2020-06-24 09:51:30 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-06-24 11:05:49 +08:00
|
|
|
void showLastPressed(char ch)
|
|
|
|
{
|
|
|
|
static char lastc = ' ';
|
|
|
|
if (ch != -1) lastc = ch;
|
|
|
|
attron(COLOR_PAIR(2));
|
|
|
|
mvprintw(0, 0, "Last Pressed: %c", lastc);
|
|
|
|
attroff(COLOR_PAIR(2));
|
|
|
|
}
|
|
|
|
|
2020-06-24 09:51:30 +08:00
|
|
|
void showCurPos()
|
|
|
|
{
|
|
|
|
attron(COLOR_PAIR(2));
|
|
|
|
mvprintw(1, 0, "curpos: %i, %i", cursor.x, cursor.y);
|
|
|
|
attron(COLOR_PAIR(3));
|
|
|
|
mvaddch(cursor.y, cursor.x, ' ');
|
|
|
|
attroff(COLOR_PAIR(3));
|
|
|
|
attroff(COLOR_PAIR(2));
|
|
|
|
}
|
|
|
|
|
|
|
|
void endGame()
|
|
|
|
{
|
|
|
|
}
|