ncurses-gameoflife/game.c

90 lines
1.4 KiB
C
Raw Normal View History

2020-06-24 11:05:49 +08:00
#include <ncurses.h>
#include "game.h"
#include "grid.h"
#include "vect.h"
2020-06-24 11:05:49 +08:00
static Grid* grid = 0;
static bool running = true;
static bool do_step = true;
2020-06-24 11:05:49 +08:00
static Vect2i cursor;
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();
}
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 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));
}
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()
{
}