pipe-game

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:
Minterface.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; }