first commit lol

This commit is contained in:
Return0ne 2022-03-27 16:40:15 -04:00
commit 32ef84bd03
5 changed files with 261 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
Avoid

8
Makefile Normal file
View file

@ -0,0 +1,8 @@
clang :
clang src/Main.c -std=c99 -Wall -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -o Avoid
tcc :
tcc src/Main.c -std=c99 -Wall -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -o Avoid
gcc :
gcc src/Main.c -std=c99 -Wall -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -o Avoid

Binary file not shown.

BIN
assets/sfx/boing.wav Normal file

Binary file not shown.

252
src/Main.c Normal file
View file

@ -0,0 +1,252 @@
// #include <stdio.h>
#include "raylib.h"
// screen variables
static const int screenWidth = 800;
static const int screenHeight = 450;
// Gamescreens
typedef enum GameScreen { TITLE = 0, GAMEPLAY, GAMEOVER, CREDITS } GameScreen;
// structs
typedef struct Ball {
Vector2 position;
Vector2 speed;
float radius;
//float growth;
Color color;
bool active;
} Ball;
typedef struct Player {
Rectangle hitbox;
int hp;
} Player;
// Game variables
static int Exit_num = 0;
static GameScreen currentScreen = { 0 };
static Music Bgm01 = { 0 };
static Sound fxbounce = { 0 };
static Player player = { 0 };
static Ball ball = { 0 };
static bool pause;
static bool mute;
static int pauseTimer;
static int BallFrameCounter;
static int selected = 0;
// Game functions
static void GameInit(void);
static void UpdateGame(void);
static void DrawGame(void);
static void UpdateDrawFrame(void);
static void UnloadGame(void);
int main(void)
{
InitWindow(screenWidth, screenHeight, "Avoid");
InitAudioDevice();
GameInit();
while (!WindowShouldClose()) UpdateDrawFrame();
UnloadGame();
CloseWindow();
return Exit_num;
}
void GameInit(void)
{
SetTargetFPS(60);
currentScreen = TITLE;
Bgm01 = LoadMusicStream("assets/bgm/01-Slipin-Sunday.ogg");
fxbounce = LoadSound("assets/sfx/boing.wav");
PlayMusicStream(Bgm01);
SetMasterVolume(0.2);
player.hp = 30;
player.hitbox = (Rectangle) {
GetScreenWidth()/2.0f - 30,
GetScreenHeight()/2.0f - 30,
50,
50
};
ball.position = (Vector2){ 50, 50 };
ball.radius = 20;
//ball.growth = 0.1;
ball.speed = (Vector2){ 400.0f, 400.0f };
ball.color = MAROON;
ball.active = true;
pause = 0;
mute = 0;
pauseTimer = 0;
BallFrameCounter = 0;
}
void UpdateGame(void)
{
if ((IsKeyDown(KEY_LEFT_SHIFT)) && (IsKeyPressed(KEY_F))) ToggleFullscreen();
switch(currentScreen) {
case TITLE:
if (IsKeyPressed(KEY_UP)) selected++;
if (IsKeyPressed(KEY_DOWN)) selected--;
if (selected > 0) selected--;
if (selected < -1) selected++;
if ((selected == 0) && (IsKeyPressed(KEY_ENTER))) currentScreen = GAMEPLAY;
if ((selected == -1) && (IsKeyPressed(KEY_ENTER))) currentScreen = CREDITS;
break;
case GAMEPLAY:
UpdateMusicStream(Bgm01);
if (IsKeyPressed(KEY_M)) {
mute = !mute;
if (mute) PauseMusicStream(Bgm01);
else ResumeMusicStream(Bgm01);
}
if (IsKeyPressed(KEY_SPACE)) pause = !pause;
if (!pause) {
// Controls
if (IsKeyDown(KEY_LEFT)) player.hitbox.x -= GetFrameTime() * 300.0f;
if (IsKeyDown(KEY_RIGHT)) player.hitbox.x += GetFrameTime() * 300.0f;
if (IsKeyDown(KEY_UP)) player.hitbox.y -= GetFrameTime() * 300.0f;
if (IsKeyDown(KEY_DOWN)) player.hitbox.y += GetFrameTime() * 300.0f;
// Player to da wallz collies
if ((player.hitbox.x + player.hitbox.width) >= GetScreenWidth()) player.hitbox.x = GetScreenWidth() - player.hitbox.width;
else if (player.hitbox.x <= 0) player.hitbox.x = 0;
if ((player.hitbox.y + player.hitbox.height) >= GetScreenHeight()) player.hitbox.y = GetScreenHeight() - player.hitbox.height;
else if (player.hitbox.y <= 0) player.hitbox.y = 0;
if (IsKeyPressed(KEY_D)) ball.active = !ball.active;
if (IsKeyPressed(KEY_R)) { GameInit(); currentScreen = TITLE; }
if (ball.active) {
BallFrameCounter++;
// moveiement oof the balls
ball.position.x += GetFrameTime() * ball.speed.x;
ball.position.y += GetFrameTime() * ball.speed.y;
// ball.radius += GetFrameTime() * ball.growth;
// Ballz to da wallz collies
if ((ball.position.x >= (GetScreenWidth() - ball.radius)) || (ball.position.x <= ball.radius)) {ball.speed.x *= -1.0f; if (!mute) PlaySoundMulti(fxbounce);}
if ((ball.position.y >= (GetScreenHeight() - ball.radius)) || (ball.position.y <= ball.radius)) {ball.speed.y *= -1.0f; if (!mute) PlaySoundMulti(fxbounce);}
// if (ball.position.x >= screenWidth) ball.position.x = 100;
// if (ball.position.y >= screenHeight) ball.position.y = 100;
if (CheckCollisionCircleRec(ball.position, ball.radius, player.hitbox)) player.hp--;
if (BallFrameCounter==1000) ball.radius = 40;
if (BallFrameCounter==2000) ball.radius = 50;
if (BallFrameCounter==3000) ball.radius = 60;
if (BallFrameCounter==4000) ball.radius = 70;
}
if (player.hp <= 0) currentScreen = GAMEOVER;
}
else pauseTimer++;
break;
case GAMEOVER:
if (IsKeyPressed(KEY_ENTER)) {
GameInit();
currentScreen = GAMEPLAY;
}
break;
case CREDITS:
if (IsKeyPressed(KEY_ENTER)) currentScreen = TITLE;
default: break;
}
}
void DrawGame(void)
{
BeginDrawing();
ClearBackground(RAYWHITE);
switch(currentScreen) {
case TITLE:
DrawRectangle(0, 0, screenWidth, screenHeight, ORANGE);
DrawText("Controls", 10, 10, 30, PURPLE);
DrawText("Press the arrow keys to move", 10, 40, 10, RED);
DrawText("Press 'SPACE' to pause", 10, 60, 10, RED);
DrawText("Press 'M' to mute", 10, 80, 10, RED);
DrawText("Press 'LSHIFT' + 'F' for full screen", 10, 100, 10, RED);
DrawText("Press 'R' to restart", 10, 120, 10, RED);
DrawText("Press 'ENTER' to select an option", 10, 140, 10, RED);
DrawText("Avoid", 330, 20, 50, BLUE);
if (selected == 0) DrawText("PLAY", 360, 220, 20, WHITE);
else DrawText("PLAY", 360, 220, 20, BLUE);
if (selected == -1) DrawText("CREDITS", 340, 240, 20, WHITE);
else DrawText("CREDITS", 340, 240, 20, BLUE);
break;
case GAMEPLAY:
DrawRectangle(0, 0, screenWidth, screenHeight, BLACK);
DrawFPS(10, 430);
DrawText(TextFormat("HP: %i", player.hp), 10, 10, 20, RED);
DrawText(TextFormat("BALL FRAMES: %i", BallFrameCounter), 10, 30, 20, BLUE);
DrawText(TextFormat("BALL SIZE: %f", ball.radius), 10, 50, 20, PINK);
if (ball.active) DrawCircleV(ball.position, (float)ball.radius, ball.color);
DrawRectangleRec(player.hitbox, BLUE);
if (pause && ((pauseTimer/30)%2)) DrawText("PAUSED", 330, 190, 30, PURPLE);
break;
case GAMEOVER:
DrawRectangle(0, 0, screenWidth, screenHeight, BLUE);
DrawText("GAMEOVER", 250, 20, 50, RED);
DrawText("PRESS ENTER TO RESET", 270, 220, 20, WHITE);
break;
case CREDITS:
DrawRectangle(0, 0, screenWidth, screenHeight, GREEN);
DrawText("Avoid", 330, 20, 50, RED);
DrawText("Programming by M-C-O-B", 10, 210, 20, BLUE);
DrawText("Morale support by Tobi/Tobrella and Jelly_man", 10, 240, 20, BLUE);
DrawText("Powered by raylib 4.0", 10, 270, 20, BLUE);
DrawText("A Canneddonuts project 2022", 10, 310, 40, MAROON);
DrawText("Press 'ENTER' ", 10, 350, 20, WHITE);
break;
default: break;
}
EndDrawing();
}
void UpdateDrawFrame(void)
{
UpdateGame();
DrawGame();
}
void UnloadGame(void)
{
UnloadMusicStream(Bgm01);
UnloadSound(fxbounce);
}