From f69fece27ad18acd8d9432e5bae16a4afd45a63e Mon Sep 17 00:00:00 2001 From: anselme16 Date: Mon, 19 Jan 2015 16:56:41 +0100 Subject: [PATCH] half-implemented figthts --- main.c | 23 ++++++++++------------- main.h | 1 + team.h | 2 +- tools.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- tools.h | 2 ++ 5 files changed, 65 insertions(+), 17 deletions(-) diff --git a/main.c b/main.c index edac239..2c143b3 100755 --- a/main.c +++ b/main.c @@ -8,12 +8,6 @@ #include #include -typedef struct{ - t_dude dude1; - t_dude dude2; - int attack; -} t_fight; - // temp code t_action purple_update(void* my_info, void* com_data, int success); t_action orange_update(void* my_info, void* com_data, int success); @@ -56,17 +50,17 @@ void initWorld(int width, int height){ generateImg(width, height); } -void addFight(t_dude dude, t_dude other_dude){ - -} - void updateTeam(t_team team){ int i; t_action action; + + for(i=0; ipos, action.dir); t_pixel target = map[target_pos.x][target_pos.y]; + t_action action = dude->action; int* nb_res; if(dude->com_data != NULL){ free(dude->com_data); @@ -286,6 +281,7 @@ void handleAction(t_action action, t_dude* dude){ break; case COMMUNICATE : switch(target.type){ + // TODO : conflict possible if 2 dudes talk to the same dude case DUDE : action.com_data.flag = (action.dir+2)%4; dude->com_data = malloc(sizeof(t_com)); @@ -481,6 +477,7 @@ int MAIN spawnDudes(); for(i=0; idude = dude; move->dst = dst; - move->ok = 0; if(map[dst.x][dst.y].type == DUDE) occupiedMoves[nb_occupied++] = move; else clearMoves[nb_clear++] = move; } +void add_fight(t_dude* dude, t_coord dst){ + int i; + t_pixel target = map[dst.x][dst.y]; + t_fight* fight; + if(target.type == DUDE){ + t_dude* dude2 = target.data; + for(i=0; itarget == dude){ + fight = malloc(sizeof(t_fight)); + fight->dude = dude; + fight->target = dude2; + fight->dmg = 1 + 3*(dude->inventory == SWORD); + fight->proba = 99 - fights[i]->proba; + fights[nb_fight++] = fight; + return; + } + if(fights[i]->target == dude2){ + fights[i]->dmg += 1 + 3*(dude->inventory == SWORD); + return; + } + } + fight = malloc(sizeof(t_fight)); + fight->dude = dude; + fight->target = dude2; + fight->dmg = 1 + 3*(dude->inventory == SWORD); + fight->proba = rand()%100; + fights[nb_fight++] = fight; + } +} + void applyMove(t_move* move){ t_pixel target = map[move->dst.x][move->dst.y]; if( target.type == WALL @@ -49,6 +82,20 @@ void applyMove(t_move* move){ free(move); } +void resolve_fights(){ + int i; + int defense = 0; + for(i=0; idude->action.type; + defense = (type == MOVE || type == ATTACK)*(1 + 3*(fights[i]->dude->inventory == SWORD)); + if((defense*100)/(defense + fights[i]->dmg) < fights[i]->proba){ + // perdu + } + free(fights[i]); + } + nb_fight = 0; +} + void resolve_moves(){ int change = 1; int i; @@ -100,6 +147,7 @@ Uint32 getColor(t_pixel pixel){ case ROAD : return 0xEDB287; case SWORD : return 0xEBEBEB; case LIBRARY : return 0xA37A50; + case DEAD_DUDE : return 0xFF0000; default : return 0x0000FF; // bleu absolu = bug } diff --git a/tools.h b/tools.h index f6ad9f6..9c666d9 100644 --- a/tools.h +++ b/tools.h @@ -7,6 +7,8 @@ void add_move(t_dude* dude, t_coord dst); +void add_fight(t_dude* dude, t_coord dst); + void resolve_moves(); Uint32 getColor(t_pixel pixel);