Skip to content
Snippets Groups Projects
Commit 74dff4c2 authored by antoinemeyer5's avatar antoinemeyer5
Browse files

Merge branch 'render' of github.com:maberet/ProjetZZ1 into render

parents c834c3ae ba12c308
No related branches found
No related tags found
No related merge requests found
Showing
with 152 additions and 103 deletions
{
"files.associations": {
"qlearn.h": "c"
}
}
\ No newline at end of file
travail_de_groupe/jeu_appren_par_renfo/Res/racket.png

17.4 KiB | W: | H:

travail_de_groupe/jeu_appren_par_renfo/Res/racket.png

294 B | W: | H:

travail_de_groupe/jeu_appren_par_renfo/Res/racket.png
travail_de_groupe/jeu_appren_par_renfo/Res/racket.png
travail_de_groupe/jeu_appren_par_renfo/Res/racket.png
travail_de_groupe/jeu_appren_par_renfo/Res/racket.png
  • 2-up
  • Swipe
  • Onion skin
travail_de_groupe/jeu_appren_par_renfo/Res/sky.png

4.65 KiB | W: | H:

travail_de_groupe/jeu_appren_par_renfo/Res/sky.png

15.1 KiB | W: | H:

travail_de_groupe/jeu_appren_par_renfo/Res/sky.png
travail_de_groupe/jeu_appren_par_renfo/Res/sky.png
travail_de_groupe/jeu_appren_par_renfo/Res/sky.png
travail_de_groupe/jeu_appren_par_renfo/Res/sky.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -13,6 +13,8 @@ void initBall()
ball.isHit = 0;
ball.angle = -pi;
ball.speed = 0;
landingPointEnnemyIsFind = 0;
landingPointPlayerIsFind = 0;
}
//ball_t ball;
int trajectoireAntoine[NUMBERPOINT_TRAJEC][2];
......@@ -134,7 +136,12 @@ void updateBall()
if (ball.isHit)
{
// landingPoint est déjà / BLOCK_SIZE de base
ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPoint[0] / BLOCK_SIZE, lastHitPoint[1] / BLOCK_SIZE, 15, 2 * player.h / BLOCK_SIZE, landingPoint[0], 0);
if (ball.isTravelingTo == AI){
ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPointPlayerX / BLOCK_SIZE, lastHitPointPlayerY / BLOCK_SIZE, 15, 2 * player.h / BLOCK_SIZE, landingPointPlayerX, 0);
}
else if (ball.isTravelingTo == PLAYER){
ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPointEnnemyX / BLOCK_SIZE, lastHitPointEnnemyY / BLOCK_SIZE, 15, 2 * ennemy.h / BLOCK_SIZE, landingPointEnnemyX, 0);
}
}
if (ball.z < 0)
{
......
#include "player.h"
int landingPointEnnemyX;
int landingPointEnnemyY;
int lastHitPointEnnemyX;
int lastHitPointEnnemyY = 0;
int landingPointEnnemyIsFind = 0;
int angleF;
int angleH;
int ennemyZone;
......@@ -22,12 +30,12 @@ void manageEnnemyMovement()
{
if (ball.isTravelingTo == AI)
{
angleF = defineAngleF(lastHitPoint[0], lastHitPoint[1], landingPoint[0], landingPoint[1]);
angleF = defineAngleF(lastHitPointPlayerX, lastHitPointPlayerY, landingPointPlayerX, landingPointPlayerY);
angleF = converterIntoAngleF(angleF);
angleH = defineAngleH(lastHitPoint[0], landingPoint[0]);
angleH = defineAngleH(lastHitPointPlayerX, landingPointPlayerX);
angleH = converterIntoAngleH(angleH);
ennemyZone = convertIntoZone(ennemy.x, ennemy.y);
canonZone = convertIntoZone(lastHitPoint[0], lastHitPoint[1]);
canonZone = convertIntoZone(lastHitPointPlayerX, lastHitPointPlayerY);
action = takeAction(ennemy.x, ennemy.y, Q, canonZone, angleH, angleF, 1);
while (ennemyHasMoved == 0)
{
......@@ -90,44 +98,40 @@ void manageEnnemyMovement()
}
}
int * generateLandingPointEnnemy(){
int *landingPoint = malloc(sizeof(int) * 2);
int generatelandingPointEnnemy(){
int randomPointX = rand() % ((MAP_WIDTH-1)/2);
landingPoint[0] = randomPointX ;
landingPoint[1] = 0;
landingPointIsFind = 1;
landingPointEnnemyIsFind = 1;
landingPointPlayerIsFind = 0;
return landingPoint;
return randomPointX;
}
void ennemyHitBall(){
if (sqrt(pow(ennemy.x - ball.x, 2) + pow(ennemy.y - ball.y, 2)) / BLOCK_SIZE < HIT_RANGE)
{
if (ball.isTravelingTo == AI)
{
if(landingPointIsFind == 0){
freeIntList(landingPoint);
landingPoint = generateLandingPointEnnemy();
}
//cherche et trouve point de chute, UNE SEULE FOIS!
if(landingPointEnnemyIsFind == 0){
landingPointEnnemyX = generatelandingPointEnnemy();
ball.isTravelingTo = PLAYER;
ball.angle = ennemy.angle;
ball.speed = HIT_FORCE;
ball.isHit = 1;
lastHitPoint[0] = ball.x;
lastHitPoint[1] = player.h;
printf("ennemy new lastHitPoint : %d %d\n", lastHitPoint[0]/BLOCK_SIZE, lastHitPoint[1]/BLOCK_SIZE);
lastHitPointEnnemyX = ball.x;
lastHitPointEnnemyY = player.h;
}
printf("ennemy new landingPoint : %d %d\n", landingPoint[0]/BLOCK_SIZE, landingPoint[1]/BLOCK_SIZE);
}
}
}
void manageEnnemy(){
if (SDL_GetTicks() % 1000 < 100)
if (SDL_GetTicks() % 1000 < 50)
{
manageEnnemyMovement();
}
......
......@@ -8,7 +8,13 @@
#include "qlearn.h"
extern int landingPointEnnemyX;
extern int landingPointEnnemyY;
extern int lastHitPointEnnemyX;
extern int lastHitPointEnnemyY;
extern int landingPointEnnemyIsFind;
void initEnnemy();
void manageEnnemy();
......
......@@ -68,11 +68,11 @@ void gestGame()
}
if (event.motion.yrel > 0)
{
player.viewAngle -= 1;
player.viewAngle -= 0.05 * RD;
}
if (event.motion.yrel < 0)
{
player.viewAngle += 1;
player.viewAngle += 0.05 * RD;
}
player.deltax = cos(player.angle);
player.deltay = sin(player.angle);
......@@ -118,7 +118,8 @@ void gestGame()
case SDLK_b:
initBall();
landingPointIsFind = 0;
landingPointPlayerIsFind = 0;
landingPointEnnemyIsFind = 0;
break;
default:
......@@ -151,21 +152,20 @@ void gestGame()
case SDL_MOUSEBUTTONDOWN:
if (event.button.button == SDL_BUTTON_LEFT)
{
if (player.isHitting)
{
player.isHitting = 0;
}
else
{
player.isHitting = 1;
}
player.isHoldingClick = 1;
player.startHitTimer = timer;
player.startHitBool = 0;
}
break;
case SDL_MOUSEBUTTONUP:
if (event.button.button == SDL_BUTTON_LEFT)
{
player.isHitting = 0;
player.endHitTimer = timer;
player.startHitBool = 1;
player.hitIntensity = (player.endHitTimer - player.startHitTimer) / 200;
player.isHoldingClick = 0;
}
break;
......
......@@ -3,9 +3,16 @@
player_t player;
player_t ennemy;
int *landingPoint;
int *lastHitPoint;
int landingPointIsFind = 0;
int landingPointPlayerX;
int landingPointPlayerY = 0;
int lastHitPointPlayerX;
int lastHitPointPlayerY;
int rxWall, ryWall;
float distanceWall;
int landingPointPlayerIsFind = 0;
void initPlayer()
{
......@@ -21,81 +28,54 @@ void initPlayer()
ennemy.angle = -pi;
player.speed = 100;
player.isMoving = 0;
player.HPMax = 3;
player.currentHP = player.HPMax;
player.coins = 0;
player.angle = 0;
player.deltax = 1;
player.deltay = 0;
player.viewAngle = 0;
}
int *generateLandingPoint(int rxWall)
int generatelandingPointPlayer(int rxWall, float hitIntensity)
{
int *landingPoint = malloc(sizeof(int) * 2);
int randomPointX = MAP_WIDTH/2 + 1 + rand()%(rxWall/BLOCK_SIZE - (MAP_WIDTH/2));
int randomPointX = MAP_WIDTH/2 + hitIntensity * 5;
landingPoint[0] = randomPointX ;
landingPoint[1] = 0;
landingPointIsFind = 1;
landingPointPlayerIsFind = 1;
landingPointEnnemyIsFind = 0;
return landingPoint;
}
int *allocLastHitPoint()
{
int *lastHitPoint = (int *)malloc(sizeof(int) * 2);
lastHitPoint[0] = 0;
lastHitPoint[1] = 0;
return lastHitPoint;
}
void freeIntList(int *list)
{
if (list != NULL)
{
free(list);
}
return randomPointX;
}
void hitBall()
{
if (sqrt(pow(player.x - ball.x, 2) + pow(player.y - ball.y, 2)) / BLOCK_SIZE < HIT_RANGE)
{
int rxWall, ryWall;
float distanceWall;
int rxNet, ryNet;
float distanceNet;
if (player.isHitting)
if (player.startHitBool)
{
castSingleRay(player.angle, &distanceWall, &distanceNet, &rxWall, &ryWall, &rxNet, &ryNet);
// printf("hit\n");
if (rxWall > MAP_WIDTH/2)
{
freeIntList(lastHitPoint);
lastHitPoint = allocLastHitPoint();
//cherche et trouve point de chute, UNE SEULE FOIS!
if(landingPointIsFind == 0){
freeIntList(landingPoint);
landingPoint = generateLandingPoint(rxWall);
}
if(landingPointPlayerIsFind == 0){
lastHitPoint[0] = ball.x;
lastHitPoint[1] = player.h;
landingPointPlayerX = generatelandingPointPlayer(rxWall, player.hitIntensity);
lastHitPointPlayerX = ball.x;
lastHitPointPlayerY = player.h;
ball.angle = player.angle;
ball.speed = HIT_FORCE;
ball.z = player.h;
ball.speed = player.hitIntensity * 5;
// ball.z = player.h;
ball.isHit = 1;
ball.isTravelingTo = AI;
printf("ennemy new lastHitPoint : %d %d\n", lastHitPoint[0]/BLOCK_SIZE, lastHitPoint[1]/BLOCK_SIZE);
player.startHitBool = 0;
}
printf("ennemy new landingPoint : %d %d\n", landingPoint[0]/BLOCK_SIZE, landingPoint[1]/BLOCK_SIZE);
}
// printf("valid hit\n");
}
......@@ -132,4 +112,5 @@ void managePlayer()
manageMovement();
hitBall();
updateBall();
player.hitIntensityTimer = timer - player.startHitTimer;
}
\ No newline at end of file
......@@ -13,6 +13,7 @@
#define HIT_RANGE 2
#define HIT_FORCE 2
#define MOVEMENT_SPEED 10
#define MAX_HIT_TIME 3
typedef struct player
{
......@@ -23,24 +24,32 @@ typedef struct player
int w;
int speed;
int isMoving;
int isHitting;
int startHitBool;
int isHit;
int direction;
int HPMax;
int currentHP;
int coins;
float angle;
float deltax;
float deltay;
float viewAngle;
float startHitTimer;
float endHitTimer;
float hitIntensity;
float hitIntensityTimer;
int isHoldingClick;
} player_t;
extern player_t player;
extern player_t ennemy;
extern int *landingPoint;
extern int *lastHitPoint;
extern int landingPointIsFind;
extern int landingPointPlayerX;
extern int landingPointPlayerY;
extern int lastHitPointPlayerX;
extern int lastHitPointPlayerY;
extern int landingPointPlayerIsFind;
extern int rxWall;
int generatelandingPointPlayer(int rxWall, float hitIntensity);
void initPlayer();
void managePlayer();
void freeIntList(int *list);
......
#include "render.h"
float timer = 0;
SDL_Window *window;
SDL_Renderer *renderer;
......@@ -808,22 +810,31 @@ void drawBall()
void drawSkyAndGround()
{
destRect.x = ((int)((player.angle + pi) * RD + player.x / BLOCK_SIZE));
destRect.y = 0;
destRect.w = 100;
destRect.h = 128 / 2;
rect.x = 0;
rect.y = screenDimension.h / 2 + player.viewAngle;
rect.h = screenDimension.h - rect.y;
rect.w = screenDimension.w;
SDL_RenderCopy(renderer, groundTexture, &destRect, &rect);
SDL_RenderCopy(renderer, groundTexture, NULL, &rect);
sky.x = 0;
sky.y = 0;
sky.w = screenDimension.w;
sky.h = screenDimension.h / 2 + player.viewAngle;
destRect.x = 500 + (((player.angle + pi) * RD + player.x / BLOCK_SIZE));
if (player.angle > pi){
destRect.x = 500 + (((player.angle - pi) * RD + player.x / BLOCK_SIZE));
}
printf("%d\n", sky.h);
destRect.y =0;
destRect.w = 100;
destRect.h = 128;
SDL_RenderCopy(renderer, skyTexture, &destRect, &sky);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
......@@ -831,7 +842,7 @@ void drawSkyAndGround()
void drawRacket()
{
// todo
SDL_RenderCopy(renderer, racketTexture, NULL, NULL);
}
void drawMap2D(int map[][MAP_WIDTH])
......@@ -894,10 +905,22 @@ void drawMap2D(int map[][MAP_WIDTH])
SDL_RenderFillRect(renderer, &rect);
// draw landing point
if (landingPointIsFind == 1)
if (landingPointPlayerIsFind == 1)
{
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
rect.x = landingPoint[0] * CELL_SIZE;
rect.x = landingPointPlayerX * CELL_SIZE;
rect.y = CELL_SIZE;
rect.h = (MAP_HEIGHT - 2) * CELL_SIZE;
rect.w = 3;
SDL_RenderFillRect(renderer, &rect);
// reset taille cellule
rect.h = CELL_SIZE;
rect.w = CELL_SIZE;
}
if (landingPointEnnemyIsFind == 1)
{
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
rect.x = landingPointEnnemyX * CELL_SIZE;
rect.y = CELL_SIZE;
rect.h = (MAP_HEIGHT - 2) * CELL_SIZE;
rect.w = 3;
......@@ -930,6 +953,16 @@ void drawString(char *str, int x, int y, int w, int h, int r, int g, int b, int
SDL_DestroyTexture(texture);
}
void drawHitIntensity(){
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
rect.w = screenDimension.w/20;
rect.x = screenDimension.w - rect.w;
//printf("%f\n", player.hitIntensityTimer);
rect.h = 2 * screenDimension.h/2 * ( player.hitIntensityTimer/1000);
rect.y = 3 * screenDimension.h/4 - rect.h;
SDL_RenderFillRect(renderer, &rect);
}
void drawFPS()
{
char str[10];
......@@ -993,22 +1026,26 @@ void drawGame()
if (ball.x < MAP_WIDTH * BLOCK_SIZE / 2)
{
drawVerticalWalls();
drawEnnemy();
drawHorizentalWalls();
drawEnnemy();
drawVerticalNet();
drawBall();
}
else
{
drawVerticalWalls();
drawEnnemy();
drawHorizentalWalls();
drawEnnemy();
// todo bonus : draw point de chute de la balle
drawBall();
drawVerticalNet();
}
drawMap2D(map);
drawRacket();
if (player.isHoldingClick){
drawHitIntensity();
}
drawFPS();
// affiche le hub
if (showHub)
......@@ -1055,6 +1092,7 @@ void mainLoop()
if (delta > 1000 / FPS_TO_GET)
{
fps = 1000 / delta;
timer += delta;
b = a;
switch (game_state)
{
......
......@@ -35,8 +35,7 @@ extern SDL_Window *window;
extern SDL_Renderer *renderer;
extern SDL_DisplayMode screenDimension;
extern int *ray1;
extern int *ray2;
extern float timer;
extern int showHub;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment