le jeu des motos dans tron - retour accueil
git clone git://bebou.netlib.re/tron
Log | Files | Refs | README |
commit d1160e43f41c48ea97d758329d1a6dfd84a2824a parent 18afc2f49e80c3bb9cf076a2a9c233a281fd09de Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Thu, 26 Jun 2025 14:52:02 +0200 Maintenant c'est des vélos :) Et aussi on peut conduire le troisième lol Diffstat:
M | tron.c | | | 132 | ++++++++++++++++++++++++++++++++++++++++++++----------------------------------- |
1 file changed, 73 insertions(+), 59 deletions(-)
diff --git a/tron.c b/tron.c @@ -14,7 +14,7 @@ typedef struct { int y; } coord; -struct car { +struct bike { coord position; coord* path; int direction; @@ -27,19 +27,19 @@ struct arena { int height; }; -struct cars { - struct car* list; +struct bikes { + struct bike* 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++) { - if(cars.list[i].status==DEAD) continue; - tb_printf(cars.list[i].position.x,cars.list[i].position.y,cars.list[i].color,0,"●"); +void display(struct bikes bikes, int ticks, int tail, struct arena arena, int timeout) { + for (int i=0;i<bikes.count;i++) { + if(bikes.list[i].status==DEAD) continue; + tb_printf(bikes.list[i].position.x,bikes.list[i].position.y,bikes.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) - 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); + if(bikes.list[i].path[j].x!=0 && bikes.list[i].path[j].y!=0) + tb_printf(bikes.list[i].path[j].x,bikes.list[i].path[j].y,bikes.list[i].color,0,"▒"); + tb_printf(0,arena.height+i+1,bikes.list[i].color,0,"bike %d - x: %d, y: %d, direction %d",i+1,bikes.list[i].position.x,bikes.list[i].position.y,bikes.list[i].direction); } tb_printf(0,arena.height+3,0,0,"tick %d, speed %d",ticks,timeout); tb_print(0,0,0,0,"╭"); @@ -57,38 +57,38 @@ void display(struct cars cars, int ticks, int tail, struct arena arena, int time } -void update(struct car *car, coord *incs, int ticks) { +void update(struct bike *bike, coord *incs, int ticks) { for(int i=TAIL-1;i>0;i--) { - car->path[i]=car->path[i-1]; + bike->path[i]=bike->path[i-1]; } - car->path[0]=car->position; - car->position.x=car->position.x+incs[car->direction].x; - car->position.y=car->position.y+incs[car->direction].y; + bike->path[0]=bike->position; + bike->position.x=bike->position.x+incs[bike->direction].x; + bike->position.y=bike->position.y+incs[bike->direction].y; } -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==0 || cars.list[i].position.y==arena.height) +int is_in_conflict(struct bikes bikes, int ticks, int tail, struct arena arena) { + for (int i=0;i<bikes.count;i++) { + if(bikes.list[i].status==DEAD) continue; + if(bikes.list[i].position.x==0 || bikes.list[i].position.x==arena.width || bikes.list[i].position.y==0 || bikes.list[i].position.y==arena.height) return i; for (int j=0;j<TAIL;j++) - 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) + for (int k=0;k<bikes.count;k++) + if (bikes.list[i].position.x==bikes.list[k].path[j].x && bikes.list[i].position.y==bikes.list[k].path[j].y) return i; } return -1; } -void kill_car(struct cars *cars, int index) { - cars->list[index].status=DEAD; +void kill_bike(struct bikes *bikes, int index) { + bikes->list[index].status=DEAD; } int rd(int min, int max) { return (rand()%(max-min+1))+min; } -void createcar(int color, struct cars *cars, struct arena a) { - struct car c; +void createbike(int color, struct bikes *bikes, struct arena a) { + struct bike c; c.status=ALIVE; c.path=malloc(sizeof(coord)*TAIL); for (int i=0;i<TAIL;i++) { @@ -98,8 +98,8 @@ void createcar(int color, struct cars *cars, 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; - cars->list[cars->count]=c; - cars->count++; + bikes->list[bikes->count]=c; + bikes->count++; } void display_title_screen(int height, int width) { @@ -112,11 +112,13 @@ void display_title_screen(int height, int width) { tb_printf(width/2-35/2,height/2-5/2+5+2,0,0,"\ Entrée pour continuer\n\ -+ pour ajouter une voiture\n\ -- pour retirer une voiture\n\ -Voiture 1 ←↑→↓\n\ -Voiture 2 zqsd\n\ -Voiture 3 ijkl\n"); +\ ++ pour ajouter une vélo\n\ +- pour retirer une vélo\n\ +\ +Vélo 1 ←↑→↓\n\ +Vélo 2 zqsd\n\ +Vélo 3 ijkl\n"); } int main(int argc, char **argv) { @@ -130,7 +132,7 @@ int main(int argc, char **argv) { coord incs[4] = { up, right, down, left }; srand(time(NULL)); - int dead_car; + int dead_bike; tb_init(); tb_hide_cursor(); @@ -141,33 +143,33 @@ 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(MAX_CAR_NUMBER*sizeof(struct car)); + struct bikes bikes; bikes.count=0; + bikes.list=malloc(MAX_CAR_NUMBER*sizeof(struct bike)); for(int i=0;i<NB_PLAYERS;i++) - createcar(2+cars.count%8, &cars, arena); + createbike(2+bikes.count%8, &bikes, arena); int timeout=80; /*TITRE*/ - for(int i=0;i<cars.count;i++) - if(cars.list[i].status==ALIVE) - update(&cars.list[i],incs,ticknb); + for(int i=0;i<bikes.count;i++) + if(bikes.list[i].status==ALIVE) + update(&bikes.list[i],incs,ticknb); while(ev.key!=13) { tb_clear(); display_title_screen(height, width); - display(cars,ticknb,TAIL,arena,timeout); + display(bikes,ticknb,TAIL,arena,timeout); tb_present(); tb_poll_event(&ev); switch(ev.ch) { case 43: /*+*/ - if (cars.count>=MAX_CAR_NUMBER) break; - createcar(cars.count%8+2,&cars,arena); - update(&cars.list[cars.count-1],incs,ticknb); + if (bikes.count>=MAX_CAR_NUMBER) break; + createbike(bikes.count%8+2,&bikes,arena); + update(&bikes.list[bikes.count-1],incs,ticknb); break; case 45: /*-*/ - kill_car(&cars,cars.count-1); + kill_bike(&bikes,bikes.count-1); break; } } @@ -175,46 +177,58 @@ int main(int argc, char **argv) { /*On joue*/ while(1) { - 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>-1) kill_car(&cars,dead_car); + for(int i=0;i<bikes.count;i++) + update(&bikes.list[i],incs,ticknb); + dead_bike=is_in_conflict(bikes,ticknb,TAIL,arena); + if (dead_bike>-1) kill_bike(&bikes,dead_bike); tb_clear(); - display(cars,ticknb,TAIL,arena,timeout); + display(bikes,ticknb,TAIL,arena,timeout); tb_present(); tb_peek_event(&ev, timeout); if(ticknb%10==0 && timeout>30) timeout--; switch(ev.ch) { case 122: /*z*/ - if(cars.list[1].direction!=DOWN) cars.list[1].direction=UP; + if(bikes.list[1].direction!=DOWN) bikes.list[1].direction=UP; break; case 100: /*d*/ - if(cars.list[1].direction!=LEFT) cars.list[1].direction=RIGHT; + if(bikes.list[1].direction!=LEFT) bikes.list[1].direction=RIGHT; break; case 115: /*s*/ - if(cars.list[1].direction!=UP) cars.list[1].direction=DOWN; + if(bikes.list[1].direction!=UP) bikes.list[1].direction=DOWN; break; case 113: /*q*/ - if(cars.list[1].direction!=RIGHT) cars.list[1].direction=LEFT; + if(bikes.list[1].direction!=RIGHT) bikes.list[1].direction=LEFT; + break; + case 105: /*i*/ + if(bikes.list[2].direction!=DOWN) bikes.list[2].direction=UP; + break; + case 108: /*l*/ + if(bikes.list[2].direction!=LEFT) bikes.list[2].direction=RIGHT; + break; + case 107: /*k*/ + if(bikes.list[2].direction!=UP) bikes.list[2].direction=DOWN; + break; + case 106: /*j*/ + if(bikes.list[2].direction!=RIGHT) bikes.list[2].direction=LEFT; break; } switch(ev.key) { case 13: /*Enter*/ - for (int i=0;i<cars.count;i++) free(cars.list[i].path); - free (cars.list); + for (int i=0;i<bikes.count;i++) free(bikes.list[i].path); + free (bikes.list); tb_shutdown(); return 0; case 65517: /*up*/ - if(cars.list[0].direction!=DOWN) cars.list[0].direction=UP; + if(bikes.list[0].direction!=DOWN) bikes.list[0].direction=UP; break; case 65514: /*right*/ - if(cars.list[0].direction!=LEFT) cars.list[0].direction=RIGHT; + if(bikes.list[0].direction!=LEFT) bikes.list[0].direction=RIGHT; break; case 65516: /*down*/ - if(cars.list[0].direction!=UP) cars.list[0].direction=DOWN; + if(bikes.list[0].direction!=UP) bikes.list[0].direction=DOWN; break; case 65515: /*left*/ - if(cars.list[0].direction!=RIGHT) cars.list[0].direction=LEFT; + if(bikes.list[0].direction!=RIGHT) bikes.list[0].direction=LEFT; break; default: break;