tron

le jeu des motos dans tron - retour accueil

git clone git://bebou.netlib.re/tron

Log | Files | Refs | README |

commit 59174b4be94ddc6e710b0a2d830ac15db7bc70f0
parent 7273cf5944329b152c1e6c3ad38f8b6e9cb002f5
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Wed, 25 Jun 2025 23:09:02 +0200

On peut param le nb de joueur avec un constante en haut

Il a fallu revoir beaucoup de trucs
Reste à faire au moins :
  Pouvoir choisir le nb en live
  Les touches pour les différents joueurs

Diffstat:
Mtron.c | 37+++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/tron.c b/tron.c @@ -3,8 +3,11 @@ #include <time.h> #define TAIL 50 +#define MAX_CAR_NUMBER 4 +#define NB_PLAYERS 3 enum direction { UP, RIGHT, DOWN, LEFT }; +enum status { DEAD, ALIVE }; typedef struct { int x; @@ -16,6 +19,7 @@ struct car { coord* path; int direction; int color; + int status; }; struct arena { @@ -30,6 +34,7 @@ struct cars { void display(struct cars cars, int ticks, int tail, struct arena arena, int timeout) { for (int i=0;i<cars.count;i++) { + if(cars.list[i].status==DEAD) continue; tb_printf(cars.list[i].position.x,cars.list[i].position.y,cars.list[i].color,0,"●"); for (int j=0;j<TAIL;j++) if(cars.list[i].path[j].x!=0 && cars.list[i].path[j].y!=0) @@ -63,18 +68,19 @@ void update(struct car *car, coord *incs, int ticks) { int is_in_conflict(struct cars cars, int ticks, int tail, struct arena arena) { for (int i=0;i<cars.count;i++) { + if(cars.list[i].status==DEAD) continue; if(cars.list[i].position.x==0 || cars.list[i].position.x==arena.width || cars.list[i].position.y==1 || cars.list[i].position.y==arena.height) - return i+1; + return i; for (int j=0;j<TAIL;j++) - for (int k=0;k<2;k++) + for (int k=0;k<cars.count;k++) if (cars.list[i].position.x==cars.list[k].path[j].x && cars.list[i].position.y==cars.list[k].path[j].y) - return i+1; + return i; } - return 0; + return -1; } -void kill_car(struct car *cars, int index) { - +void kill_car(struct cars *cars, int index) { + cars->list[index].status=DEAD; } int rd(int min, int max) { @@ -83,6 +89,7 @@ int rd(int min, int max) { void createcar(int color, struct cars *cars, struct arena a) { struct car c; + c.status=ALIVE; c.path=malloc(sizeof(coord)*TAIL); for (int i=0;i<TAIL;i++) { coord p; p.x=0; p.y=0; @@ -117,14 +124,16 @@ int main(int argc, char **argv) { struct arena arena; arena.width=width-1; arena.height=height-4; - struct cars cars; cars.count=0; cars.list=malloc(9*sizeof(void*)); - createcar(TB_MAGENTA, &cars, arena); - createcar(TB_CYAN, &cars, arena); + struct cars cars; cars.count=0; + cars.list=malloc(MAX_CAR_NUMBER*sizeof(struct car)); + for(int i=0;i<NB_PLAYERS;i++) + createcar(2+cars.count, &cars, arena); int timeout=80; - for(int i=0;i<2;i++) - update(&cars.list[i],incs,ticknb); + for(int i=0;i<cars.count;i++) + if(cars.list[i].status==ALIVE) + update(&cars.list[i],incs,ticknb); display(cars,ticknb,TAIL,arena,timeout); tb_printf(width/2-35/2,height/2-5/2,0,0,"████████ ██████  ██████  ███  ██\n\ @@ -143,11 +152,7 @@ int main(int argc, char **argv) { for(int i=0;i<cars.count;i++) update(&cars.list[i],incs,ticknb); dead_car=is_in_conflict(cars,ticknb,TAIL,arena); - if(dead_car>0) { - printf("car %d is dead",dead_car); - tb_shutdown(); - return 0; - } + if (dead_car>-1) kill_car(&cars,dead_car); tb_clear(); display(cars,ticknb,TAIL,arena,timeout); tb_present();