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 4153b5b9cd36c40189daac5305d650ec2a10e692
parent 37737c063d2b292b5a56f05ac52521252da7c465
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Wed, 22 Jan 2025 15:40:54 +0100

Début d'implémentation de la gestion des arguments

Problèmes : *beaucoup*
Il faut créer des faux arguments au fur et à mesure de la l'ajout et de
la suppression des cartes dans played, leur substituer les "vrais"
arguments quand on les ajoute etc, c'est compliqué et ça nécessite de
passer piles à add et remove card, c'est compliqué.
Va falloir facto

Diffstat:
Minterface.c | 64+++++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 37 insertions(+), 27 deletions(-)

diff --git a/interface.c b/interface.c @@ -48,7 +48,10 @@ pile createpile(char *name) { return p; } -bool addcardtopile(char* cardname, pile* p) { +bool addcardtopile(char* cardname, pile* p, pile **piles) { + if(p-> name=="played") { + addcardtopile("none",piles[3],piles); + } /*On quitte si l'argument est vide ou s'il contient un espace*/ /* strchr ne fonctionne pas avec utf-8 mais pour le moment rien * ne fonctionne en utf8 alors bon */ @@ -60,7 +63,11 @@ bool addcardtopile(char* cardname, pile* p) { return true; } -void removecardofpile(int cardposition, pile* p) { +void removecardofpile(int cardposition, pile* p, pile **piles) { + if(p->name=="played") { + addcardtopile(piles[PLAYEDARGS]->cards[cardposition],piles[ARGS],piles); + removecardofpile(cardposition,piles[PLAYEDARGS],piles); + } p->cardCount--; for(int i=cardposition;i<p->cardCount;i++) { p->cards[i]=p->cards[i+1]; @@ -87,13 +94,13 @@ pile* moveselection(pile* p, pile** piles, char* direction, bool selection) { return p; } -void updatecmd(char* cmd, const pile p) { - if (p.cardCount == 0 ) { return; } +void updatecmd(char* cmd, pile **p) { + if (p[PLAYED]->cardCount == 0 ) { return; } strcat(cmd,"( cat ./"); - strcat(cmd,p.cards[0]); - for (int i=1;i<p.cardCount;i++) { + strcat(cmd,p[PLAYED]->cards[0]); + for (int i=1;i<p[PLAYED]->cardCount;i++) { strcat(cmd," | \n./"); - strcat(cmd,p.cards[i]); + strcat(cmd,p[PLAYED]->cards[i]); } strcat(cmd," ) 2> /dev/null\n"); } @@ -117,17 +124,15 @@ void updateres(char *res, const char *cmd, FILE *fp) { } } -pile file2pile(char* filename) { +void file2pile(char* filename, pile *p, pile **piles) { FILE *fp = fopen(filename, "r"); - pile p=createpile(filename); char line[CARD_NAME_SIZE]; while (fgets(line, sizeof(line), fp)) { /* Retire le retour à la ligne à la fin de line */ line[strcspn(line, "\n")] = '\0'; - addcardtopile(line, &p); + addcardtopile(line, p, piles); } - p.curline=0; - return p; + p->curline=0; } int displaypile(pile p, pile curmenu, int rowoffset, int lineoffset, bool selection) { @@ -188,13 +193,14 @@ int main(int argc, char **argv) { char cmd[LIST_SIZE]; cmd[0]='\0'; - pile hand=file2pile("hand"); + pile *piles[4]; + pile hand=createpile("hand"); pile played=createpile("played"); pile args=createpile("args"); pile playedargs=createpile("playedargs"); - pile *piles[4]; - piles[HAND]=&hand;piles[PLAYED]=&played; - piles[ARGS]=&args;piles[PLAYEDARGS]=&playedargs; + piles[0]=&hand;piles[1]=&played; + piles[2]=&args;piles[3]=&playedargs; + file2pile("hand", &hand, piles); bool selection=false; bool quit=false; @@ -204,7 +210,7 @@ int main(int argc, char **argv) { while(!quit) { cmd[0]='\0';res[0]='\0';intern[0]='\0'; - updatecmd(cmd, played); + updatecmd(cmd, piles); updateres(res, cmd, fp2); updateinterncmd(intern, played); display(piles,*curmenu,selection,cmd,res,intern); @@ -222,34 +228,38 @@ int main(int argc, char **argv) { case 65515: if (curmenu->name=="played") { if (selection) { - addcardtopile(played.cards[played.curline],&hand); - removecardofpile(played.curline,&played); + addcardtopile(played.cards[played.curline],&hand,piles); + removecardofpile(played.curline,&played,piles); selection=!selection; } if (piles[HAND]->cardCount > 0){ curmenu=&hand; } } else if (curmenu->name=="playedargs") { if (selection) { - addcardtopile(playedargs.cards[playedargs.curline],&args); - removecardofpile(playedargs.curline,&playedargs); + addcardtopile(playedargs.cards[playedargs.curline],&args,piles); + removecardofpile(playedargs.curline,&playedargs,piles); selection=!selection; + curmenu=&args; } if (piles[ARGS]->cardCount > 0){ curmenu=&args; } + else if (piles[HAND]->cardCount > 0){ curmenu=&hand; } } break; /* -> */ case 65514: if (curmenu->name=="hand") { if (selection) { - addcardtopile(hand.cards[hand.curline],&played); - removecardofpile(hand.curline,&hand); + addcardtopile(hand.cards[hand.curline],&played,piles); + removecardofpile(hand.curline,&hand,piles); } if (piles[PLAYED]->cardCount > 0){ curmenu=&played; } } else if (curmenu->name=="args") { if (selection) { - addcardtopile(args.cards[args.curline],&playedargs); - removecardofpile(args.curline,&args); + addcardtopile(args.cards[args.curline],&playedargs,piles); + removecardofpile(args.curline,&args,piles); } if (piles[PLAYEDARGS]->cardCount > 0){ curmenu=&playedargs; } + } else if (curmenu->name=="played" && piles[PLAYEDARGS]->cardCount > 0) { + curmenu=&playedargs; } break; case 13: @@ -261,9 +271,9 @@ int main(int argc, char **argv) { quit=true; break; case 109: - if(addcardtopile(res,&args)>0) { + if(addcardtopile(res,&args,piles)>0) { for(int i=0;i<=played.cardCount;i++) - { removecardofpile(i,&played); } + { removecardofpile(i,&played,piles); } curmenu=&hand; } default: