tron

le jeu des motos dans tron - retour accueil

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

Log | Files | Refs | README |

commit 614bd759e382b8206eeedcbea2c08b24d073133b
parent ca3af25ffffff47cff3ba45160dcdcef64661f3c
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Thu, 19 Jun 2025 12:37:35 +0200

Diverse modifs

Olalal n'importe quoi ces commits

Ici no affichage différement
On met la taille de la queue dans une constante

Diffstat:
Mtron.c | 46+++++++++++++++++++++++++++++++---------------
1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/tron.c b/tron.c @@ -1,6 +1,8 @@ #define TB_IMPL #include "termbox2.h" +#define TAIL 20 + enum direction { UP, RIGHT, DOWN, LEFT }; typedef struct { @@ -15,27 +17,28 @@ struct car { int previous_direction; }; -void display(struct car *cars, int ticks) { +void display(struct car *cars, int ticks, int tail) { for (int i=0;i<2;i++) { - if (cars[i].direction==cars[i].previous_direction && cars[i].direction%2) - tb_printf(cars[i].path[ticks-1].x,cars[i].path[ticks-1].y,0,0,"─"); - else if(cars[i].direction==cars[i].previous_direction) - tb_printf(cars[i].path[ticks-1].x,cars[i].path[ticks-1].y,0,0,"│"); tb_printf(cars[i].position.x,cars[i].position.y,0,0,"$"); - tb_printf(0,i,0,0,"car %d - x: %d, y: %d, direction %d",i,cars[i].position.x,cars[i].position.y,cars[i].direction); + for (int j=ticks-tail;j<ticks+1;j++) { + if(cars[i].path[j].x!=cars[i].path[j-1].x) + tb_printf(cars[i].path[j].x,cars[i].path[j].y,0,0,"▒"); + else + tb_printf(cars[i].path[j].x,cars[i].path[j].y,0,0,"▒"); + } + tb_printf(0,i,0,0,"car %d - x: %d, y: %d, direction %d, old_direction %d",i,cars[i].position.x,cars[i].position.y,cars[i].direction,cars[i].previous_direction); } } void update(struct car *car, coord *incs, int ticks) { - car->previous_direction=car->direction; car->path[ticks]=car->position; car->position.x=car->position.x+incs[car->direction].x; car->position.y=car->position.y+incs[car->direction].y; } -int is_in_conflict(struct car *cars, int ticks) { +int is_in_conflict(struct car *cars, int ticks, int tail) { for (int i=0;i<2;i++) { - for (int j=0;j<ticks;j++) { + for (int j=ticks-tail;j<ticks+1;j++) { if (cars[i].position.x==cars[i].path[j].x && cars[i].position.y==cars[i].path[j].y) return i+1; @@ -73,13 +76,14 @@ int main(int argc, char **argv) { while(1) { for(int i=0;i<2;i++) update(&cars[i],incs,ticknb); - dead_car=is_in_conflict(cars,ticknb); + dead_car=is_in_conflict(cars,ticknb,TAIL); if(dead_car>0) { printf("car %d is dead",dead_car); tb_shutdown(); return 0; } - display(cars,ticknb); + tb_clear(); + display(cars,ticknb,TAIL); tb_present(); tb_peek_event(&ev, 1000); switch(ev.ch) { @@ -95,16 +99,28 @@ int main(int argc, char **argv) { tb_shutdown(); return 0; case 65517: /*up*/ - if(cars[0].direction!=DOWN) cars[0].direction=UP; + if(cars[0].direction!=DOWN) { + cars[0].previous_direction=DOWN; + cars[0].direction=UP; + } break; case 65514: /*right*/ - if(cars[0].direction!=LEFT) cars[0].direction=RIGHT; + if(cars[0].direction!=LEFT) { + cars[0].previous_direction=LEFT; + cars[0].direction=RIGHT; + } break; case 65516: /*down*/ - if(cars[0].direction!=UP) cars[0].direction=DOWN; + if(cars[0].direction!=UP) { + cars[0].previous_direction=UP; + cars[0].direction=DOWN; + } break; case 65515: /*left*/ - if(cars[0].direction!=RIGHT) cars[0].direction=LEFT; + if(cars[0].direction!=RIGHT) { + cars[0].direction=RIGHT; + cars[0].direction=LEFT; + } break; default: break;