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 115029679dd447d356ed61605601b620bbcba973 parent 248ae471e30add208fe789fda4718b3f581c0ad1 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Wed, 29 Jan 2025 17:10:55 +0100 Drag and drop au sein d'une même pile fonctionnel Bon bon bon Ca devient un peu n'importe quoi ce code Diffstat:
M | interface.c | | | 20 | +++++++++++++++++--- |
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/interface.c b/interface.c @@ -212,7 +212,7 @@ int debug(int l, pile curmenu,struct tb_event ev) { sprintf(str2,"%d",curmenu.curline); tb_printf(0,l++,TB_DEFAULT,TB_DEFAULT,str2); tb_printf(0,l++,TB_DEFAULT,TB_DEFAULT,"touche %d, char %d, x %d, y %d\n",ev.key,ev.ch,ev.x,ev.y); - tb_printf(0,l++,TB_DEFAULT,TB_DEFAULT,"type %d",ev.type); + tb_printf(0,l++,TB_DEFAULT,TB_DEFAULT,"type %d, mod %d, a %d",ev.type,ev.mod,TB_MOD_MOTION); return l; } @@ -250,6 +250,7 @@ int main(int argc, char **argv) { tb_init(); tb_set_input_mode(TB_INPUT_ESC | TB_INPUT_MOUSE); struct tb_event ev; + coord previouspos; char cmd[LIST_SIZE]; char cmdennemy[LIST_SIZE]; char res[LIST_SIZE]; char resennemy[LIST_SIZE]; @@ -269,6 +270,8 @@ int main(int argc, char **argv) { piles[PLAYEDENNEMY]=&playedennemy; piles[PLAYEDENNEMYARGS]=&playedennemyargs; + size_t n = sizeof(piles)/sizeof(piles[0]); + file2pile(stdin, &hand, piles); addcardtopile(hand.cards[0],&playedennemy,piles); @@ -389,13 +392,24 @@ int main(int argc, char **argv) { case 3: /*Mouse*/ switch(ev.key) { case 65512: /*MouseLeft*/ - for(int i=0;i<6;i++) { + for(int i=0;i<n;i++) { if( piles[i]->begin.x < ev.x && ev.x < piles[i]->end.x \ && piles[i]->begin.y < ev.y && ev.y < piles[i]->end.y ) { curmenu=piles[i]; - curmenu->curline=strcmp(curmenu->name,"args")==0 ? ev.y-1-piles[HAND]->end.y : ev.y-1; + if(ev.mod==TB_MOD_MOTION) { + selection=true; + if(ev.y>previouspos.y) { + curmenu=moveselection(curmenu,piles,"down",selection); + } else if (ev.y<previouspos.y) { + curmenu=moveselection(curmenu,piles,"up",selection); + } + } else { + curmenu->curline=strcmp(curmenu->name,"args")==0 ? ev.y-1-piles[HAND]->end.y : ev.y-1; + selection=false; + } } } + previouspos.x=ev.x, previouspos.y=ev.y; break; case 65508: /*MouseWheelUp*/ curmenu=moveselection(curmenu,piles,"up",selection);