' Jeu du Rubik's Cube ' Ecrit en langage PANORAMIC ' Projet coopératif ' Team : Minibug, Jack, Mindstorm, Silverman, Papydall, Marc ' Octobre 2022 dim original%,sauvegarde% dim posX%,posY%,posZ% dim Orientation_X%,Orientation_Y%,Orientation_Z% dim i%,obj%,Angle_rot%,Angle%,x,y,z,Orientation_%,pos%,rot%,axe$,face$,tmp%,vitesse_rotation% dim objX,objY,objZ dim axe_new,face_new,axe_old,face_old dim nombre_de_rotation% dim x_positionCamera%, y_positionCamera%, z_positionCamera%, distanceCamera% dim x%, y%, x_souris%, y_souris%, null%, r%, v%, b% label orienterCube, clic, deplacerCommandes, afficherApropos, fermerApropos label melanger, reinitialiser, aide, ascenseurFenetreAide, redim0, redim55, quitter data 77,77,205,3,0,0,2,0,10,0,0,0,3,0,0,0,61,61,189,3,0,0,62,61,10,0,0,0,3,0,0,0 data 255,175,163,0,0,0,0,160,16,0,0,0,67,117,98,101,49,95,97,117,118,0,32,160,24 data 0,0,0,17,0,9,0,0,0,255,255,255,18,0,9,0,0,0,255,255,255,80,160,14,0,0,0,48 data 0,8,0,0,0,0,0,64,160,14,0,0,0,48,0,8,0,0,0,80,0,48,160,24,0,0,0,17,0,9,0,0 data 0,48,48,48,18,0,9,0,0,0,48,48,48,16,160,24,0,0,0,17,0,9,0,0,0,0,0,0,18,0,9 data 0,0,0,0,0,0,0,161,8,0,0,0,3,0,0,162,33,0,0,0,0,163,19,0,0,0,67,117,98,101 data 49,95,97,117,46,98,109,112,0,81,163,8,0,0,0,0,1,0,1,10,0,0,0,0,0,128,63,0 data 64,0,3,0,0,67,117,98,101,49,0,0,65,244,2,0,0,96,65,54,0,0,0,0,0,128,63,0,0 data 0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,0,0,0,0 data 0,0,0,0,0,0,0,16,65,40,1,0,0,24,0,0,0,128,191,0,0,128,63,0,0,128,191,0,0,128 data 191,0,0,128,191,0,0,128,191,0,0,128,191,0,0,128,63,0,0,128,63,0,0,128,191,0 data 0,128,191,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,191,0,0,128,63,0,0,128 data 191,0,0,128,191,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,191,0,0 data 128,63,0,0,128,191,0,0,128,63,0,0,128,191,0,0,128,191,0,0,128,63,0,0,128,191 data 0,0,128,191,0,0,128,191,0,0,128,191,0,0,128,191,0,0,128,191,0,0,128,191,0,0 data 128,191,0,0,128,63,0,0,128,63,0,0,128,191,0,0,128,63,0,0,128,63,0,0,128,191 data 0,0,128,191,0,0,128,63,0,0,128,191,0,0,128,191,0,0,128,63,0,0,128,63,0,0,128 data 63,0,0,128,191,0,0,128,63,0,0,128,63,0,0,128,191,0,0,128,63,0,0,128,191,0,0 data 128,191,0,0,128,63,0,0,128,191,0,0,128,191,0,0,128,63,0,0,128,63,0,0,128,63 data 0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,191,0,0,128,63,0,0,128 data 63,0,0,128,191,0,0,128,63,64,65,200,0,0,0,24,0,59,70,125,62,233,94,64,63,59 data 70,125,62,58,252,1,63,193,140,128,62,59,152,64,63,28,198,128,62,40,22,1,63 data 16,223,110,59,233,94,64,63,16,223,110,59,58,252,1,63,28,139,127,62,135,41 data 128,63,52,17,255,62,40,22,1,63,193,140,128,62,254,70,1,63,55,172,255,62,186 data 95,64,63,28,198,128,62,55,225,131,62,58,47,255,62,254,70,1,63,55,172,255,62 data 135,41,128,63,42,144,0,63,84,119,64,63,58,47,255,62,59,152,64,63,42,144,0,63 data 173,113,1,63,28,139,127,62,186,95,64,63,237,16,127,63,11,110,1,63,52,17,255 data 62,55,225,131,62,97,235,63,63,11,110,1,63,209,149,63,63,84,119,64,63,237,16 data 127,63,151,147,64,63,209,149,63,63,173,113,1,63,97,235,63,63,151,147,64,63 data 32,65,200,0,0,0,12,0,22,0,20,0,13,0,6,0,13,0,15,0,22,0,6,0,4,0,5,0,1,0,6,0,1 data 0,0,0,4,0,6,0,18,0,7,0,3,0,6,0,3,0,10,0,18,0,6,0,6,0,16,0,9,0,6,0,9,0,12,0,6 data 0,6,0,21,0,23,0,19,0,6,0,19,0,17,0,21,0,6,0,11,0,14,0,2,0,6,0,2,0,8,0,11,0,6 data 0,48,65,42,0,0,0,67,117,98,101,49,95,97,117,118,0,12,0,0,0,1,0,2,0,3,0,4,0,5 data 0,6,0,7,0,8,0,9,0,10,0,11,0,80,65,54,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1 data 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 ' n° grid original%=1 sauvegarde%=8 ' positions dans grid posX%=3 posY%=4 posZ%=5 Orientation_X%=9 Orientation_Y%=10 Orientation_Z%=11 vitesse_rotation%=3 creation_scene() creerPanneauCommande() bandeauTitre() creerMenuPop() creerApropos() creerAide() active 0 end ' ------------------------------------------------------------------------------ sub creation_scene() ' créer la fenêtre principale width 0,width(0) - width_client(0) + 640 height 0,height(0) - height_client(0) + 500 color 0,30,30,30 ' centrer la fenêtre principale sur l'écran top 0,(screen_y - height(0))/2 left 0,(screen_x - width(0))/2 on_resize 0,redim0 inactive 0 ' données stockées dans un grid create_hide grid original% grid_row original%,27 : grid_row_fixed original%,0 grid_column original%,11 : grid_column_fixed original%,0 hide original% grid sauvegarde% :' grid de sauvegarde grid_row sauvegarde%,27 : grid_row_fixed sauvegarde%,0 grid_column sauvegarde%,11 : grid_column_fixed sauvegarde%,0 hide sauvegarde% create_show degrees ' créer la scène 3d scene3d 2 width 2,500 height 2,500 color 2,30,30,30 ' placement de la caméra distanceCamera% = 12 x_positionCamera% = 54 y_positionCamera% = 25 cam_x_position cos(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera% cam_z_position sin(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera% cam_y_position sin(y_positionCamera%) * distanceCamera% creerFichier3ds() ' on crée 27 cubes FOR obj%=1 TO 27 3D_MESH obj% 3D_LOAD_OBJECT obj%,"M_CUBE.3DS" NEXT obj% ' supprimer le fichier temporaire 3ds crée sur le disque if file_exists("M_CUBE.3DS") = 1 file_delete "M_CUBE.3DS" end_if creerTextureVierge() ' IMAGE pour transfert de la texture sur les cubes image 47 collerGommettes() ' X axe rouge, sens de rotation anti-horaire ' Y axe vert, sens de rotation horaire ' Z axe bleu, sens de rotation horaire ' placement et données des objets obj%=0 for x=-2 to 2 step 2 for y=-2 to 2 step 2 for z=-2 to 2 step 2 obj%=obj%+1 ' placer les cubes 3d_position obj%,x,y,z ' position et orientation mémorisées dans un grid ' grid_write original%,obj%,1,str$(obj%) grid_write original%,obj%,posX%,str$(x) grid_write original%,obj%,posY%,str$(y) grid_write original%,obj%,posZ%,str$(z) grid_write original%,obj%,Orientation_X%,"1" grid_write original%,obj%,Orientation_Y%,"2" grid_write original%,obj%,Orientation_Z%,"3" next z next y next x ' pointeur pour reset 3d_cube 28,0.0000001 on_mouse_down 2,orienterCube end_sub ' ------------------------------------------------------------------------------ sub creerFichier3ds() dim_local ptr%,octet% filebin_open_write 50,"m_cube.3ds" for ptr% = 1 to 973 read octet% filebin_write 50,octet% next ptr% filebin_close 50 end_sub ' ------------------------------------------------------------------------------ sub creerTextureVierge() ' creer picture caché create_hide picture 45 create_show width 45,512 height 45,512 color 45,0,0,0 2d_target_is 45 ' dessiner empreinte pour gommette colorée 2d_fill_color 20,20,20 2d_pen_color 20,20,20 2d_rectangle 0,0,110,106 2d_fill_color 0,0,0 2d_pen_color 0,0,0 ' coin supérieur gauche de la gommette 2d_line 0,0,8,0 2d_line 0,1,5,1 2d_line 0,2,3,2 2d_line 0,3,2,3 2d_line 0,4,2,4 2d_line 0,4,0,8 ' coin supérieur droit de la gommette 2d_line 102,0,110,0 2d_line 105,1,110,1 2d_line 107,2,110,2 2d_line 108,3,110,3 2d_line 108,4,110,4 2d_line 109,5,109,8 ' coin inférieur droit de la gommette 2d_line 109,98,109,101 2d_line 108,101,110,107 2d_line 108,102,110,108 2d_line 107,103,110,109 2d_line 105,104,110,110 2d_line 102,105,110,111 ' coin inférieur gauche de la gommette 2d_line 0,98,0,101 2d_line 0,101,2,101 2d_line 0,102,2,102 2d_line 0,103,3,103 2d_line 0,104,5,104 2d_line 0,105,8,105 ' mise en memoire de l'empreinte image 46 2d_image_copy 46,0,0,110,106 ' copier l'empreinte des gommettes sur la texture (1 par face du cube) 2d_image_paste 46,137,137 :' emplacement gommette rouge 2d_image_paste 46,10,137 :' emplacement gommette verte 2d_image_paste 46,265,137 :' emplacement gommette bleue 2d_image_paste 46,392,137 :' emplacement gommette orange 2d_image_paste 46,137,10 :' emplacement gommette blanche 2d_image_paste 46,138,264 :' emplacement gommette jaune ' mise en mise de la texture 2d_image_copy 46,0,0,512,512 end_sub ' ------------------------------------------------------------------------------ sub collerGommettes() ' colorier les gommettes puis appliquer la texture sur le cube 1 2d_image_paste 46,0,0 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 190,190,216,43,44 :' face rouge 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 1,47 ' texture cube 2 2d_image_paste 46,0,0 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 190,190,216,43,44 :' face rouge 2d_image_copy 47,0,0,511,511 3D_image_texture 2,47 ' texture cube 3 2d_image_paste 46,0,0 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 190,190,216,43,44 :' face rouge 2d_image_copy 47,0,0,511,511 3D_image_texture 3,47 ' texture cube 4 2d_image_paste 46,0,0 2d_flood 190,190,216,43,44 :' face rouge 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 4,47 ' texture cube 5 2d_image_paste 46,0,0 2d_flood 190,190,216,43,44 :' face rouge 2d_image_copy 47,0,0,511,511 3D_image_texture 5,47 ' texture cube 6 2d_image_paste 46,0,0 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 190,190,216,43,44 :' face rouge 2d_image_copy 47,0,0,511,511 3D_image_texture 6,47 ' texture cube 7 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 190,190,216,43,44 :' face rouge 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 7,47 ' texture cube 8 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 190,190,216,43,44 :' face rouge 2d_image_copy 47,0,0,511,511 3D_image_texture 8,47 ' texture cube 9 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 190,190,216,43,44 :' face rouge 2d_image_copy 47,0,0,511,511 3D_image_texture 9,47 ' texture cube 10 2d_image_paste 46,0,0 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 10,47 ' texture cube 11 2d_image_paste 46,0,0 2d_flood 190,325,255,255,37 :' face jaune 2d_image_copy 47,0,0,511,511 3D_image_texture 11,47 ' texture cube 12 2d_image_paste 46,0,0 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 190,325,255,255,37 :' face jaune 2d_image_copy 47,0,0,511,511 3D_image_texture 12,47 ' texture cube 13 2d_image_paste 46,0,0 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 13,47 ' texture cube 15 2d_image_paste 46,0,0 2d_flood 320,190,42,75,183 :' face bleue 2d_image_copy 47,0,0,511,511 3D_image_texture 15,47 ' texture cube 16 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 16,47 ' texture cube 17 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_image_copy 47,0,0,511,511 3D_image_texture 17,47 ' texture cube 18 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 320,190,42,75,183 :' face bleue 2d_image_copy 47,0,0,511,511 3D_image_texture 18,47 ' texture cube 19 2d_image_paste 46,0,0 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 450,190,255,127,0 :' face orange 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 19,47 ' texture cube 20 2d_image_paste 46,0,0 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 450,190,255,127,0 :' face orange 2d_image_copy 47,0,0,511,511 3D_image_texture 20,47 ' texture cube 21 2d_image_paste 46,0,0 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 190,325,255,255,37 :' face jaune 2d_flood 450,190,255,127,0 :' face orange 2d_image_copy 47,0,0,511,511 3D_image_texture 21,47 ' texture cube 22 2d_image_paste 46,0,0 2d_flood 450,190,255,127,0 :' face orange 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 22,47 ' texture cube 23 2d_image_paste 46,0,0 2d_flood 450,190,255,127,0 :' face orange 2d_image_copy 47,0,0,511,511 3D_image_texture 23,47 ' texture cube 24 2d_image_paste 46,0,0 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 450,190,255,127,0 :' face orange 2d_image_copy 47,0,0,511,511 3D_image_texture 24,47 ' texture cube 25 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 450,190,255,127,0 :' face orange 2d_flood 60,180,42,196,75 :' face verte 2d_image_copy 47,0,0,511,511 3D_image_texture 25,47 ' texture cube 26 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 450,190,255,127,0 :' face orange 2d_image_copy 47,0,0,511,511 3D_image_texture 26,47 ' texture cube 27 2d_image_paste 46,0,0 2d_flood 190,60,255,255,255 :' face blanche 2d_flood 320,190,42,75,183 :' face bleue 2d_flood 450,190,255,127,0 :' face orange 2d_image_copy 47,0,0,511,511 3D_image_texture 27,47 end_sub ' ------------------------------------------------------------------------------ sub rotation_couronne(Angle_rot%,axe$,face$) if mod(Angle_rot%,360)=0 exit_sub else Angle_rot%=mod(Angle_rot%,360) end_if axe$=lower$(axe$) if axe$<>"x" and axe$<>"y" and axe$<>"z" then exit_sub if axe$="x" then pos%=posX% if axe$="y" then pos%=posY% if axe$="z" then pos%=posZ% if face$<>"-2" and face$<>"0" and face$<>"2" then exit_sub Orientation_%=pos%+6 rot%=pos%-2 for Angle%=0 to Angle_rot% step sgn(Angle_rot%)*vitesse_rotation% if Angle%<>0 for obj%=1 to 27 if grid_read$(original%,obj%,pos%)=face$ ' positions objX=val(grid_read$(original%,obj%,posX%)) objY=val(grid_read$(original%,obj%,posY%)) objZ=val(grid_read$(original%,obj%,posZ%)) Matrice_Rotation(objX,objY,objZ,Angle%,rot%) 3d_position obj%,x,y,z ' sens de rotation tmp%=val(grid_read$(original%,obj%,Orientation_X%)) if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%) tmp%=1*sgn(tmp%) else tmp%=val(grid_read$(original%,obj%,Orientation_Y%)) if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%) tmp%=2*sgn(tmp%) else tmp%=val(grid_read$(original%,obj%,Orientation_Z%)) tmp%=3*sgn(tmp%) end_if end_if if Orientation_%=Orientation_X% and abs(tmp%)>1 then tmp%=0-tmp% if Orientation_%=Orientation_Y% and abs(tmp%)=1 then tmp%=0-tmp% if Orientation_%=Orientation_Z% and abs(tmp%)=1 then tmp%=0-tmp% select tmp% case -3: 3d_z_rotate obj%,o3d_z_rotate(obj%)-vitesse_rotation%*sgn(Angle_rot%) case -2: 3d_y_rotate obj%,o3d_y_rotate(obj%)-vitesse_rotation%*sgn(Angle_rot%) case -1: 3d_x_rotate obj%,o3d_x_rotate(obj%)-vitesse_rotation%*sgn(Angle_rot%) case 1 : 3d_x_rotate obj%,o3d_x_rotate(obj%)+vitesse_rotation%*sgn(Angle_rot%) case 2 : 3d_y_rotate obj%,o3d_y_rotate(obj%)+vitesse_rotation%*sgn(Angle_rot%) case 3 : 3d_z_rotate obj%,o3d_z_rotate(obj%)+vitesse_rotation%*sgn(Angle_rot%) end_select end_if next obj% display end_if next Angle% ' mise à jour des données for obj%=1 to 27 if grid_read$(original%,obj%,pos%)=face$ ' positions objX=val(grid_read$(original%,obj%,posX%)) objY=val(grid_read$(original%,obj%,posY%)) objZ=val(grid_read$(original%,obj%,posZ%)) Matrice_Rotation(objX,objY,objZ,Angle_rot%,rot%) grid_write original%,obj%,posX%,str$(x) grid_write original%,obj%,posY%,str$(y) grid_write original%,obj%,posZ%,str$(z) ' sens de rotation tmp%=val(grid_read$(original%,obj%,Orientation_X%)) if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%) tmp%=1*sgn(tmp%) else tmp%=val(grid_read$(original%,obj%,Orientation_Y%)) if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%) tmp%=2*sgn(tmp%) else tmp%=val(grid_read$(original%,obj%,Orientation_Z%)) tmp%=3*sgn(tmp%) end_if end_if if Orientation_%=Orientation_X% and abs(tmp%)>1 then tmp%=0-tmp% if Orientation_%=Orientation_Y% and abs(tmp%)=1 then tmp%=0-tmp% if Orientation_%=Orientation_Z% and abs(tmp%)=1 then tmp%=0-tmp% objX=val(grid_read$(original%,obj%,Orientation_X%)) objY=val(grid_read$(original%,obj%,Orientation_Y%)) objZ=val(grid_read$(original%,obj%,Orientation_Z%)) select tmp% case -3: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%) case -2: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%) case -1: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%) case 1 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%) case 2 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%) case 3 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%) end_select grid_write original%,obj%,Orientation_X%,str$(x) grid_write original%,obj%,Orientation_Y%,str$(y) grid_write original%,obj%,Orientation_Z%,str$(z) end_if next obj% end_sub ' ------------------------------------------------------------------------------ sub rotation_invisible_couronne(Angle_rot%,axe$,face$) if mod(Angle_rot%,360)=0 exit_sub else Angle_rot%=mod(Angle_rot%,360) end_if axe$=lower$(axe$) if axe$<>"x" and axe$<>"y" and axe$<>"z" then exit_sub if axe$="x" then pos%=posX% if axe$="y" then pos%=posY% if axe$="z" then pos%=posZ% if face$<>"-2" and face$<>"0" and face$<>"2" then exit_sub ' Orientation_%=pos%+6 rot%=pos%-2 ' ' mise à jour des données for obj%=1 to 27 if grid_read$(original%,obj%,pos%)=face$ ' ' positions objX=val(grid_read$(original%,obj%,posX%)) objY=val(grid_read$(original%,obj%,posY%)) objZ=val(grid_read$(original%,obj%,posZ%)) Matrice_Rotation(objX,objY,objZ,Angle_rot%,rot%) grid_write original%,obj%,posX%,str$(x) grid_write original%,obj%,posY%,str$(y) grid_write original%,obj%,posZ%,str$(z) ' ' sens de rotation tmp%=val(grid_read$(original%,obj%,Orientation_X%)) if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%) tmp%=1*sgn(tmp%) else tmp%=val(grid_read$(original%,obj%,Orientation_Y%)) if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%) tmp%=2*sgn(tmp%) else tmp%=val(grid_read$(original%,obj%,Orientation_Z%)) tmp%=3*sgn(tmp%) end_if end_if ' if Orientation_%=Orientation_X% and abs(tmp%)>1 then tmp%=0-tmp% if Orientation_%=Orientation_Y% and abs(tmp%)=1 then tmp%=0-tmp% if Orientation_%=Orientation_Z% and abs(tmp%)=1 then tmp%=0-tmp% ' objX=val(grid_read$(original%,obj%,Orientation_X%)) objY=val(grid_read$(original%,obj%,Orientation_Y%)) objZ=val(grid_read$(original%,obj%,Orientation_Z%)) ' select tmp% case -3: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%) case -2: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%) case -1: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%) case 1 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%) case 2 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%) case 3 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%) end_select ' grid_write original%,obj%,Orientation_X%,str$(x) grid_write original%,obj%,Orientation_Y%,str$(y) grid_write original%,obj%,Orientation_Z%,str$(z) ' end_if next obj% end_sub ' ------------------------------------------------------------------------------ sub Matrice_Rotation(px,py,pz,ang,axe) select axe case 1: ' matrice de rotation X en sens anti horaire x = px*1 +py*0 +pz*0 y = px*0 +py*cos(0-ang) -pz*sin(0-ang) z = px*0 +py*sin(0-ang) +pz*cos(0-ang) case 2: ' matrice de rotation Y en sens horaire x = px*cos(ang) +py*0 +pz*sin(ang) y = px*0 +py*1 -pz*0 z = px*(0-sin(ang)) +py*0 +pz*cos(ang) case 3: ' matrice de rotation Z en sens horaire x = px*cos(ang) -py*sin(ang) +pz*0 y = px*sin(ang) +py*cos(ang) +pz*0 z = px*0 +py*0 +pz*1 end_select x=round_float(x,3) y=round_float(y,3) z=round_float(z,3) end_sub ' ------------------------------------------------------------------------------ fnc round_float(round_float_mon_nb,round_float_decimales%) dim_local round_float_tmp% ' arrondi 'float' round_float_tmp%=round_float_mon_nb*power(10,round_float_decimales%) round_float_mon_nb=round_float_tmp%/(power(10,round_float_decimales%)) result round_float_mon_nb end_fnc ' ------------------------------------------------------------------------------ sub troisD_point_position(N%,x,y,z) 3d_position 28,x+o3d_x_position(N%),y+o3d_y_position(N%),z+o3d_z_position(N%) 3d_point_object N%,28 end_sub ' ------------------------------------------------------------------------------ fnc aleatoire%(aleatoire_mini,aleatoire_maxi) result int(rnd((aleatoire_maxi-aleatoire_mini)+0.999999999))+aleatoire_mini end_fnc ' ------------------------------------------------------------------------------ orienterCube: off_mouse_down 2 ' cacher la fenetre A-propos hide 40 ' on quitte le sous-programme si c'est le bouton droit de la souris qui est enfoncé if mouse_right_down(2) = 1 on_mouse_down 2,orienterCube return end_if x_souris% = mouse_x_position(2) y_souris% = mouse_y_position(2) while mouse_left_up(2) = 0 x% = mouse_x_position(2) - x_souris% + x_positionCamera% y% = mouse_y_position(2) - y_souris% + y_positionCamera% y% = mod(y%,360) ' limitation du déplacement caméra vers le bas if y% > 63 y% = 63 y_positionCamera% = 63 y_souris% = mouse_y_position(2) end_if ' limitation du déplacement caméra vers le haut if y% < -63 y% = -63 y_positionCamera% = -63 y_souris% = mouse_y_position(2) end_if cam_x_position cos(x%) * cos(y%) * distanceCamera% cam_z_position sin(x%) * cos(y%) * distanceCamera% cam_y_position sin(y%) * distanceCamera% pause 20 end_while ' mémorisation de la nouvelle position de la caméra x_positionCamera% = mouse_x_position(2) - x_souris% + x_positionCamera% y_positionCamera% = mouse_y_position(2) - y_souris% + y_positionCamera% on_mouse_down 2,orienterCube return ' ------------------------------------------------------------------------------ sub creerMenuPop() main_menu_pop 3 sub_menu 4 parent 4,3 caption 4,"Commandes à droite" mark_on 4 on_click 4,deplacerCommandes sub_menu 5 parent 5,3 caption 5,"Commandes à gauche" on_click 5,deplacerCommandes sub_menu 6 parent 6,3 caption 6,"-" sub_menu 7 parent 7,3 on_click 7,afficherApropos caption 7,"A-propos" end_sub ' ------------------------------------------------------------------------------ sub bandeauTitre() panel 16 top 16,10 left 16,65 width 16,430 height 16,45 picture 17 parent 17,16 width 17,width(16) height 17,height(16) color 17,30,30,30 2d_target_is 17 2d_fill_color 30,30,30 print_target_is 17 font_name 17,"Times New Roman" font_color 17,255,255,0 font_size 17,24 font_italic 17 print "PANORAMIC Rubik's Cube" font_size 17,18 print_locate 360,0 print chr$(174) on_click 17,fermerApropos end_sub ' ------------------------------------------------------------------------------ sub creerPanneauCommande() panel 10 left 10,500 height 10,500 width 10,140 image 11 image 12 command_target_is 10 ' habillage PANEL 10 picture 14 width 14,140 height 14,500 color 14,30,30,30 on_click 14,fermerApropos ' creer modèle de bouton picture 13 width 13,50 height 13,50 top 13,10 left 13,10 color 13,0,0,1 2d_target_is 13 ' dessiner les bords noirs arrondis 2d_line 8,3,42,3 2d_line 42,4,44,4 2d_point 44,5 2d_line 45,6,45,8 2d_line 46,8,46,42 2d_line 45,42,45,44 2d_point 44,44 2d_line 42,45,44,45 2d_line 8,46,42,46 2d_line 6,45,8,45 2d_point 5,44 2d_line 4,42,4,44 2d_line 3,8,3,42 2d_line 4,6,4,8 2d_point 5,5 2d_line 6,4,8,4 ' colorier le centre du bouton 2d_flood 20,20,232,40,40 ' dessiner la flèche sens anti_horaire 2d_pen_color 0,0,0 2d_fill_off 2d_pen_width 3 2d_circle 25,25,14 2d_pen_width 1 2d_pen_color 232,40,40 2d_fill_color 232,40,40 2d_rectangle 9,25,26,40 2d_pen_color 0,0,0 2d_line 6,24,18,24 2d_line 7,25,17,25 2d_line 8,26,16,26 2d_line 9,27,15,27 2d_line 10,28,14,28 2d_line 11,29,13,29 ' copier le modèle de bouton avec la flèche anti_horaire en mémoire 2d_image_copy 11,0,0,50,50 ' creer le modèle de bouton avec la flèche sens horaire 2d_pen_color 232,40,40 2d_rectangle 6,6,40,40 ' dessiner la flèche sens horaire 2d_pen_color 0,0,0 2d_fill_off 2d_pen_width 3 2d_circle 25,25,14 2d_pen_width 1 2d_pen_color 232,40,40 2d_fill_color 232,40,40 2d_rectangle 24,24,40,40 2d_pen_color 0,0,0 2d_line 32,24,44,24 2d_line 33,25,43,25 2d_line 34,26,42,26 2d_line 35,27,41,27 2d_line 36,28,40,28 2d_line 37,29,39,29 ' copier le modèle de bouton avec la flèche sens horaire en mémoire 2d_image_copy 12,0,0,50,50 ' cacher le PICTURE ayant servi à dessiner les modèles de boutons hide 13 ' créer boutons rouges picture 20 width 20,50 height 20,50 top 20,20 left 20,10 2d_target_is 20 2d_image_paste 11,0,0 2d_flood 20,20,232,40,40 picture 21 width 21,50 height 21,50 top 21,20 left 21,70 2d_target_is 21 2d_image_paste 12,0,0 2d_flood 20,20,232,40,40 ' créer boutons verts picture 22 width 22,50 height 22,50 top 22,70 left 22,10 2d_target_is 22 2d_image_paste 11,0,0 2d_flood 20,20,40,232,40 picture 23 width 23,50 height 23,50 top 23,70 left 23,70 2d_target_is 23 2d_image_paste 12,0,0 2d_flood 20,20,40,232,40 ' créer boutons bleus picture 24 width 24,50 height 24,50 top 24,120 left 24,10 2d_target_is 24 2d_image_paste 11,0,0 2d_flood 20,20,40,40,232 picture 25 width 25,50 height 25,50 top 25,120 left 25,70 2d_target_is 25 2d_image_paste 12,0,0 2d_flood 20,20,40,40,232 ' créer boutons oranges picture 26 width 26,50 height 26,50 top 26,170 left 26,10 2d_target_is 26 2d_image_paste 11,0,0 2d_flood 20,20,232,127,40 picture 27 width 27,50 height 27,50 top 27,170 left 27,70 2d_target_is 27 2d_image_paste 12,0,0 2d_flood 20,20,232,127,40 ' créer boutons jaunes picture 28 width 28,50 height 28,50 top 28,220 left 28,10 2d_target_is 28 2d_image_paste 11,0,0 2d_flood 20,20,245,245,0 picture 29 width 29,50 height 29,50 top 29,220 left 29,70 2d_target_is 29 2d_image_paste 12,0,0 2d_flood 20,20,245,245,0 ' créer boutons blancs picture 30 width 30,50 height 30,50 top 30,270 left 30,10 2d_target_is 30 2d_image_paste 11,0,0 2d_flood 20,20,255,255,255 picture 31 width 31,50 height 31,50 top 31,270 left 31,70 2d_target_is 31 2d_image_paste 12,0,0 2d_flood 20,20,255,255,255 ' creer bouton de mélange aléatoire picture 32 width 32,50 height 32,50 top 32,350 left 32,10 color 32,30,30,30 2d_target_is 32 2d_fill_color 0,0,0 2d_pen_color 0,0,0 2d_rectangle 1,1,50,50 tirageCouleurAleatoire() 2d_rectangle 3,3,16,16 tirageCouleurAleatoire() 2d_rectangle 35,19,48,32 tirageCouleurAleatoire() 2d_rectangle 19,19,32,32 tirageCouleurAleatoire() 2d_rectangle 35,35,48,48 tirageCouleurAleatoire() 2d_rectangle 19,3,32,16 tirageCouleurAleatoire() 2d_rectangle 3,35,16,48 tirageCouleurAleatoire() 2d_rectangle 35,3,48,16 tirageCouleurAleatoire() 2d_rectangle 19,35,32,48 tirageCouleurAleatoire() 2d_rectangle 3,19,16,32 2d_pen_color 0,0,0 2d_point 3,3 2d_point 15,3 2d_point 3,15 2d_point 15,15 2d_point 19,3 2d_point 31,3 2d_point 19,15 2d_point 31,15 2d_point 35,3 2d_point 47,3 2d_point 35,15 2d_point 47,15 2d_point 3,19 2d_point 15,19 2d_point 3,31 2d_point 15,31 2d_point 19,19 2d_point 31,19 2d_point 19,31 2d_point 31,31 2d_point 35,19 2d_point 47,19 2d_point 35,31 2d_point 47,31 2d_point 3,35 2d_point 15,35 2d_point 3,47 2d_point 15,47 2d_point 19,35 2d_point 31,35 2d_point 19,47 2d_point 31,47 2d_point 35,35 2d_point 47,35 2d_point 35,47 2d_point 47,47 cursor_point 32 hint 32,"Mélanger le cube" on_click 32,melanger ' copier le modèle de bouton en mosaïque en mémoire 2d_image_copy 11,0,0,50,50 ' creer bouton R.A.Z. picture 33 width 33,50 height 33,50 top 33,350 left 33,70 2d_target_is 33 2d_image_paste 11,0,0 2d_flood 8,8,r%,v%,b% 2d_flood 24,8,r%,v%,b% 2d_flood 40,8,r%,v%,b% 2d_flood 8,24,r%,v%,b% 2d_flood 24,24,r%,v%,b% 2d_flood 40,24,r%,v%,b% 2d_flood 8,40,r%,v%,b% 2d_flood 24,40,r%,v%,b% 2d_flood 40,40,r%,v%,b% cursor_point 33 hint 33,"Réinitialiser" on_click 33,reinitialiser ' creer bouton Aide picture 34 width 34,50 height 34,50 top 34,430 left 34,10 2d_target_is 34 2d_image_paste 12,0,0 2d_pen_color 240,240,0 2d_fill_color 240,240,0 2d_rectangle 7,8,44,42 2d_flood 6,6,240,240,0 print_target_is 34 font_size 34,24 font_name 34,"Arial" print_locate 16,8 hint 34,"Aide" print "?" cursor_point 34 on_click 34,aide ' creer bouton Quitter picture 35 width 35,50 height 35,50 top 35,430 left 35,70 2d_target_is 35 2d_image_paste 12,0,0 2d_pen_color 240,40,40 2d_fill_color 240,40,40 2d_rectangle 7,8,44,42 2d_flood 6,6,240,40,40 2d_pen_color 0,0,0 2d_pen_width 3 2d_circle 25,26,13 2d_pen_color 240,40,40 2d_fill_color 0,0,0 2d_rectangle 21,9,29,26 hint 35,"Quitter le jeu" cursor_point 35 on_click 35,quitter for i% = 20 to 31 on_click i%,clic next i% command_target_is 0 end_sub ' ------------------------------------------------------------------------------ sub creerApropos() panel 40 top 40,85 left 40,85 hide 40 width 40,350 height 40,350 picture 41 parent 41,40 width 41,width(40) height 41,height(40) color 41,0,0,0 2d_target_is 41 ' fond rectangle blanc à bords arrondis 2d_pen_color 255,255,255 2d_fill_color 255,255,255 2d_circle 23,23,15 2d_circle 327,23,15 2d_circle 23,327,15 2d_circle 327,327,15 2d_line 23,8,327,8 2d_line 8,23,8,327 2d_line 23,341,327,341 2d_line 341,23,341,327 2d_flood 37,37,255,255,255 ' Ellipse 2d_pen_color 0,0,132 2d_pen_dot 2d_ellipse 60,190,290,300 2d_pen_solid ' textes font_color 41,0,0,132 2d_fill_color 255,255,255 print_target_is 41 font_size 41,12 font_name 41,"Arial" print_locate 74,25 print "PANORAMIC Rubik's Cube" font_size 41,8 print_locate 268,25 print chr$(174) font_size 41,10 print_locate 138,50 print "Version M.01" print_locate 38,90 print "Jeu créé par une équipe du forum PANORAMIC*" print_locate 38,110 print "Ecrit en langage PANORAMIC 0.9.29i9." print_locate 38,160 print "Composition de l'équipe :" print_locate 140,205 print "Minibug" print_locate 220,220 print "Jack" print_locate 120,270 print "Mindstorm" print_locate 85,230 print "Silverman" print_locate 160,240 print "Papydall" print_locate 230,255 print "Marc" print_locate 22,320 print "*https://panoramic.1fr1.net/" print_locate 248,320 print "Octobre 2022" on_click 41,fermerApropos end_sub ' ------------------------------------------------------------------------------ sub creerAide() form 55 border_small 55 top 55,20 left 55, 20 hide 55 width 55,480 height 55,680 caption 55,"Notice du jeu" on_resize 55,redim55 ' Placer le FORM 0 en avant plan to_foreground 0 scroll_bar 56 parent 56,55 vertical 56 width 56,25 left 56,width_client(55) - width(56) height 56,height_client(55) on_change 56,ascenseurFenetreAide ' habillage FORM 55 picture 57 parent 57,55 width 57,width(55) height 57,1235 color 57,230,230,250 2d_target_is 57 ' débattement du SCROLL_BAR max 56,height(57) - height_client(55) 2d_fill_color 230,230,250 print_target_is 57 font_color 57,0,0,130 font_name 57,"Calibri" font_size 57,22 print_locate 60,20 print "PANORAMIC Rubik's Cube®" font_size 57,11 print_locate 20,70 print "Ce jeu est un clone informatique du célèbre jeu créé en 1974" print_locate 20,90 print "par Ernö Rubik : Le Rubik's Cube®." font_size 57,14 print_locate 20,130 font_color 57,0,0,70 print "L'objectif :" font_color 57,0,0,130 font_size 57,11 print_locate 20,155 print "Après avoir mélangé le cube, vous devez tenter de lui rendre" print_locate 20,175 print "son apparence d'origine, avec les six faces de couleurs unies." font_size 57,14 print_locate 20,215 font_color 57,0,0,70 print "Le principe de fonctionnement :" font_color 57,0,0,130 font_size 57,11 print_locate 20,240 print "Une face est composée de 9 carrés. Le carré du centre détermine" print_locate 20,260 print "la couleur de la face. Utilisez les icônes fléchées ayant la même" print_locate 20,280 print "couleur que le centre de la face à faire tourner." font_size 57,14 print_locate 20,320 font_color 57,0,0,70 print "Les faces non visibles du cube :" font_color 57,0,0,130 font_size 57,11 print_locate 20,345 print "Vous pouvez orienter le cube pour observer les faces non visibles." print_locate 20,365 print "Cliquez sur le cube et maintenez enfoncé le bouton gauche de la" print_locate 20,385 print "souris tout en la déplaçant dans la direction souhaitée. Le cube" print_locate 20,405 print "pivotera suivant les déplacements de la souris." font_size 57,14 print_locate 20,445 font_color 57,0,0,70 print "Le menu contextuel :" font_color 57,0,0,130 font_size 57,11 print_locate 20,470 print "Le jeu dispose d'un menu contextuel accessible depuis" print_locate 20,490 print "un clic droit. Par défaut, les icônes de commande sont situées" print_locate 20,510 print "à droite du jeu. Vous pouvez les placer à gauche en sélectionnant" print_locate 20,530 print "la ligne ''Commandes à gauche'' dans le menu." print_locate 20,550 print "Un clic sur ''A-propos'' affiche la fenêtre d'informations du jeu." print_locate 20,570 print "Pour fermer cette fenêtre, cliquez n'importe où sur le jeu." font_size 57,14 print_locate 20,610 font_color 57,0,0,70 print "Les icônes :" font_color 57,0,0,130 font_size 57,11 print_locate 85,635 print "Douze icônes permettent de faire tourner les faces" print_locate 85,655 print "d'un quart de tour à chaque appui, dans le sens" print_locate 85,675 print "horaire ou antihoraire. La couleur de l'icône" print_locate 85,695 print "détermine la face à tourner. La couleur du carré" print_locate 85,715 print "central d'une face indique la couleur de la face." print_locate 85,755 print "Cette icône permet de mélanger le cube. A Chaque" print_locate 85,775 print "appui, la difficulté de résolution augmente." print_locate 85,835 print "La réinitialisation du cube s'effectue via cette" print_locate 85,855 print "icône. Le cube sera rétabli avec ses faces de" print_locate 85,875 print "couleur unies." print_locate 85,925 print "Un appui sur cette icône affiche cette page d'aide." print_locate 85,945 print "Pour fermer l'aide, cliquez sur la croix rouge en" print_locate 85,965 print "haut à droite de la fenêtre d'aide." print_locate 85,1035 print "Cette dernière icône permet de quitter le jeu." font_size 57,9 print_locate 155,1135 print "PANORAMIC" print_locate 155,1150 print "Langage informatique créé par Jack" print_locate 155,1165 print "Langage simple, puissant et convivial" print_locate 155,1180 print "Forum dédié au langage PANORAMIC :" print_locate 155,1195 print "https://panoramic.1fr1.net/" ' copie des icones du tableau de commande pour illustrer l'aide 2d_target_is int(rnd(12))+20 2d_image_copy 12,0,0,50,50 2d_target_is 57 2d_image_paste 12,20,660 2d_target_is 32 2d_image_copy 12,1,1,50,50 2d_target_is 57 2d_image_paste 12,20,750 2d_target_is 33 2d_image_copy 12,1,1,50,50 2d_target_is 57 2d_image_paste 12,20,840 2d_target_is 34 2d_image_copy 12,0,0,50,50 2d_target_is 57 2d_image_paste 12,20,930 2d_target_is 35 2d_image_copy 12,0,0,50,50 2d_target_is 57 2d_image_paste 12,20,1020 dessinerLogoPanoramic(80,1138) end_sub ' ------------------------------------------------------------------------------ sub dessinerLogoPanoramic(x%,y%) 2d_fill_color 255,255,255 2d_pen_color 255,255,255 2d_rectangle 0+x%,0+y%,70+x%,70+y% 2d_pen_width 3 2d_pen_color 250,40,0 2d_fill_off 2d_circle 35+x%,35+y%,22 2d_circle 35+x%,35+y%,29 2d_pen_width 1 2d_pen_color 40,40,150 2d_fill_color 40,40,150 2d_rectangle 24+x%,24+y%,44+x%,26+y% 2d_rectangle 28+x%,26+y%,34+x%,45+y% 2d_rectangle 24+x%,45+y%,39+x%,47+y% 2d_rectangle 41+x%,26+y%,47+x%,35+y% 2d_rectangle 34+x%,35+y%,44+x%,37+y% 2d_point 27+x%,26+y% 2d_point 27+x%,44+y% 2d_point 34+x%,44+y% 2d_point 39+x%,46+y% 2d_point 40+x%,27+y% 2d_point 41+x%,24+y% 2d_line 39+x%,26+y%,41+x%,26+y% 2d_line 39+x%,34+y%,41+x%,34+y% 2d_line 44+x%,25+y%,46+x%,25+y% 2d_line 44+x%,35+y%,46+x%,35+y% 2d_line 47+x%,27+y%,47+x%,34+y% end_sub ' ------------------------------------------------------------------------------ ascenseurFenetreAide: top 57,(-1) * position(56) return ' ------------------------------------------------------------------------------ fermerApropos: hide 40 return ' ------------------------------------------------------------------------------ sub tirageCouleurAleatoire() dim_local couleur% couleur% = int(rnd(6)) select couleur% case 0 r% = 232 : v% = 40 : b% = 40 case 1 r% = 40 : v% = 232 : b% = 40 case 2 r% = 40 : v% = 40 : b% = 232 case 3 r% = 232 : v% = 127 : b% = 40 case 4 r% = 245 : v% = 245 : b% = 0 case 5 r% = 255 : v% = 255 : b% = 255 end_select 2d_fill_color r%,v%,b% 2d_pen_color r%,v%,b% end_sub ' ------------------------------------------------------------------------------ clic: ' cacher la fenetre A-propos if show(40) = 1 hide 40 return end_if inactive 2 off_mouse_down 2 for i% = 20 to 31 off_click i% next i% select number_click case 20 rotation_couronne(90,"x",-2) case 21 rotation_couronne(-90,"x",-2) case 22 rotation_couronne(-90,"z",-2) case 23 rotation_couronne(90,"z",-2) case 24 rotation_couronne(90,"z",2) case 25 rotation_couronne(-90,"z",2) case 26 rotation_couronne(-90,"x",2) case 27 rotation_couronne(90,"x",2) case 28 rotation_couronne(-90,"y",-2) case 29 rotation_couronne(90,"y",-2) case 30 rotation_couronne(90,"y",2) case 31 rotation_couronne(-90,"y",2) end_select for i% = 20 to 31 on_click i%,clic next i% active 2 on_mouse_down 2,orienterCube null% = mouse_left_down(2) null% = mouse_left_up(2) return ' ------------------------------------------------------------------------------ deplacerCommandes: ' cacher la fenetre A-propos hide 40 select number_click case 4 mark_on 4 mark_off 5 left 2,0 left 10,500 left 16,65 left 40,85 case 5 mark_on 5 mark_off 4 left 2,140 left 10,0 left 16,190 left 40,205 end_select return ' ------------------------------------------------------------------------------ melanger: ' cacher la fenetre A-propos if show(40) = 1 hide 40 return end_if off_mouse_down 2 for i% = 20 to 35 off_click i% next i% ' mélanger 3 fois for nombre_de_rotation% = 1 to 3 Angle_rot% = aleatoire%(1,3) * 90 * sgn(rnd(1)-0.5) ' ' pas 2 fois le même axe axe_old = axe_new repeat axe_new = aleatoire%(1,3) until axe_new <> axe_old select axe_new case 1: axe$="x" case 2: axe$="y" case 3: axe$="z" end_select ' select aleatoire%(1,2) case 1: face$="-2" case 2: face$="2" ' case 3: face$="2" end_select ' les rotations du rubiks cube sont visibles rotation_couronne(Angle_rot%,axe$,face$) next nombre_de_rotation% for i% = 20 to 31 on_click i%,clic next i% on_click 32,melanger on_click 33,reinitialiser on_click 34,aide on_click 35,quitter pause 20 on_mouse_down 2,orienterCube null% = mouse_left_up(2) null% = mouse_left_down(2) return ' ------------------------------------------------------------------------------ reinitialiser: ' cacher la fenetre A-propos if show(40) = 1 hide 40 return end_if ' placement de la caméra par défaut x_positionCamera% = 54 y_positionCamera% = 25 cam_x_position cos(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera% cam_z_position sin(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera% cam_y_position sin(y_positionCamera%) * distanceCamera% obj%=0 for x=-2 to 2 step 2 for y=-2 to 2 step 2 for z=-2 to 2 step 2 obj%=obj%+1 ' ' position et orientation mémorisées dans un grid 3d_position obj%,x,y,z ' 3d_rotate obj%,0,0,0 : troisD_point_position(obj%,0,0,0) : troisD_point_position(obj%,0,0,1) : ' RAZ cube ' ' positions et orientations initiales mémorisées dans un grid ' grid_write 1,obj%,1,str$(obj%) grid_write original%,obj%,posX%,str$(x) grid_write original%,obj%,posY%,str$(y) grid_write original%,obj%,posZ%,str$(z) ' grid_write original%,obj%,Orientation_X%,"1" grid_write original%,obj%,Orientation_Y%,"2" grid_write original%,obj%,Orientation_Z%,"3" next z next y next x display return ' ------------------------------------------------------------------------------ afficherApropos: show 40 return ' ------------------------------------------------------------------------------ aide: hide 40 :' cacher la fenetre A-propos show 55 :' afficher fenêtre d'aide return ' ------------------------------------------------------------------------------ redim0: width 0,width(0) - width_client(0) + 640 height 0,height(0) - height_client(0) + 500 return ' ------------------------------------------------------------------------------ redim55: width 55,480 height 55,680 return ' ------------------------------------------------------------------------------ quitter: terminate return