Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Le jeu de Taquin | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Le jeu de Taquin Sam 21 Fév 2015 - 22:56 | |
| Selon le modèle du jeu de l'Ane rouge (Papydall), j'ai fait le jeu de Taquin (ou Pousse-Pousse). Ce jeu se présente sous la forme de 16 cases, organisées en 4 lignes de 4 colonnes. Les cases sont préremplies par les chiffres de 1 à 15, dans un ordre aléatoire. La case en bas à droite est vide. Le but du jeu est de remettre les chiffres dans l'ordre, en laissant la case en bas à droite vide. Pour cela, on peut glisser un pion voisin d'une case vide dans cette case vide, etc. La touche Echap remet un nouveau jeu en abandonnant la partie en cours. Voici le code: - Code:
-
' le_Taquin.bas
label click, touche
dim unite% : unite% = 100 dim bord% : bord% = 10
dim pieces%(15,8) ' (n%,d%) n%=numéro de pièce (1...15) ' d%=1 n% ' d%=2 x% ' d%=3 y% ' d%=4 nombre horizontal ' d%=5 nombre vertical ' d%=6 R% ' d%=7 G% ' d%=8 B%
dim terrain%(4,4) : ' 4 lignes de 4 colonnes dim table%(15) : ' table des nombres de 1 à 15, en ordre aléatoire dim table_exist%
width 0,4*unite%+2*bord% + 16 height 0,4*unite%+2*bord% + 39 left 0,(screen_x-width(0))/2 top 0,(screen_y-height(0))/2 caption 0,"Le jeu Taquin" on_key_down 0,touche
picture 1 : width 1,4*unite%+2*bord% : height 1,4*unite%+2*bord% color 1,102,0,0 2d_pen_color 102,0,0 2d_pen_width 2 on_click 1,click 2d_target_is 1 print_target_is 1 font_color 1,255,255,255 font_bold 1
initialiser() end
touche: select scancode case 27: ' echap if message_confirmation_yes_no("Voulez-vous vraiment relancer le jeu ?")=1 color 1,102,0,0 initialiser() end_if end_select return
click: deplacer_piece() return sub chercher_table(k%,i%) dim_local j% table_exist% = 0 if i%=1 then exit_sub for j%=1 to i%-1 if table%(j%)=k% table_exist% = 1 exit_sub end_if next j% end_sub sub initialiser() dim_local i%, j%, n%, k% for i%=1 to 15 table_exist% = 1 while table_exist%=1 k% = int(rnd(14.999))+1 chercher_table(k%,i%) end_while table%(i%) = k% next i% for i%=1 to 4 for j%=1 to 4 terrain%(i%,j%) = 0 n% = n% + 1 if n%<16 then creer_piece(table%(n%),i%,j%,1,1,254,204,0) next j% next i%
end_sub
sub creer_piece(n%,x%,y%,nh%,nv%,R%,G%,B%) dim_local i%, j%, tx%, ty% pieces%(n%,1) = n% pieces%(n%,2) = x% pieces%(n%,3) = y% pieces%(n%,4) = nh% pieces%(n%,5) = nv% pieces%(n%,6) = R% pieces%(n%,7) = G% pieces%(n%,8) = B% for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%) = n% next j% next i% 2d_fill_color R%,G%,B% tx% = bord%+(x%-1)*unite% ty% = bord%+(y%-1)*unite% 2d_rectangle tx%,ty%,tx%+nh%*unite%,ty%+nv%*unite% tx% = tx% + int((nh%*unite%)/2) ty% = ty% + int((nv%*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) print_locate tx%-5,ty%-5 print n% end_sub
sub deplacer_piece() dim_local x%, y%, x1%, y1%, cx%, cy%, cx1%, cy1%, p%, nh%, nv%, i%, j%, cnt% x% = mouse_x_left_down(1) y% = mouse_y_left_down(1)
' x1% = mouse_x_left_up(1) ' y1% = mouse_y_left_up(1)
x1% = mouse_x_position(1) y1% = mouse_y_position(1)
cx% = int((x%-bord%+unite%-1)/unite%) cy% = int((y%-bord%+unite%-1)/unite%) cx1% = int((x1%-bord%+unite%-1)/unite%) cy1% = int((y1%-bord%+unite%-1)/unite%) if cx%<1 then cx% = 1 if cx%>4 then cx% = 4 if cx1%<1 then cx1% = 1 if cx1%>4 then cx1% = 4 if cy%<1 then cy% = 1 if cy%>4 then cy% = 5 if cy1%<1 then cy1% = 1 if cy1%>4 then cy1% = 5 p% = terrain%(cx%,cy%) if p%=0 then exit_sub : ' on a cliqué dans un espace vide ? if terrain%(cx1%,cy1%)<>0 then exit_sub : ' on veut tirer vers un espace occupé ? ' chercher si le décalage est possible x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) if cx1%<>cx% : ' décaler horizontalement ? if cx1%>cx% : ' décaler à droite ? if x%<4 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%+nh%,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% deplacer_droite(p%) end_if end_if else : ' décaler à gauche ! if x%>1 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%-1,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% deplacer_gauche(p%) end_if end_if end_if else : ' pas de décalage horizontal ! if cy1%<>cy% : ' décaler verticalement ? if cy1%>cy% : ' décaler en bas ? if y%<5 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%+nv%)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% deplacer_bas(p%) end_if end_if else : ' décaler en haut ! if y%>1 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%-1)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% deplacer_haut(p%) end_if end_if end_if end_if end_if if terrain%(4,4)=0 cnt% = 0 for i%=1 to 4 for j%=1 to 4 cnt% = cnt% + 1 if cnt%<16 if terrain%(i%,j%)<>cnt% then exit_sub end_if next j% next i% message "BRAVO ! C'est gagné !" end_if end_sub
sub deplacer_gauche(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%-1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%+nh%-1,y%+i%) = 0 next i% pieces%(p%,2) = pieces%(p%,2) - 1 dessiner_terrain() end_sub
sub deplacer_haut(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%-1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%+nv%-1) = 0 next i% pieces%(p%,3) = pieces%(p%,3) - 1 dessiner_terrain() end_sub
sub deplacer_droite(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=nh%-1 to 0 step -1 for j%=0 to nv%-1 terrain%(x%+i%+1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%,y%+i%) = 0 next i% pieces%(p%,2) = pieces%(p%,2) + 1 dessiner_terrain() end_sub
sub deplacer_bas(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=nv%-1 to 0 step -1 terrain%(x%+i%,y%+j%+1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%) = 0 next i% pieces%(p%,3) = pieces%(p%,3) + 1 dessiner_terrain() end_sub
sub dessiner_terrain() dim_local p%, tx%, ty% color 1,102,0,0 for p%=1 to 15 tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color pieces%(p%,6), pieces%(p%,7), pieces%(p%,8) 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% tx% = tx% + int((pieces%(p%,4)*unite%)/2) ty% = ty% + int((pieces%(p%,5)*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) print_locate tx%-5,ty%-5 print p% next p% end_sub
Dernière édition par Klaus le Dim 22 Fév 2015 - 1:41, édité 2 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu de Taquin Sam 21 Fév 2015 - 23:17 | |
| Je vais tester, mais il manque la déclaration de j% à la ligne 117 pour l'utilisation ligne 197. J'y retourne | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu de Taquin Sam 21 Fév 2015 - 23:26 | |
| Oui à par le j% manquant, ça marche bien. Tu pourrais faire un petit article sur ton Taquin Klaus avec un zoom sur la technique du drag and drop utilisée qui n'est pas si évitente à trouver. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 22 Fév 2015 - 1:10 | |
| C' est le même principe de jeu que celui que l' on avait fait avec des images en morceaux . Avec le drag and drop au lieu d' un clic sur un sprite... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 1:23 | |
| Merci d'avoir relevé cet oubli, Jicehel. J'ai corrigé dans le premier post.
Je peux envisager un article à ce sujet - je vais y réfléchir. J'attendrai que l'ensemble ait mûri un peu. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 3:18 | |
| Avec le chat noir, l’âne rouge, le taquin, Tetris, le Solitaire, le Memory Starwars, etc.. on a de quoi se faire la torture cérébrale. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 8:50 | |
| Voici une nouvelle version. Fonctionnellement identique, elle élimine cependant le clignotement au déplacement d'un pion: - Code:
-
' le_Taquin.bas
label click, touche
dim unite% : unite% = 100 dim bord% : bord% = 10
dim pieces%(15,8) ' (n%,d%) n%=numéro de pièce (1...15) ' d%=1 n% ' d%=2 x% ' d%=3 y% ' d%=4 nombre horizontal ' d%=5 nombre vertical ' d%=6 R% ' d%=7 G% ' d%=8 B%
dim terrain%(4,4) : ' 4 lignes de 4 colonnes dim table%(15) : ' table des nombres de 1 à 15, en ordre aléatoire dim table_exist%
width 0,4*unite%+2*bord% + 16 height 0,4*unite%+2*bord% + 39 left 0,(screen_x-width(0))/2 top 0,(screen_y-height(0))/2 caption 0,"Le jeu Taquin" on_key_down 0,touche
picture 1 : width 1,4*unite%+2*bord% : height 1,4*unite%+2*bord% color 1,102,0,0 2d_target_is 1 2d_pen_color 102,0,0 2d_pen_width 2 on_click 1,click print_target_is 1 font_color 1,255,255,255 font_bold 1
initialiser() end
touche: select scancode case 27: ' echap if message_confirmation_yes_no("Voulez-vous vraiment relancer le jeu ?")=1 color 1,102,0,0 initialiser() end_if end_select return
click: deplacer_piece() return sub chercher_table(k%,i%) dim_local j% table_exist% = 0 if i%=1 then exit_sub for j%=1 to i%-1 if table%(j%)=k% table_exist% = 1 exit_sub end_if next j% end_sub sub initialiser() dim_local i%, j%, n%, k% for i%=1 to 15 table_exist% = 1 while table_exist%=1 k% = int(rnd(14.999))+1 chercher_table(k%,i%) end_while table%(i%) = k% next i% for i%=1 to 4 for j%=1 to 4 terrain%(i%,j%) = 0 n% = n% + 1 if n%<16 then creer_piece(table%(n%),i%,j%,1,1,254,204,0) next j% next i%
end_sub
sub creer_piece(n%,x%,y%,nh%,nv%,R%,G%,B%) dim_local i%, j%, tx%, ty% pieces%(n%,1) = n% pieces%(n%,2) = x% pieces%(n%,3) = y% pieces%(n%,4) = nh% pieces%(n%,5) = nv% pieces%(n%,6) = R% pieces%(n%,7) = G% pieces%(n%,8) = B% for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%) = n% next j% next i% 2d_fill_color R%,G%,B% tx% = bord%+(x%-1)*unite% ty% = bord%+(y%-1)*unite% 2d_rectangle tx%,ty%,tx%+nh%*unite%,ty%+nv%*unite% tx% = tx% + int((nh%*unite%)/2) ty% = ty% + int((nv%*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) print_locate tx%-5,ty%-5 print n% end_sub
sub deplacer_piece() dim_local x%, y%, x1%, y1%, cx%, cy%, cx1%, cy1%, p%, nh%, nv%, i%, j%, cnt% x% = mouse_x_left_down(1) y% = mouse_y_left_down(1)
' x1% = mouse_x_left_up(1) ' y1% = mouse_y_left_up(1)
x1% = mouse_x_position(1) y1% = mouse_y_position(1)
cx% = int((x%-bord%+unite%-1)/unite%) cy% = int((y%-bord%+unite%-1)/unite%) cx1% = int((x1%-bord%+unite%-1)/unite%) cy1% = int((y1%-bord%+unite%-1)/unite%) if cx%<1 then cx% = 1 if cx%>4 then cx% = 4 if cx1%<1 then cx1% = 1 if cx1%>4 then cx1% = 4 if cy%<1 then cy% = 1 if cy%>4 then cy% = 5 if cy1%<1 then cy1% = 1 if cy1%>4 then cy1% = 5 p% = terrain%(cx%,cy%) if p%=0 then exit_sub : ' on a cliqué dans un espace vide ? if terrain%(cx1%,cy1%)<>0 then exit_sub : ' on veut tirer vers un espace occupé ? ' chercher si le décalage est possible x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) if cx1%<>cx% : ' décaler horizontalement ? if cx1%>cx% : ' décaler à droite ? if x%<4 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%+nh%,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% deplacer_droite(p%) end_if end_if else : ' décaler à gauche ! if x%>1 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%-1,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% deplacer_gauche(p%) end_if end_if end_if else : ' pas de décalage horizontal ! if cy1%<>cy% : ' décaler verticalement ? if cy1%>cy% : ' décaler en bas ? if y%<5 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%+nv%)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% deplacer_bas(p%) end_if end_if else : ' décaler en haut ! if y%>1 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%-1)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% deplacer_haut(p%) end_if end_if end_if end_if end_if if terrain%(4,4)=0 cnt% = 0 for i%=1 to 4 for j%=1 to 4 cnt% = cnt% + 1 if cnt%<16 if terrain%(i%,j%)<>cnt% then exit_sub end_if next j% next i% message "BRAVO ! C'est gagné !" end_if end_sub
sub deplacer_gauche(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%-1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%+nh%-1,y%+i%) = 0 next i% effacer_piece(p%) pieces%(p%,2) = pieces%(p%,2) - 1 dessiner_piece(p%) end_sub
sub deplacer_haut(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%-1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%+nv%-1) = 0 next i% effacer_piece(p%) pieces%(p%,3) = pieces%(p%,3) - 1 dessiner_piece(p%) end_sub
sub deplacer_droite(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=nh%-1 to 0 step -1 for j%=0 to nv%-1 terrain%(x%+i%+1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%,y%+i%) = 0 next i% effacer_piece(p%) pieces%(p%,2) = pieces%(p%,2) + 1 dessiner_piece(p%) end_sub
sub deplacer_bas(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=nv%-1 to 0 step -1 terrain%(x%+i%,y%+j%+1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%) = 0 next i% effacer_piece(p%) pieces%(p%,3) = pieces%(p%,3) + 1 dessiner_piece(p%) end_sub
sub effacer_piece(p%) dim_local tx%, ty% tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color 102,0,0 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% end_sub
sub dessiner_piece(p%) dim_local tx%, ty% tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color pieces%(p%,6), pieces%(p%,7), pieces%(p%,8) 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% tx% = tx% + int((pieces%(p%,4)*unite%)/2) ty% = ty% + int((pieces%(p%,5)*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) print_locate tx%-5,ty%-5 print p% end_sub
Dernière édition par Klaus le Dim 22 Fév 2015 - 9:39, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 9:27 | |
| Celui là, on l'avais déjà, mais maintenant il fonctionne avec le déplacement par la souris. Que je jeu ! actuellement, et ce n'est pas pour me déplaire A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 9:45 | |
| Oui, beaucoup mieux la derniere version, l'affichage est nickel et la détection du mouvement pour les pièces est plus fluide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 13:25 | |
| Et voici la version avec annulation du dernier ou des derniers mouvements, jusqu'au retour à la position de départ. C'est la touche "Espace" qui fait cela: - Code:
-
' le_Taquin.bas
label click, touche
dim unite% : unite% = 100 dim bord% : bord% = 10
dim pieces%(15,8) ' (n%,d%) n%=numéro de pièce (1...15) ' d%=1 n% ' d%=2 x% ' d%=3 y% ' d%=4 nombre horizontal ' d%=5 nombre vertical ' d%=6 R% ' d%=7 G% ' d%=8 B%
dim terrain%(4,4) : ' 4 lignes de 4 colonnes dim table%(15) : ' table des nombres de 1 à 15, en ordre aléatoire dim table_exist%
width 0,4*unite%+2*bord% + 16 height 0,4*unite%+2*bord% + 39 left 0,(screen_x-width(0))/2 top 0,(screen_y-height(0))/2 caption 0,"Le jeu Taquin" on_key_down 0,touche
picture 1 : width 1,4*unite%+2*bord% : height 1,4*unite%+2*bord% color 1,102,0,0 2d_target_is 1 2d_pen_color 102,0,0 2d_pen_width 2 on_click 1,click print_target_is 1 font_color 1,255,255,255 font_bold 1
dlist 2 : ' pour défaire la dernière action par la touche "espace"
initialiser() end
touche: select scancode case 27: ' echap if message_confirmation_yes_no("Voulez-vous vraiment relancer le jeu ?")=1 color 1,102,0,0 initialiser() end_if case 32: ' "espace" = défaire le dernier mouvement if count(2)>0 then defaire() end_select return
click: deplacer_piece() return sub chercher_table(k%,i%) dim_local j% table_exist% = 0 if i%=1 then exit_sub for j%=1 to i%-1 if table%(j%)=k% table_exist% = 1 exit_sub end_if next j% end_sub sub initialiser() clear 2 dim_local i%, j%, n%, k% for i%=1 to 15 table_exist% = 1 while table_exist%=1 k% = int(rnd(14.999))+1 chercher_table(k%,i%) end_while table%(i%) = k% next i% for i%=1 to 4 for j%=1 to 4 terrain%(i%,j%) = 0 n% = n% + 1 if n%<16 then creer_piece(table%(n%),i%,j%,1,1,254,204,0) next j% next i%
end_sub
sub creer_piece(n%,x%,y%,nh%,nv%,R%,G%,B%) dim_local i%, j%, tx%, ty% pieces%(n%,1) = n% pieces%(n%,2) = x% pieces%(n%,3) = y% pieces%(n%,4) = nh% pieces%(n%,5) = nv% pieces%(n%,6) = R% pieces%(n%,7) = G% pieces%(n%,8) = B% for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%) = n% next j% next i% 2d_fill_color R%,G%,B% tx% = bord%+(x%-1)*unite% ty% = bord%+(y%-1)*unite% 2d_rectangle tx%,ty%,tx%+nh%*unite%,ty%+nv%*unite% tx% = tx% + int((nh%*unite%)/2) ty% = ty% + int((nv%*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) print_locate tx%-5,ty%-5 print n% end_sub
sub deplacer_piece() dim_local x%, y%, x1%, y1%, cx%, cy%, cx1%, cy1%, p%, nh%, nv%, i%, j%, cnt% x% = mouse_x_left_down(1) y% = mouse_y_left_down(1)
' x1% = mouse_x_left_up(1) ' y1% = mouse_y_left_up(1)
x1% = mouse_x_position(1) y1% = mouse_y_position(1)
cx% = int((x%-bord%+unite%-1)/unite%) cy% = int((y%-bord%+unite%-1)/unite%) cx1% = int((x1%-bord%+unite%-1)/unite%) cy1% = int((y1%-bord%+unite%-1)/unite%) if cx%<1 then cx% = 1 if cx%>4 then cx% = 4 if cx1%<1 then cx1% = 1 if cx1%>4 then cx1% = 4 if cy%<1 then cy% = 1 if cy%>4 then cy% = 5 if cy1%<1 then cy1% = 1 if cy1%>4 then cy1% = 5 p% = terrain%(cx%,cy%) if p%=0 then exit_sub : ' on a cliqué dans un espace vide ? if terrain%(cx1%,cy1%)<>0 then exit_sub : ' on veut tirer vers un espace occupé ? ' chercher si le décalage est possible x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) if cx1%<>cx% : ' décaler horizontalement ? if cx1%>cx% : ' décaler à droite ? if x%<4 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%+nh%,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% item_add 2,str$(p%)+"D" deplacer_droite(p%) end_if end_if else : ' décaler à gauche ! if x%>1 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%-1,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% item_add 2,str$(p%)+"G" deplacer_gauche(p%) end_if end_if end_if else : ' pas de décalage horizontal ! if cy1%<>cy% : ' décaler verticalement ? if cy1%>cy% : ' décaler en bas ? if y%<5 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%+nv%)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% item_add 2,str$(p%)+"B" deplacer_bas(p%) end_if end_if else : ' décaler en haut ! if y%>1 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%-1)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% item_add 2,str$(p%)+"H" deplacer_haut(p%) end_if end_if end_if end_if end_if if terrain%(4,4)=0 cnt% = 0 for i%=1 to 4 for j%=1 to 4 cnt% = cnt% + 1 if cnt%<16 if terrain%(i%,j%)<>cnt% then exit_sub end_if next j% next i% message "BRAVO ! C'est gagné !" end_if end_sub
sub deplacer_gauche(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%-1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%+nh%-1,y%+i%) = 0 next i% effacer_piece(p%) pieces%(p%,2) = pieces%(p%,2) - 1 dessiner_piece(p%) end_sub
sub deplacer_haut(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%-1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%+nv%-1) = 0 next i% effacer_piece(p%) pieces%(p%,3) = pieces%(p%,3) - 1 dessiner_piece(p%) end_sub
sub deplacer_droite(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=nh%-1 to 0 step -1 for j%=0 to nv%-1 terrain%(x%+i%+1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%,y%+i%) = 0 next i% effacer_piece(p%) pieces%(p%,2) = pieces%(p%,2) + 1 dessiner_piece(p%) end_sub
sub deplacer_bas(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=nv%-1 to 0 step -1 terrain%(x%+i%,y%+j%+1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%) = 0 next i% effacer_piece(p%) pieces%(p%,3) = pieces%(p%,3) + 1 dessiner_piece(p%) end_sub
sub effacer_piece(p%) dim_local tx%, ty% tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color 102,0,0 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% end_sub
sub dessiner_piece(p%) dim_local tx%, ty% tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color pieces%(p%,6), pieces%(p%,7), pieces%(p%,8) 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% tx% = tx% + int((pieces%(p%,4)*unite%)/2) ty% = ty% + int((pieces%(p%,5)*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) print_locate tx%-5,ty%-5 print p% end_sub
sub defaire() dim_local s$, p%, d$, d% s$ = item_read$(2,count(2)) item_delete 2,count(2) d$ = right$(s$,1) p% = val(left$(s$,len(s$)-1)) d% = instr("GHDB",d$) select d% case 1: ' gauche deplacer_droite(p%) case 2: ' haut deplacer_bas(p%) case 3: ' droite deplacer_gauche(p%) case 4: ' bas deplacer_haut(p%) end_select end_sub
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 13:45 | |
| Même remarque que pour l’âne rouge, la couleur des N° de case (Blanc sur fond Jaune) est illisible.
J'ai remplacé la ligne 38 par: font_color 1,0,0,255
Le retour en arrière avec "la barre d'espace", c'est génial.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu de Taquin Dim 22 Fév 2015 - 14:47 | |
| Meme chose que pour l’âne rouge, j'ai centré les pièces à 2 chiffres: - Code:
-
' le_Taquin.bas
label click, touche
dim unite% : unite% = 100 dim bord% : bord% = 10
dim pieces%(15,8) ' (n%,d%) n%=numéro de pièce (1...15) ' d%=1 n% ' d%=2 x% ' d%=3 y% ' d%=4 nombre horizontal ' d%=5 nombre vertical ' d%=6 R% ' d%=7 G% ' d%=8 B%
dim terrain%(4,4) : ' 4 lignes de 4 colonnes dim table%(15) : ' table des nombres de 1 à 15, en ordre aléatoire dim table_exist%
width 0,4*unite%+2*bord% + 16 height 0,4*unite%+2*bord% + 39 left 0,(screen_x-width(0))/2 top 0,(screen_y-height(0))/2 caption 0,"Le jeu Taquin" on_key_down 0,touche
picture 1 : width 1,4*unite%+2*bord% : height 1,4*unite%+2*bord% color 1,102,0,0 2d_target_is 1 2d_pen_color 102,0,0 2d_pen_width 2 on_click 1,click print_target_is 1 font_color 1,25,15,15 font_bold 1
dlist 2 : ' pour défaire la dernière action par la touche "espace"
initialiser() end
touche: select scancode case 27: ' echap if message_confirmation_yes_no("Voulez-vous vraiment relancer le jeu ?")=1 color 1,102,0,0 initialiser() end_if case 32: ' "espace" = défaire le dernier mouvement if count(2)>0 then defaire() end_select return
click: deplacer_piece() return
sub chercher_table(k%,i%) dim_local j% table_exist% = 0 if i%=1 then exit_sub for j%=1 to i%-1 if table%(j%)=k% table_exist% = 1 exit_sub end_if next j% end_sub
sub initialiser() clear 2 dim_local i%, j%, n%, k% for i%=1 to 15 table_exist% = 1 while table_exist%=1 k% = int(rnd(14.999))+1 chercher_table(k%,i%) end_while table%(i%) = k% next i% for i%=1 to 4 for j%=1 to 4 terrain%(i%,j%) = 0 n% = n% + 1 if n%<16 then creer_piece(table%(n%),i%,j%,1,1,254,204,0) next j% next i%
end_sub
sub creer_piece(n%,x%,y%,nh%,nv%,R%,G%,B%) dim_local i%, j%, tx%, ty% pieces%(n%,1) = n% pieces%(n%,2) = x% pieces%(n%,3) = y% pieces%(n%,4) = nh% pieces%(n%,5) = nv% pieces%(n%,6) = R% pieces%(n%,7) = G% pieces%(n%,8) = B% for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%) = n% next j% next i% 2d_fill_color R%,G%,B% tx% = bord%+(x%-1)*unite% ty% = bord%+(y%-1)*unite% 2d_rectangle tx%,ty%,tx%+nh%*unite%,ty%+nv%*unite% tx% = tx% + int((nh%*unite%)/2) ty% = ty% + int((nv%*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) if len(str$(n%)) = 1 print_locate tx%-4,ty%-6 else print_locate tx%-8,ty%-6 end_if print n% end_sub
sub deplacer_piece() dim_local x%, y%, x1%, y1%, cx%, cy%, cx1%, cy1%, p%, nh%, nv%, i%, j%, cnt% x% = mouse_x_left_down(1) y% = mouse_y_left_down(1)
' x1% = mouse_x_left_up(1) ' y1% = mouse_y_left_up(1)
x1% = mouse_x_position(1) y1% = mouse_y_position(1)
cx% = int((x%-bord%+unite%-1)/unite%) cy% = int((y%-bord%+unite%-1)/unite%) cx1% = int((x1%-bord%+unite%-1)/unite%) cy1% = int((y1%-bord%+unite%-1)/unite%) if cx%<1 then cx% = 1 if cx%>4 then cx% = 4 if cx1%<1 then cx1% = 1 if cx1%>4 then cx1% = 4 if cy%<1 then cy% = 1 if cy%>4 then cy% = 5 if cy1%<1 then cy1% = 1 if cy1%>4 then cy1% = 5 p% = terrain%(cx%,cy%) if p%=0 then exit_sub : ' on a cliqué dans un espace vide ? if terrain%(cx1%,cy1%)<>0 then exit_sub : ' on veut tirer vers un espace occupé ? ' chercher si le décalage est possible x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) if cx1%<>cx% : ' décaler horizontalement ? if cx1%>cx% : ' décaler à droite ? if x%<4 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%+nh%,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% item_add 2,str$(p%)+"D" deplacer_droite(p%) end_if end_if else : ' décaler à gauche ! if x%>1 cnt% = 0 for i%=0 to nv%-1 if terrain%(x%-1,y%+i%)=0 then cnt% = cnt% + 1 next i% if cnt%=nv% item_add 2,str$(p%)+"G" deplacer_gauche(p%) end_if end_if end_if else : ' pas de décalage horizontal ! if cy1%<>cy% : ' décaler verticalement ? if cy1%>cy% : ' décaler en bas ? if y%<5 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%+nv%)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% item_add 2,str$(p%)+"B" deplacer_bas(p%) end_if end_if else : ' décaler en haut ! if y%>1 cnt% = 0 for i%=0 to nh%-1 if terrain%(x%+i%,y%-1)=0 then cnt% = cnt% + 1 next i% if cnt%=nh% item_add 2,str$(p%)+"H" deplacer_haut(p%) end_if end_if end_if end_if end_if if terrain%(4,4)=0 cnt% = 0 for i%=1 to 4 for j%=1 to 4 cnt% = cnt% + 1 if cnt%<16 if terrain%(i%,j%)<>cnt% then exit_sub end_if next j% next i% message "BRAVO ! C'est gagné !" end_if end_sub
sub deplacer_gauche(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%-1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%+nh%-1,y%+i%) = 0 next i% effacer_piece(p%) pieces%(p%,2) = pieces%(p%,2) - 1 dessiner_piece(p%) end_sub
sub deplacer_haut(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=0 to nv%-1 terrain%(x%+i%,y%+j%-1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%+nv%-1) = 0 next i% effacer_piece(p%) pieces%(p%,3) = pieces%(p%,3) - 1 dessiner_piece(p%) end_sub
sub deplacer_droite(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=nh%-1 to 0 step -1 for j%=0 to nv%-1 terrain%(x%+i%+1,y%+j%) = p% next j% next i% for i%=0 to nv%-1 terrain%(x%,y%+i%) = 0 next i% effacer_piece(p%) pieces%(p%,2) = pieces%(p%,2) + 1 dessiner_piece(p%) end_sub
sub deplacer_bas(p%) dim_local x%, y%, cx%, cy%, nh%, nv%, i%, j% x% = pieces%(p%,2) y% = pieces%(p%,3) nh% = pieces%(p%,4) nv% = pieces%(p%,5) for i%=0 to nh%-1 for j%=nv%-1 to 0 step -1 terrain%(x%+i%,y%+j%+1) = p% next j% next i% for i%=0 to nh%-1 terrain%(x%+i%,y%) = 0 next i% effacer_piece(p%) pieces%(p%,3) = pieces%(p%,3) + 1 dessiner_piece(p%) end_sub
sub effacer_piece(p%) dim_local tx%, ty% tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color 102,0,0 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% end_sub
sub dessiner_piece(p%) dim_local tx%, ty% tx% = bord%+(pieces%(p%,2)-1)*unite% ty% = bord%+(pieces%(p%,3)-1)*unite% 2d_fill_color pieces%(p%,6), pieces%(p%,7), pieces%(p%,8) 2d_rectangle tx%,ty%,tx%+pieces%(p%,4)*unite%,ty%+pieces%(p%,5)*unite% tx% = tx% + int((pieces%(p%,4)*unite%)/2) ty% = ty% + int((pieces%(p%,5)*unite%)/2) 2d_circle tx%,ty%,int(unite%/5) if len(str$(p%)) = 1 print_locate tx%-4,ty%-6 else print_locate tx%-8,ty%-6 end_if print p% end_sub
sub defaire() dim_local s$, p%, d$, d% s$ = item_read$(2,count(2)) item_delete 2,count(2) d$ = right$(s$,1) p% = val(left$(s$,len(s$)-1)) d% = instr("GHDB",d$) select d% case 1: ' gauche deplacer_droite(p%) case 2: ' haut deplacer_bas(p%) case 3: ' droite deplacer_gauche(p%) case 4: ' bas deplacer_haut(p%) end_select end_sub | |
| | | Contenu sponsorisé
| Sujet: Re: Le jeu de Taquin | |
| |
| | | | Le jeu de Taquin | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |