jjn4
Nombre de messages : 2703 Date d'inscription : 13/09/2009
| Sujet: Tangram Sam 20 Jan 2024 - 18:11 | |
| Et voici un nouveau jeu pour vous distraire. Ah, le tangram, vous connaissez, bien sûr ? Trop simple, pensez-vous ? Des fois, oui, et d'autres fois, pas vraiment ! Essayez donc, vous m'en direz des nouvelles ! Pour le télécharger, soit par le webdav jjn4, soit individuellement (et avec raccourci), par le lien suivant : https://kdrive.infomaniak.com/app/share/845078/cb44dbe3-4811-48b2-a637-d43c55387793Et pour ceux qui veulent voir le listing de plus près : - Code:
-
rem ' Tangram - par jjn4 - 29/12/2023 ========================================= dim DSP%(7) : rem Direction des 7 Pièces dim IDS% : rem Indice de Déplacement de la Souris dim NPP$(7) : rem Nom des Pièces de Présentation dim NPS%(7) : rem Numéro de la Pièce contenue dans le Sprite dim NSC% : rem Numéro du Sprite Choisi dim PAS% : rem Paramètre d`Activation du Son dim PIX% , PIY% : rem Position de l`image par rapport à la Souris dim PPX%(7) , PPY%(7) : rem Position des Pièces de présentation en X et Y dim PSX%(7) , PSY%(7) : rem Position du Sprite en X et Y dim TDPX%(34) , TDPY%(34) : rem Tableau complet des Dimensions des Pièces XY dim TP$ : rem Titre du Programme dim TPU% : rem Type de Pièce Utilisée dim V1M% , V2M% , V3M% , V4M% : rem Variables à utilisation Multiple TP$=" TANGRAM - par jjn4 - Ver:150124.1.0" label clic , close , down , up , move
rem Préparations du jeu ======================================================= width 0,1365 : height 0,720 : caption 0,TP$ : color 0,220,200,240 on_close 0,close for V1M% = 1 to 7 : read NPP$(V1M%) : next V1M% for V1M% = 1 to 7 : read PPX%(V1M%) : read PPY%(V1M%) : next V1M% for V1M% = 1 to 34 : read TDPX%(V1M%) : read TDPY%(V1M%) : next V1M% form 40 : rem Cache de départ width 40,1365 : height 40,720 : caption 40," Préparation du jeu" picture 45 : rem Image de départ parent 45,40 : full_space 45 if file_exists("Cache.jpg")=1 file_load 45,"Cache.jpg" end_if create_hide picture 55 : rem Matériel servant au travail de l`ordinateur font_bold 55 font_size 55,14 font_name 55,"Arial" font_color 55,255,255,255 print_target_is 55 image 57 : rem Image servant à faire des copier-coller des titres create_show
rem Affichage de la façade ==================================================== picture 100 : rem Support de la fusion des images left 100,20 : top 100,50 : width 100,1050 : height 100,600 color 100,220,200,240 picture 110 : rem Support des modèles left 110,50 : top 110,100 : width 110,640 : height 110,540 if file_exists("Début.jpg")=1 file_load 110,"Début.jpg" end_if scene2d 120 : rem support du jeu left 120,20 : top 120,50 : width 120,1050 : height 120,600 hide 120 : pause 20 : sprite_target_is 120 fusion() : on_mouse_down 120,down : on_mouse_up 120,up inactive 120 for V1M% = 1 to 7 : rem Pièces du jeu V2M%=V1M%+129 : ' N° 130 à 136 sprite V2M% next V1M% create_hide for V1M% = 1 to 7 : rem Détection de la transparence des sprites V2M%=V1M%+139 : ' N° 140 à 146 picture V2M% debut(V1M%) next V1M% create_show sprite 150 : rem Marque de rotation sur la pièce if file_exists("Coche.bmp")=1 sprite_file_load 150,"Coche.bmp" end_if sprite_hide 150 picture 160 : rem Panneau de vérification des résultats hide 160 : width 160,640 : height 160,540 panel 190 : rem Base des boutons ------------------------------------------- left 190,1080 : top 190,379 width 190,264 : height 190,297 color 190,220,200,240 inactive 190 rem Boutons de rotation ---------------------------------------------------- for V1M% = 1 to 2 V2M%= V1M%*10+190 : ' N° 200 et 210 button_picture V2M% parent V2M%,190 button_picture_target_is_object left V2M%,(V1M%-1)*93+5 : top V2M%,5 width V2M%,83 : height V2M%,65 button_picture_target_is_picture width V2M%,79 : height V2M%,61 width 55,79 : height 55,61 if file_exists("Bouton-SAM"+str$(V1M%)+".jpg")=1 file_load 55,"Bouton-SAM"+str$(V1M%)+".jpg" end_if 2d_target_is 55 2d_image_copy 57,0,0,78,60 2d_target_is V2M% 2d_image_paste 57,0,0 on_click V2M%,clic next V1M% rem Boutons de gestion du son ---------------------------------------------- for V1M% = 1 to 2 V2M%=V1M%*10+210 : ' N° 220 et 230 button_picture V2M% parent V2M%,190 button_picture_target_is_object left V2M%,186 : top V2M%,5 width V2M%,68 : height V2M%,65 button_picture_target_is_picture width V2M%,64 : height V2M%,61 width 55,64 : height 55,61 if file_exists("Son-"+str$(V1M%)+".jpg")=1 file_load 55,"Son-"+str$(V1M%)+".jpg" end_if 2d_target_is 55 2d_image_copy 57,0,0,63,60 2d_target_is V2M% 2d_image_paste 57,0,0 on_click V2M%,clic next V1M% hide 220 rem Boutons de commande ---------------------------------------------------- for V1M% = 1 to 3 : ' Boutons inactifs V2M%=V1M%*10+224 : ' N° 234, 244 et 254 panel V2M% parent V2M%,190 left V2M%,5 : top V2M%,(V1M%-1)*74+75 width V2M%,254 : height V2M%,69 V2M%=V1M%*10+226 : ' N° 236, 246 et 256 picture V2M% parent V2M%,V2M%-2 full_space V2M% if file_exists("Bouton-long-i.jpg")=1 file_load V2M%,"Bouton-long-i.jpg" end_if font_name V2M%,"Arial" : font_size V2M%,18 font_color V2M%,255,255,255 2d_target_is V2M% 2d_fill_color 185,125,225 print_target_is V2M% select V1M% case 1 : print_locate 44,18 : print "Recommencer" case 2 : print_locate 48,18 : print "J'abandonne" case 3 : print_locate 77,18 : print "J'ai fini" end_select V2M%=V1M%*10+230 : ' N° 240, 250 et 260 button_picture V2M% : ' Boutons actifs parent V2M%,190 button_picture_target_is_object left V2M%,5 : top V2M%,(V1M%-1)*74+75 width V2M%,254 : height V2M%,69 button_picture_target_is_picture width V2M%,250 : height V2M%,65 width 55,270 : height 55,71 font_name 55,"Arial" : font_size 55,18 if file_exists("Bouton-long.jpg")=1 file_load 55,"Bouton-long.jpg" end_if 2d_target_is 55 2d_fill_color 128,56,190 print_target_is 55 select V1M% case 1 : print_locate 44,18 : print "Recommencer" case 2 : print_locate 48,18 : print "J'abandonne" case 3 : print_locate 77,18 : print "J'ai fini" end_select 2d_image_copy 57,0,0,249,64 2d_target_is V2M% 2d_image_paste 57,0,0 on_click V2M%,clic hide V2M% next V1M% list 300 : rem Liste des jeux et zone de texte ----------------------------- left 300,1080 : top 300,5 : width 300,260 : height 300,369 font_size 300,24 : font_color 300,0,0,255 : color 300,220,200,240 if file_exists("Liste-tangram.txt")=1 file_load 300,"Liste-tangram.txt" end_if on_click 300,clic shape 310 : rem Base de la zone de texte shape_rectangle_rounded 310 left 310,20 : top 310,10 : width 310,1000 : height 310,40 color 310,130,60,195 alpha 320 : rem Texte des commentaires left 320,30 : top 320,16 font_size 320,18 : color 320,130,60,195 font_name 320,"Arial" : font_color 320,255,255,255 caption 320,"Choisissez un des modèles dans la liste de droite" button_picture 330 : rem Bouton de cache du coche button_picture_target_is_object left 330,1030 : top 330,10 : width 330,40 : height 330,40 button_picture_target_is_picture width 330,36 : height 330,36 : width 55,36 : height 55,36 color 55,170,65,235 : 2d_target_is 55 : 2d_fill_color 170,65,235 font_name 55,"Webdings" : font_size 55,30 print_locate -1,-4 : print chr$(97) 2d_image_copy 57,0,0,35,35 2d_target_is 330 : 2d_image_paste 57,0,0 : on_click 330,clic panel 350 : rem Base du commentaire final -------------------------------- hide 350 : left 350,700 : top 350,65 : width 350,360 : height 350,600 picture 360 : rem Image finale parent 360,350 : full_space 360 : on_click 360,clic sound 400 hide 40 midi_on midi_volume 127 end : ' Début des routines ====================================================
sub aband() : rem Le joueur abandonne ========================================= dim_local v1ab% if pas%=0 midi_instrument 115 midi_play 90,10 end_if for v1ab% = 1 to 7 debut(v1ab%) next v1ab% inactive 120 sprite_hide 150 inactive 190 hide 240 hide 250 hide 260 active 300 caption 320,"Choisissez un des modèles dans la liste de droite" end_sub
sub choix() : rem Choix du modèle ============================================= dim_local v1ch% , v$ if item_index(300)>0 if file_exists(item_index$(300)+".jpg")=1 file_load 110,item_index$(300)+".jpg" end_if show 100 : show 110 hide 120 : pause 20 : sprite_target_is 120 fusion() for v1ch% = 1 to 7 debut(v1ch%) next v1ch% show 120 active 120 active 190 v$=" - Remplissez entièrement le modèle avec toutes les pièces du Tangram" caption 320,item_index$(300)+v$ end_if end_sub
clic: : rem Gestion de tous les on-click ====================================== inactive 0 select number_click case 200 : sens_inverse() case 210 : sens_montre() case 220 : son() case 230 : son() case 240 if pas%=0 midi_instrument 115 midi_play 90,10 end_if for V1M% = 1 to 7 debut(V1M%) next V1M% sprite_hide 150 NSC%=0 case 250 : aband() : NSC%=0 case 260 : fini() case 300 : sprite_hide 150 : choix() case 330 : sprite_hide 150 : NSC%=0 case 360 hide 350 if active(190)=0 active 300 caption 320,"Choisissez un des modèles dans la liste de droite" end_if NSC%=0 end_select active 0 return
close: : rem Fermeture du programme =========================================== midi_off if file_exists("Provi.bmp")=1 file_delete "Provi.bmp" end_if return
rem DATAS ===================================================================== data "03" , "07" , "12" , "33" , "17" , "21" , "25" data 700,20,800,20,680,250,920,250,700,370,850,370,720,500 data 198,198,140,280,198,198,280,140,198,198,140,280,198,198,280,140 data 140,140,99,198,140,140,198,99,140,140,99,198,140,140,198,99 data 99,99,70,140,99,99,140,70,99,99,70,140,99,99,140,70 data 210,70,198,99,70,198,99,198,210,70,99,198,70,210,198,99 data 99,99,140,140 rem Fin des datas
sub debut(qp%) : rem Mise des pièces dans la réserve de droite ================ rem qp% = Quelle Pièce dim_local qn% , qq% qn%=qp%+129 if file_exists("Piece-"+NPP$(qp%)+".bmp")=1 sprite_file_load qn%,"Piece-"+NPP$(qp%)+".bmp" end_if sprite_position qn%,PPX%(qp%),PPY%(qp%) if file_exists("Piece-"+NPP$(qp%)+".bmp")=1 file_load qn%+10,"Piece-"+NPP$(qp%)+".bmp" end_if NPS%(qp%)=val(NPP$(qp%)) PSX%(qp%)=PPX%(qp%) PSY%(qp%)=PPY%(qp%) qq%=val(NPP$(qp%)) DSP%(qp%)=qq%-int((qq%-1)/8)*8 end_sub
down: : rem Mise en marche du sprite à partir du clic souris ================== quel() if NSC%>0 PIX%=mouse_x_position(120) PIY%=mouse_y_position(120) if (PIX%>PSX%(NSC%)) and (PIX%<(PSX%(NSC%)+TDPX%(NPS%(NSC%))-1)) if (PIY%>PSY%(NSC%)) and (PIY%<(PSY%(NSC%)+TDPY%(NPS%(NSC%))-1)) PIX%=PIX%-PSX%(NSC%) PIY%=PIY%-PSY%(NSC%) V1M%=color_pixel_red(NSC%+139,PIX%,PIY%) V2M%=color_pixel_green(NSC%+139,PIX%,PIY%) V3M%=color_pixel_blue(NSC%+139,PIX%,PIY%) if V1M%>0 or V2M%>0 or V3M%>0 IDS%=1 inactive 300 show 240 show 250 show 260 hide 350 on_mouse_move 120,move end_if end_if end_if end_if return
sub fini() : rem Le joueur déclare avoir fini ================================= dim_local v1fi% , v2fi% , rf% , ib% , v3fi$ hide 240 hide 250 hide 260 inactive 190 if pas%=0 midi_instrument 115 midi_play 90,10 end_if if file_exists("Vérif.jpg")=1 file_load 360,"Vérif.jpg" end_if show 350 2d_target_is 0 2d_image_copy 57,50,100,690,640 2d_target_is 160 2d_image_paste 57,0,0 for v1fi% = 5 to 535 step 5 for v2fi% = 5 to 635 step 5 ib%=0 : ' Détection de blanc sur le point if color_pixel_red(160,v2fi%,v1fi%)=255 if color_pixel_green(160,v2fi%,v1fi%)=255 if color_pixel_blue(160,V2fi%,v1fi%)=255 ib%=1 end_if end_if end_if if ib%=1 : ' Détection de blanc autour du point if color_pixel_red(160,v2fi%-1,v1fi%)=255 if color_pixel_green(160,v2fi%+1,v1fi%)=255 if color_pixel_blue(160,v2fi%,v1fi%-1)=255 if color_pixel_green(160,v2fi%,v1fi%+1)=255 rf%=rf%+1 end_if end_if end_if end_if end_if next v2fi% next v1fi% if rf%=0 : ' Le joueur est victorieux if file_exists("Bravo.jpg")=1 file_load 360,"Bravo.jpg" end_if if file_exists("Bravo.mp3")=1 file_load 400,"Bravo.mp3" end_if v3fi$=" - Bravo, c'est excellent - " v3fi$=v3fi$+"Cliquez sur le canard pour une nouvelle partie" caption 320,item_index$(300)+v3fi$ inactive 120 inactive 190 else : ' Le joueur n'a pas fini if file_exists("Blanc.jpg")=1 file_load 360,"Blanc.jpg" end_if if file_exists("Blanc.mp3")=1 file_load 400,"Blanc.mp3" end_if end_if if PAS%=0 play 400 if rf%=0 pause 4000 else pause 600 end_if end_if if rf%>0 active 190 end_if end_sub
sub fusion() : rem Fusion du modèle et du fond ================================ 2d_target_is 0 2d_image_copy 57,20,50,1070,650 2d_target_is 100 2d_image_paste 57,0,0 file_save 100,"Provi.bmp" hide 100 : hide 110 file_load 120,"Provi.bmp" show 120 end_sub
sub marque() : rem Imposition d`une marque sur la pièce ======================= dim_local v1ma% , v2ma% v1ma%=PSX%(NSC%)+int((TDPX%(NPS%(NSC%))-40)/2) v2ma%=PSY%(NSC%)+int((TDPY%(NPS%(NSC%))-40)/2) select DSP%(NSC%) case 1 : v1ma%=v1ma%-(33-TPU%*7) : v2ma%=v2ma%+(33-TPU%*7) case 3 : v1ma%=v1ma%-(33-TPU%*7) : v2ma%=v2ma%-(33-TPU%*7) case 5 : v1ma%=v1ma%+(33-TPU%*7) : v2ma%=v2ma%-(33-TPU%*7) case 7 : v1ma%=v1ma%+(33-TPU%*7) : v2ma%=v2ma%+(33-TPU%*7) end_select sprite_position 150,v1ma%,v2ma% sprite_show 150 end_sub
move: : rem Mouvement du sprite sur la grille ================================= off_mouse_move 120 V1M%=mouse_x_position(120) V2M%=mouse_y_position(120) if ((V1M%-PIX%)>2) and ((V1M%-PIX%+TDPX%(NPS%(NSC%)))<1048) if ((V2M%-PIY%)>2) and ((V2M%-PIY%+int(TDPX%(NPS%(NSC%))/2))<598) sprite_position NSC%+129,V1M%-PIX%,V2M%-PIY% V3M%=(V1M%-PIX%)+int((TDPX%(NPS%(NSC%))-40)/2) V4M%=(V2M%-PIY%)+int((TDPY%(NPS%(NSC%))-40)/2) select DSP%(NSC%) case 1 : V3M%=V3M%-(33-TPU%*7) : V4M%=V4M%+(33-TPU%*7) case 3 : V3M%=V3M%-(33-TPU%*7) : V4M%=V4M%-(33-TPU%*7) case 5 : V3M%=V3M%+(33-TPU%*7) : V4M%=V4M%-(33-TPU%*7) case 7 : V3M%=V3M%+(33-TPU%*7) : V4M%=V4M%+(33-TPU%*7) end_select sprite_position 150,V3M%,V4M% end_if end_if on_mouse_move 120,move return
sub quel() : rem Quelle pièce est cliquée ===================================== dim_local v1qu% , qx% , qy% , cr% , cg% , cb% qx%=mouse_x_position(120) qy%=mouse_y_position(120) for v1qu% = 7 to 1 step -1 if qx%>PSX%(v1qu%) and qx%<PSX%(v1qu%)+TDPX%(NPS%(v1qu%)) if qy%>PSY%(v1qu%) and qy%<PSY%(v1qu%)+TDPY%(NPS%(v1qu%)) cr%=color_pixel_red(v1qu%+139,qx%-PSX%(v1qu%),qy%-PSY%(v1qu%)) cg%=color_pixel_green(v1qu%+139,qx%-PSX%(v1qu%),qy%-PSY%(v1qu%)) cb%=color_pixel_blue(v1qu%+139,qx%-PSX%(v1qu%),qy%-PSY%(v1qu%)) if cr%>0 or cg%>0 or cb%>0 NSC%=v1qu% TPU%=int(((NPS%(NSC%))-1)/8) if TPU%=3 TPU%=TPU%+2 end_if exit_for end_if end_if end_if next v1qu% end_sub
sub sens_inverse() : rem Rotation pièce sens inverse de montre ================ dim_local v1si% , v2si$ if NSC%>0 v1si%=int(((NPS%(NSC%))-1)/8) if v1si%<4 if v1si%=int((NPS%(NSC%)-2)/8) NPS%(NSC%)=NPS%(NSC%)-1 else NPS%(NSC%)=(v1si%+1)*8 end_if else if even(NPS%(NSC%))=0 NPS%(NSC%)=34 DSP%(NSC%)=2 else NPS%(NSC%)=33 DSP%(NSC%)=1 end_if end_if TPU%=v1si% if TPU%=3 TPU%=TPU%+2 end_if v2si$=str$(NPS%(NSC%)) if len(v2si$)<2 v2si$="0"+v2si$ end_if if file_exists("Piece-"+v2si$+".bmp")=1 sprite_file_load NSC%+129,"Piece-"+v2si$+".bmp" end_if sprite_position NSC%+129,PSX%(NSC%),PSY%(NSC%) if file_exists("Piece-"+v2si$+".bmp")=1 file_load NSC%+139,"Piece-"+v2si$+".bmp" end_if if v1si%<4 DSP%(NSC%)=DSP%(NSC%)-1 if DSP%(NSC%)<1 DSP%(NSC%)=8 end_if end_if marque() end_if end_sub
sub sens_montre() : rem Rotation pièce sens aiguilles d`une montre ============ dim_local v1sm% , v2sm$ if NSC%>0 v1sm%=int(((NPS%(NSC%))-1)/8) if v1sm%<4 if v1sm%=int(NPS%(NSC%)/8) NPS%(NSC%)=NPS%(NSC%)+1 else NPS%(NSC%)=(v1sm%+1)*8-7 end_if else if even(NPS%(NSC%))=0 NPS%(NSC%)=34 DSP%(NSC%)=2 else NPS%(NSC%)=33 DSP%(NSC%)=1 end_if end_if TPU%=v1sm% if TPU%=3 TPU%=TPU%+2 end_if v2sm$=str$(NPS%(NSC%)) if len(v2sm$)<2 v2sm$="0"+v2sm$ end_if if file_exists("Piece-"+v2sm$+".bmp")=1 sprite_file_load NSC%+129,"Piece-"+v2sm$+".bmp" end_if sprite_position NSC%+129,PSX%(NSC%),PSY%(NSC%) if file_exists("Piece-"+v2sm$+".bmp")=1 file_load NSC%+139,"Piece-"+v2sm$+".bmp" end_if if v1sm%<4 DSP%(NSC%)=DSP%(NSC%)+1 if DSP%(NSC%)>8 DSP%(NSC%)=1 end_if end_if marque() end_if end_sub
sub son() : rem Gestion du son ================================================ if number_click=220 hide 220 show 230 PAS%=0 else hide 230 show 220 PAS%=1 end_if end_sub
up: : rem Relâchement de la souris sur la grille ============================== if IDS%=1 off_mouse_move 120 PSX%(NSC%)=mouse_x_position(120) PSX%(NSC%)=PSX%(NSC%)-PIX% V1M%=PSX%(NSC%) PSY%(NSC%)=mouse_y_position(120) PSY%(NSC%)=PSY%(NSC%)-PIY% V2M%=PSY%(NSC%) IDS%=0 PSX%(NSC%)=int(PSX%(NSC%)/10)*10 PSY%(NSC%)=int(PSY%(NSC%)/10)*10 if V1M%>(PSX%(NSC%)+10/2) PSX%(NSC%)=PSX%(NSC%)+10 end_if if V2M%>(PSY%(NSC%)+10/2) PSY%(NSC%)=PSY%(NSC%)+10 end_if if PSX%(NSC%)<2 PSX%(NSC%)=2 end_if if (PSX%(NSC%)+TDPX%(NPS%(NSC%)))>1048 PSX%(NSC%)=1049-TDPX%(NPS%(NSC%)) end_if if PSY%(NSC%)<2 PSY%(NSC%)=2 end_if if (PSY%(NSC%)+TDPY%(NPS%(NSC%)))>598 PSY%(NSC%)=599-TDPY%(NPS%(NSC%)) end_if sprite_position NSC%+129,PSX%(NSC%),PSY%(NSC%) marque() end_if return Bien sûr, ce code ne vous permettra pas d'essayer le programme si vous n'avez pas les fichiers annexes. Amusez-vous bien ! | |
|