Skip to content
Snippets Groups Projects
Commit 0e08094b authored by belkhiritaha's avatar belkhiritaha
Browse files

integrated ennemy movement

parent e40a06ab
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,9 @@
#define NUMBERPOINT_TRAJEC 50
#define PLAYER 0
#define AI 1
typedef enum
{
false, true
......@@ -29,6 +32,7 @@ typedef struct ball
int isHit;
float angle;
int speed;
int isTravelingTo;
} ball_t;
extern ball_t ball;
......@@ -45,7 +49,7 @@ float defineAngle(int, int, int, int);
void updateBall();
point_t initCanon (point_t canon);
point_t initDropPoint (point_t dropPoint);
float defineAngleF(int, int, int, int);
float defineAngleF(int canonX, int canonY, int xDropPoint, int yDropPoint);
float defineAngleH(int xCanon, int xDropPoint);
float lagrangeInterpolation(float, int, int, int, int, int, int);
......
#include "player.h"
int angleF;
int angleH;
int ennemyZone;
int canonZone;
int action;
void initEnnemy()
{
ennemy.h = 2 * BLOCK_SIZE;
......@@ -7,9 +13,43 @@ void initEnnemy()
ennemy.x = 25 * BLOCK_SIZE;
ennemy.y = 5 * BLOCK_SIZE;
ennemy.angle = -pi;
ennemy.speed = MOVEMENT_SPEED;
}
void manageEnnemy()
void manageEnnemyMovement()
{
if (ball.isTravelingTo == AI){
angleF = defineAngleF(lastHitPoint[0], lastHitPoint[1], landingPoint[0], landingPoint[1]);
angleF = converterIntoAngleF(angleF);
angleH = defineAngleH(lastHitPoint[0], landingPoint[0]);
angleH = converterIntoAngleH(angleH);
ennemyZone = convertIntoZone(ennemy.x, ennemy.y);
canonZone = convertIntoZone(lastHitPoint[0], lastHitPoint[1]);
action = takeAction(ennemy.x, ennemy.y, Q, canonZone, angleH, angleF, 0);
switch (action)
{
case BACK:
ennemy.x += MOVEMENT_SPEED;
break;
case FOWARD:
ennemy.x -= MOVEMENT_SPEED;
break;
case UP:
ennemy.y -= MOVEMENT_SPEED;
break;
case DOWN:
ennemy.y += MOVEMENT_SPEED;
break;
default:
break;
}
}
}
void manageEnnemy(){
manageEnnemyMovement();
}
\ No newline at end of file
......@@ -5,6 +5,7 @@
#include "map.h"
#include "render.h"
#include "ball.h"
#include "qlearn.h"
......
......@@ -2,9 +2,11 @@
int running;
int game_state;
float ***** Q;
int main()
{
Q = allocateAndInitiateQ();
readQFromFile(Q);
running = 1;
game_state = GAME;
readMapFromFile("map.txt");
......@@ -14,5 +16,7 @@ int main()
initKeys();
initBall();
mainLoop();
}
......@@ -25,5 +25,6 @@
extern int running;
extern int game_state;
extern float ***** Q;
#endif
\ No newline at end of file
......@@ -94,6 +94,7 @@ void hitBall()
ball.speed = 2 * HIT_FORCE;
ball.z = player.h;
ball.isHit = 1;
ball.isTravelingTo = AI;
}
}
}
......@@ -125,5 +126,4 @@ void managePlayer()
{
manageMovement();
hitBall();
updateBall();
}
\ No newline at end of file
......@@ -110,6 +110,23 @@ void writeQ(float *****Q){
fclose(fp);
}
void readQFromFile(float *****Q){
int i, j, k, l, m ;
FILE * fp = fopen("q.txt", "r");
for(i = 0; i < NUMBER_ZONE_RECEIVER; i++){
for(j = 0; j < NUMBER_ZONE_SHOOTER; j++){
for(k = 0; k < 3; k++){
for(l= 0; l < 5; l++){
for(m= 0; m <5; m++){
fscanf(fp, "%f ", &Q[i][j][k][l][m]);
}
}
}
}
}
fclose(fp);
}
int argmax(float * arr){
int i;
......
......@@ -63,7 +63,7 @@ int convertIntoZone(int ,int y);
int convertIntoZoneCanon(int xCanon,int yCanon);
int converterIntoAngleF(float);
int converterIntoAngleH(float);
int takeAction(int ,int , float ***** , int , int, int, float );
int takeAction(int xAgent, int yAgent, float ***** Q, int canonZone, int angleHZone, int angleFZone, float eps);
int setReward(int , int , int );
stack_t* initStack (int nbelt);
int emptyStack (stack_t *stack);
......@@ -72,4 +72,5 @@ void actionStack(stack_t *stack, line_t line);
line_t unStack(stack_t *stack);
void freeStack(stack_t *stack);
void traningAgent( int numberRun, int numberStep, float *****Q);
void readQFromFile(float *****Q);
#endif
\ No newline at end of file
......@@ -1064,6 +1064,8 @@ void mainLoop()
case GAME:
drawGame();
managePlayer();
manageEnnemy();
updateBall();
break;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment