@@ -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
2424typedef 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
7476static 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