add rotations
authorLaurent Mazet <mazet@softndesign.org>
Sat, 17 Aug 2024 20:23:02 +0000 (22:23 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 17 Aug 2024 20:23:02 +0000 (22:23 +0200)
pentomino.c

index 3f8c5aed0a6e3f56122c84c021161068ca2b9924..e2973e7020430a7e1a8a0c922567f8c3dbf5b160 100644 (file)
@@ -23,11 +23,14 @@ int scale = 1;
 char *boardname = "6x10";
 
 char *help =
+    "<h> Hold/Release piece\n"
     "<i> Move up cursor\n"
     "<j> Move left cursor\n"
     "<k> Move down cursor\n"
     "<l> Move right cursor\n"
-    "<o> Hold/Release piece\n"
+    "<o> Rotate piece right\n"
+    "<u> Rotate piece left\n"
+    "<y> Yank next piece\n"
     "<q> Quit\n"
     "<s> 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: