Klaus
Nombre de messages : 12297 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Le pousse-pousse Dim 16 Mar 2014 - 10:41 | |
| Voici un petit jeu, très ancien mais toujours amusant: le pousse-pousse. C'est un jeu dans lequel un a un carré découpé en 16 cases dans le désordre, dont une est manquante. Et il faut pousser les cases en utilisant la case vide, pour remettre le tout dans l'ordre. Le programme utilise par défaut une série de chiffres de 1 à 15. Le but est de les remettre dans l'ordre. Un menu permet de rejouer ou de charger une de vos images à la place de la série de chiffres. Le chargement est fait avec des fonctions de KGF.dll. Si l'on veut s'en tenir aux seuls numéros, on peut désactiver l'utilisation de la DLL et on en revient à un code en Panoramic pur. Pour la petite histoire: l'interface visuel et la structure du programme sont générés par mon IDE. - Code:
-
' C:\Documents and Settings\Klaus\Mes documents\Mes projets Delphi\IDE\15_puzzle\15_puzzle.bas
' poussse-pousse.bas
labels() constantes() variables() user_variables() objets() initialisations() end sub variables() dim no_forms%(1) dim no%, res%, KGF_present%, WBurl$ dim Form_1% : Form_1% = 0 dim Main_menu_1% : Main_menu_1% = 2 dim Sub_menu_1% : Sub_menu_1% = 3 dim Sub_menu_2% : Sub_menu_2% = 4 dim Sub_menu_3% : Sub_menu_3% = 5 dim Sub_menu_4% : Sub_menu_4% = 6 dim Sub_menu_5% : Sub_menu_5% = 7 dim Image_1% : Image_1% = 8 dim Image_2% : Image_2% = 9 dim Image_3% : Image_3% = 10 dim Image_4% : Image_4% = 11 dim Image_5% : Image_5% = 12 dim Image_6% : Image_6% = 13 dim Image_7% : Image_7% = 14 dim Image_8% : Image_8% = 15 dim Image_9% : Image_9% = 16 dim Image_10% : Image_10% = 17 dim Image_11% : Image_11% = 18 dim Image_12% : Image_12% = 19 dim Image_13% : Image_13% = 20 dim Image_14% : Image_14% = 21 dim Image_15% : Image_15% = 22 dim Panel_1% : Panel_1% = 23 dim Picture_1% : Picture_1% = 24 dim Picture_2% : Picture_2% = 25 dim Picture_3% : Picture_3% = 26 dim Picture_4% : Picture_4% = 27 dim Picture_5% : Picture_5% = 28 dim Picture_6% : Picture_6% = 29 dim Picture_7% : Picture_7% = 30 dim Picture_8% : Picture_8% = 31 dim Picture_9% : Picture_9% = 32 dim Picture_10% : Picture_10% = 33 dim Picture_11% : Picture_11% = 34 dim Picture_12% : Picture_12% = 35 dim Picture_13% : Picture_13% = 36 dim Picture_14% : Picture_14% = 37 dim Picture_15% : Picture_15% = 38 dim Picture_16% : Picture_16% = 39 dim Open_dialog_1% : Open_dialog_1% = 40 end_sub sub charger_KGF() if KGF_present%=0 dll_on KGF_dll$ KGF_present%=1 end_if end_sub sub objets() Top no%, 30 Left no%, 204 Width no%, 678 Height no%, 528 Caption no%, "Pousse-Pousse" ' objet supprimé no% = no% + 1
' Main_menu_1 no% = no% + 1 Main_menu no% ' Sub_menu_1 no% = no% + 1 Sub_menu no% Parent no%,2 Caption no%, "Jeu" ' Sub_menu_2 no% = no% + 1 Sub_menu no% Parent no%,3 Caption no%, "Nouveau" On_click no%,nouveau ' Sub_menu_3 no% = no% + 1 Sub_menu no% Parent no%,3 Caption no%, "Sortir" On_click no%,sortir ' Sub_menu_4 no% = no% + 1 Sub_menu no% Parent no%,2 Caption no%, "Images" ' Sub_menu_5 no% = no% + 1 Sub_menu no% Parent no%,6 Caption no%, "Charger" On_click no%,charger ' Image_1 no% = no% + 1 Image no% ' Image_2 no% = no% + 1 Image no% ' Image_3 no% = no% + 1 Image no% ' Image_4 no% = no% + 1 Image no% ' Image_5 no% = no% + 1 Image no% ' Image_6 no% = no% + 1 Image no% ' Image_7 no% = no% + 1 Image no% ' Image_8 no% = no% + 1 Image no% ' Image_9 no% = no% + 1 Image no% ' Image_10 no% = no% + 1 Image no% ' Image_11 no% = no% + 1 Image no% ' Image_12 no% = no% + 1 Image no% ' Image_13 no% = no% + 1 Image no% ' Image_14 no% = no% + 1 Image no% ' Image_15 no% = no% + 1 Image no% ' Panel_1 no% = no% + 1 Panel no% Top no%, 24 Left no%, 15 Width no%, 630 Height no%, 440 Caption no%, "" Hint no%, "" color no%,0,0,0 ' Picture_1 no% = no% + 1 Picture no% Top no%, 9 Left no%, 12 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move ' Picture_2 no% = no% + 1 Picture no% Top no%, 9 Left no%, 165 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_3 no% = no% + 1 Picture no% Top no%, 9 Left no%, 318 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_4 no% = no% + 1 Picture no% Top no%, 9 Left no%, 471 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_5 no% = no% + 1 Picture no% Top no%, 111 Left no%, 12 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_6 no% = no% + 1 Picture no% Top no%, 111 Left no%, 165 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_7 no% = no% + 1 Picture no% Top no%, 111 Left no%, 318 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_8 no% = no% + 1 Picture no% Top no%, 111 Left no%, 471 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_9 no% = no% + 1 Picture no% Top no%, 213 Left no%, 12 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_10 no% = no% + 1 Picture no% Top no%, 213 Left no%, 165 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_11 no% = no% + 1 Picture no% Top no%, 213 Left no%, 318 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_12 no% = no% + 1 Picture no% Top no%, 213 Left no%, 471 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_13 no% = no% + 1 Picture no% Top no%, 315 Left no%, 12 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_14 no% = no% + 1 Picture no% Top no%, 315 Left no%, 165 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move
' Picture_15 no% = no% + 1 Picture no% Top no%, 315 Left no%, 318 Width no%, 150 Height no%, 100 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" on_click no%,move ' Picture_16 no% = no% + 1 Picture no% Top no%, 315 Left no%, 318 Width no%, 600 Height no%, 400 Parent no%,23 font_size no%,16 font_bold no% Hint no%, "" hide no%
' Open_dialog 1 no% = no% + 1 Open_dialog no% filter no%,"Images|*.jpg;*.bmp" end_sub sub initialisations() positions_initiales%(1,1) = left(picture_1%) positions_initiales%(1,2) = top(picture_1%) positions_initiales%(2,1) = left(picture_2%) positions_initiales%(2,2) = top(picture_2%) positions_initiales%(3,1) = left(picture_3%) positions_initiales%(3,2) = top(picture_3%) positions_initiales%(4,1) = left(picture_4%) positions_initiales%(4,2) = top(picture_4%) positions_initiales%(5,1) = left(picture_5%) positions_initiales%(5,2) = top(picture_5%) positions_initiales%(6,1) = left(picture_6%) positions_initiales%(6,2) = top(picture_6%) positions_initiales%(7,1) = left(picture_7%) positions_initiales%(7,2) = top(picture_7%) positions_initiales%(8,1) = left(picture_8%) positions_initiales%(8,2) = top(picture_8%) positions_initiales%(9,1) = left(picture_9%) positions_initiales%(9,2) = top(picture_9%) positions_initiales%(10,1) = left(picture_10%) positions_initiales%(10,2) = top(picture_10%) positions_initiales%(11,1) = left(picture_11%) positions_initiales%(11,2) = top(picture_11%) positions_initiales%(12,1) = left(picture_12%) positions_initiales%(12,2) = top(picture_12%) positions_initiales%(13,1) = left(picture_13%) positions_initiales%(13,2) = top(picture_13%) positions_initiales%(14,1) = left(picture_14%) positions_initiales%(14,2) = top(picture_14%) positions_initiales%(15,1) = left(picture_15%) positions_initiales%(15,2) = top(picture_15%) positions_initiales%(16,1) = positions_initiales%(12,1) positions_initiales%(16,2) = positions_initiales%(15,2) lignes%(1) = 1 lignes%(2) = 1 lignes%(3) = 1 lignes%(4) = 1 lignes%(5) = 2 lignes%(6) = 2 lignes%(7) = 2 lignes%(8) = 2 lignes%(9) = 3 lignes%(10) = 3 lignes%(11) = 3 lignes%(12) = 3 lignes%(13) = 4 lignes%(14) = 4 lignes%(15) = 4 colonnes%(1) = 1 colonnes%(2) = 2 colonnes%(3) = 3 colonnes%(4) = 4 colonnes%(5) = 1 colonnes%(6) = 2 colonnes%(7) = 3 colonnes%(8) = 4 colonnes%(9) = 1 colonnes%(10) = 2 colonnes%(11) = 3 colonnes%(12) = 4 colonnes%(13) = 1 colonnes%(14) = 2 colonnes%(15) = 3 x% = width(picture_1%)/2 y% = height(picture_1%)/2 mixer() for i%=1 to 15 print_target_is picture_1%+i%-1 print_locate x%,y% ' print str$(tag%(i%)) print str$(i%) next i% l_libre% = 4 c_libre% = 4 i_libre% = 16 dll_on KGF_dll$ end_sub ' ********* labels sub labels() label charger label nouveau label sortir label move end_sub ' ********* procédures Sub user_variables() ' Placez ici vos variables utilisées dans vos procédures dim positions%(15,2) dim positions_initiales%(16,2) dim mixage%(16), tag%(15), lignes%(15), colonnes%(15) dim l_libre%, c_libre%, i_libre% dim i%, x%, y%, soluble% dim img$ End_Sub
Sub constantes() ' adapter ici le chemin vers KGF.dll dim KGF_dll$ : KGF_dll$ = "..\..\KGF\KGF.dll" End_Sub
Sub nouveau() remixer() End_sub
Sub sortir() terminate End_sub
Sub charger() dim_local f$, i%, l%, c% f$ = file_name$(Open_dialog_1%) if f$="_" then exit_sub if file_exists(f$)=0 then exit_sub img$ = f$ i% = dll_call1("LoadAnyImageFile",adr(img$)) i% = dll_call2("ResizePicture",600,400) clipboard_paste picture_16% for i%=1 to 15 l% = int((i%+3)/4) c% = i% - (l%-1)*4 2d_target_is picture_16% 2d_image_copy i%+image_1%-1,(c%-1)*150,(l%-1)*100,c%*150-1,l%*150-1 2d_target_is i%+picture_1%-1 2d_image_paste i%+image_1%-1,0,0 next i% End_sub
sub move() dim_local n%, x%, y%, i%, l%, c%, f% dim_local check_bas%, check_haut%, check_gauche%, check_droite% n% = number_click - picture_1% + 1 x% = left(number_click) y% = top(number_click) for f%=1 to 16 if positions_initiales%(f%,1)=x% if positions_initiales%(f%,2)=y% l% = int((f%+3)/4) c% = f% - (l%-1)*4 exit_for end_if end_if next f% if l%<4 then check_bas% = 1 if l%>1 then check_haut% = 1 if c%<4 then check_droite% = 1 if c%>1 then check_gauche% = 1 if check_bas%=1 if l_libre%=l%+1 if c_libre%=c% swap(n%,f%,l%,c%) victoire() exit_sub end_if end_if end_if if check_haut%=1 if l_libre%=l%-1 if c_libre%=c% swap(n%,f%,l%,c%) victoire() exit_sub end_if end_if end_if if check_gauche%=1 if l_libre%=l% if c_libre%=c%-1 swap(n%,f%,l%,c%) victoire() exit_sub end_if end_if end_if if check_droite%=1 if l_libre%=l% if c_libre%=c%+1 swap(n%,f%,l%,c%) victoire() exit_sub end_if end_if end_if end_sub
sub victoire() dim_local i%, ok% ok% = 1 for i%=1 to 15 if left(i%+picture_1%-1)<>positions_initiales%(tag%(i%),1) ok% = 0 exit_for end_if if top(i%+picture_1%-1)<>positions_initiales%(tag%(i%),2) ok% = 0 exit_for end_if next i% if ok%=1 then message "Bravo ! Vous avez réussi !" End_sub
sub swap(n%,f%,l%,c%) left n%+picture_1%-1,positions_initiales%(i_libre%,1) top n%+picture_1%-1,positions_initiales%(i_libre%,2) i_libre% = f% l_libre% = l% c_libre% = c% end_sub
' ********* procédures spécifiques
sub remixer() mixer() i_libre% = 16 l_libre% = 4 c_libre% = 4 end_sub
sub mixer() dim_local i%, j%, n%, f%, n1%, n2% for i%=1 to 16 mixage%(i%) = 0 next i% n% = int(rnd(15))+1 mixage%(1) = n% tag%(1) = 1 left picture_1%,positions_initiales%(n%,1) top picture_1%,positions_initiales%(n%,2) for i%=2 to 15 repeat f% = 0 n% = int(rnd(15))+1 for j%=1 to i%-1 if n%=mixage%(j%) then f% = 1 next j% until f%=0 mixage%(i%) = n% tag%(i%) = i% left i%+picture_1%-1,positions_initiales%(n%,1) top i%+picture_1%-1,positions_initiales%(n%,2) if n%=14 then n1% = i% if n%=15 then n2% = i% next i%
' tester si la combinaison est soluble test_soluble() if soluble%=0 left n1%+picture_1%-1,positions_initiales%(15,1) top n1%+picture_1%-1,positions_initiales%(15,2) left n2%+picture_1%-1,positions_initiales%(14,1) top n2%+picture_1%-1,positions_initiales%(14,2) end_if end_sub
' parité des permutations: ' 1 2 3 4 5 position idéale ' 1 3 4 5 2 permutation
' 1/2->1/3 1 ' 1/3->1/4 1 ' 1/4->1/5 1 ' 1/5->1/2 0
' 2/3->3/4 1 ' 2/4->3/5 1 ' 2/5->3/2 0
' 3/4->4/5 1 ' 3/5->4/2 0
' 4/5->5/2 0 ' On compte les "0". Ici, il y en a 4 donc la permutation est paire.
sub test_soluble() dim_local i%, j%, inversions% soluble% = 1 for i%=1 to 14 for j%=i%+1 to 15 if tag%(i%)>tag%(j%) then inversions% = inversions% + 1 next j% next i% soluble% = 1 - bin_and(inversions%,1) end_sub
' ********* evenements charger: charger() return
nouveau: nouveau() return
sortir: sortir() return move: move() return
' activer la ligne suivante si KGF_SUB.bas est utilisée ' et adapter le chemin vers KGF_SUB.bas ' #INCLUDE "KGF_SUB.bas"
Dernière édition par Klaus le Lun 17 Mar 2014 - 17:26, édité 4 fois | |
|