Skip to content

Commit f78f504

Browse files
committed
Reduce default paddle size to 3 pixels and make it configurable
Add -S <size> option to set paddle width in pixels. Default changed from 5 (half=2) to 3 (half=1).
1 parent 89cb9df commit f78f504

1 file changed

Lines changed: 15 additions & 6 deletions

File tree

pixelwall/design_breakout.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1919
#define BRICK_ROWS 3
2020
#define BRICK_COLS 11
2121
#define PADDLE_ROW 14
22-
#define PADDLE_HALF 2
22+
#define DEFAULT_PADDLE_HALF 1
2323

2424
typedef struct {
2525
Color color;
2626
bool colorful;
2727
Color row_colors[BRICK_ROWS];
2828
Color ball_color;
2929
Color paddle_color;
30+
int paddle_half;
3031
Pos ball;
3132
Pos direction;
3233
int paddle_x;
@@ -69,19 +70,26 @@ static void PrintHelp() {
6970
printf(" -K <color> Brick row 3 color (default: 85,255,255)\n");
7071
printf(" -L <color> Ball color (default: 255,255,85)\n");
7172
printf(" -P <color> Paddle color (default: 255,255,255)\n");
73+
printf(" -S <size> Paddle size in pixels (default: %d)\n", DEFAULT_PADDLE_HALF * 2 + 1);
7274
}
7375

7476
static void ParseOptions(BreakoutData *bd, int argc, char *argv[]) {
7577
int opt;
7678
optind = 1;
77-
while ((opt = getopt(argc, argv, ":d:CR:G:K:L:P:")) != -1) {
79+
while ((opt = getopt(argc, argv, ":d:CR:G:K:L:P:S:")) != -1) {
7880
switch (opt) {
7981
case 'C': bd->colorful = true; break;
8082
case 'R': bd->row_colors[0] = ParseColor(optarg); break;
8183
case 'G': bd->row_colors[1] = ParseColor(optarg); break;
8284
case 'K': bd->row_colors[2] = ParseColor(optarg); break;
8385
case 'L': bd->ball_color = ParseColor(optarg); break;
8486
case 'P': bd->paddle_color = ParseColor(optarg); break;
87+
case 'S': {
88+
int size = atoi(optarg);
89+
if (size < 1) size = 1;
90+
bd->paddle_half = (size - 1) / 2;
91+
break;
92+
}
8593
}
8694
}
8795
}
@@ -98,6 +106,7 @@ static void *Create(Grid *grid, int argc, char *argv[]) {
98106
bd->row_colors[2] = (Color){85, 255, 255, 255}; // CGA Light Cyan
99107
bd->ball_color = (Color){255, 255, 85, 255}; // CGA Yellow
100108
bd->paddle_color = (Color){255, 255, 255, 255}; // White
109+
bd->paddle_half = DEFAULT_PADDLE_HALF;
101110

102111
ParseOptions(bd, argc, argv);
103112
ResetBricks(bd);
@@ -144,7 +153,7 @@ static void UpdateFrame(Grid *grid, void *data) {
144153

145154
// Paddle collision
146155
if (ny == PADDLE_ROW) {
147-
if (nx >= bd->paddle_x - PADDLE_HALF && nx <= bd->paddle_x + PADDLE_HALF) {
156+
if (nx >= bd->paddle_x - bd->paddle_half && nx <= bd->paddle_x + bd->paddle_half) {
148157
bd->direction.y = -1;
149158
ny = bd->ball.y + bd->direction.y;
150159
}
@@ -171,8 +180,8 @@ static void UpdateFrame(Grid *grid, void *data) {
171180
int target = bd->ball.x + jitter;
172181
if (bd->paddle_x < target) bd->paddle_x++;
173182
if (bd->paddle_x > target) bd->paddle_x--;
174-
if (bd->paddle_x < PADDLE_HALF) bd->paddle_x = PADDLE_HALF;
175-
if (bd->paddle_x > 21 - PADDLE_HALF) bd->paddle_x = 21 - PADDLE_HALF;
183+
if (bd->paddle_x < bd->paddle_half) bd->paddle_x = bd->paddle_half;
184+
if (bd->paddle_x > 21 - bd->paddle_half) bd->paddle_x = 21 - bd->paddle_half;
176185

177186
// Draw bricks
178187
for (int r = 0; r < BRICK_ROWS; r++) {
@@ -188,7 +197,7 @@ static void UpdateFrame(Grid *grid, void *data) {
188197

189198
// Draw paddle
190199
Color pc = bd->colorful ? bd->paddle_color : bd->color;
191-
for (int i = -PADDLE_HALF; i <= PADDLE_HALF; i++) {
200+
for (int i = -bd->paddle_half; i <= bd->paddle_half; i++) {
192201
GridSetColor(grid, (Pos){bd->paddle_x + i, PADDLE_ROW}, pc);
193202
}
194203

0 commit comments

Comments
 (0)