From fbba2eb161c5fcf6850996be1e8476d392b1782a Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 22 Jun 2024 23:01:15 +0200 Subject: [PATCH] correct rotation --- function.c | 22 +++++++++++++++++----- function.h | 2 ++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/function.c b/function.c index 6a579c1..d343920 100644 --- a/function.c +++ b/function.c @@ -33,6 +33,18 @@ board_t *initboard (int xsize, int ysize) return board; } +void copyboard (board_t *dst, board_t *src) +{ + if (dst->xsize * dst->ysize != src->xsize * src->ysize) { + free (dst->tab); + dst->tab = (char *) calloc (1, src->xsize * src->ysize + 1); + CHECKALLOC (dst->tab); + dst->xsize = src->xsize; + dst->ysize = src->ysize; + } + memcpy (dst->tab, src->tab, dst->xsize * dst->ysize); +} + void freeboard (board_t *board) { if (board) { @@ -152,7 +164,7 @@ board_t *loadboard (char *str) board_t *board = NULL; if ((tab) && (strlen (tab) == (size_t)(xsize * ysize))) { board = initboard (xsize, ysize); - strcpy (board->tab, tab); + memcpy (board->tab, tab, xsize * ysize); } else if (xsize * ysize > 0) { board = initboard (xsize, ysize); } @@ -216,7 +228,7 @@ void computenextgen (board_t *board) } } - strcpy (board->tab, nextboard->tab); + copyboard (board, nextboard); freeboard (nextboard); } @@ -227,7 +239,7 @@ void rotateelement (board_t *element, int rot) rot = (rot > 0) ? rot % 4 : ((1 - rot / 4) * 4 + rot) % 4; board_t *newelement = NULL; - if (rot % 2) { + if (rot % 2 == 0) { newelement = initboard (element->xsize, element->ysize); } else { newelement = initboard (element->ysize, element->xsize); @@ -235,7 +247,7 @@ void rotateelement (board_t *element, int rot) switch (rot) { case 0: - strcpy (newelement->tab, element->tab); + copyboard (newelement, element); break; case 1: for (i = 0; i < element->xsize; i++) { @@ -260,7 +272,7 @@ void rotateelement (board_t *element, int rot) break; } - strcpy (element->tab, newelement->tab); + copyboard (element, newelement); freeboard (newelement); } diff --git a/function.h b/function.h index d7f34e1..bc4a8cf 100644 --- a/function.h +++ b/function.h @@ -15,6 +15,8 @@ int strmaxlen (char *str, char ch); board_t *initboard (int xsize, int ysize); +void copyboard (board_t *dst, board_t *src); + void freeboard (board_t *board); void cleanboard (board_t *board); -- 2.30.2