mirror of
https://github.com/thepigeongenerator/breakout_clone.git
synced 2025-12-16 22:05:45 +01:00
fix input system
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
I wanted a project to learn C and the SDL framework in, and settled upon this game as I thought it was a simple and approachable project for me to execute.
|
||||
|
||||
### TODO:
|
||||
- make a better input system (one that doesn't crash the game)
|
||||
- make beeping sound effects
|
||||
- make the game freeze when you lost instead of closing
|
||||
- fix constants in level colision detection
|
||||
|
||||
@@ -48,12 +48,12 @@ void level_init(Level* level) {
|
||||
}
|
||||
|
||||
//updates the level
|
||||
void level_update(Level* level, bool* keys) {
|
||||
void level_update(Level* level, const Uint8* keys) {
|
||||
Bouncer* bouncer = &level->bouncer;
|
||||
Ball* ball = &level->ball;
|
||||
|
||||
// if move bouncer LEFT
|
||||
if (keys[SDLK_a]) {
|
||||
if (keys[SDL_SCANCODE_A] || keys[SDL_SCANCODE_LEFT]) {
|
||||
ball->moving = true;
|
||||
|
||||
if (bouncer->pos.x < 0 == false) {
|
||||
@@ -62,7 +62,7 @@ void level_update(Level* level, bool* keys) {
|
||||
}
|
||||
|
||||
// if move bouncer RIGHT
|
||||
if (keys[SDLK_d]) {
|
||||
if (keys[SDL_SCANCODE_D] || keys[SDL_SCANCODE_RIGHT]) {
|
||||
ball->moving = true;
|
||||
|
||||
if ((bouncer->pos.x + bouncer->width) > SCREEN_WIDTH == false) {
|
||||
|
||||
@@ -32,4 +32,4 @@ typedef struct {
|
||||
|
||||
|
||||
void level_init(Level* level);
|
||||
void level_update(Level* level, bool* keys);
|
||||
void level_update(Level* level, const Uint8* keys);
|
||||
|
||||
12
src/main.c
12
src/main.c
@@ -17,7 +17,7 @@ static int init(SDL_Window** window, SDL_Renderer** renderer, Level* level) {
|
||||
}
|
||||
|
||||
// called on each game update
|
||||
static bool update(Level* level, bool* keys, RenderData* render_data) {
|
||||
static bool update(Level* level, const Uint8* keys, RenderData* render_data) {
|
||||
const clock_t clock_start = clock();
|
||||
|
||||
//update the event keys
|
||||
@@ -28,13 +28,6 @@ static bool update(Level* level, bool* keys, RenderData* render_data) {
|
||||
case SDL_QUIT:
|
||||
return false;
|
||||
break;
|
||||
|
||||
case SDL_KEYDOWN:
|
||||
keys[e.key.keysym.sym] = true;
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
keys[e.key.keysym.sym] = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,7 +64,6 @@ int main(void) {
|
||||
Level level = { 0 }; //stores the game's state
|
||||
SDL_Window* window = NULL; //the window that is given to the OS
|
||||
SDL_Renderer* renderer = NULL; //the renderer used to draw to the window
|
||||
bool keys[322] = { 0 }; //stores the key states TODO: find a better method than to use 322 bytes
|
||||
|
||||
// initialize
|
||||
{
|
||||
@@ -85,7 +77,7 @@ int main(void) {
|
||||
|
||||
// game-loop
|
||||
RenderData render_data = { window, renderer, &level }; //contains the data which is used to render the game
|
||||
while (update(&level, keys, &render_data) && (level.stop == false));
|
||||
while (update(&level, SDL_GetKeyboardState(NULL), &render_data) && (level.stop == false));
|
||||
|
||||
// frees media and shuts down SDL
|
||||
close(window, renderer);
|
||||
|
||||
Reference in New Issue
Block a user