Un jeu de cartes à piper les une dans les autres - retour accueil
git clone git://bebou.netlib.re/pipe-game
Log | Files | Refs | README |
commit d0374e159379596b60322464fe646b324feef2f6 parent f13831414d6305330720acb18bc0deff3da6a77d Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Tue, 21 Jan 2025 21:04:50 +0100 Légère factorisation de l'affichage Un moyen plutôt générique d'afficher les piles En vrai je devrais faire des sortes de "boites" C'est fou ce que ça prend comme temps l'affichage par rapport à la logique du jeu, enfin je trouve Bug connus : pleins de soucis avec les données en dessous des piles (les commandes etc) Diffstat:
M | interface.c | | | 72 | +++++++++++++++++++++++++++++++----------------------------------------- |
1 file changed, 31 insertions(+), 41 deletions(-)
diff --git a/interface.c b/interface.c @@ -28,8 +28,10 @@ int nblines(char *str) { return l; } -void hr(int i) { - tb_printf(0, i, TB_DEFAULT, TB_BLACK, "-------"); +void hr(int rowoffset, int lineoffset, int length) { + char ruler[length]; + for(int i=0;i<length;i++){ruler[i]='-';} + tb_printf(rowoffset, lineoffset, TB_DEFAULT, TB_BLACK, ruler); } pile createpile(char *name) { @@ -116,56 +118,44 @@ pile file2pile(char* filename) { return p; } +int displaypile(pile p, pile curmenu, int lineoffset, int rowoffset, bool selection) { + if(lineoffset!=0){lineoffset++;} + int newlineoffset=lineoffset; + for (int i=0;i<p.cardCount;i++) { + if (i==p.curline && p.name == curmenu.name ) { + if (selection) { tb_printf(rowoffset, lineoffset+i, TB_BLACK, TB_BLUE, p.cards[i]); } + else { tb_printf(rowoffset, lineoffset+i, TB_BLACK, TB_WHITE, p.cards[i]); } + } + else { tb_printf(rowoffset, lineoffset+i, TB_DEFAULT, TB_DEFAULT, p.cards[i]); } + newlineoffset++; + } + hr(rowoffset,newlineoffset,5); + return newlineoffset; +} void display(pile** piles, pile curmenu, bool selection, char* cmd, char* res, char* intern) { tb_clear(); - int i; int j; int w; - int biggestpile=max(piles[PLAYED]->cardCount,piles[HAND]->cardCount)+piles[ARGS]->cardCount; - for (i=0;i<piles[HAND]->cardCount;i++) { - if (i==piles[HAND]->curline && curmenu.name=="hand") { - if (selection) { - tb_printf(0, i, TB_BLACK, TB_BLUE, piles[HAND]->cards[i]); - } else { - tb_printf(0, i, TB_BLACK, TB_WHITE, piles[HAND]->cards[i]); - } - } - else { tb_printf(0, i, TB_DEFAULT, TB_BLACK, piles[HAND]->cards[i]); } - } - for (j=0;j<piles[PLAYED]->cardCount;j++) { - if (j==piles[PLAYED]->curline && curmenu.name=="played") { - if (selection) { - tb_printf(CARD_NAME_SIZE+2, j, TB_BLACK, TB_BLUE, piles[PLAYED]->cards[j]); - } else { - tb_printf(CARD_NAME_SIZE+2, j, TB_BLACK, TB_WHITE, piles[PLAYED]->cards[j]); - } - } - else { tb_printf(CARD_NAME_SIZE+2, j, TB_DEFAULT, TB_BLACK, piles[PLAYED]->cards[j]); } - } - for (j=0;j<piles[ARGS]->cardCount;j++) { - if (j==piles[ARGS]->curline && curmenu.name=="args") { - if (selection) { - tb_printf(0, biggestpile+j, TB_BLACK, TB_BLUE, piles[ARGS]->cards[j]); - } else { - tb_printf(0,biggestpile+j, TB_BLACK, TB_WHITE, piles[ARGS]->cards[j]); - } - } - else { tb_printf(0,biggestpile+j, TB_DEFAULT, TB_BLACK, piles[ARGS]->cards[j]); } - } + int i, lineoffset=0; + + lineoffset=displaypile(*piles[HAND], curmenu, 0, 0, selection); + lineoffset=displaypile(*piles[ARGS], curmenu, lineoffset, 0, selection); + displaypile(*piles[PLAYED], curmenu, 0, CARD_NAME_SIZE+2, selection); - for (int w=0;w<biggestpile+piles[ARGS]->cardCount;w++) { - tb_printf(CARD_NAME_SIZE,w,TB_DEFAULT, TB_BLACK, "|"); + for (int i=0;i<lineoffset;i++) { + tb_printf(CARD_NAME_SIZE,i,TB_DEFAULT, TB_BLACK, "|"); } - tb_printf(0, biggestpile+1+piles[ARGS]->cardCount, TB_DEFAULT, TB_BLACK, cmd); - hr(biggestpile+1+piles[ARGS]->cardCount+piles[PLAYED]->cardCount); - tb_printf(0, biggestpile+1+piles[ARGS]->cardCount+piles[PLAYED]->cardCount+1+piles[ARGS]->cardCount, TB_DEFAULT, TB_BLACK, res); + tb_printf(0, lineoffset+1+piles[ARGS]->cardCount, TB_DEFAULT, TB_BLACK, cmd); + hr(0,lineoffset,5); + tb_printf(0, lineoffset+1+piles[ARGS]->cardCount+piles[PLAYED]->cardCount+1+piles[ARGS]->cardCount, TB_DEFAULT, TB_BLACK, res); int l=0; l=nblines(res); - hr(biggestpile+1+piles[ARGS]->cardCount+piles[PLAYED]->cardCount+1+piles[ARGS]->cardCount+l); - tb_printf(0, biggestpile+1+piles[ARGS]->cardCount+piles[PLAYED]->cardCount+2+l, TB_DEFAULT, TB_BLACK, intern); + hr(0,lineoffset,5); + tb_printf(0, lineoffset+1+piles[ARGS]->cardCount+piles[PLAYED]->cardCount+2+l, TB_DEFAULT, TB_BLACK, intern); tb_printf(0,30,TB_DEFAULT,TB_DEFAULT,curmenu.name); char str[100];sprintf(str,"%d",curmenu.cardCount); tb_printf(0,31,TB_DEFAULT,TB_DEFAULT,str); tb_present(); + return; }