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 du SOLITAIRE | |
| | |
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Le jeu du SOLITAIRE Dim 25 Jan 2015 - 5:29 | |
| Salut tout le monde
Vous trouverez sur mon webdav le jeu du Solitaire. C’est dans Solitaire.zip Ce zip contient :
Le programme Solitaire0.bas : une première version du jeu. Et 3 fichiers bmp : pion.bmp ; sphere.bmp ; bravo.bmp
Dézippez le tout dans un dossier de votre choix et … jouer.
NB : Dans le programme, l’option AutoRun est omise pour vous faire travailler les neurones ! Je vous la posterai, le moment venu. Elle est déjà fonctionnelle. | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Le jeu du SOLITAIRE Dim 25 Jan 2015 - 9:34 | |
| Bonjour, Bravo Papydall, jeu classique mais très réussi ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Dim 25 Jan 2015 - 11:00 | |
| Bravo, superbe. Encore quelques petites fonctions à rajouter comme la détection de la fin de partie quand on ne peut plus faire de mouvements, mais la réalisation est super efficace. Une idée en plus du autorun, ce serait le conseil. Quand on pense que l'on ait mal parti qui donnerait un choix pour rendre possible la fin de partie ou du moins avoir une chance de s'en approcher ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu du SOLITAIRE Dim 25 Jan 2015 - 12:04 | |
| Super, un casse tête de plus.
J'ai exactement les mêmes réflexions que Jicehel.
Pour le moment, j'en suis à 4 boules (qui restent)
A+ | |
| | | 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 du SOLITAIRE Dim 25 Jan 2015 - 13:03 | |
| Buongiorno tutti. Merci à tous pour vos remarques/idées/suggestions … - Jean Claude a écrit:
- Pour le moment, j'en suis à 4 boules (qui restent)
Pas mal, pas mal du tout ! Personnellement je n’y arrive que rarement et en trichant !@Tous Je vous posterai en début de soirée l’option AutoRun. Vous avez toute la liberté de modifier/améliorer le code. Sur un autre post, on a parlé de manque d’idées pour programmer, eh bien en voilà une : Programmons ENSEMBLE (chacun peut ajouter sa pierre) le jeu du Solitaire. Suggestions : Ajouter l’option : Annulation du dernier coup. Ajouter un chronomètre. Inclure une petite musiquette. …. D’ici-là, amusez-vous bien | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu du SOLITAIRE Dim 25 Jan 2015 - 13:38 | |
| Il y a un problème. Quand on arrive en bout de course et que l'on clique sur le bouton "nouveau", il y a 2 cases qui se vident en même temps. Bon courage Papydall pour le débogage. A+ PS: j'ai ajouté en début de la sub Nouveau() - Code:
-
w = 40 : hi = 400 : li = 400 : esp = 50 : h = hi+esp : l = li+esp
Il semble que c'est bon.RE: A+ | |
| | | 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 du SOLITAIRE Dim 25 Jan 2015 - 14:11 | |
| Salut Jean Claude
En réalité, seule la variable w = 40 (dimension du picture) est nécessaire. Les autres variables (hi,li, esp,h,l) sont des vestiges de mise au point, tu peux les virer sans problème. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 25 Jan 2015 - 15:28 | |
| il est... ton jeu. | |
| | | 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 du SOLITAIRE Dim 25 Jan 2015 - 16:20 | |
| C'est chouette, la chouette! J’ai ajouté l’option AutoRun et j’ai ajouté un chronomètre. Re-téléchargez le zip (toujours sous le nom de Solitaire.zip | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Dim 25 Jan 2015 - 20:39 | |
| je te met une version où l'on voit la case quand elle est sélectionnée. Ce n'est pas parfait car pour sélectionner un autre pion, il faut cliquer 2 fois dessus mais bon, comme ça on voit bien quand la case est sélectionnée. Perso, j'ai mis une image de pion en rouge, mais on peut simplement augmenter la luminosité du pion sélectionné par exemple puisque l'on utilise kgf.dll. Il faudrait démarrer et arrêter le chrono en automatique pour le bien sans quoi ça n'a pas trop de sens. - Code:
-
rem ============================================================================ rem Jeu du Solitaire rem Par Papydall rem ============================================================================
rem ============================================================================ init() Solitaire_Anglais() end rem ============================================================================ SUB Init() label clic dim p,w, case$(33),f$,fo,hi,li, esp ,h,l,coup, dep, arriv, mang, Nb_coup, selection w = 40 : hi = 100 : li = 600 color 0,255,255,255 width 0,700 height 0,700
form 400 : left 400,50 : top 400,10 : width 400,600 : height 400,600 : hide 400 alpha 500 : parent 500,400 : top 500,height(400)-80 : left 500,50 font_bold 500 : font_size 500,22 : caption 500," !!! BRAVO !!! TU ES UN CHAMPION !"
alpha 520 : top 520,10 : left 520, 100 : font_bold 520 : font_size 520,24 font_color 520, 0,0,255 : caption 520,"Jeu du Solitaire" button 550 : top 550,400 : left 550,50 : caption 550,"Nouveau" font_bold 550 : font_size 550,16 : width 550,100 : on_click 550,clic
button 600 : top 600,400 : left 600,180 : caption 600,"Autorun" font_bold 600 : font_size 600,16 : width 600,100 : on_click 600,clic
button 700 : top 700,400 : left 700,300 : caption 700,"Quitter" font_bold 700 : font_size 700,16 : width 700,100 : on_click 700,clic button 800 : : top 800,400 : left 800,450 : caption 800,"Info" font_bold 800 : font_size 800,16 : width 800,100 : on_click 800,clic dll_on "KGF.dll" f$ = "chronometre.swf" Flash_In_HTML(f$,0,10,450,li,hi)
END_SUB rem ============================================================================ rem ============================================================================
' Intégrer un objet Flash dans un objet HTML ' Anim$ est le nom du fichier Flash d'extension SWF ' fo est le numéro du form ' xo,yo coordonnées du coin supérieur gauche ' Larg et Haut sont les dimensions de la fenêtre de vision SUB Flash_In_HTML(Anim$,fo,xo,yo,larg,haut) dim_local hnd%, res%, url$,q$ ,WB1% q$ = chr$(34) caption fo,Anim$ file_open_write 9999,"flash.html" file_writeln 9999,"<embed src='"+Anim$+"'"+q$+" width="+q$+str$(larg)+q$+" height="+q$+str$(haut)+q$+">" file_close 9999
hnd% = handle(fo) url$ = "file://"+dir_current$+"/flash.html" WB1% = dll_call1("WB_Create",hnd%) res% = dll_call5("WB_Locate",WB1%,xo,yo,larg+50,haut+50) res% = dll_call2("WB_Url",WB1%,adr(url$))
file_delete "flash.html" END_SUB rem ============================================================================ ' Solitaire anglais de 33 cases. ' La case 17 est vide SUB Solitaire_Anglais() dim_local l1,l2 l1 = w*4-10 : l2 = w*2-10 for p = 1 to 33 picture p : width p,w : height p,w : on_click p, clic hint p,str$(p) next p
for p = 1 to 3 top p,10+(w+2)*1 : left p,l1+(w+2)*p next p
for p = 4 to 6 top p,10+(w+2)*2 : left p,l1+(w+2)*(p-3) next p
for p = 7 to 13 top p,10+(w+2)*3 : left p,l2+(w+2)*(p-6) next p
for p = 14 to 20 top p,10+(w+2)*4 : left p,l2+(w+2)*(p-13) next p
for p = 21 to 27 top p,10+(w+2)*5 : left p,l2+(w+2)*(p-20) next p
for p = 28 to 30 top p,10+(w+2)*6 : left p,l1+(w+2)*(p-27) next p
for p = 31 to 33 top p,10+(w+2)*7 : left p,l1+(w+2)*(p-30) next p
picture 50 : parent 50, 400 : width 50,width(400)-50 : height 50,height(400)-50 file_load 50,"bravo.bmp" Nouveau() END_SUB rem =========================================================================== SUB Nouveau() dim_local p coup = 0 : Nb_coup = 0 : caption 0,"" : selection = 0 for p = 1 to 33 file_load p,"sphere.bmp" case$(p) = "Occupe" next p file_load 17,"pion.bmp" case$(17) = "Libre" END_SUB rem ============================================================================
clic: p = number_click if p = 550 then Nouveau() : return if p = 600 then Autorun() : return if p = 700 then Quitter() : return if p = 800 then info() : return if case$(p) = "Vide" then return coup = 1 - coup Decode_Clic(p)
return rem ============================================================================ SUB Decode_Clic(p) if coup = 1 if case$(p) = "Occupe" if selection = 1 file_load dep,"sphere.bmp" end_if dep = p : file_load dep,"sphere_S.bmp" : selection = 1 exit_sub end_if end_if arriv = p :' case d'arrivée if (dep = arriv) or (case$(arriv) = "Occupe") then exit_sub
select arriv case 1 if dep = 03 : mang = 02 : else if dep = 09 : mang = 04 : end_if : end_if
case 2 if dep = 10 : mang = 05 : end_if
case 3 if dep = 01 : mang = 02 : else if dep = 11 : mang = 06 : end_if : end_if
case 4 if dep = 06 : mang = 05 : else if dep = 16 : mang = 09 : end_if : end_if
case 5 if dep = 17 : mang = 10 : end_if
case 6 if dep = 04 : mang = 05 : else if dep = 18 : mang = 11 : end_if : end_if
case 7 if dep = 09 : mang = 08 : else if dep = 21 : mang = 14 : end_if : end_if
case 8 if dep = 10 : mang = 09 : else if dep = 22 : mang = 15 : end_if : end_if
case 9 if dep = 07 : mang = 08 : else if dep = 11 : mang = 10 : else if dep = 01 : mang = 04 : else if dep = 23 : mang = 16 : end_if : end_if : end_if : end_if
case 10 if dep = 08 : mang = 09 : else if dep = 12 : mang = 11 : else if dep = 02 : mang = 05 : else if dep = 24 : mang = 17 : end_if : end_if : end_if : end_if
case 11 if dep = 09 : mang = 10 : else if dep = 13 : mang = 12 : else if dep = 03 : mang = 06 : else if dep = 25 : mang = 18 : end_if : end_if : end_if : end_if
case 12 if dep = 10 : mang = 11 : else if dep = 26 : mang = 19 : end_if : end_if
case 13 if dep = 11 : mang = 12 : else if dep = 27 : mang = 20 : end_if : end_if
case 14 if dep = 16 : mang = 15 : end_if
case 15 if dep = 17 : mang = 16 : end_if
case 16 if dep = 14 : mang = 15 : else if dep = 18 : mang = 17 : else if dep = 04 : mang = 09 : else if dep = 28 : mang = 23 : end_if : end_if : end_if : end_if
case 17 if dep = 19 : mang = 18 : else if dep = 15 : mang = 16 : else if dep = 05 : mang = 10 : else if dep = 29 : mang = 24 : end_if : end_if : end_if : end_if
case 18 if dep = 16 : mang = 17 : else if dep = 20 : mang = 19 : else if dep = 06 : mang = 11 : else if dep = 30 : mang = 25 : end_if : end_if : end_if : end_if
case 19 if dep = 17 : mang = 18 : end_if
case 20 if dep = 18 : mang = 19 : end_if
case 21 if dep = 07 : mang = 14 : else if dep = 23 : mang = 22 : end_if : end_if
case 22 if dep = 08 : mang = 15 : else if dep = 24 : mang = 23 : end_if : end_if
case 23 if dep = 21 : mang = 22 : else if dep = 25 : mang = 24 : else if dep = 09 : mang = 16 : else if dep = 31 : mang = 28 : end_if : end_if : end_if : end_if
case 24 if dep = 22 : mang = 23 : else if dep = 26 : mang = 25 : else if dep = 10 : mang = 17 : else if dep = 32 : mang = 29 : end_if : end_if : end_if : end_if
case 25 if dep = 23 : mang = 24 : else if dep = 27 : mang = 26 : else if dep = 11 : mang = 18 : else if dep = 33 : mang = 30 : end_if : end_if : end_if : end_if
case 26 if dep = 24 : mang = 25 : else if dep = 12 : mang = 19 : end_if : end_if
case 27 if dep = 25 : mang = 26 : else if dep = 13 : mang = 20 : end_if : end_if
case 28 if dep = 30 : mang = 29 : else if dep = 16 : mang = 23 : end_if : end_if
case 29 if dep = 17 : mang = 24 : end_if
case 30 if dep = 28 : mang = 29 : else if dep = 18 : mang = 25 : end_if : end_if
case 31 if dep = 33 : mang = 32 : else if dep = 23 : mang = 28 : end_if : end_if
case 32 if dep = 24 : mang = 29 : end_if
case 33 if dep = 31 : mang = 32 : else if dep = 25 : mang = 30 : end_if : end_if
end_select
Jouer_Le_Coup(arriv,dep,mang)
END_SUB rem ============================================================================ SUB Jouer_Le_Coup(arriv,dep,mang)
if case$(mang) = "Occupe" ' occuper l'arrivée file_load arriv,"sphere.bmp" case$(arriv) = "Occupe" ' Libérer le départ file_load dep,"pion.bmp" case$(dep) = "Libre" ' Manger le pion file_load mang,"pion.bmp" case$(mang) = "Libre" Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) selection = 0 end_if if Nb_coup = 31 then Bravo() END_SUB rem ============================================================================ SUB Info() dim_local t$ t$ = " Le solitaire est un jeu de tablier." + chr$(13) t$ = t$ + " Il s'agit ici du solitaire anglais en forme de croix grecque à 33 trous." + chr$(13) t$ = t$ + " Au départ tous les trous contienent une bille (ou pion ou boule) à l'exception" + chr$(13) t$ = t$ + "du trou central qui est vide." + chr$(13) t$ = t$ + "Le but du jeu est de 'manger' toutes les pièces pour ne conserver qu'une seule." + chr$(13) t$ = t$ + "Pour supprimer une pièce, il faut que 2 pièces soient adjacentes et qu'elles" + chr$(13) t$ = t$ + "soient suivies d'une case vide." + chr$(13) t$ = t$ + "La 1ère pièce saute par-dessus la seconde pour rejoindre la case vide." + chr$(13) t$ = t$ + "La seconde pièce est alors retirée du tablier." + chr$(13) t$ = t$ + "Les sauts ne peuvent se faire qu'horizontalement ou verticalement et non en diagonale " + chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Pour jouer, utilisez votre souris." + chr$(13) t$ = t$ + "Cliquez d'abord sur la boule à déplacer, puis sur la case d'arrivée qui doit" + chr$(13) t$ = t$ + "être nécessairement vide, en sautant par dessus une case contenant une boule."+chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Vous pouvez démarrer/arrêter le chronomètre à l'aide des boutons adéquats" + chr$(13)+chr$(13) t$ = t$ + "************* B O N D I V E R T I S S E M E N T ***********************" message t$ END_SUB rem ============================================================================ ' Régler le volume du haut-parleur SUB Bravo() dim_local q$ q$ = chr$(34) show 400 file_open_write 9999,"bravo.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+q$+"Bravo.... Tu es un champion !!!"+q$ file_writeln 9999,"Set speech=CreateObject("+q$+"sapi.spvoice"+q$+")" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "bravo.vbs" file_delete "bravo.vbs" pause 500 : hide 400
END_SUB rem ============================================================================
SUB Quitter() dim_local termine% if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 termine% = dll_call1("KillProcessByHandle",handle(0)) end_if END_SUB rem ============================================================================ rem ============================================================================ SUB Autorun() dim_local depart, arrivee, mange nouveau() restore read depart while depart <> 0 read arrivee : read mange file_load depart, "pion.bmp" : ' effacer file_load arrivee,"sphere.bmp" : ' deplacer file_load mange, "pion.bmp" : ' manger read depart Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) pause 500 : ' à modifier selon vos préferences end_while pause 1000 Bravo()
END_SUB
rem ============================================================================ ' Solution Solitaire anglais (31 coups) ' départ,arrivée,mangé data 29,17,24 data 26,24,25 data 33,25,30 data 24,26,25 data 27,25,26 data 18,30,25 data 06,18,11 data 13,11,12 data 18,06,11 data 20,18,19 data 09,11,10 data 02,10,05 data 10,12,11 data 03,11,06 data 12,10,11 data 01,09,04 data 16,04,09 data 14,16,15 data 17,15,16 data 28,16,23 data 31,33,32 data 33,25,30 data 25,11,18 data 11,09,10 data 09,23,16 data 07,09,08 data 04,16,09 data 16,28,23 data 21,23,22 data 28,16,23 data 15,17,16 data 0 rem ============================================================================
je mets les 2 images (elles sont converties par le forum de bmp -> jpg) => Je peux les mettre en bmp quelque part ou modifier les extensions dans les sources pour les utiliser Je rajoute un bravo alternatif pour ceux qui préféreraient une image plus soft. | |
| | | 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 du SOLITAIRE Lun 26 Jan 2015 - 1:08 | |
| - Jicehel a écrit:
- Je rajoute un bravo alternatif pour ceux qui préféreraient une image plus soft.
Personnellement je ne connais pas beaucoup de Panoramiciens adeptes du soft! - Bravo, Jicehel:
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Lun 26 Jan 2015 - 10:21 | |
| J'aurais pu mettre une jeune femme avec les cheveux ébouriffés par le vent pour le clin d'oeil, mais bon, je n'ai pas voulu encouragé la polution du sujet car je crois que ça commence un peu à agacer JL35. Personnellement, je n'ai aucune envie de l'agacer, ça pourrait nuir aux idées machiveliques qu'il a pour trouver de bonnes idées d'utilitaires. Tient, d'ailleurs avec les onglets, on devrait pouvoir compiler certains utilitaires graphiques dans un seul, avec changement d'outil en cliquant sur l'onglet. Il faudra que j'y réfléchisse dans une quinzaine de jours (le temps que l'abonnement à mon jeu s'arrète).
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Lun 26 Jan 2015 - 23:19 | |
| Je te mets une version modifiée de ton programme. L'idée, c'est que le programme prenne le solitaire depuis un fichier texte. Ce fichier contiendra aussi la solution du puzzle à terme, mais là ce soir, je n'avais pas le temps de le coder (je n'ai pas encore commencé à jouer ... ) Le code donne: - Code:
-
rem ============================================================================ rem Jeu du Solitaire par Papydall modifié par Jicehel rem V2.0 réalisée le 26/01/2015 rem ============================================================================
' =============================================================================== rem Programme principal rem ============================================================================
init() Solitaire_Anglais() end
rem ============================================================================
'=============================================================================== SUB Init() label clic dim p : ' Numéro du picture cliqué (la case) dim w : w = 40 : ' Taille de l'image d'un pion dim hi, li : hi = 100 : li = 600 : ' hauteur et largeur du chronomètre dim nbc_max, nbl_max : nbc_max = 15 : nbl_max = 9 : ' nombre de colonnes et de lignes maximales dim case$(nbc_max*nbl_max) : ' Etat des cases ' 3 états possibles : - " " => Case impossible (les pions ne peuvent pas y aller) ' - "x" => Case occupée par un pion ' - "." => Il y a un trou dim f$ : ' Variable temporaire stockant le nom du fichier sur lequel on travaille dim h,l dim coup dim dep : ' La case de départ dim arriv : ' La case d'arrivée dim mang : ' dim Nb_coup dim Nb_col, Nb_l
color 0,255,255,255 : width 0,700 : height 0,700
form 400 : left 400,50 : top 400,10 : width 400,600 : height 400,600 : hide 400 alpha 500 : parent 500,400 : top 500,height(400)-80 : left 500,50 font_bold 500 : font_size 500,22 : caption 500," !!! BRAVO !!! TU ES UN CHAMPION !"
alpha 520 : top 520,10 : left 520, 100 : font_bold 520 : font_size 520,24 font_color 520, 0,0,255 : caption 520,"Jeu du Solitaire" button 550 : top 550,400 : left 550,50 : caption 550,"Nouveau" font_bold 550 : font_size 550,16 : width 550,100 : on_click 550,clic
' button 600 : top 600,400 : left 600,180 : caption 600,"Autorun" ' font_bold 600 : font_size 600,16 : width 600,100 : on_click 600,clic
button 700 : top 700,400 : left 700,300 : caption 700,"Quitter" font_bold 700 : font_size 700,16 : width 700,100 : on_click 700,clic
button 800 : : top 800,400 : left 800,450 : caption 800,"Info" font_bold 800 : font_size 800,16 : width 800,100 : on_click 800,clic
dll_on "KGF.dll" f$ = "chronometre.swf" Flash_In_HTML(f$,0,10,450,li,hi) END_SUB rem ============================================================================
' =============================================================================== ' Intégrer un objet Flash dans un objet HTML ' Anim$ est le nom du fichier Flash d'extension SWF ' fo est le numéro du form ' xo,yo coordonnées du coin supérieur gauche ' Larg et Haut sont les dimensions de la fenêtre de vision rem ============================================================================
SUB Flash_In_HTML(Anim$,fo,xo,yo,larg,haut) dim_local hnd%, res%, url$,q$ ,WB1% q$ = chr$(34) caption fo,Anim$ file_open_write 9999,"flash.html" file_writeln 9999,"<embed src='"+Anim$+"'"+q$+" width="+q$+str$(larg)+q$+" height="+q$+str$(haut)+q$+">" file_close 9999 hnd% = handle(fo) url$ = "file://"+dir_current$+"/flash.html" WB1% = dll_call1("WB_Create",hnd%) res% = dll_call5("WB_Locate",WB1%,xo,yo,larg+50,haut+50) res% = dll_call2("WB_Url",WB1%,adr(url$)) file_delete "flash.html" END_SUB rem ============================================================================
' =============================================================================== ' Solitaire anglais de 33 cases. ' La case 17 est vide
SUB Solitaire_Anglais() dim_local l1, Ligne_lue$, s$, indice FILE_OPEN_READ 1,"Solitaire_anglais.txt" FILE_READLN 1, Ligne_lue$ : ' Première ligne: Nb de colonnes; Nb de lignes; Solution disponible s$ = right$(left$(Ligne_lue$,4),2) : Nb_col = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-5) s$ = right$(left$(Ligne_lue$,3),1) : Nb_l = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-4) ' ici on ajoutera le test pour savoir si la solution est dans le fichier FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ p=1 : l1 = 1 while file_eof(1) <> 1 FILE_READLN 1, Ligne_lue$ Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) Ligne_lue$ = left$(Ligne_lue$ + string$(Nb_col," "),Nb_col) for indice = 1 to Nb_col picture p : width p,w : height p,w if left$(Ligne_lue$,1)<>" " on_click p, clic hint p,str$(p) end_if top p, 10 top p,10+(w+2)* l1 : left p,10+(w+2)*indice case$(p) = left$(Ligne_lue$,1) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-1) p=p+1 next indice l1 = l1+1 end_while picture 250 : parent 250, 400 : width 250,width(400)-50 : height 250,height(400)-50 file_load 50,"bravo.bmp" Nouveau() END_SUB rem ===========================================================================
' =============================================================================== SUB Nouveau() dim_local p coup = 0 : Nb_coup = 0 : caption 0,"" for p = 1 to Nb_col * Nb_l if case$(p) = "x" then file_load p,"sphere.bmp" if case$(p) = "." then file_load p,"pion.bmp" next p END_SUB rem ============================================================================
' =============================================================================== clic: p = number_click if p = 550 then Nouveau() : return if p = 700 then Quitter() : return if p = 800 then info() : return if coup = 0 and case$(p) = "." then return Decode_Clic(p) return rem ============================================================================
' =============================================================================== SUB Decode_Clic(p)
if case$(p) = "x" if coup = 1 then file_load dep,"sphere.bmp" dep = p : file_load dep,"sphere_S.bmp" : coup = 1 exit_sub end_if arriv = p :' case d'arrivée if dep = arriv then exit_sub mang = 0 if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col if mang > 0 then Jouer_Le_Coup(arriv,dep,mang) END_SUB
rem ============================================================================
' =============================================================================== SUB Jouer_Le_Coup(arriv,dep,mang) if case$(mang) = "x" ' occuper l'arrivée file_load arriv,"sphere.bmp" case$(arriv) = "x" ' Libérer le départ file_load dep,"pion.bmp" case$(dep) = "." ' Manger le pion file_load mang,"pion.bmp" case$(mang) = "." Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) coup = 0 end_if if Nb_coup = 31 then Bravo() END_SUB rem ============================================================================
' =============================================================================== SUB Info() dim_local t$ t$ = " Le solitaire est un jeu de tablier." + chr$(13) t$ = t$ + " Il s'agit ici du solitaire anglais en forme de croix grecque à 33 trous." + chr$(13) t$ = t$ + " Au départ tous les trous contienent une bille (ou pion ou boule) à l'exception" + chr$(13) t$ = t$ + "du trou central qui est vide." + chr$(13) t$ = t$ + "Le but du jeu est de 'manger' toutes les pièces pour ne conserver qu'une seule." + chr$(13) t$ = t$ + "Pour supprimer une pièce, il faut que 2 pièces soient adjacentes et qu'elles" + chr$(13) t$ = t$ + "soient suivies d'une case vide." + chr$(13) t$ = t$ + "La 1ère pièce saute par-dessus la seconde pour rejoindre la case vide." + chr$(13) t$ = t$ + "La seconde pièce est alors retirée du tablier." + chr$(13) t$ = t$ + "Les sauts ne peuvent se faire qu'horizontalement ou verticalement et non en diagonale " + chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Pour jouer, utilisez votre souris." + chr$(13) t$ = t$ + "Cliquez d'abord sur la boule à déplacer, puis sur la case d'arrivée qui doit" + chr$(13) t$ = t$ + "être nécessairement vide, en sautant par dessus une case contenant une boule."+chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Vous pouvez démarrer/arrêter le chronomètre à l'aide des boutons adéquats" + chr$(13)+chr$(13) t$ = t$ + "************* B O N D I V E R T I S S E M E N T ***********************" message t$ END_SUB rem ============================================================================
' =============================================================================== ' Régler le volume du haut-parleur SUB Bravo() dim_local q$ q$ = chr$(34) show 400 file_open_write 9999,"bravo.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+q$+"Bravo.... Tu es un champion !!!"+q$ file_writeln 9999,"Set speech=CreateObject("+q$+"sapi.spvoice"+q$+")" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "bravo.vbs" file_delete "bravo.vbs" pause 500 : hide 400
END_SUB rem ============================================================================
' =============================================================================== SUB Quitter() dim_local termine% if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 termine% = dll_call1("KillProcessByHandle",handle(0)) end_if END_SUB rem ============================================================================ Pour le fichier "Solitaire_anglais.txt" ça donne: - Code:
-
c:09 l:7 sol:0 abcdefg ------- 1| xxx 2| xxx 3|xxxxxxx 4|xxx.xxx 5|xxxxxxx 6| xxx 7| xxx Après il faut juste remettre le bouton Autorun, l'activer si sol vaut 1 et charger les déplacements dans un tableau Après la résolution automatique calculée, perso, j'ai du mal à la concevoir. Ce serait plus pour un matheux comme toi | |
| | | 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 du SOLITAIRE Mar 27 Jan 2015 - 0:49 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Mar 27 Jan 2015 - 17:41 | |
| Voilà, j'ai ajouté la partie pour gérer la solution pour l'autorun, ça donne ça: - Code:
-
rem ============================================================================ rem Jeu du Solitaire par Papydall modifié par Jicehel rem V2.0 réalisée le 26/01/2015 rem ============================================================================
' =============================================================================== rem Programme principal rem ============================================================================
init() Solitaire_Anglais() end
rem ============================================================================
'=============================================================================== SUB Init()
rem ============================================================================ label clic
rem ============================================================================ dim p : ' Numéro du picture cliqué (la case) dim w : w = 40 : ' Taille de l'image d'un pion dim hi, li : hi = 100 : li = 600 : ' hauteur et largeur du chronomètre dim nbc_max, nbl_max : nbc_max = 15 : nbl_max = 9 : ' nombre de colonnes et de lignes maximales dim case$(nbc_max*nbl_max) : ' Etat des cases ' 3 états possibles : - " " => Case impossible (les pions ne peuvent pas y aller) ' - "x" => Case occupée par un pion ' - "." => Il y a un trou dim f$ : ' Variable temporaire stockant le nom du fichier sur lequel on travaille dim h,l dim coup dim dep : ' La case de départ dim arriv : ' La case d'arrivée dim mang : ' dim Nb_coup dim Nb_col, Nb_l dim Sol : ' Marqueur indiquant si la Solution est renseignée dans la définition du solitaire dim T_sol(200,3) : ' Tableau pour stocker la solution (200 coups max ...) dim Cpt_Sol: ' Nombre de coup de la solution
rem ============================================================================ color 0,255,255,255 : width 0,700 : height 0,700
form 400 : left 400,50 : top 400,10 : width 400,600 : height 400,600 : hide 400 alpha 500 : parent 500,400 : top 500,height(400)-80 : left 500,50 font_bold 500 : font_size 500,22 : caption 500," !!! BRAVO !!! TU ES UN CHAMPION !"
alpha 520 : top 520,10 : left 520, 170 : font_bold 520 : font_size 520,24 font_color 520, 0,0,255 : caption 520,"Jeu du Solitaire"
button 550 : top 550,460 : left 550,50 : caption 550,"Nouveau" font_bold 550 : font_size 550,16 : width 550,100 : on_click 550,clic
button 600 : top 600,460 : left 600,180 : caption 600,"Autorun" font_bold 600 : font_size 600,16 : width 600,100 : on_click 600,clic : inactive 600
button 700 : top 700,460 : left 700,300 : caption 700,"Quitter" font_bold 700 : font_size 700,16 : width 700,100 : on_click 700,clic
button 800 : : top 800,460 : left 800,450 : caption 800,"Info" font_bold 800 : font_size 800,16 : width 800,100 : on_click 800,clic
dll_on "KGF.dll" : f$ = "chronometre.swf" : Flash_In_HTML(f$,0,10,500,li,hi) END_SUB rem ============================================================================
' =============================================================================== ' Intégrer un objet Flash dans un objet HTML ' Anim$ est le nom du fichier Flash d'extension SWF ' fo est le numéro du form ' xo,yo coordonnées du coin supérieur gauche ' Larg et Haut sont les dimensions de la fenêtre de vision rem ============================================================================
SUB Flash_In_HTML(Anim$,fo,xo,yo,larg,haut) dim_local hnd%, res%, url$,q$ ,WB1% q$ = chr$(34) caption fo,Anim$ file_open_write 9999,"flash.html" file_writeln 9999,"<embed src='"+Anim$+"'"+q$+" width="+q$+str$(larg)+q$+" height="+q$+str$(haut)+q$+">" file_close 9999 hnd% = handle(fo) url$ = "file://"+dir_current$+"/flash.html" WB1% = dll_call1("WB_Create",hnd%) res% = dll_call5("WB_Locate",WB1%,xo,yo,larg+50,haut+50) res% = dll_call2("WB_Url",WB1%,adr(url$)) file_delete "flash.html" END_SUB rem ============================================================================
' =============================================================================== ' Solitaire anglais de 33 cases. ' La case 17 est vide
SUB Solitaire_Anglais() dim_local l1, Ligne_lue$, s$, indice, Parcours_Ligne ' FILE_OPEN_READ 1,"Solitaire_anglais.txt" FILE_OPEN_READ 1,"diamant.txt" FILE_READLN 1, Ligne_lue$ : ' Première ligne: Nb de colonnes; Nb de lignes; Solution disponible s$ = right$(left$(Ligne_lue$,4),2) : Nb_col = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-5) s$ = right$(left$(Ligne_lue$,3),1) : Nb_l = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-4) s$ = right$(left$(Ligne_lue$,5),1) : Sol = val(s$) FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ p=1 : l1 = 1 for Parcours_Ligne= 1 to Nb_l FILE_READLN 1, Ligne_lue$ Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) Ligne_lue$ = left$(Ligne_lue$ + string$(Nb_col," "),Nb_col) for indice = 1 to Nb_col picture p : width p,w : height p,w if left$(Ligne_lue$,1)<>" " on_click p, clic hint p,str$(p) end_if top p, 10 top p,10+(w+2)* l1 : left p,10+(w+2)*indice case$(p) = left$(Ligne_lue$,1) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-1) p=p+1 next indice l1 = l1+1 next Parcours_Ligne if Sol = 1 FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ indice = -1 while file_eof(1) <> 1 FILE_READLN 1, Ligne_lue$ while len(Ligne_lue$) >=4 indice = indice + 1 s$ = left$(Ligne_lue$,2) : dep = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) s$ = left$(Ligne_lue$,2) : arriv = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 if len(Ligne_lue$) > 2 then Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-3) if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col T_sol(indice,1) = dep : T_sol(indice,2) = mang : T_sol(indice,3) = arriv end_while end_while Cpt_Sol = indice : active 600 end_if picture 250 : parent 250, 400 : width 250,width(400)-50 : height 250,height(400)-50 file_load 50,"bravo.bmp" Nouveau() END_SUB rem ===========================================================================
' =============================================================================== SUB Nouveau() dim_local p coup = 0 : Nb_coup = 0 : caption 0,"" for p = 1 to Nb_col * Nb_l if case$(p) = "x" then file_load p,"sphere.bmp" if case$(p) = "." then file_load p,"pion.bmp" next p END_SUB rem ============================================================================
' =============================================================================== clic: p = number_click if p = 550 then Nouveau() : return if p = 600 then Autorun() : return if p = 700 then Quitter() : return if p = 800 then info() : return if coup = 0 and case$(p) = "." then return Decode_Clic(p) return rem ============================================================================
' =============================================================================== SUB Decode_Clic(p)
if case$(p) = "x" if coup = 1 then file_load dep,"sphere.bmp" dep = p : file_load dep,"sphere_S.bmp" : coup = 1 exit_sub end_if arriv = p :' case d'arrivée if dep = arriv then exit_sub mang = 0 if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col if mang > 0 then Jouer_Le_Coup(arriv,dep,mang) END_SUB
rem ============================================================================
' =============================================================================== SUB Jouer_Le_Coup(arriv,dep,mang) if case$(mang) = "x" ' occuper l'arrivée file_load arriv,"sphere.bmp" case$(arriv) = "x" ' Libérer le départ file_load dep,"pion.bmp" case$(dep) = "." ' Manger le pion file_load mang,"pion.bmp" case$(mang) = "." Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) coup = 0 end_if if Nb_coup = 31 then Bravo() END_SUB rem ============================================================================
' =============================================================================== SUB Info() dim_local t$ t$ = " Le solitaire est un jeu de tablier." + chr$(13) t$ = t$ + " Il s'agit ici du solitaire anglais en forme de croix grecque à 33 trous." + chr$(13) t$ = t$ + " Au départ tous les trous contienent une bille (ou pion ou boule) à l'exception" + chr$(13) t$ = t$ + "du trou central qui est vide." + chr$(13) t$ = t$ + "Le but du jeu est de 'manger' toutes les pièces pour ne conserver qu'une seule." + chr$(13) t$ = t$ + "Pour supprimer une pièce, il faut que 2 pièces soient adjacentes et qu'elles" + chr$(13) t$ = t$ + "soient suivies d'une case vide." + chr$(13) t$ = t$ + "La 1ère pièce saute par-dessus la seconde pour rejoindre la case vide." + chr$(13) t$ = t$ + "La seconde pièce est alors retirée du tablier." + chr$(13) t$ = t$ + "Les sauts ne peuvent se faire qu'horizontalement ou verticalement et non en diagonale " + chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Pour jouer, utilisez votre souris." + chr$(13) t$ = t$ + "Cliquez d'abord sur la boule à déplacer, puis sur la case d'arrivée qui doit" + chr$(13) t$ = t$ + "être nécessairement vide, en sautant par dessus une case contenant une boule."+chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Vous pouvez démarrer/arrêter le chronomètre à l'aide des boutons adéquats" + chr$(13)+chr$(13) t$ = t$ + "************* B O N D I V E R T I S S E M E N T ***********************" message t$ END_SUB rem ============================================================================
' =============================================================================== ' Régler le volume du haut-parleur SUB Bravo() dim_local q$ q$ = chr$(34) show 400 file_open_write 9999,"bravo.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+q$+"Bravo.... Tu es un champion !!!"+q$ file_writeln 9999,"Set speech=CreateObject("+q$+"sapi.spvoice"+q$+")" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "bravo.vbs" file_delete "bravo.vbs" pause 500 : hide 400
END_SUB rem ============================================================================
' =============================================================================== SUB Quitter() dim_local termine% if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 termine% = dll_call1("KillProcessByHandle",handle(0)) end_if END_SUB rem ============================================================================
' =============================================================================== SUB Autorun() dim_local depart, arrivee, mange nouveau() while Nb_coup <= Cpt_Sol Caption 0, str$(T_sol(Nb_coup,1)) + ":" +str$(T_sol(Nb_coup,2)) + ":" +str$(T_sol(Nb_coup,3)) file_load T_sol(Nb_coup,1), "pion.bmp" : ' effacer file_load T_sol(Nb_coup,3),"sphere.bmp" : ' deplacer file_load T_sol(Nb_coup,2), "pion.bmp" : ' manger Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) pause 500 : ' à modifier selon vos préferences end_while pause 1000 Bravo()
END_SUB Je donne un fichier exemple de solitaire. Il en existe plein à code, je vais en mettre quelques un au fil du temps pour que tu les mettes dans ton zip. Si tu veux, on peut faire un article sur le Solitaire (dans les jeux classiques en continuation des autres articles) Fichier: "diamant.txt" - Code:
-
c:11 l:9 sol:1 abcdefghijk ----------- 1| xxx 2| xxxxx 3| xxxxxxx 4| xxxxxxxxx 5|xxxxx.xxxxx 6| xxxxxxxxx 7| xxxxxxx 8| xxxxx 9| xxx
Solution: d5f5 d3d5 c5e5 a5c5 b4d4 d7d5 b6d6 f3d3 f1f3 c3e3 d2f2 f7d7 c7e7 f9f7 d8f8 e4e2 e1e3 e6e8 e9e7 g2e2 e2e4 e4e6 c5e5 g4g2 g1g3 i4g4 h2h4 i6i4 k5i5 f3h3 i3g3 i4i6 g4i4 j4h4 f7d7 d7d5 d4d6 h7f7 g9g7 h5h7 j6h6 f5f3 f3h3 h3h5 h5f5 e5g5 f7f5 d6f6 g6g8 i7g7 f5h5 h5h7 h7f7 f7f9 h8f8 f9f7 f7f5 Après il faudrait coder la partie "selection du solitaire". Il faut prévoir qu'il en existent des dizaines différents. | |
| | | 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 du SOLITAIRE Mar 27 Jan 2015 - 17:43 | |
| - Jicehel a écrit:
- Perso, j'ai mis une image de pion en rouge, mais on peut simplement augmenter la luminosité du pion sélectionné par exemple puisque l'on utilise kgf.dll
J’ai refais mon apprentissage de Panoramic : Pour changer la luminosité d’un PICTURE, on n’a pas besoin de KGF.DLL. Panoramic nous offre la commande BRIGHTNESS N,VDans la SUB Decode_Clic(p), j’ai changé file_load dep,"sphere_S.bmp" par brightness p,50 et ça marche. EDIT : dans ton dernier code, l'AutoRun est à revoir : il reste 3 boules ! Re EDIT : jette un oeil ici | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Mar 27 Jan 2015 - 18:27 | |
| Oui, j'ai fais ça rapidos pendant ma pause au boulot mais je regarde ce soir, je n'ai pas pofiné ... Déjà que j'ai pris une bonne pause pour le coder car j'avais fait des bétises, je n'ai pas voulu abuser mais j'ai peut être posté un peu vite, je regarde | |
| | | 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 du SOLITAIRE Mar 27 Jan 2015 - 18:35 | |
| Pas de problème, Jicehel. C’est ainsi qu’on progresse. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Mar 27 Jan 2015 - 18:36 | |
| Par contre pour moi l'autorun fonctionne. Peut être un problème de copie du fichier texte sur le forum. je ferais un zip avec les fichiers. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Mar 27 Jan 2015 - 21:32 | |
| Voilà, j'ai mis les plateaux de jeu (quelques uns, il faudra que j'en fasse d'autre plus tard) ici: Fichier zip avec les plateauxSinon j'ai intégré ta trouvaille sur le Brighness dans le code, ça donne ça: - Code:
-
rem ============================================================================ rem Jeu du Solitaire par Papydall modifié par Jicehel rem V2.0 réalisée le 26/01/2015 rem ============================================================================
' =============================================================================== rem Programme principal rem ============================================================================
init() Solitaire_Anglais() end
rem ============================================================================
'=============================================================================== SUB Init()
rem ============================================================================ label clic
rem ============================================================================ dim p : ' Numéro du picture cliqué (la case) dim w : w = 40 : ' Taille de l'image d'un pion dim hi, li : hi = 100 : li = 600 : ' hauteur et largeur du chronomètre dim nbc_max, nbl_max : nbc_max = 15 : nbl_max = 9 : ' nombre de colonnes et de lignes maximales dim case$(nbc_max*nbl_max) : ' Etat des cases ' 3 états possibles : - " " => Case impossible (les pions ne peuvent pas y aller) ' - "x" => Case occupée par un pion ' - "." => Il y a un trou dim f$ : ' Variable temporaire stockant le nom du fichier sur lequel on travaille dim h,l dim coup dim dep : ' La case de départ dim arriv : ' La case d'arrivée dim mang : ' dim Nb_coup dim Nb_col, Nb_l dim Sol : ' Marqueur indiquant si la Solution est renseignée dans la définition du solitaire dim T_sol(200,3) : ' Tableau pour stocker la solution (200 coups max ...) dim Cpt_Sol: ' Nombre de coup de la solution
rem ============================================================================ color 0,255,255,255 : width 0,700 : height 0,700
form 400 : left 400,50 : top 400,10 : width 400,600 : height 400,600 : hide 400 alpha 500 : parent 500,400 : top 500,height(400)-80 : left 500,50 font_bold 500 : font_size 500,22 : caption 500," !!! BRAVO !!! TU ES UN CHAMPION !"
alpha 520 : top 520,10 : left 520, 170 : font_bold 520 : font_size 520,24 font_color 520, 0,0,255 : caption 520,"Jeu du Solitaire"
button 550 : top 550,460 : left 550,50 : caption 550,"Nouveau" font_bold 550 : font_size 550,16 : width 550,100 : on_click 550,clic
button 600 : top 600,460 : left 600,180 : caption 600,"Autorun" font_bold 600 : font_size 600,16 : width 600,100 : on_click 600,clic : inactive 600
button 700 : top 700,460 : left 700,300 : caption 700,"Quitter" font_bold 700 : font_size 700,16 : width 700,100 : on_click 700,clic
button 800 : : top 800,460 : left 800,450 : caption 800,"Info" font_bold 800 : font_size 800,16 : width 800,100 : on_click 800,clic
dll_on "KGF.dll" : f$ = "chronometre.swf" : Flash_In_HTML(f$,0,10,500,li,hi) END_SUB rem ============================================================================
' =============================================================================== ' Intégrer un objet Flash dans un objet HTML ' Anim$ est le nom du fichier Flash d'extension SWF ' fo est le numéro du form ' xo,yo coordonnées du coin supérieur gauche ' Larg et Haut sont les dimensions de la fenêtre de vision rem ============================================================================
SUB Flash_In_HTML(Anim$,fo,xo,yo,larg,haut) dim_local hnd%, res%, url$,q$ ,WB1% q$ = chr$(34) caption fo,Anim$ file_open_write 9999,"flash.html" file_writeln 9999,"<embed src='"+Anim$+"'"+q$+" width="+q$+str$(larg)+q$+" height="+q$+str$(haut)+q$+">" file_close 9999 hnd% = handle(fo) url$ = "file://"+dir_current$+"/flash.html" WB1% = dll_call1("WB_Create",hnd%) res% = dll_call5("WB_Locate",WB1%,xo,yo,larg+50,haut+50) res% = dll_call2("WB_Url",WB1%,adr(url$)) file_delete "flash.html" END_SUB rem ============================================================================
' =============================================================================== ' Solitaire anglais de 33 cases. ' La case 17 est vide
SUB Solitaire_Anglais() dim_local l1, Ligne_lue$, s$, indice, Parcours_Ligne ' FILE_OPEN_READ 1,"Solitaire_anglais.txt" FILE_OPEN_READ 1,"s.txt" FILE_READLN 1, Ligne_lue$ : ' Première ligne: Nb de colonnes; Nb de lignes; Solution disponible s$ = right$(left$(Ligne_lue$,4),2) : Nb_col = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-5) s$ = right$(left$(Ligne_lue$,3),1) : Nb_l = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-4) s$ = right$(left$(Ligne_lue$,5),1) : Sol = val(s$) FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ p=1 : l1 = 1 for Parcours_Ligne= 1 to Nb_l FILE_READLN 1, Ligne_lue$ Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) Ligne_lue$ = left$(Ligne_lue$ + string$(Nb_col," "),Nb_col) for indice = 1 to Nb_col picture p : width p,w : height p,w if left$(Ligne_lue$,1)<>" " on_click p, clic hint p,str$(p) end_if top p, 10 top p,10+(w+2)* l1 : left p,10+(w+2)*indice case$(p) = left$(Ligne_lue$,1) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-1) p=p+1 next indice l1 = l1+1 next Parcours_Ligne if Sol = 1 FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ indice = -1 while file_eof(1) <> 1 FILE_READLN 1, Ligne_lue$ while len(Ligne_lue$) >=4 indice = indice + 1 s$ = left$(Ligne_lue$,2) : dep = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) s$ = left$(Ligne_lue$,2) : arriv = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 if len(Ligne_lue$) > 2 then Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-3) if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col T_sol(indice,1) = dep : T_sol(indice,2) = mang : T_sol(indice,3) = arriv end_while end_while Cpt_Sol = indice : active 600 end_if picture 250 : parent 250, 400 : width 250,width(400)-50 : height 250,height(400)-50 file_load 50,"bravo.bmp" Nouveau() END_SUB rem ===========================================================================
' =============================================================================== SUB Nouveau() dim_local p coup = 0 : Nb_coup = 0 : caption 0,"" for p = 1 to Nb_col * Nb_l if case$(p) = "x" then file_load p,"sphere.bmp" if case$(p) = "." then file_load p,"pion.bmp" next p END_SUB rem ============================================================================
' =============================================================================== clic: p = number_click if p = 550 then Nouveau() : return if p = 600 then Autorun() : return if p = 700 then Quitter() : return if p = 800 then info() : return if coup = 0 and case$(p) = "." then return Decode_Clic(p) return rem ============================================================================
' =============================================================================== SUB Decode_Clic(p)
if case$(p) = "x" if coup = 1 then file_load dep,"sphere.bmp" dep = p : brightness p,50 : coup = 1 exit_sub end_if arriv = p :' case d'arrivée if dep = arriv then exit_sub mang = 0 if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col if mang > 0 then Jouer_Le_Coup(arriv,dep,mang) END_SUB
rem ============================================================================
' =============================================================================== SUB Jouer_Le_Coup(arriv,dep,mang) if case$(mang) = "x" ' occuper l'arrivée file_load arriv,"sphere.bmp" case$(arriv) = "x" ' Libérer le départ file_load dep,"pion.bmp" case$(dep) = "." ' Manger le pion file_load mang,"pion.bmp" case$(mang) = "." Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) coup = 0 end_if if Nb_coup = 31 then Bravo() END_SUB rem ============================================================================
' =============================================================================== SUB Info() dim_local t$ t$ = " Le solitaire est un jeu de tablier." + chr$(13) t$ = t$ + " Il s'agit ici du solitaire anglais en forme de croix grecque à 33 trous." + chr$(13) t$ = t$ + " Au départ tous les trous contienent une bille (ou pion ou boule) à l'exception" + chr$(13) t$ = t$ + "du trou central qui est vide." + chr$(13) t$ = t$ + "Le but du jeu est de 'manger' toutes les pièces pour ne conserver qu'une seule." + chr$(13) t$ = t$ + "Pour supprimer une pièce, il faut que 2 pièces soient adjacentes et qu'elles" + chr$(13) t$ = t$ + "soient suivies d'une case vide." + chr$(13) t$ = t$ + "La 1ère pièce saute par-dessus la seconde pour rejoindre la case vide." + chr$(13) t$ = t$ + "La seconde pièce est alors retirée du tablier." + chr$(13) t$ = t$ + "Les sauts ne peuvent se faire qu'horizontalement ou verticalement et non en diagonale " + chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Pour jouer, utilisez votre souris." + chr$(13) t$ = t$ + "Cliquez d'abord sur la boule à déplacer, puis sur la case d'arrivée qui doit" + chr$(13) t$ = t$ + "être nécessairement vide, en sautant par dessus une case contenant une boule."+chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Vous pouvez démarrer/arrêter le chronomètre à l'aide des boutons adéquats" + chr$(13)+chr$(13) t$ = t$ + "************* B O N D I V E R T I S S E M E N T ***********************" message t$ END_SUB rem ============================================================================
' =============================================================================== ' Régler le volume du haut-parleur SUB Bravo() dim_local q$ q$ = chr$(34) show 400 file_open_write 9999,"bravo.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+q$+"Bravo.... Tu es un champion !!!"+q$ file_writeln 9999,"Set speech=CreateObject("+q$+"sapi.spvoice"+q$+")" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "bravo.vbs" file_delete "bravo.vbs" pause 500 : hide 400
END_SUB rem ============================================================================
' =============================================================================== SUB Quitter() dim_local termine% if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 termine% = dll_call1("KillProcessByHandle",handle(0)) end_if END_SUB rem ============================================================================
' =============================================================================== SUB Autorun() dim_local depart, arrivee, mange nouveau() inactive 700 : inactive 600 : inactive 550 : inactive 800 while Nb_coup <= Cpt_Sol Caption 0, str$(T_sol(Nb_coup,1)) + ":" +str$(T_sol(Nb_coup,2)) + ":" +str$(T_sol(Nb_coup,3)) brightness T_sol(Nb_coup,1),50: wait 300 file_load T_sol(Nb_coup,1),"pion.bmp" : ' effacer file_load T_sol(Nb_coup,3),"sphere.bmp" : ' deplacer file_load T_sol(Nb_coup,2), "pion.bmp" : ' manger brightness T_sol(Nb_coup,3),50: wait 300 file_load T_sol(Nb_coup,3),"sphere.bmp" : ' remettre normal Nb_coup = Nb_coup + 1 : wait 500 caption 0,"Nombre de coups joués : " + str$(Nb_coup) end_while active 700 : active 550 : active 800 pause 800 Bravo()
END_SUB
Bon, je te laisse faire un peu de cosmétique et intégrer la partie choix du plateau de jeu ? De mon côté, si tu veux, je peux faire un article pour le mag sur le solitaire et faire d'autres plateaux + solution PS: je n'ai pas fini la solution du plateau anglais faute de temps. Ca fera parti de ce qui seront fait plus tard. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu du SOLITAIRE Mar 27 Jan 2015 - 22:09 | |
| Dès que possible j'irais voir ton fichier avec les plateaux, Jicehel,
En attendant, j'utilise ta version avec les pions rouges qui indiquent le pion en cours de jeu, et je dois dire que cela rend le jeu plus lisible.
Pour le moment, je n'ai pas réussi à faire mieux que 3 pions restants.
A+
Quelle bonne idée, Papydall, tu as eu de faire ce jeu en Panoramic ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Mar 27 Jan 2015 - 22:14 | |
| En plus qu'en tu auras trouvé la solution du plateau, tu as tellement de variantes (formes, positions de départs, etc...) que tu en auras pour un moment à te casser la tête ... | |
| | | 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 du SOLITAIRE Mer 28 Jan 2015 - 0:17 | |
| Bravo, jicehel ! Tu est un champion ! - Jicehel a écrit:
- De mon côté, si tu veux, je peux faire un article pour le mag sur le solitaire et faire d'autres plateaux + solution
Moi je veux bien ; vas-y pour l’article. C’est ton plein droit. Remarque : Dans ton code lignes 148 et 149 : - Code:
-
picture 250 : parent 250, 400 : width 250,width(400)-50 : height 250,height(400)-50 file_load 50,"bravo.bmp" C’est : - Code:
-
File_load 250,"bravo.bmp" Autre anomalie : Quand on joue quelques coups et on demande Nouveau, Nouveau ne réinitialise pas le plateau. Il faut réinitialiser case$(p) dans SUB Nouveau() - Jean Claude a écrit:
- Quelle bonne idée, Papydall, tu as eu de faire ce jeu en Panoramic !
C’est juste pour donner du boulot à Jicehel et à tous ceux qui veulent bien sûr s’y mettre. C’est à toi … | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu du SOLITAIRE Mer 28 Jan 2015 - 1:28 | |
| Ah oui, tu as raison. Je n'avais pas du tout testé ça, mais du coup en plus, ce n'était plus logique au niveau de l'organisation du programme (et j'avais oublié de fermer le fichier.) Il faudrait coder: le bouton quitter pour le changer en arrêter quand le programme est en autorun la sélection du plateau de jeu Là, j'ai fini de jouer et de regarder "La France a un incroyable talent", alors je mets la version qui corrige le problème de gestion du bouton démarrer + le 250 qui était resté en 50 - Code:
-
rem ============================================================================ rem Jeu du Solitaire par Papydall modifié par Jicehel rem V2.0 réalisée le 26/01/2015 rem ============================================================================
' =============================================================================== rem Programme principal rem ============================================================================
init() Solitaire() end
rem ============================================================================
'=============================================================================== SUB Init()
rem ============================================================================ label clic
rem ============================================================================ dim p : ' Numéro du picture cliqué (la case) dim w : w = 40 : ' Taille de l'image d'un pion dim hi, li : hi = 100 : li = 600 : ' hauteur et largeur du chronomètre dim nbc_max, nbl_max : nbc_max = 15 : nbl_max = 9 : ' nombre de colonnes et de lignes maximales dim case$(nbc_max*nbl_max) : ' Etat des cases ' 3 états possibles : - " " => Case impossible (les pions ne peuvent pas y aller) ' - "x" => Case occupée par un pion ' - "." => Il y a un trou dim f$ : ' Variable temporaire stockant le nom du fichier sur lequel on travaille dim h,l dim coup dim dep : ' La case de départ dim arriv : ' La case d'arrivée dim mang : ' dim Nb_coup dim Nb_col, Nb_l dim Sol : ' Marqueur indiquant si la Solution est renseignée dans la définition du solitaire dim T_sol(200,3) : ' Tableau pour stocker la solution (200 coups max ...) dim Cpt_Sol: ' Nombre de coup de la solution
rem ============================================================================ color 0,255,255,255 : width 0,700 : height 0,700
form 400 : left 400,50 : top 400,10 : width 400,600 : height 400,600 : hide 400 alpha 500 : parent 500,400 : top 500,height(400)-80 : left 500,50 font_bold 500 : font_size 500,22 : caption 500," !!! BRAVO !!! TU ES UN CHAMPION !"
alpha 520 : top 520,10 : left 520, 170 : font_bold 520 : font_size 520,24 font_color 520, 0,0,255 : caption 520,"Jeu du Solitaire"
button 550 : top 550,460 : left 550,50 : caption 550,"Nouveau" font_bold 550 : font_size 550,16 : width 550,100 : on_click 550,clic
button 600 : top 600,460 : left 600,180 : caption 600,"Autorun" font_bold 600 : font_size 600,16 : width 600,100 : on_click 600,clic : inactive 600
button 700 : top 700,460 : left 700,300 : caption 700,"Quitter" font_bold 700 : font_size 700,16 : width 700,100 : on_click 700,clic
button 800 : : top 800,460 : left 800,450 : caption 800,"Info" font_bold 800 : font_size 800,16 : width 800,100 : on_click 800,clic
dll_on "KGF.dll" : f$ = "chronometre.swf" : Flash_In_HTML(f$,0,10,500,li,hi) END_SUB rem ============================================================================
' =============================================================================== ' Intégrer un objet Flash dans un objet HTML ' Anim$ est le nom du fichier Flash d'extension SWF ' fo est le numéro du form ' xo,yo coordonnées du coin supérieur gauche ' Larg et Haut sont les dimensions de la fenêtre de vision rem ============================================================================
SUB Flash_In_HTML(Anim$,fo,xo,yo,larg,haut) dim_local hnd%, res%, url$,q$ ,WB1% q$ = chr$(34) caption fo,Anim$ file_open_write 9999,"flash.html" file_writeln 9999,"<embed src='"+Anim$+"'"+q$+" width="+q$+str$(larg)+q$+" height="+q$+str$(haut)+q$+">" file_close 9999 hnd% = handle(fo) url$ = "file://"+dir_current$+"/flash.html" WB1% = dll_call1("WB_Create",hnd%) res% = dll_call5("WB_Locate",WB1%,xo,yo,larg+50,haut+50) res% = dll_call2("WB_Url",WB1%,adr(url$)) file_delete "flash.html" END_SUB rem ============================================================================
' =============================================================================== ' Solitaire anglais de 33 cases. ' La case 17 est vide
SUB Solitaire() dim_local l1, Ligne_lue$, s$, indice, Parcours_Ligne ' FILE_OPEN_READ 1,"Solitaire_anglais.txt" FILE_OPEN_READ 1,"s.txt" FILE_READLN 1, Ligne_lue$ : ' Première ligne: Nb de colonnes; Nb de lignes; Solution disponible s$ = right$(left$(Ligne_lue$,4),2) : Nb_col = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-5) s$ = right$(left$(Ligne_lue$,3),1) : Nb_l = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-4) s$ = right$(left$(Ligne_lue$,5),1) : Sol = val(s$) FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ p=1 : l1 = 1 for Parcours_Ligne= 1 to Nb_l FILE_READLN 1, Ligne_lue$ Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) Ligne_lue$ = left$(Ligne_lue$ + string$(Nb_col," "),Nb_col) for indice = 1 to Nb_col if object_exists(p) = 0 then picture p : width p,w : height p,w if left$(Ligne_lue$,1)<>" " on_click p, clic hint p,str$(p) end_if top p, 10 top p,10+(w+2)* l1 : left p,10+(w+2)*indice case$(p) = left$(Ligne_lue$,1) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-1) p=p+1 next indice l1 = l1+1 next Parcours_Ligne if Sol = 1 FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ indice = -1 while file_eof(1) <> 1 FILE_READLN 1, Ligne_lue$ while len(Ligne_lue$) >=4 indice = indice + 1 s$ = left$(Ligne_lue$,2) : dep = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) s$ = left$(Ligne_lue$,2) : arriv = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 if len(Ligne_lue$) > 2 then Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-3) if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col T_sol(indice,1) = dep : T_sol(indice,2) = mang : T_sol(indice,3) = arriv end_while end_while Cpt_Sol = indice : active 600 end_if FILE_CLOSE 1 if object_exists(250) = 0 then picture 250 : parent 250, 400 : width 250,width(400)-50 : height 250,height(400)-50 file_load 250,"bravo.bmp" coup = 0 : Nb_coup = 0 : caption 0,"" for indice = 1 to Nb_col * Nb_l if case$(indice) = "x" then file_load indice,"sphere.bmp" if case$(indice) = "." then file_load indice,"pion.bmp" next indice END_SUB rem ============================================================================
' =============================================================================== clic: p = number_click if p = 550 then Solitaire() : return if p = 600 then Autorun() : return if p = 700 then Quitter() : return if p = 800 then info() : return if coup = 0 and case$(p) = "." then return Decode_Clic(p) return rem ============================================================================
' =============================================================================== SUB Decode_Clic(p)
if case$(p) = "x" if coup = 1 then file_load dep,"sphere.bmp" dep = p : brightness p,50 : coup = 1 exit_sub end_if arriv = p :' case d'arrivée if dep = arriv then exit_sub mang = 0 if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col if mang > 0 then Jouer_Le_Coup(arriv,dep,mang) END_SUB
rem ============================================================================
' =============================================================================== SUB Jouer_Le_Coup(arriv,dep,mang) if case$(mang) = "x" ' occuper l'arrivée file_load arriv,"sphere.bmp" case$(arriv) = "x" ' Libérer le départ file_load dep,"pion.bmp" case$(dep) = "." ' Manger le pion file_load mang,"pion.bmp" case$(mang) = "." Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) coup = 0 end_if if Nb_coup = 31 then Bravo() END_SUB rem ============================================================================
' =============================================================================== SUB Info() dim_local t$ t$ = " Le solitaire est un jeu de tablier." + chr$(13) t$ = t$ + " Il s'agit ici du solitaire anglais en forme de croix grecque à 33 trous." + chr$(13) t$ = t$ + " Au départ tous les trous contienent une bille (ou pion ou boule) à l'exception" + chr$(13) t$ = t$ + "du trou central qui est vide." + chr$(13) t$ = t$ + "Le but du jeu est de 'manger' toutes les pièces pour ne conserver qu'une seule." + chr$(13) t$ = t$ + "Pour supprimer une pièce, il faut que 2 pièces soient adjacentes et qu'elles" + chr$(13) t$ = t$ + "soient suivies d'une case vide." + chr$(13) t$ = t$ + "La 1ère pièce saute par-dessus la seconde pour rejoindre la case vide." + chr$(13) t$ = t$ + "La seconde pièce est alors retirée du tablier." + chr$(13) t$ = t$ + "Les sauts ne peuvent se faire qu'horizontalement ou verticalement et non en diagonale " + chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Pour jouer, utilisez votre souris." + chr$(13) t$ = t$ + "Cliquez d'abord sur la boule à déplacer, puis sur la case d'arrivée qui doit" + chr$(13) t$ = t$ + "être nécessairement vide, en sautant par dessus une case contenant une boule."+chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Vous pouvez démarrer/arrêter le chronomètre à l'aide des boutons adéquats" + chr$(13)+chr$(13) t$ = t$ + "************* B O N D I V E R T I S S E M E N T ***********************" message t$ END_SUB rem ============================================================================
' =============================================================================== ' Régler le volume du haut-parleur SUB Bravo() dim_local q$ q$ = chr$(34) show 400 file_open_write 9999,"bravo.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+q$+"Bravo.... Tu es un champion !!!"+q$ file_writeln 9999,"Set speech=CreateObject("+q$+"sapi.spvoice"+q$+")" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "bravo.vbs" file_delete "bravo.vbs" pause 500 : hide 400
END_SUB rem ============================================================================
' =============================================================================== SUB Quitter() dim_local termine% if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 termine% = dll_call1("KillProcessByHandle",handle(0)) end_if END_SUB rem ============================================================================
' =============================================================================== SUB Autorun() dim_local depart, arrivee, mange solitaire() inactive 700 : inactive 600 : inactive 550 : inactive 800 while Nb_coup <= Cpt_Sol Caption 0, str$(T_sol(Nb_coup,1)) + ":" +str$(T_sol(Nb_coup,2)) + ":" +str$(T_sol(Nb_coup,3)) brightness T_sol(Nb_coup,1),50: wait 200 file_load T_sol(Nb_coup,1),"pion.bmp" : ' effacer file_load T_sol(Nb_coup,3),"sphere.bmp" : ' deplacer file_load T_sol(Nb_coup,2), "pion.bmp" : ' manger brightness T_sol(Nb_coup,3),50: wait 200 file_load T_sol(Nb_coup,3),"sphere.bmp" : ' remettre normal Nb_coup = Nb_coup + 1 : wait 300 caption 0,"Nombre de coups joués : " + str$(Nb_coup) end_while active 700 : active 550 : active 800 pause 800 Bravo()
END_SUB Aller en cadeau, j'ai redimensionné l'image pour que ça tienne mieux dans l'image qui apparaît en fin de jeu | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu du SOLITAIRE Mer 28 Jan 2015 - 20:40 | |
| De mon coté j'ai continué sur le code de Jicehel avec les plateaux (pistes). J'ai ajouté un combo pour choisir le plateau (que j'ai appelé piste). pour commencer il est impératif de choisir une piste. Pour changer de piste il faut relancer le programme. Il faut, évidement, récupérer les éléments plateaux sur le lien qu'a indiqué Jicehel => http://fzip.li/WD57/ Je n'ai pas réussi à trouver le moyen de centrer la piste dans la fenêtre. - Code:
-
rem ============================================================================ rem Jeu du Solitaire par Papydall modifié par Jicehel rem V2.0 réalisée le 26/01/2015 rem ============================================================================
' =============================================================================== rem Programme principal rem ============================================================================
init()
end
rem ============================================================================
'=============================================================================== SUB Init()
rem ============================================================================ label clic,choix rem ============================================================================ dim n%:' choiX aléatoire du plateaux dim p : ' Numéro du picture cliqué (la case) dim w : w = 40 : ' Taille de l'image d'un pion dim hi, li : hi = 100 : li = 600 : ' hauteur et largeur du chronomètre dim nbc_max, nbl_max : nbc_max = 15 : nbl_max = 9 : ' nombre de colonnes et de lignes maximales dim case$(nbc_max*nbl_max) : ' Etat des cases ' 3 états possibles : - " " => Case impossible (les pions ne peuvent pas y aller) ' - "x" => Case occupée par un pion ' - "." => Il y a un trou dim a$,f$,f2$(7) : ' Variable temporaire stockant le nom du fichier sur lequel on travaille dim h,l dim coup dim dep : ' La case de départ dim arriv : ' La case d'arrivée dim mang : ' dim Nb_coup dim Nb_col, Nb_l dim Sol : ' Marqueur indiquant si la Solution est renseignée dans la définition du solitaire dim T_sol(200,3) : ' Tableau pour stocker la solution (200 coups max ...) dim Cpt_Sol: ' Nombre de coup de la solution
f2$(1)="Solitaire_anglais.txt" f2$(2)="diamant.txt" f2$(3)="holicron.txt" f2$(4)="Le_rectangle.txt" f2$(5)="Noeud_papillon.txt" f2$(6)="Sphere.txt" f2$(7)="S.txt"
rem ============================================================================ color 0,255,255,255 : width 0,700 : height 0,700 border_small 0 : left 0,(screen_x/2)-(width(0)/2) : top 0,(screen_y/2)-(height(0)/2)
form 400 : left 400,50 : top 400,10 : width 400,700 : height 400,700 : hide 400 alpha 500 : parent 500,400 : top 500,height(400)-80 : left 500,50 font_bold 500 : font_size 500,22 : caption 500," !!! BRAVO !!! TU ES UN CHAMPION !"
alpha 520 : top 520,10 : left 520, 170 : font_bold 520 : font_size 520,24 font_color 520, 0,0,255 : caption 520,"Jeu du Solitaire"
button 550 : top 550,460 : left 550,20 : caption 550,"Nouveau" font_bold 550 : font_size 550,16 : width 550,100 : on_click 550,clic : inactive 550
button 600 : top 600,460 : left 600,140 : caption 600,"Autorun" font_bold 600 : font_size 600,16 : width 600,100 : on_click 600,clic : inactive 600
button 700 : top 700,460 : left 700,260 : caption 700,"Quitter" font_bold 700 : font_size 700,16 : width 700,100 : on_click 700,clic
button 800 : : top 800,460 : left 800,560 : caption 800,"Info" font_bold 800 : font_size 800,16 : width 800,100 : on_click 800,clic
combo 900 : : top 900,460 : left 900,380 : text 900,"Choix Piste" font_bold 900 : font_size 900,12 : width 900,160 : on_click 900,choix for n%=1 to 7:item_add 900,f2$(n%):next n% dll_on "KGF.dll" : f$ = "chronometre.swf" : Flash_In_HTML(f$,0,10,500,li,hi) END_SUB rem ============================================================================ choix: a$=item_index$(900) if a$="Solitaire_anglais.txt" then n%=1 if a$="diamant.txt" then n%=2 if a$="holicron.txt" then n%=3 if a$="Le_rectangle.txt" then n%=4 if a$="Noeud_papillon.txt" then n%=5 if a$="Sphere.txt" then n%=6 if a$="S.txt" then n%=7 active 550 : set_focus 550 : inactive 900 : Solitaire() return
' =============================================================================== ' Intégrer un objet Flash dans un objet HTML ' Anim$ est le nom du fichier Flash d'extension SWF ' fo est le numéro du form ' xo,yo coordonnées du coin supérieur gauche ' Larg et Haut sont les dimensions de la fenêtre de vision rem ============================================================================
SUB Flash_In_HTML(Anim$,fo,xo,yo,larg,haut) dim_local hnd%, res%, url$,q$ ,WB1% q$ = chr$(34) caption fo,Anim$ file_open_write 9999,"flash.html" file_writeln 9999,"<embed src='"+Anim$+"'"+q$+" width="+q$+str$(larg)+q$+" height="+q$+str$(haut)+q$+">" file_close 9999 hnd% = handle(fo) url$ = "file://"+dir_current$+"/flash.html" WB1% = dll_call1("WB_Create",hnd%) res% = dll_call5("WB_Locate",WB1%,xo,yo,larg+50,haut+50) res% = dll_call2("WB_Url",WB1%,adr(url$)) file_delete "flash.html" END_SUB rem ============================================================================
' =============================================================================== ' Solitaire anglais de 33 cases. ' La case 17 est vide
SUB Solitaire() text 900,"Choix Piste" dim_local l1, Ligne_lue$, s$, indice, Parcours_Ligne ' FILE_OPEN_READ 1,"Solitaire_anglais.txt" FILE_OPEN_READ 1,f2$(n%) FILE_READLN 1, Ligne_lue$ : ' Première ligne: Nb de colonnes; Nb de lignes; Solution disponible s$ = right$(left$(Ligne_lue$,4),2) : Nb_col = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-5) s$ = right$(left$(Ligne_lue$,3),1) : Nb_l = val(s$) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-4) s$ = right$(left$(Ligne_lue$,5),1) : Sol = val(s$) FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ p=1 : l1 = 1 for Parcours_Ligne= 1 to Nb_l FILE_READLN 1, Ligne_lue$ Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) Ligne_lue$ = left$(Ligne_lue$ + string$(Nb_col," "),Nb_col) for indice = 1 to Nb_col if object_exists(p) = 0 then picture p : width p,w : height p,w if left$(Ligne_lue$,1)<>" " on_click p, clic hint p,str$(p) end_if top p, 10 top p,10+(w+2)* l1 : left p,10+(w+2)*indice case$(p) = left$(Ligne_lue$,1) : Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-1) p=p+1 next indice l1 = l1+1 next Parcours_Ligne if Sol = 1 FILE_READLN 1, Ligne_lue$ FILE_READLN 1, Ligne_lue$ indice = -1 while file_eof(1) <> 1 FILE_READLN 1, Ligne_lue$ while len(Ligne_lue$) >=4 indice = indice + 1 s$ = left$(Ligne_lue$,2) : dep = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-2) s$ = left$(Ligne_lue$,2) : arriv = (val(right$(s$,1))-1) * Nb_col + asc(left$(s$,1)) - asc("a") +1 if len(Ligne_lue$) > 2 then Ligne_lue$ = right$(Ligne_lue$,len(Ligne_lue$)-3) if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col T_sol(indice,1) = dep : T_sol(indice,2) = mang : T_sol(indice,3) = arriv end_while end_while Cpt_Sol = indice : active 600 end_if FILE_CLOSE 1 if object_exists(250) = 0 then picture 250 : parent 250, 400 : width 250,width(400)-50 : height 250,height(400)-50 file_load 250,"bravo.bmp" coup = 0 : Nb_coup = 0 : caption 0,"" for indice = 1 to Nb_col * Nb_l if case$(indice) = "x" then file_load indice,"sphere.bmp" if case$(indice) = "." then file_load indice,"pion.bmp" next indice END_SUB rem ============================================================================
' =============================================================================== clic: p = number_click if p = 550 then Solitaire() : return if p = 600 then Autorun() : return if p = 700 then Quitter() : return if p = 800 then info() : return if coup = 0 and case$(p) = "." then return Decode_Clic(p) return rem ============================================================================
' =============================================================================== SUB Decode_Clic(p)
if case$(p) = "x" if coup = 1 then file_load dep,"sphere.bmp" dep = p : brightness p,50 : coup = 1 exit_sub end_if
arriv = p :' case d'arrivée if dep = arriv then exit_sub mang = 0 if arriv = dep-2 then mang = dep-1 if arriv = dep+2 then mang = dep+1 if arriv = dep-2*Nb_col then mang=dep-Nb_col if arriv = dep+2*Nb_col then mang=dep+Nb_col if mang > 0 then Jouer_Le_Coup(arriv,dep,mang) END_SUB
rem ============================================================================
' =============================================================================== SUB Jouer_Le_Coup(arriv,dep,mang) if case$(mang) = "x" ' occuper l'arrivée file_load arriv,"sphere.bmp" case$(arriv) = "x" ' Libérer le départ file_load dep,"pion.bmp" case$(dep) = "." ' Manger le pion file_load mang,"pion.bmp" case$(mang) = "." Nb_coup = Nb_coup + 1 caption 0,"Nombre de coups joués : " + str$(Nb_coup) coup = 0 end_if if Nb_coup = 31 then Bravo() END_SUB rem ============================================================================
' =============================================================================== SUB Info() dim_local t$ t$ = " Le solitaire est un jeu de tablier." + chr$(13) t$ = t$ + " Il s'agit ici du solitaire anglais en forme de croix grecque à 33 trous." + chr$(13) t$ = t$ + " Au départ tous les trous contienent une bille (ou pion ou boule) à l'exception" + chr$(13) t$ = t$ + "du trou central qui est vide." + chr$(13) t$ = t$ + "Le but du jeu est de 'manger' toutes les pièces pour ne conserver qu'une seule." + chr$(13) t$ = t$ + "Pour supprimer une pièce, il faut que 2 pièces soient adjacentes et qu'elles" + chr$(13) t$ = t$ + "soient suivies d'une case vide." + chr$(13) t$ = t$ + "La 1ère pièce saute par-dessus la seconde pour rejoindre la case vide." + chr$(13) t$ = t$ + "La seconde pièce est alors retirée du tablier." + chr$(13) t$ = t$ + "Les sauts ne peuvent se faire qu'horizontalement ou verticalement et non en diagonale " + chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Pour jouer, utilisez votre souris." + chr$(13) t$ = t$ + "Cliquez d'abord sur la boule à déplacer, puis sur la case d'arrivée qui doit" + chr$(13) t$ = t$ + "être nécessairement vide, en sautant par dessus une case contenant une boule."+chr$(13) t$ = t$ + "------------------------------------------------------------------------------" + chr$(13) t$ = t$ + "Vous pouvez démarrer/arrêter le chronomètre à l'aide des boutons adéquats" + chr$(13)+chr$(13) t$ = t$ + "************* B O N D I V E R T I S S E M E N T ***********************" message t$ END_SUB rem ============================================================================
' =============================================================================== ' Régler le volume du haut-parleur SUB Bravo() dim_local q$ q$ = chr$(34) show 400 file_open_write 9999,"bravo.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+q$+"Bravo.... Tu es un champion !!!"+q$ file_writeln 9999,"Set speech=CreateObject("+q$+"sapi.spvoice"+q$+")" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "bravo.vbs" file_delete "bravo.vbs" pause 500 : hide 400
END_SUB rem ============================================================================
' =============================================================================== SUB Quitter() dim_local termine% if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 termine% = dll_call1("KillProcessByHandle",handle(0)) end_if END_SUB rem ============================================================================
' =============================================================================== SUB Autorun() dim_local depart, arrivee, mange solitaire() inactive 700 : inactive 600 : inactive 550 : inactive 800 while Nb_coup <= Cpt_Sol Caption 0, str$(T_sol(Nb_coup,1)) + ":" +str$(T_sol(Nb_coup,2)) + ":" +str$(T_sol(Nb_coup,3)) brightness T_sol(Nb_coup,1),50: wait 200 file_load T_sol(Nb_coup,1),"pion.bmp" : ' effacer file_load T_sol(Nb_coup,3),"sphere.bmp" : ' deplacer file_load T_sol(Nb_coup,2), "pion.bmp" : ' manger brightness T_sol(Nb_coup,3),50: wait 200 file_load T_sol(Nb_coup,3),"sphere.bmp" : ' remettre normal Nb_coup = Nb_coup + 1 : wait 300 caption 0,"Nombre de coups joués : " + str$(Nb_coup) pause 800 end_while active 700 : active 550 : active 800 pause 1600 Bravo() END_SUB
A+ PS: un autre bug, sur certains plateaux on gagne avant la fin. | |
| | | Contenu sponsorisé
| Sujet: Re: Le jeu du SOLITAIRE | |
| |
| | | | Le jeu du SOLITAIRE | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |