le jeu des motos dans tron - retour accueil
git clone git://bebou.netlib.re/tron
Log | Files | Refs | README |
commit 7273cf5944329b152c1e6c3ad38f8b6e9cb002f5 parent 036b292c314d34c2b782e5a38080029a4ca7a93c Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Wed, 25 Jun 2025 22:24:59 +0200 Les voitures dans un tableau pour avoir plus de 2 Diffstat:
M | tron.c | | | 66 | +++++++++++++++++++++++++++++++++++++----------------------------- |
1 file changed, 37 insertions(+), 29 deletions(-)
diff --git a/tron.c b/tron.c @@ -23,13 +23,18 @@ struct arena { int height; }; -void display(struct car *cars, int ticks, int tail, struct arena arena, int timeout) { - for (int i=0;i<2;i++) { - tb_printf(cars[i].position.x,cars[i].position.y,cars[i].color,0,"●"); +struct cars { + struct car* list; + int count; +}; + +void display(struct cars cars, int ticks, int tail, struct arena arena, int timeout) { + for (int i=0;i<cars.count;i++) { + 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[i].path[j].x!=0 && cars[i].path[j].y!=0) - tb_printf(cars[i].path[j].x,cars[i].path[j].y,cars[i].color,0,"▒"); - tb_printf(0,arena.height+i+1,cars[i].color,0,"car %d - x: %d, y: %d, direction %d",i+1,cars[i].position.x,cars[i].position.y,cars[i].direction); + if(cars.list[i].path[j].x!=0 && cars.list[i].path[j].y!=0) + tb_printf(cars.list[i].path[j].x,cars.list[i].path[j].y,cars.list[i].color,0,"▒"); + tb_printf(0,arena.height+i+1,cars.list[i].color,0,"car %d - x: %d, y: %d, direction %d",i+1,cars.list[i].position.x,cars.list[i].position.y,cars.list[i].direction); } tb_printf(0,arena.height+3,0,0,"tick %d, speed %d",ticks,timeout); tb_print(0,0,0,0,"╭"); @@ -56,23 +61,27 @@ void update(struct car *car, coord *incs, int ticks) { car->position.y=car->position.y+incs[car->direction].y; } -int is_in_conflict(struct car *cars, int ticks, int tail, struct arena arena) { - for (int i=0;i<2;i++) { - if(cars[i].position.x==0 || cars[i].position.x==arena.width || cars[i].position.y==1 || cars[i].position.y==arena.height) +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].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; for (int j=0;j<TAIL;j++) for (int k=0;k<2;k++) - if (cars[i].position.x==cars[k].path[j].x && cars[i].position.y==cars[k].path[j].y) + 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 0; } +void kill_car(struct car *cars, int index) { + +} + int rd(int min, int max) { return (rand()%(max-min+1))+min; } -struct car createcar(int color, struct arena a) { +void createcar(int color, struct cars *cars, struct arena a) { struct car c; c.path=malloc(sizeof(coord)*TAIL); for (int i=0;i<TAIL;i++) { @@ -82,7 +91,8 @@ struct car createcar(int color, struct arena a) { c.color=color; c.position.x=rd(10,a.width-10); c.position.y=rd(10,a.height-10); if(c.position.x<a.width/2) c.direction=RIGHT; else c.direction=LEFT; - return c; + cars->list[cars->count]=c; + cars->count++; } int main(int argc, char **argv) { @@ -107,16 +117,14 @@ int main(int argc, char **argv) { struct arena arena; arena.width=width-1; arena.height=height-4; - struct car c1 = createcar(TB_MAGENTA, arena); - struct car c2 = createcar(TB_CYAN, arena); - - struct car cars[2]; - cars[0]=c1; cars[1]=c2; + struct cars cars; cars.count=0; cars.list=malloc(9*sizeof(void*)); + createcar(TB_MAGENTA, &cars, arena); + createcar(TB_CYAN, &cars, arena); int timeout=80; for(int i=0;i<2;i++) - update(&cars[i],incs,ticknb); + 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\ @@ -132,8 +140,8 @@ int main(int argc, char **argv) { } while(1) { - for(int i=0;i<2;i++) - update(&cars[i],incs,ticknb); + 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); @@ -147,34 +155,34 @@ int main(int argc, char **argv) { if(ticknb%10==0 && timeout>30) timeout--; switch(ev.ch) { case 122: /*z*/ - if(cars[1].direction!=DOWN) cars[1].direction=UP; + if(cars.list[1].direction!=DOWN) cars.list[1].direction=UP; break; case 100: /*d*/ - if(cars[1].direction!=LEFT) cars[1].direction=RIGHT; + if(cars.list[1].direction!=LEFT) cars.list[1].direction=RIGHT; break; case 115: /*s*/ - if(cars[1].direction!=UP) cars[1].direction=DOWN; + if(cars.list[1].direction!=UP) cars.list[1].direction=DOWN; break; case 113: /*q*/ - if(cars[1].direction!=RIGHT) cars[1].direction=LEFT; + if(cars.list[1].direction!=RIGHT) cars.list[1].direction=LEFT; break; } switch(ev.key) { case 13: /*Enter*/ - free(c1.path); free(c2.path); + for (int i=0;i<cars.count;i++) free(cars.list[i].path); tb_shutdown(); return 0; case 65517: /*up*/ - if(cars[0].direction!=DOWN) cars[0].direction=UP; + if(cars.list[0].direction!=DOWN) cars.list[0].direction=UP; break; case 65514: /*right*/ - if(cars[0].direction!=LEFT) cars[0].direction=RIGHT; + if(cars.list[0].direction!=LEFT) cars.list[0].direction=RIGHT; break; case 65516: /*down*/ - if(cars[0].direction!=UP) cars[0].direction=DOWN; + if(cars.list[0].direction!=UP) cars.list[0].direction=DOWN; break; case 65515: /*left*/ - if(cars[0].direction!=RIGHT) cars[0].direction=LEFT; + if(cars.list[0].direction!=RIGHT) cars.list[0].direction=LEFT; break; default: break;