feat : initial commit

This commit is contained in:
attilavs2 2024-08-31 23:10:08 +02:00
commit ebe94f5611
5 changed files with 233 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
build/
raylib/
*.amd64
*.exe

34
Makefile Normal file
View file

@ -0,0 +1,34 @@
OUTNAME = ttower
CFLAGS = -O0 -g -Wall -Wextra -I.raylib/include
LDFLAGS = -L./raylib/lib -lraylib -lm
CC = gcc
OUTPUT = "${OUTNAME}.amd64"
ifeq "${TARGET_IS_WIN}" "true"
CC = x86_64-w64-mingw32-gcc
OUTPUT = "${OUTNAME}.exe"
endif
BUILD_DIR = build
SRC_DIR = src
$(BUILD_DIR)/%.o : $(SRC_DIR)/%.c
${CC} -c ${CFLAGS} -o $@ $< ${LDFLAGS}
OBJS = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(wildcard $(SRC_DIR)/*.c))
all: $(OBJS)
${CC} ${CFLAGS} -o ${OUTPUT} ${OBJS} ${LDFLAGS}
test: all
./${OUTPUT}
clean:
rm -rf ${BUILD_DIR}/*
.PHONY: all builddir test clean

BIN
plane.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

195
src/main.c Normal file
View file

@ -0,0 +1,195 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include "raylib.h"
#define min(x, minn) ((x) < (minn) ? (minn):(x))
#define max(x, maxn) ((x) > (maxn) ? (maxn):(x))
#define clamp(x, minn, maxn) (min(max((x),(maxn)),(minn)))
#define PQUEUE_SIZE 256
typedef struct{
Vector2 pos;
float dist;
} Plane;
int lost = 0;
int planen;
Plane plane_queue[PQUEUE_SIZE];
void draw_planes(Texture2D *plane){
int i;
if(!planen)
return;
for(i = 0; i < planen; i++){
Plane *pln = &plane_queue[i];
DrawTextureEx(*plane,pln->pos,0,pln->dist,WHITE);
}
}
void spawn_plane(Vector2 pos){
plane_queue[planen].pos = pos;
plane_queue[planen].dist = 0.1;
planen++;
}
void pop_plane(){
planen--;
memmove(plane_queue, &plane_queue[1], sizeof(Plane)*planen);
}
void update_planes(int diff, int xpos){
int i, j;
//TODO : Redo
if(planen < 2){
int nx = rand() % 600;
int ny = rand() % 400;
spawn_plane((Vector2){nx,ny});
}
double exp = 2-(0.0016666666*147);
double sign = (double)(abs(xpos)/(double)xpos);
//TODO : Redo
for(i = 0; i < planen; i++){
Plane *pln = &plane_queue[i];
pln->dist += 0.003;
if(pln->dist >= 1){
for(j = 0; j < 8; j++){
double x = pow(sqrt(abs(xpos)),exp) * sign + 153;
exp -= 0.0016666666*60;
//DrawRectangle(x,147+j*60,50,60,BLACK);
//DrawRectangle(x+260,147+j*60,50,60,BLACK);
int coll = 0;
coll = pln->pos.x < x+104 && pln->pos.x+60 > x &&
pln->pos.y > j*60 && pln->pos.y < j*60+60;
coll = coll | (pln->pos.x < x+104+163 && pln->pos.x+60 > x+163 &&
pln->pos.y > j*60 && pln->pos.y < j*60+60);
if(coll){
lost = 1;
}
}
pop_plane();
}
else {
for(j = 0; j < 8; j++){
double x = pow(sqrt(abs(xpos)),exp) * sign + 153;
exp -= 0.0016666666*60;
DrawRectangle(x,147+j*60,50,60,WHITE);
DrawRectangle(x+260,147+j*60,50,60,WHITE);
}
}
}
}
void draw_towers(Texture2D *towers, int xpos){
double x;
int y;
xpos = xpos == 0 ? 1:xpos;
int sign = (double)(abs(xpos)/(double)xpos);
xpos = sqrt(abs(xpos));
double exp = 2;
for(y = 0; y < 600; y++){
x = pow(xpos,exp) * sign;
exp -= 0.0016666666;
DrawTextureRec(*towers,(Rectangle){.height=1,.width=800,.x=0,.y=y},
(Vector2){round(x),y},WHITE);
}
}
char scorebuf[100];
void lost_men(int *score){
lost = 0;
while(!IsKeyDown(KEY_ENTER) && !WindowShouldClose()){
BeginDrawing();
DrawRectangle(200,150,400,300,WHITE);
snprintf(scorebuf,100,"Votre score : %d", *score);
DrawText(scorebuf, 250, 275, 30, BLACK);
DrawText("Appuyez sur entrée", 250, 350, 30, BLACK);
EndDrawing();
}
while(planen){
pop_plane();
}
*score = 0;
}
int main(){
int rand_seed = GetTime();
rand_seed &= 0xFFFFFFFF;
srand(rand_seed);
InitWindow(800, 600, "ttower");
Texture2D towers = LoadTexture("towers.png");
Texture2D plane = LoadTexture("plane.png");
int xpos = 0;
int score = 0;
SetTargetFPS(60);
planen = 0;
memset(plane_queue, 0, sizeof(Plane)*PQUEUE_SIZE);
while(!WindowShouldClose()){
BeginDrawing();
ClearBackground(BLUE);
if(IsKeyDown(KEY_LEFT))
xpos-=3;
if(IsKeyDown(KEY_RIGHT))
xpos+=3;
xpos = clamp(xpos, -200, 200);
update_planes(0, xpos);
draw_planes(&plane);
draw_towers(&towers, xpos);
snprintf(scorebuf, 100, "Score : %d", score);
DrawText(scorebuf, 0,0,30,BLACK);
if(lost)
lost_men(&score);
score++;
EndDrawing();
}
CloseWindow();
return 0;
}

BIN
towers.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB