first commit
This commit is contained in:
commit
32eea495d8
28
Makefile
Normal file
28
Makefile
Normal file
@ -0,0 +1,28 @@
|
||||
.PHONY: all clean run
|
||||
VERSION = 0.0.1
|
||||
|
||||
LIBS = sdl2
|
||||
CMACRO = -DVERSION=\"$(VERSION)\"
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -g -Wall -Wextra -pedantic $(shell pkg-config $(LIBS) --cflags) $(CMACRO)
|
||||
LDFLAGS = $(shell pkg-config $(LIBS) --libs) -lm
|
||||
|
||||
all: pong
|
||||
|
||||
pong: pong.o
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
rm -f pong
|
||||
|
||||
bear: clean
|
||||
bear -- make
|
||||
|
||||
run: pong
|
||||
./$<
|
||||
|
84
pong.c
Normal file
84
pong.c
Normal file
@ -0,0 +1,84 @@
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_error.h>
|
||||
#include <SDL2/SDL_events.h>
|
||||
#include <SDL2/SDL_rect.h>
|
||||
#include <SDL2/SDL_render.h>
|
||||
#include <SDL2/SDL_video.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#define WIDTH 1920
|
||||
#define HEIGHT 1200
|
||||
#define BALLSIZE 50
|
||||
|
||||
SDL_Window *win;
|
||||
SDL_Renderer *ren;
|
||||
|
||||
struct {
|
||||
int x, y;
|
||||
float dx, dy;
|
||||
} ballPos = {10, 10, 3, 2};
|
||||
|
||||
void* cpv(void * v, const char *msg){
|
||||
if( v == 0 ){
|
||||
fprintf(stderr, "%s -> %s\n",msg, SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
int civ(int v, const char *msg){
|
||||
if( v != 0 ){
|
||||
fprintf(stderr, "%s -> %s\n",msg, SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void ballMove(){
|
||||
if(ballPos.x <=0 || ballPos.x >= WIDTH - BALLSIZE){
|
||||
ballPos.dx = ballPos.dx * -1;
|
||||
ballPos.dy = (ballPos.dy / abs(ballPos.dy)) * ((rand() % 5) + 1);
|
||||
}
|
||||
if(ballPos.y <=0 || ballPos.y >= HEIGHT - BALLSIZE){
|
||||
ballPos.dy = ballPos.dy * -1;
|
||||
ballPos.dx = (ballPos.dx / abs(ballPos.dx)) * ((rand() % 5) + 1);
|
||||
}
|
||||
ballPos.x = ballPos.x + ballPos.dx;
|
||||
ballPos.y = ballPos.y + ballPos.dy;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
civ(SDL_Init(SDL_INIT_VIDEO), "can't init SDL");
|
||||
|
||||
win = cpv(SDL_CreateWindow("pong", 0, 0, WIDTH, HEIGHT, SDL_WINDOW_SHOWN), "can't create window");
|
||||
ren = cpv(SDL_CreateRenderer(win, -1, SDL_RENDERER_SOFTWARE), "can't create renderer");
|
||||
|
||||
int i = 0;
|
||||
SDL_RenderClear(ren);
|
||||
|
||||
SDL_bool should_close = SDL_FALSE;
|
||||
SDL_Event e;
|
||||
while(!should_close){
|
||||
while(SDL_PollEvent(&e)){
|
||||
if(e.type == SDL_QUIT){
|
||||
should_close = SDL_TRUE;
|
||||
}
|
||||
}
|
||||
/* SDL_SetRenderDrawColor(ren, 0, 0, 0, 255); */
|
||||
/* SDL_RenderClear(ren); */
|
||||
|
||||
ballMove();
|
||||
|
||||
SDL_SetRenderDrawColor(ren, (sin((double)i/20) + 1) * 128, (cos((double)i/10) + 1) * 128, (sin((double)i/50) + 1) * 128, 255);
|
||||
SDL_Rect ball = {ballPos.x, ballPos.y, BALLSIZE, BALLSIZE};
|
||||
SDL_RenderFillRect(ren, &ball);
|
||||
|
||||
|
||||
SDL_RenderPresent(ren);
|
||||
i++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user