From 1e862ab95ed3e5a71a18ebb9dd77023174d087d1 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Fri, 28 Jun 2024 23:24:13 +0200 Subject: [PATCH] test end of game --- function.c | 24 +++++++++++++++++++----- function.h | 2 ++ solitaire.c | 4 +++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/function.c b/function.c index d64ff5e..6dc23f5 100644 --- a/function.c +++ b/function.c @@ -194,19 +194,19 @@ char getvalue (board_t *board, int x, int y) int testjump (board_t *board, int x, int y, int mode) { - int ret = 0; + int ret = (getvalue (board, x, y) == 'X'); switch (mode) { case 0: - ret = (getvalue (board, x, y - 1) == 'X') && (getvalue (board, x, y - 2) == 'O'); + ret &= (getvalue (board, x, y - 1) == 'X') && (getvalue (board, x, y - 2) == 'O'); break; case 1: - ret = (getvalue (board, x - 1, y) == 'X') && (getvalue (board, x - 2, y) == 'O'); + ret &= (getvalue (board, x - 1, y) == 'X') && (getvalue (board, x - 2, y) == 'O'); break; case 2: - ret = (getvalue (board, x, y + 1) == 'X') && (getvalue (board, x, y + 2) == 'O'); + ret &= (getvalue (board, x, y + 1) == 'X') && (getvalue (board, x, y + 2) == 'O'); break; case 3: - ret = (getvalue (board, x + 1, y) == 'X') && (getvalue (board, x + 2, y) == 'O'); + ret &= (getvalue (board, x + 1, y) == 'X') && (getvalue (board, x + 2, y) == 'O'); break; } return ret; @@ -235,4 +235,18 @@ void dojump (board_t *board, int x, int y, int mode) } } +int endofgame (board_t *board) +{ + int i, j, m; + for (i = 0; i < board->width; i++) { + for (j = 0; j < board->height; j++) { + for (m = 0; m < 4; m++) + if (testjump (board, i, j, m)) { + return 0; + } + } + } + return 1; +} + /* vim: set ts=4 sw=4 et: */ diff --git a/function.h b/function.h index 32878a8..927fb4d 100644 --- a/function.h +++ b/function.h @@ -39,6 +39,8 @@ int testjump (board_t *board, int x, int y, int mode); void dojump (board_t *board, int x, int y, int mode); +int endofgame (board_t *board); + #endif /* __FUNCTION_H__ */ /* vim: set ts=4 sw=4 et: */ diff --git a/solitaire.c b/solitaire.c index f6f99da..b774e7b 100644 --- a/solitaire.c +++ b/solitaire.c @@ -147,7 +147,9 @@ int main (int argc, char *argv[]) char *ptr = NULL; boardwindow (board); - cursorwindow (board, xcursor, ycursor, mode); + if (!endofgame (board)) { + cursorwindow (board, xcursor, ycursor, mode); + } int ch = getch (); switch (ch) { -- 2.30.2