#include "stddef.h" #include "stdint.h" #include "game.h" #include "scheduler.h" #include "shapes.h" #include "canvas.h" typedef enum { e_idle, e_start, e_newStone, e_down, e_gameOver, e_delay } state_t; void gameExec(void *handle) { static state_t state = e_start; static uint8_t delay; switch (state) { case e_idle: break; case e_start: canvasClear(); state = e_newStone; break; case e_newStone: stoneCreate(); if (stoneDraw()) { state = e_down; } else { state = e_gameOver; } break; case e_down: if (! stoneMoveDown()) { state = e_newStone; } break; case e_gameOver: for (uint8_t c = 0; c < CANVAS_WIDTH; c++) { canvasSetPixel(c, 0, 0x0d); canvasSetPixel(c, CANVAS_HEIGHT - 1, 0x0d); } for (uint8_t r = 0; r < CANVAS_HEIGHT; r++) { canvasSetPixel(0, r, 0x0d); canvasSetPixel(CANVAS_WIDTH - 1, r, 0x0d); } delay = 10; state = e_delay; break; case e_delay: delay--; if (delay == 0) { state = e_start; } break; } canvasShow(); for (uint8_t r = 0; r < CANVAS_HEIGHT; r++) { if (canvasIsRowFilled(r)) { canvasWipeRow(r); canvasShow(); } } } void gameInit() { schAdd(gameExec, NULL, 0, 1000); }