summaryrefslogtreecommitdiff
path: root/tetris.c
diff options
context:
space:
mode:
authorPreston Pan <preston@nullring.xyz>2023-02-06 22:55:20 -0800
committerPreston Pan <preston@nullring.xyz>2023-02-06 22:55:20 -0800
commit0f726414cc0026691854bda9567ef959c7a2a976 (patch)
tree2ddea95a79be29b865a97e3a84e32cefd165313a /tetris.c
parentd9b0f00ebec0c90a70bc823f8d3eb5af1128a605 (diff)
added new stuff
Diffstat (limited to 'tetris.c')
-rw-r--r--tetris.c45
1 files changed, 42 insertions, 3 deletions
diff --git a/tetris.c b/tetris.c
index 88a99f3..8f8b43f 100644
--- a/tetris.c
+++ b/tetris.c
@@ -3,7 +3,12 @@
#include <signal.h>
#include <sys/ioctl.h>
#include <string.h>
+#include <time.h>
+#include "tetris.h"
+#include "conio.h"
+#include "vector.h"
+#include "block.h"
#define UNUSED(x) (void)(x)
volatile sig_atomic_t g_int_ctrl_c = 0;
@@ -17,20 +22,54 @@ void interrupt_handler(int sig) {
void parse_args(int argc, char **argv) {
}
-void die(void) {
+void display_game(void) {
}
+
int main (int argc, char **argv) {
- parse_args(argc, argv);
int width;
int height;
-
+ volatile int *last_input = calloc(1, sizeof(int));
+ int *cancellation_token = calloc(1, sizeof(int));
+ struct winsize win;
+ struct timespec time;
+
+ /* store arguments in global variables */
+ parse_args(argc, argv);
+
+ /* get dimensions of board */
+ ioctl(fileno(stdout), TIOCGWINSZ, &win);
+ width = (int)(win.ws_col);
+ height = (int)(win.ws_row);
+
/* handle SIGINT interrupts */
signal(SIGINT, interrupt_handler);
+
/* Hide cursor */
print("\033[?251");
+
+ /* prepare thread for getting input and accepting cancellation */
+ thread_arg_t *thread_arg = malloc(sizeof(thread_arg_t));
+ thread_arg->ret = (void *)last_input;
+ thread_arg->cancellation_token = cancellation_token;
+
/* Game Loop */
while (1) {
+ if (g_int_ctrl_c) {
+ goto EXIT;
+ }
+ display_game();
}
+
+EXIT:
+ /* cancel thread */
+ *cancellation_token = 1;
+ printf("%sGame over! Your score was: %d%s\n", RED, g_score, COLOR_RESET);
+ /* unhide cursor */
+ printf("\033[?25h");
+
+ /* free some values */
+ free(cancellation_token);
+ free((int *)last_input);
return 0;
}