From dea02de37114f77c0a71dea27da64c20cd952fa3 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 17 Aug 2024 22:23:02 +0200 Subject: [PATCH] add rotations --- pentomino.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/pentomino.c b/pentomino.c index 3f8c5ae..e2973e7 100644 --- a/pentomino.c +++ b/pentomino.c @@ -23,11 +23,14 @@ int scale = 1; char *boardname = "6x10"; char *help = + " Hold/Release piece\n" " Move up cursor\n" " Move left cursor\n" " Move down cursor\n" " Move right cursor\n" - " Hold/Release piece\n" + " Rotate piece right\n" + " Rotate piece left\n" + " Yank next piece\n" " Quit\n" " Save file\n" ; @@ -210,16 +213,15 @@ int main (int argc, char *argv[]) int lmsg = xhelp - xmsg + strmaxlen (help, '\n'); /* blocks positions */ + boardwindow (bench, 0); + for (i = 0; i < blocks->nb; i++) { + displayblock (bench, blocks->block[i], blocks->x[i], blocks->y[i]); + } /* event loop */ int stop = 0; while (!stop) { boardwindow (board, 0); - boardwindow (bench, 0); - for (i = 0; i < blocks->nb; i++) { - displayblock (bench, blocks->block[i], blocks->x[i], blocks->y[i]); - VERBOSE (DEBUG, fprintf (stderr, "block %d: %dx%d (%d, %d)\n", i, blocks->block[i]->width, blocks->block[i]->height, blocks->x[i], blocks->y[i])); - } block_t *block = blocks->block[cursor]; displayblock (board, block, xcursor, ycursor); @@ -232,15 +234,9 @@ int main (int argc, char *argv[]) int ch = getch (); switch (ch) { - case ' ': - case 'u': - cursor++; - if (cursor >= blocks->nb) { - cursor = 0; - } case '\n': case '\r': - case 'o': + case 'h': break; case KEY_UP: case 'i': @@ -256,18 +252,21 @@ int main (int argc, char *argv[]) break; case KEY_DOWN: case 'k': - VERBOSE (DEBUG, fprintf (stderr, "DOWN: %d %d\n", ycursor, board->height - (block->height) / 1 + (block->height % 2 ? 0 : 1))); if (ycursor < board->height - (block->height + 1) / 2) { ycursor++; } break; case KEY_RIGHT: case 'l': - VERBOSE (DEBUG, fprintf (stderr, "RIGHT: %d %d\n", xcursor, board->width - (block->width) / 1 + (block->width % 2 ? 0 : 1))); if (xcursor < board->width - (block->width + 1) / 2) { xcursor++; } break; + case KEY_DELETE: + case 127: + case 'o': + rotateblock (block, 1); + break; case KEY_ESC: case 'q': stop = 1; @@ -284,9 +283,17 @@ int main (int argc, char *argv[]) } break; case KEY_BACKSPACE: - case KEY_DELETE: - case 127: case '\b': + case 'u': + rotateblock (block, -1); + break; + case ' ': + case 'y': + cursor++; + if (cursor >= blocks->nb) { + cursor = 0; + } + break; break; //case ERR: //default: -- 2.30.2