aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2017-05-15 18:07:23 +0200
committerRay <raysan5@gmail.com>2017-05-15 18:07:23 +0200
commit4a31ce4bd239cff7591e2f3795464d9076ecb7fd (patch)
tree118d780cdd92dd134a3521ecacd4a075152fa551
parent87a39702228cd309a5f690102980c2b9a6bee426 (diff)
downloadraylib-4a31ce4bd239cff7591e2f3795464d9076ecb7fd.tar.gz
raylib-4a31ce4bd239cff7591e2f3795464d9076ecb7fd.zip
Reorganize code
-rw-r--r--games/arkanoid.c169
1 files changed, 77 insertions, 92 deletions
diff --git a/games/arkanoid.c b/games/arkanoid.c
index f10f9383..6231fb8b 100644
--- a/games/arkanoid.c
+++ b/games/arkanoid.c
@@ -77,9 +77,6 @@ static void DrawGame(void); // Draw game (one frame)
static void UnloadGame(void); // Unload game
static void UpdateDrawFrame(void); // Update and Draw (one frame)
-// Additional module functions
-static void UpdateBall(void);
-
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
@@ -165,13 +162,13 @@ void UpdateGame(void)
if (!pause)
{
- // Player movement
+ // Player movement logic
if (IsKeyDown(KEY_LEFT)) player.position.x -= 5;
if ((player.position.x - player.size.x/2) <= 0) player.position.x = player.size.x/2;
if (IsKeyDown(KEY_RIGHT)) player.position.x += 5;
if ((player.position.x + player.size.x/2) >= screenWidth) player.position.x = screenWidth - player.size.x/2;
- // Launch ball
+ // Ball launching logic
if (!ball.active)
{
if (IsKeyPressed(KEY_SPACE))
@@ -181,7 +178,81 @@ void UpdateGame(void)
}
}
- UpdateBall();
+ // Ball movement logic
+ if (ball.active)
+ {
+ ball.position.x += ball.speed.x;
+ ball.position.y += ball.speed.y;
+ }
+ else
+ {
+ ball.position = (Vector2){ player.position.x, screenHeight*7/8 - 30 };
+ }
+
+ // Collision logic: ball vs walls
+ if (((ball.position.x + ball.radius) >= screenWidth) || ((ball.position.x - ball.radius) <= 0)) ball.speed.x *= -1;
+ if ((ball.position.y - ball.radius) <= 0) ball.speed.y *= -1;
+ if ((ball.position.y + ball.radius) >= screenHeight)
+ {
+ ball.speed = (Vector2){ 0, 0 };
+ ball.active = false;
+
+ player.life--;
+ }
+
+ // Collision logic: ball vs player
+ if (CheckCollisionCircleRec(ball.position, ball.radius,
+ (Rectangle){ player.position.x - player.size.x/2, player.position.y - player.size.y/2, player.size.x, player.size.y}))
+ {
+ if (ball.speed.y > 0)
+ {
+ ball.speed.y *= -1;
+ ball.speed.x = (ball.position.x - player.position.x)/(player.size.x/2)*5;
+ }
+ }
+
+ // Collision logic: ball vs bricks
+ for (int i = 0; i < LINES_OF_BRICKS; i++)
+ {
+ for (int j = 0; j < BRICKS_PER_LINE; j++)
+ {
+ if (brick[i][j].active)
+ {
+ // Hit below
+ if (((ball.position.y - ball.radius) <= (brick[i][j].position.y + brickSize.y/2)) &&
+ ((ball.position.y - ball.radius) > (brick[i][j].position.y + brickSize.y/2 + ball.speed.y)) &&
+ ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y < 0))
+ {
+ brick[i][j].active = false;
+ ball.speed.y *= -1;
+ }
+ // Hit above
+ else if (((ball.position.y + ball.radius) >= (brick[i][j].position.y - brickSize.y/2)) &&
+ ((ball.position.y + ball.radius) < (brick[i][j].position.y - brickSize.y/2 + ball.speed.y)) &&
+ ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y > 0))
+ {
+ brick[i][j].active = false;
+ ball.speed.y *= -1;
+ }
+ // Hit left
+ else if (((ball.position.x + ball.radius) >= (brick[i][j].position.x - brickSize.x/2)) &&
+ ((ball.position.x + ball.radius) < (brick[i][j].position.x - brickSize.x/2 + ball.speed.x)) &&
+ ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x > 0))
+ {
+ brick[i][j].active = false;
+ ball.speed.x *= -1;
+ }
+ // Hit right
+ else if (((ball.position.x - ball.radius) <= (brick[i][j].position.x + brickSize.x/2)) &&
+ ((ball.position.x - ball.radius) > (brick[i][j].position.x + brickSize.x/2 + ball.speed.x)) &&
+ ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x < 0))
+ {
+ brick[i][j].active = false;
+ ball.speed.x *= -1;
+ }
+ }
+ }
+ }
// Game over logic
if (player.life <= 0) gameOver = true;
@@ -260,90 +331,4 @@ void UpdateDrawFrame(void)
{
UpdateGame();
DrawGame();
-}
-
-//--------------------------------------------------------------------------------------
-// Additional module functions
-//--------------------------------------------------------------------------------------
-static void UpdateBall()
-{
- // Update position
- if (ball.active)
- {
- ball.position.x += ball.speed.x;
- ball.position.y += ball.speed.y;
- }
- else
- {
- ball.position = (Vector2){ player.position.x, screenHeight*7/8 - 30 };
- }
-
- // Bounce in x
- if (((ball.position.x + ball.radius) >= screenWidth) || ((ball.position.x - ball.radius) <= 0)) ball.speed.x *= -1;
-
- // Bounce in y
- if ((ball.position.y - ball.radius) <= 0) ball.speed.y *= -1;
-
- // Ball reaches bottom of the screen
- if ((ball.position.y + ball.radius) >= screenHeight)
- {
- ball.speed = (Vector2){ 0, 0 };
- ball.active = false;
-
- player.life--;
- }
-
- // Collision logic: ball vs player
- if (CheckCollisionCircleRec(ball.position, ball.radius,
- (Rectangle){ player.position.x - player.size.x/2, player.position.y - player.size.y/2, player.size.x, player.size.y}))
- {
- if (ball.speed.y > 0)
- {
- ball.speed.y *= -1;
- ball.speed.x = (ball.position.x - player.position.x)/(player.size.x/2)*5;
- }
- }
-
- // Collision logic: ball vs bricks
- for (int i = 0; i < LINES_OF_BRICKS; i++)
- {
- for (int j = 0; j < BRICKS_PER_LINE; j++)
- {
- if (brick[i][j].active)
- {
- // Hit below
- if (((ball.position.y - ball.radius) <= (brick[i][j].position.y + brickSize.y/2)) &&
- ((ball.position.y - ball.radius) > (brick[i][j].position.y + brickSize.y/2 + ball.speed.y)) &&
- ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y < 0))
- {
- brick[i][j].active = false;
- ball.speed.y *= -1;
- }
- // Hit above
- else if (((ball.position.y + ball.radius) >= (brick[i][j].position.y - brickSize.y/2)) &&
- ((ball.position.y + ball.radius) < (brick[i][j].position.y - brickSize.y/2 + ball.speed.y)) &&
- ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y > 0))
- {
- brick[i][j].active = false;
- ball.speed.y *= -1;
- }
- // Hit left
- else if (((ball.position.x + ball.radius) >= (brick[i][j].position.x - brickSize.x/2)) &&
- ((ball.position.x + ball.radius) < (brick[i][j].position.x - brickSize.x/2 + ball.speed.x)) &&
- ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x > 0))
- {
- brick[i][j].active = false;
- ball.speed.x *= -1;
- }
- // Hit right
- else if (((ball.position.x - ball.radius) <= (brick[i][j].position.x + brickSize.x/2)) &&
- ((ball.position.x - ball.radius) > (brick[i][j].position.x + brickSize.x/2 + ball.speed.x)) &&
- ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x < 0))
- {
- brick[i][j].active = false;
- ball.speed.x *= -1;
- }
- }
- }
- }
} \ No newline at end of file