All const members are now static const in their header files
This commit is contained in:
parent
46e9265365
commit
c8bd082866
23
src/ball.c
23
src/ball.c
@ -9,11 +9,6 @@ Ball_init(int screen_width, int screen_height, int posX_start)
|
|||||||
{
|
{
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
Ball *b = malloc(sizeof(Ball));
|
Ball *b = malloc(sizeof(Ball));
|
||||||
*(int *)&b->BALL_WIDTH = 20;
|
|
||||||
*(int *)&b->BALL_HEIGHT = 20;
|
|
||||||
*(int *)&b->BALL_VELOCITY = 7;
|
|
||||||
*(int *)&b->BALL_ANGLE_MIN_OFFSET = 10;
|
|
||||||
*(int *)&b->BALL_ANGLE_MAX_OFFSET = 60;
|
|
||||||
*(int *)&b->BALL_POSX_START = posX_start;
|
*(int *)&b->BALL_POSX_START = posX_start;
|
||||||
*(int *)&b->SCREEN_WIDTH = screen_width;
|
*(int *)&b->SCREEN_WIDTH = screen_width;
|
||||||
*(int *)&b->SCREEN_HEIGHT = screen_height;
|
*(int *)&b->SCREEN_HEIGHT = screen_height;
|
||||||
@ -26,8 +21,8 @@ Ball_reset(Ball *b, int direction) {
|
|||||||
// 120 deg angle with norm horizontal vector
|
// 120 deg angle with norm horizontal vector
|
||||||
int angle;
|
int angle;
|
||||||
do {
|
do {
|
||||||
angle = rand() % b->BALL_ANGLE_MAX_OFFSET*2 + b->BALL_ANGLE_MAX_OFFSET/2 - 90;
|
angle = rand() % BALL_ANGLE_MAX_OFFSET*2 + BALL_ANGLE_MAX_OFFSET/2 - 90;
|
||||||
} while (-b->BALL_ANGLE_MIN_OFFSET <= angle && angle <= b->BALL_ANGLE_MIN_OFFSET);
|
} while (-BALL_ANGLE_MIN_OFFSET <= angle && angle <= BALL_ANGLE_MIN_OFFSET);
|
||||||
if (direction < 0) {
|
if (direction < 0) {
|
||||||
b->posX = b->BALL_POSX_START;
|
b->posX = b->BALL_POSX_START;
|
||||||
}
|
}
|
||||||
@ -35,8 +30,8 @@ Ball_reset(Ball *b, int direction) {
|
|||||||
b->posX = b->SCREEN_WIDTH - b->BALL_POSX_START;
|
b->posX = b->SCREEN_WIDTH - b->BALL_POSX_START;
|
||||||
}
|
}
|
||||||
b->posY = b->SCREEN_HEIGHT/2;
|
b->posY = b->SCREEN_HEIGHT/2;
|
||||||
b->velX = -direction * b->BALL_VELOCITY * cos(angle * M_PI / 180);
|
b->velX = -direction * BALL_VELOCITY * cos(angle * M_PI / 180);
|
||||||
b->velY = b->BALL_VELOCITY * sin(angle * M_PI / 180);
|
b->velY = BALL_VELOCITY * sin(angle * M_PI / 180);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -48,14 +43,14 @@ Ball_free(Ball *b)
|
|||||||
int
|
int
|
||||||
Ball_collision(const Ball *b, const Racket *r) {
|
Ball_collision(const Ball *b, const Racket *r) {
|
||||||
const int leftB = b->posX;
|
const int leftB = b->posX;
|
||||||
const int rightB = leftB + b->BALL_WIDTH;
|
const int rightB = leftB + BALL_WIDTH;
|
||||||
const int upB = b->posY;
|
const int upB = b->posY;
|
||||||
const int downB = upB + b->BALL_HEIGHT;
|
const int downB = upB + BALL_HEIGHT;
|
||||||
|
|
||||||
const int leftR = r->posX;
|
const int leftR = r->posX;
|
||||||
const int rightR = leftR + r->RACKET_WIDTH;
|
const int rightR = leftR + RACKET_WIDTH;
|
||||||
const int upR = r->posY;
|
const int upR = r->posY;
|
||||||
const int downR = upR + r->RACKET_HEIGHT;
|
const int downR = upR + RACKET_HEIGHT;
|
||||||
|
|
||||||
if(downB <= upR
|
if(downB <= upR
|
||||||
|| upB >= downR
|
|| upB >= downR
|
||||||
@ -69,7 +64,7 @@ Ball_collision(const Ball *b, const Racket *r) {
|
|||||||
|
|
||||||
int
|
int
|
||||||
Ball_render(const Ball *b, SDL_Renderer *renderer) {
|
Ball_render(const Ball *b, SDL_Renderer *renderer) {
|
||||||
SDL_Rect rect = { b->posX, b->posY, b->BALL_WIDTH, b->BALL_HEIGHT };
|
SDL_Rect rect = { b->posX, b->posY, BALL_WIDTH, BALL_HEIGHT };
|
||||||
if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255) < 0) {
|
if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255) < 0) {
|
||||||
printf("SDL_SetRenderDrawColor failed! SDL_Error: %s\n", SDL_GetError());
|
printf("SDL_SetRenderDrawColor failed! SDL_Error: %s\n", SDL_GetError());
|
||||||
return 1;
|
return 1;
|
||||||
|
13
src/ball.h
13
src/ball.h
@ -6,15 +6,16 @@
|
|||||||
|
|
||||||
#include "racket.h"
|
#include "racket.h"
|
||||||
|
|
||||||
|
static const int BALL_WIDTH = 20;
|
||||||
|
static const int BALL_HEIGHT = 20;
|
||||||
|
static const int BALL_VELOCITY = 7;
|
||||||
|
static const int BALL_ANGLE_MIN_OFFSET = 10;
|
||||||
|
static const int BALL_ANGLE_MAX_OFFSET = 60;
|
||||||
|
|
||||||
typedef struct Ball {
|
typedef struct Ball {
|
||||||
const int BALL_WIDTH;
|
|
||||||
const int BALL_HEIGHT;
|
|
||||||
const int BALL_VELOCITY;
|
|
||||||
const int BALL_POSX_START;
|
|
||||||
const int BALL_ANGLE_MIN_OFFSET;
|
|
||||||
const int BALL_ANGLE_MAX_OFFSET;
|
|
||||||
const int SCREEN_WIDTH;
|
const int SCREEN_WIDTH;
|
||||||
const int SCREEN_HEIGHT;
|
const int SCREEN_HEIGHT;
|
||||||
|
const int BALL_POSX_START;
|
||||||
int posX;
|
int posX;
|
||||||
int posY;
|
int posY;
|
||||||
int velX;
|
int velX;
|
||||||
|
18
src/pong.c
18
src/pong.c
@ -6,20 +6,14 @@ Pong*
|
|||||||
Pong_init() {
|
Pong_init() {
|
||||||
Pong *p = malloc(sizeof(Pong));
|
Pong *p = malloc(sizeof(Pong));
|
||||||
|
|
||||||
// Cast away the const
|
p->ball = Ball_init(PONG_SCREEN_WIDTH, PONG_SCREEN_HEIGHT, PONG_BALL_POSX);
|
||||||
*(int *)&p->SCREEN_WIDTH = 640;
|
p->racketL = Racket_init(PONG_SCREEN_WIDTH, PONG_SCREEN_HEIGHT, PONG_RACKET_POSX, PONG_SCREEN_HEIGHT/2, SDL_SCANCODE_E, SDL_SCANCODE_D);
|
||||||
*(int *)&p->SCREEN_HEIGHT = 480;
|
|
||||||
*(int *)&p->BALL_POSX = 100;
|
|
||||||
*(int *)&p->RACKET_POSX = 50;
|
|
||||||
|
|
||||||
p->ball = Ball_init(p->SCREEN_WIDTH, p->SCREEN_HEIGHT, p->BALL_POSX);
|
|
||||||
p->racketL = Racket_init(p->SCREEN_WIDTH, p->SCREEN_HEIGHT, p->RACKET_POSX, p->SCREEN_HEIGHT/2, SDL_SCANCODE_E, SDL_SCANCODE_D);
|
|
||||||
if (p->racketL == NULL) {
|
if (p->racketL == NULL) {
|
||||||
Ball_free(p->ball);
|
Ball_free(p->ball);
|
||||||
free(p);
|
free(p);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
p->racketR = Racket_init(p->SCREEN_WIDTH, p->SCREEN_HEIGHT, p->SCREEN_WIDTH - p->RACKET_POSX, p->SCREEN_HEIGHT/2, SDL_SCANCODE_I, SDL_SCANCODE_K);
|
p->racketR = Racket_init(PONG_SCREEN_WIDTH, PONG_SCREEN_HEIGHT, PONG_SCREEN_WIDTH - PONG_RACKET_POSX - RACKET_WIDTH, PONG_SCREEN_HEIGHT/2, SDL_SCANCODE_I, SDL_SCANCODE_K);
|
||||||
if (p->racketR == NULL) {
|
if (p->racketR == NULL) {
|
||||||
Ball_free(p->ball);
|
Ball_free(p->ball);
|
||||||
Racket_free(p->racketL);
|
Racket_free(p->racketL);
|
||||||
@ -27,7 +21,7 @@ Pong_init() {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->window = SDL_CreateWindow( "Pong", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, p->SCREEN_WIDTH, p->SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
|
p->window = SDL_CreateWindow( "Pong", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, PONG_SCREEN_WIDTH, PONG_SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
|
||||||
if( p->window == NULL )
|
if( p->window == NULL )
|
||||||
{
|
{
|
||||||
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
|
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
|
||||||
@ -92,14 +86,14 @@ Ball_move(Ball *b, Pong *p)
|
|||||||
Ball_reset(b, -1);
|
Ball_reset(b, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(b->posX + b->BALL_WIDTH > b->SCREEN_WIDTH)
|
else if(b->posX + BALL_WIDTH > b->SCREEN_WIDTH)
|
||||||
{
|
{
|
||||||
p->racketL->score->score++;
|
p->racketL->score->score++;
|
||||||
Ball_reset(b, 1);
|
Ball_reset(b, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
b->posY += b->velY;
|
b->posY += b->velY;
|
||||||
if ((b->posY < 0) || (b->posY + b->BALL_HEIGHT > b->SCREEN_HEIGHT))
|
if ((b->posY < 0) || (b->posY + BALL_HEIGHT > b->SCREEN_HEIGHT))
|
||||||
{
|
{
|
||||||
b->posY -= b->velY;
|
b->posY -= b->velY;
|
||||||
b->velY = -b->velY;
|
b->velY = -b->velY;
|
||||||
|
@ -5,17 +5,18 @@
|
|||||||
|
|
||||||
#include "ball.h"
|
#include "ball.h"
|
||||||
|
|
||||||
|
static const int PONG_SCREEN_WIDTH = 640;
|
||||||
|
static const int PONG_SCREEN_HEIGHT = 480;
|
||||||
|
static const int PONG_BALL_POSX = 100;
|
||||||
|
static const int PONG_RACKET_POSX = 50;
|
||||||
|
|
||||||
typedef struct Pong {
|
typedef struct Pong {
|
||||||
const int SCREEN_WIDTH;
|
|
||||||
const int SCREEN_HEIGHT;
|
|
||||||
SDL_Window* window;
|
SDL_Window* window;
|
||||||
SDL_Surface* screenSurface;
|
SDL_Surface* screenSurface;
|
||||||
SDL_Renderer* renderer;
|
SDL_Renderer* renderer;
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
Ball *ball;
|
Ball *ball;
|
||||||
const int BALL_POSX;
|
|
||||||
Racket *racketL;
|
Racket *racketL;
|
||||||
const int RACKET_POSX;
|
|
||||||
Racket *racketR;
|
Racket *racketR;
|
||||||
} Pong;
|
} Pong;
|
||||||
|
|
||||||
|
14
src/racket.c
14
src/racket.c
@ -4,15 +4,11 @@ Racket*
|
|||||||
Racket_init(int screen_width, int screen_height, int posX, int posY, SDL_Keycode up, SDL_Keycode down)
|
Racket_init(int screen_width, int screen_height, int posX, int posY, SDL_Keycode up, SDL_Keycode down)
|
||||||
{
|
{
|
||||||
Racket *r = malloc(sizeof(Racket));
|
Racket *r = malloc(sizeof(Racket));
|
||||||
*(int *)&r->RACKET_WIDTH = 20;
|
|
||||||
*(int *)&r->RACKET_HEIGHT = 100;
|
|
||||||
*(int *)&r->RACKET_VELOCITY = 10;
|
|
||||||
*(int *)&r->SCREEN_WIDTH = screen_width;
|
*(int *)&r->SCREEN_WIDTH = screen_width;
|
||||||
*(int *)&r->SCREEN_HEIGHT = screen_height;
|
*(int *)&r->SCREEN_HEIGHT = screen_height;
|
||||||
*(int *)&r->posX = posX;
|
*(int *)&r->posX = posX;
|
||||||
r->posY = posY;
|
r->posY = posY;
|
||||||
*(int *)&r->vel = 5;
|
r->score = Score_init(r->posX, RACKET_WIDTH);
|
||||||
r->score = Score_init(r->posX, 20);
|
|
||||||
if (r->score == NULL) {
|
if (r->score == NULL) {
|
||||||
free(r);
|
free(r);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -32,7 +28,7 @@ Racket_free(Racket *r)
|
|||||||
|
|
||||||
int
|
int
|
||||||
Racket_render(const Racket *r, SDL_Renderer *renderer) {
|
Racket_render(const Racket *r, SDL_Renderer *renderer) {
|
||||||
SDL_Rect rect = { r->posX, r->posY, r->RACKET_WIDTH, r->RACKET_HEIGHT };
|
SDL_Rect rect = { r->posX, r->posY, RACKET_WIDTH, RACKET_HEIGHT };
|
||||||
if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255) < 0) {
|
if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255) < 0) {
|
||||||
printf("SDL_SetRenderDrawColor failed! SDL_Error: %s\n", SDL_GetError());
|
printf("SDL_SetRenderDrawColor failed! SDL_Error: %s\n", SDL_GetError());
|
||||||
return 1;
|
return 1;
|
||||||
@ -53,10 +49,10 @@ Racket_handle_event(Racket *r, const Uint8 *keystate) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
Racket_move(Racket *r) {
|
Racket_move(Racket *r) {
|
||||||
r->posY += r->updown * r->vel;
|
r->posY += r->updown * RACKET_VELOCITY;
|
||||||
if ((r->posY < 0) || (r->posY + r->RACKET_HEIGHT > r->SCREEN_HEIGHT))
|
if ((r->posY < 0) || (r->posY + RACKET_HEIGHT > r->SCREEN_HEIGHT))
|
||||||
{
|
{
|
||||||
r->posY -= r->updown * r->vel;
|
r->posY -= r->updown * RACKET_VELOCITY;
|
||||||
}
|
}
|
||||||
r->updown = 0;
|
r->updown = 0;
|
||||||
}
|
}
|
||||||
|
12
src/racket.h
12
src/racket.h
@ -5,18 +5,18 @@
|
|||||||
|
|
||||||
#include "score.h"
|
#include "score.h"
|
||||||
|
|
||||||
|
static const int RACKET_WIDTH = 20;
|
||||||
|
static const int RACKET_HEIGHT = 100;
|
||||||
|
static const int RACKET_VELOCITY = 5;
|
||||||
|
|
||||||
typedef struct Racket {
|
typedef struct Racket {
|
||||||
const int RACKET_WIDTH;
|
|
||||||
const int RACKET_HEIGHT;
|
|
||||||
const int RACKET_VELOCITY;
|
|
||||||
const int SCREEN_WIDTH;
|
const int SCREEN_WIDTH;
|
||||||
const int SCREEN_HEIGHT;
|
const int SCREEN_HEIGHT;
|
||||||
const int posX;
|
const int posX;
|
||||||
int posY;
|
|
||||||
const int vel;
|
|
||||||
Score* score;
|
|
||||||
const SDL_Keycode up;
|
const SDL_Keycode up;
|
||||||
const SDL_Keycode down;
|
const SDL_Keycode down;
|
||||||
|
int posY;
|
||||||
|
Score* score;
|
||||||
int updown;
|
int updown;
|
||||||
} Racket;
|
} Racket;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Score_free(Score *s) {
|
|||||||
int
|
int
|
||||||
Score_render(const Score *s, SDL_Renderer *renderer) {
|
Score_render(const Score *s, SDL_Renderer *renderer) {
|
||||||
char score_str[3];
|
char score_str[3];
|
||||||
SDL_Rect scoreRect = { s->POSX , s->POSY, 50, 50 };
|
SDL_Rect scoreRect = { s->POSX , s->POSY, SCORE_WIDTH, SCORE_HEIGHT };
|
||||||
|
|
||||||
sprintf(score_str, "%i", s->score);
|
sprintf(score_str, "%i", s->score);
|
||||||
SDL_Surface *scoreSurface = TTF_RenderText_Solid(s->font, score_str, s->textColor);
|
SDL_Surface *scoreSurface = TTF_RenderText_Solid(s->font, score_str, s->textColor);
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <SDL_ttf.h>
|
#include <SDL_ttf.h>
|
||||||
|
|
||||||
|
static const int SCORE_WIDTH = 50;
|
||||||
|
static const int SCORE_HEIGHT = 50;
|
||||||
|
|
||||||
typedef struct Score {
|
typedef struct Score {
|
||||||
const int POSX;
|
const int POSX;
|
||||||
const int POSY;
|
const int POSY;
|
||||||
|
Loading…
Reference in New Issue
Block a user