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 fcf3ff7cfee340a11d3a91a5b95038ae15505e87 parent d404b8506a40cc8f155f9652e25ad73b6538e402 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Sun, 16 Feb 2025 18:15:02 +0100 Les listes ne bouclent pas en mode drag and drop Trop désorientant Diffstat:
M | interface.c | | | 50 | ++++++++++++++++++++++++++------------------------ |
1 file changed, 26 insertions(+), 24 deletions(-)
diff --git a/interface.c b/interface.c @@ -104,7 +104,7 @@ void removecardofpile(int cardposition, struct pile* p, struct pile **piles) { p->curline--; } -struct pile* mvcardup(struct pile* p, struct pile** piles, int direction, bool selection) { +struct pile* mvcardup(struct pile* p, struct pile** piles, int direction, bool selection, int motion) { int step = direction==UP ? -1 : 1 ; if (p->curline+step >= 0 && p->curline+step < p->cardcount) { if (selection) { @@ -116,25 +116,27 @@ struct pile* mvcardup(struct pile* p, struct pile** piles, int direction, bool s p->curline=p->curline+step; return p; } - if (p->curline+step < 0) { - if (selection) { - char* tmp; - tmp=p->cards[p->curline]; - p->cards[p->curline]=p->cards[p->cardcount-1]; - p->cards[p->cardcount-1]=tmp; + if (motion!=TB_MOD_MOTION) { + if (p->curline+step < 0) { + if (selection) { + char* tmp; + tmp=p->cards[p->curline]; + p->cards[p->curline]=p->cards[p->cardcount-1]; + p->cards[p->cardcount-1]=tmp; + } + p->curline=p->cardcount-1; + return p; } - p->curline=p->cardcount-1; - return p; - } - if (p->curline+step == p->cardcount) { - if (selection) { - char* tmp; - tmp=p->cards[p->curline]; - p->cards[p->curline]=p->cards[0]; - p->cards[0]=tmp; + if (p->curline+step == p->cardcount) { + if (selection) { + char* tmp; + tmp=p->cards[p->curline]; + p->cards[p->curline]=p->cards[0]; + p->cards[0]=tmp; + } + p->curline=0; + return p; } - p->curline=0; - return p; } if (p==piles[HAND] && direction==DOWN && piles[ARGS]->cardcount>0) return piles[ARGS]; @@ -353,11 +355,11 @@ int main(int argc, char **argv) { switch(ev.key) { /* up */ case 65517: - curmenu=mvcardup(curmenu,piles,UP,selection); + curmenu=mvcardup(curmenu,piles,UP,selection,ev.mod); break; /* down */ case 65516: - curmenu=mvcardup(curmenu,piles,DOWN,selection); + curmenu=mvcardup(curmenu,piles,DOWN,selection,ev.mod); break; /* -> */ case 65514: @@ -416,9 +418,9 @@ int main(int argc, char **argv) { curmenu=mvcardlr(srcmenu, piles, selection, RIGHT); srcmenu=curmenu; } else if(ev.y>(curmenu->begin.y+curmenu->curline+1)) - mvcardup(curmenu,piles,DOWN,selection); + mvcardup(curmenu,piles,DOWN,selection,ev.mod); else if (ev.y<(curmenu->begin.y+curmenu->curline+1)) - mvcardup(curmenu,piles,UP,selection); + mvcardup(curmenu,piles,UP,selection,ev.mod); } else { destmenu = piles[i]->cardcount>0 ? piles[i] : curmenu; if(destmenu==piles[HAND] \ @@ -437,10 +439,10 @@ int main(int argc, char **argv) { selection=false; break; case 65508: /*MouseWheelUp*/ - curmenu=mvcardup(curmenu,piles,UP,selection); + curmenu=mvcardup(curmenu,piles,UP,selection,ev.mod); break; case 65507: /*MouseWheelDown*/ - curmenu=mvcardup(curmenu,piles,DOWN,selection); + curmenu=mvcardup(curmenu,piles,DOWN,selection,ev.mod); break; } }