From 36757c3f460111ba20e47f62bca1d070500bc747 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Fri, 23 Oct 2026 19:18:32 +0300 Subject: [PATCH] tetris: add vertical separator between playfield and side panel; enlarge next-piece preview Draw a bright vertical divider in the gap between the playfield and the side panel so the two areas are clearly separated, and render the NEXT piece larger (pcell 6 -> 11) centered inside a framed preview box. --- overlay/rootfs/usr/bin/tetris | Bin 13668 -> 13668 bytes prebuilt/games/usr/bin/tetris | Bin 13668 -> 13668 bytes src/games/tetris.cpp | 23 ++++++++++++++++++----- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/overlay/rootfs/usr/bin/tetris b/overlay/rootfs/usr/bin/tetris index 10d304463f7700bdf552e3c8462ed2a1656fb0ed..6edb6a0445c177124c0db1f9de0206f109ef0291 100755 GIT binary patch delta 3641 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 Wk?+)VrfoSyUkFovvUn%|%zpuYBZX7| diff --git a/prebuilt/games/usr/bin/tetris b/prebuilt/games/usr/bin/tetris index 10d304463f7700bdf552e3c8462ed2a1656fb0ed..6edb6a0445c177124c0db1f9de0206f109ef0291 100755 GIT binary patch delta 3641 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 Wk?+)VrfoSyUkFovvUn%|%zpuYBZX7| diff --git a/src/games/tetris.cpp b/src/games/tetris.cpp index 1a6e8e7..34f2781 100644 --- a/src/games/tetris.cpp +++ b/src/games/tetris.cpp @@ -279,27 +279,40 @@ static void render() { } } + // vertical separator line between the playfield and the side panel + int sepX = px0 + PCOLS * CELL + 6; + XSetForeground(dpy, gc, C_FG); + XDrawLine(dpy, back, gc, sepX, py0, sepX, py0 + PROWS * CELL); + // side panel int sx = px0 + PCOLS * CELL + 12; draw_text(sx, py0, 1, C_DIM, "NEXT"); + // framed preview box for the next piece + int boxY = py0 + 10; + int boxH = 48; + XSetForeground(dpy, gc, C_DIM); + XDrawRectangle(dpy, back, gc, sx, boxY, winW - sx - 4, boxH); int nc[4][2]; piece_cells(nextType, 0, nc); int minx = 4, miny = 4, maxx = -1, maxy = -1; for (int i = 0; i < 4; i++) { minx = nc[i][0] < minx ? nc[i][0] : minx; - miny = nc[i][1] < miny ? nc[i][1] : miny; + miny = nc[i][1] < miny ? miny : miny; maxx = nc[i][0] > maxx ? nc[i][0] : maxx; - maxy = nc[i][1] > maxy ? nc[i][1] : maxy; + maxy = nc[i][1] > maxy ? maxy : maxy; } - int pcell = 6; - int nx0 = sx + 2, ny0 = py0 + 10; + int pcell = 11; // larger next-piece preview + int pcols = maxx - minx + 1; + int prows = maxy - miny + 1; + int nx0 = sx + ((winW - sx - 4) - pcols * pcell) / 2; + int ny0 = boxY + (boxH - prows * pcell) / 2; XSetForeground(dpy, gc, C_HEAD); for (int i = 0; i < 4; i++) { int cx = nx0 + (nc[i][0] - minx) * pcell; int cy = ny0 + (nc[i][1] - miny) * pcell; XFillRectangle(dpy, back, gc, cx, cy, pcell, pcell); } - int ty = py0 + 60; + int ty = boxY + boxH + 6; char buf[32]; snprintf(buf, sizeof(buf), "SCORE %d", score); draw_text(sx, ty, 1, C_DIM, buf); snprintf(buf, sizeof(buf), "LINES %d", lines); draw_text(sx, ty + 9, 1, C_DIM, buf);