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 |
|
|
| Stratego collaboratif | |
|
+5Yannick JL35 silverman Jean Claude Jicehel 9 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 10:35 | |
| @Jicehel: - Citation :
- (J'ai créé un objet mais je ne pouvais pas le renommer)
Si, si,, ça marche. Tu cliques sur l'objet à renommer, et ses paramètres s'affichent à droite de la liste. Tu remplaces le nom dans le champ EDIT correspondant, et tu utilises le menu Objets/Modifier. Et voilà - c'est fait. Petit détail pour les doublons: on ne peut pas créer de doublons. Le programme ajoute automatiquement "_n" derrière, avec n étant le nombre d'occurrences du même nom, évitant ainsi les doublons, aussi bien en création qu'en modification. Concernant les règles, il y a des combos avec des éléments prédéfinis. C'est évidemment juste une maquette. A terme, même le contenu de ces combos sera dans un fichier de configuration. et on peut ajouter à chacune ce que l'on veut. Comme par exemple "Temps" ou "Touche saisie" pour le sujet, ainsi que deux nouveaux champs "Valeur" qui apparaîtront juste après "Cible" et "Relation" et qui se rapporteront respectivement à ces termes, si le contenu de ces combos l'impose. Exemple: si <temps écoulé> <est plus grand que> <valeur> <200> alors <partie terminée> Pour le moment, mon projet est de garder le mécanisme de création tel qu'il est, en ajoutant ce qui manque (comme décrit ci-dessus), en sécurisant le système (suppression d'objets, cohérence des règles, ...). Puis, je ferai une première version du moteur exploitant ces règles. Je suis d'accord avec toi: une création graphique, visuelle, sera plus sympa. Du genre "faire glisser" des éléments graphiques d'une palette... Faudra y réfléchir, mais en fonction du nombre de possibilités dans chaque position d'une règle, ça peut vite devenir plus fouillis qu'autre chose. Puis, faudra respecter l'ordre logique... enfin, c'est pour plus tard. Pour le moment, j'envisage la syntaxe générale d'une règle de la manière suivante sujet vsujet relation vrelation cible vcible action vaction suite vsuiteLes v... sont des valeurs utilisées en fonction de l'élément qui les précède, si cet élément en a besoin. Actuellement, seul vaction est implémenté dans la maquette, mais le reste suivra. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 11:23 | |
| Voici une nouvelle version, avec ces paramètres à tous les étages: - Code:
-
' moteur_de_jeu_definir_regles.bas
label nouveau, ouvrir, fermer, save, saveas, sortir label creer_objet, clic_type_objet, select_objet, modifier_objet, supprimer_objet label clic_sujet_regle, clic_cible_regle, clic_relation_regle, clic_action_regle label creer_regle, modifier_regle, supprimer_regle, clic_finir_regle, select_regles
dim n_objets% dim n_regles%
dim regles$, no%, no1%, no2% dim no_list_objets%, no_nom_objet%, no_nature_objet%, no_vie_objet% dim no_list_regles%, no_sujet_regle%, no_relation_regle%, no_cible_regle% dim no_action_regle%, no_finir_regle%, no_open_dialog%, no_save_dialog% dim no_Nsujet_regle%, no_Nrelation_regle%, no_Ncible_regle%, no_Naction_regle%, no_Nfinir_regle% dim index_nature_objet%, index_list_objets%, index_list_regles%, index_relation_regle% dim index_action_regle%, index_finir_regle%, index_regle% dim regle_sujet%, regle_cible%
full_space 0
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, nouveau no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." on_click no%,ouvrir no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" on_click no%,fermer no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" on_click no%,sortir no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Objets" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, creer_objet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modifier_objet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer" on_click no%,supprimer_objet no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Règles" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, creer_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modifier_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer" on_click no%,supprimer_regle
no% = no% + 1 : alpha no% : top no%,10 : left no%,10 : caption no%,"Objets:" no% = no% + 1 : list no% : no_list_objets% = no% : top no%,30 : left no%,10 : width no%,150 : height no%,400 on_click no%,select_objet no% = no% + 1 : dlist no%
no% = no% + 1 : alpha no% : top no%,30 : left no%,180 : caption no%,"Nom:" no% = no% + 1 : edit no% : no_nom_objet% = no% : top no%,30 :left no%,220 : width no%,100 no% = no% + 1 : alpha no% : top no%,60 : left no%,180 : caption no%,"Nature:" no% = no% + 1 : combo no% : no_nature_objet% = no% : top no%,60 :left no%,220 : width no%,100 item_add no%,"Décor" item_add no%,"Personnage" item_add no%,"Objet" item_add no%,"Temps écoulé" item_add no%,"Nombre de soldats" on_click no%,clic_type_objet no% = no% + 1 : alpha no% : top no%,90 : left no%,180 : caption no%,"Points de vie:" no% = no% + 1 : spin no% : no_vie_objet% = no% : top no%,90 :left no%,260 : width no%,60
no% = no% + 1 : alpha no% : top no%,10 : left no%,360 : caption no%,"Règles:" no% = no% + 1 : list no% : no_list_regles% = no% : top no%,30 : left no%,360 : width no%,500 : height no%,400 on_click no%,select_regles no% = no% + 1 : dlist no% no% = no% + 1 : alpha no% : top no%,30 : left no%,970 : font_bold no% : caption no%,"Si" no% = no% + 1 : button no% : top no%,60 : left no%,880 : width no%,80 : caption no%,"Sujet" on_click no%,clic_sujet_regle no% = no% + 1 : edit no% : no_sujet_regle% = no% : top no%,60 : left no%,970 : width no%,120 no% = no% + 1 : alpha no% : top no%,60 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Nsujet_regle% = no% : top no%,60 : left no%,1220 : width no%,100 no% = no% + 1 : alpha no% : top no%,90 : left no%,880 : caption no%,"Est en relation" no% = no% + 1 : combo no% : no_relation_regle% = no% : top no%,90 : left no%,970 : width no%,120 item_add no%,"est isolé" item_add no%,"est devant" item_add no%,"est à droite" item_add no%,"est à gauche" item_add no%,"est devant" item_add no%,"touche" item_add no%,"est égal à" item_add no%,"est plus grand que" on_click no%,clic_relation_regle no% = no% + 1 : alpha no% : top no%,90 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Nrelation_regle% = no% : top no%,90 : left no%,1220 : width no%,100 no% = no% + 1 : button no% : top no%,120 : left no%,880 : width no%,80 : caption no%,"Cible" on_click no%,clic_cible_regle no% = no% + 1 : edit no% : no_cible_regle% = no% : top no%,120 : left no%,970 : width no%,120 no% = no% + 1 : alpha no% : top no%,120 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Ncible_regle% = no% : top no%,120 : left no%,1220 : width no%,100 no% = no% + 1 : alpha no% : top no%,160 : left no%,970 : font_bold no% : caption no%,"Alors" no% = no% + 1 : alpha no% : top no%,200 : left no%,880 : caption no%,"Effectuer" no% = no% + 1 : combo no% : no_action_regle% = no% : top no%,200 : left no%,970 : width no%,210 item_add no%,"sujet meurt/est détruit" item_add no%,"déplacer le sujet de N cases en haut" item_add no%,"déplacer le sujet de N cases en bas" item_add no%,"déplacer le sujet de N cases à droite" item_add no%,"déplacer le sujet de N cases à gauche" item_add no%,"retirer N points de vie à la cible" item_add no%,"ajouter N points de vie à la cible" item_add no%,"retirer N points de vie au sujet" item_add no%,"ajouter N points de vie au sujet" item_add no%,"cible meurt/est détruite" on_click no%,clic_action_regle no% = no% + 1 : alpha no% : top no%,200 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Naction_regle% = no% : top no%,200 : left no%,1220 : width no%,100 no% = no% + 1 : alpha no% : top no%,240 : left no%,970 : font_bold no% : caption no%,"Puis" no% = no% + 1 : alpha no% : top no%,280 : left no%,880 : caption no%,"Finir par" no% = no% + 1 : combo no% : no_finir_regle% = no% : top no%,280 : left no%,970 : width no%,150 item_add no%,"enchaîner un autre cycle" item_add no%,"terminer le cycle" on_click no%,clic_finir_regle no% = no% + 1 : alpha no% : top no%,280 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Nfinir_regle% = no% : top no%,280 : left no%,1220 : width no%,100 no% = no% + 1 : : open_dialog no% : no_open_dialog% = no% : filter no%,"Règles *.rgl|*.rgl" no% = no% + 1 : : save_dialog no% : no_save_dialog% = no% : filter no%,"Règles *.rgl|*.rgl"
end
sortir: terminate nouveau: nouveau() return
ouvrir: ouvrir() return
fermer: fermer() return save: save() return saveas: saveas() return clic_type_objet: index_nature_objet% = item_index(no_nature_objet%) select index_nature_objet% case 1: ' décor position no_vie_objet%,0
case 2: ' personnage position no_vie_objet%,100
case 3: ' objet position no_vie_objet%,10 end_select return clic_sujet_regle: clic_sujet_regle() return clic_relation_regle: clic_relation_regle() return
clic_cible_regle: clic_cible_regle%() return clic_action_regle: clic_action_regle() return
clic_finir_regle: clic_finir_regle() return select_regles: select_regles() return
select_objet: select_objet() return creer_objet: creer_objet() return
modifier_objet: modifier_objet() return
supprimer_objet: supprimer_objet() return creer_regle: creer_regle() return
modifier_regle: modifier_regle() return
supprimer_regle: supprimer_regle() return
sub creer_objet() dim_local nom$, i%, cnt% nom$ = trim$(text$(no_nom_objet%)) if nom$="" message "Le nom manque." exit_sub end_if if index_nature_objet%=0 message "La nature n'est pas choisie." exit_sub end_if cnt% = 0 if count(no_list_objets%)>0 for i%=1 to count(no_list_objets%) if left$(item_read$(no_list_objets%,i%),len(nom$))=nom$ then cnt% = cnt% + 1 next i% end_if if cnt%>0 then nom$ = nom$ + "_"+str$(cnt%) item_add no_list_objets%,nom$ item_add no_list_objets%+1,str$(item_index(no_nature_objet%))+","+str$(position(no_vie_objet%)) index_list_objets% = count(no_list_objets%) end_sub
sub modifier_objet() dim_local nom$, i%, cnt% if count(no_list_objets%)=0 message "Aucun objet n'est défini." exit_sub end_if if index_list_objets%=0 message "Aucun objet n'est sélectionné." exit_sub end_if nom$ = trim$(text$(no_nom_objet%)) if nom$="" message "Le nom manque." exit_sub end_if if nom$<>item_read$(no_list_objets%,index_list_objets%) cnt% = 0 for i%=1 to count(no_list_objets%) if left$(item_read$(no_list_objets%,i%),len(nom$))=nom$ then cnt% = cnt% + 1 next i% if cnt%>0 then nom$ = nom$ + "_"+str$(cnt%) end_if item_delete no_list_objets%,index_list_objets% item_insert no_list_objets%,index_list_objets%,nom$ item_delete no_list_objets%+1,index_list_objets% item_insert no_list_objets%+1,index_list_objets%,str$(item_index(no_nature_objet%))+","+str$(position(no_vie_objet%)) end_sub
sub supprimer_objet() if count(no_list_objets%)=0 message "Aucun objet n'est défini." exit_sub end_if if index_list_objets%=0 message "Aucun objet n'est sélectionné." exit_sub end_if item_delete no_list_objets%,index_list_objets% item_delete no_list_objets%+1,index_list_objets% index_list_objets% = 0 end_sub
sub select_objet() dim_local nom$, s$ index_list_objets% = item_index(no_list_objets%) text no_nom_objet%,item_read$(no_list_objets%,index_list_objets%) s$ = item_read$(no_list_objets%+1,index_list_objets%) index_nature_objet% = val(left$(s$,1)) text no_nature_objet%,item_read$(no_nature_objet%,index_nature_objet%) position no_vie_objet%,val(mid$(s$,3,len(s$))) end_sub
sub select_regles() dim_local s$, p%, n% index_list_regles% = item_index(no_list_regles%) s$ = item_read$(no_list_regles%+1,index_list_regles%)
p% = instr(s$,",") regle_sujet% = val(left$(s$,p%-1)) text no_sujet_regle%,item_read$(no_list_objets%,regle_sujet%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Nsujet_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_relation_regle% = val(left$(s$,p%-1)) text no_relation_regle%,item_read$(no_relation_regle%,index_relation_regle%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Nrelation_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") regle_cible% = val(left$(s$,p%-1)) text no_cible_regle%,item_read$(no_list_objets%,regle_cible%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Ncible_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_action_regle% = val(left$(s$,p%-1)) text no_action_regle%,item_read$(no_action_regle%,index_action_regle%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Naction_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_finir_regle% = val(left$(s$,p%-1)) text no_finir_regle%,item_read$(no_finir_regle%,index_finir_regle%) s$ = mid$(s$,p%+1,len(s$))
n% = val(s$) position no_Nfinir_regle%,n%
end_sub
sub clic_sujet_regle() if index_list_objets%=0 message "Aucun objet n'est choisi." exit_sub end_if regle_sujet% = index_list_objets% text no_sujet_regle%,item_read$(no_list_objets%,regle_sujet%) end_sub
sub clic_relation_regle() index_relation_regle% = item_index(no_relation_regle%) end_sub
sub clic_cible_regle%() if index_list_objets%=0 message "Aucun objet n'est choisi." exit_sub end_if regle_cible% = index_list_objets% text no_cible_regle%,item_read$(no_list_objets%,regle_cible%) end_sub
sub clic_action_regle() index_action_regle% = item_index(no_action_regle%) end_sub
sub clic_finir_regle() index_finir_regle% = item_index(no_finir_regle%) end_sub
sub creer_regle() dim_local s$ if regle_sujet%=0 message "Le sujet n'est pas choisi." exit_sub end_if if index_relation_regle%=0 message "La relation n'est pas choisie." exit_sub end_if if regle_cible%=0 message "La cible n'est pas choisie." exit_sub end_if if index_action_regle%=0 message "L'action n'est pas choisie." exit_sub end_if if index_finir_regle%=0 message "La fin n'est pas choisie." exit_sub end_if s$ = "si <"+item_read$(no_list_objets%,regle_sujet%)+">" s$ = s$ + " N=<"+str$(position(no_Nsujet_regle%))+">" s$ = s$ + " <"+item_read$(no_relation_regle%,index_relation_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Nrelation_regle%))+">" s$ = s$ + " <"+item_read$(no_list_objets%,regle_cible%)+">" s$ = s$ + " N=<"+str$(position(no_Ncible_regle%))+">" s$ = s$ + " alors " s$ = s$ + "<"+item_read$(no_action_regle%,index_action_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Naction_regle%))+"> puis " s$ = s$ + "<"+item_read$(no_finir_regle%,index_finir_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Nfinir_regle%))+">" item_add no_list_regles%,s$ s$ = str$(regle_sujet%) +","+str$(position(no_Nsujet_regle%)) s$ = s$ + ","+str$(index_relation_regle%)+","+str$(position(no_Nrelation_regle%)) s$ = s$ + ","+str$(regle_cible%) +","+str$(position(no_Ncible_regle%)) s$ = s$ + ","+str$(index_action_regle%) +","+str$(position(no_Naction_regle%)) s$ = s$ + ","+str$(index_finir_regle%) +","+str$(position(no_Nfinir_regle%)) item_add no_list_regles%+1,s$ end_sub
sub modifier_regle() dim_local s$ if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if
if regle_sujet%=0 message "Le sujet n'est pas choisi." exit_sub end_if if index_relation_regle%=0 message "La relation n'est pas choisie." exit_sub end_if if regle_cible%=0 message "La cible n'est pas choisie." exit_sub end_if if index_action_regle%=0 message "L'action n'est pas choisie." exit_sub end_if if index_finir_regle%=0 message "La fin n'est pas choisie." exit_sub end_if item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles%
s$ = "si <"+item_read$(no_list_objets%,regle_sujet%)+">" s$ = s$ + " <"+item_read$(no_relation_regle%,index_relation_regle%)+">" s$ = s$ + " <"+item_read$(no_list_objets%,regle_cible%)+"> alors " s$ = s$ + "<"+item_read$(no_action_regle%,index_action_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Naction_regle%))+"> puis " s$ = s$ + "<"+item_read$(no_finir_regle%,index_finir_regle%)+">" item_insert no_list_regles%,index_list_regles%,s$ s$ = str$(regle_sujet%)+"," s$ = s$ + str$(position(no_Nsujet_regle%))+"," s$ = s$ + str$(index_relation_regle%)+"," s$ = s$ + str$(position(no_Nrelation_regle%))+"," s$ = s$ + str$(regle_cible%)+"," s$ = s$ + str$(position(no_Ncible_regle%))+"," s$ = s$ + str$(index_action_regle%)+"," s$ = s$ + str$(position(no_Naction_regle%))+"," s$ = s$ + str$(index_finir_regle%)+"," s$ = s$ + str$(position(no_Nfinir_regle%)) item_insert no_list_regles%+1,index_list_regles%,s$ end_sub
sub supprimer_regle() if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles% index_list_regles% = 0 end_sub
sub nouveau() regles$ = "" clear no_list_objets% clear no_list_objets%+1 clear no_list_regles% clear no_list_regles%+1 n_objets% = 0 index_nature_objet% = 0 index_list_objets% = 0 index_list_regles% = 0 index_relation_regle% = 0 index_action_regle% = 0 index_finir_regle% = 0 regle_sujet% = 0 regle_cible% = 0 text no_nom_objet%,"" text no_nature_objet%,"" position no_vie_objet%,0 text no_sujet_regle%,"" text no_relation_regle%,"" text no_cible_regle%,"" text no_action_regle%,"" position no_Ncible_regle%,0 position no_Nrelation_regle%,0 position no_Nsujet_regle%,0 position no_Naction_regle%,0 position no_Nfinir_regle%,0 text no_finir_regle%,""
end_sub
sub ouvrir() dim_local f$, s$, i%, n% f$ = file_name$(no_open_dialog%) if f$="_" then exit_sub if file_exists(f$)=0 message "Le fichier n'existe pas" exit_sub end_if fermer() regles$ = f$ file_open_read 1,regles$ file_readln 1,s$ n% = val(s$) for i%=1 to n% file_readln 1,s$ item_add no_list_objets%,s$ file_readln 1,s$ item_add no_list_objets%+1,s$ next i% file_readln 1,s$ n% = val(s$) if n%>0 for i%=1 to n% file_readln 1,s$ item_add no_list_regles%,s$ file_readln 1,s$ item_add no_list_regles%+1,s$ next i% end_if file_close 1 end_sub
sub fermer() nouveau() end_sub
sub save() dim_local i% if regles$="" message "Aucun fichier n'est ouvert." exit_sub end_if if count(no_list_objets%)=0 message "Il n'y a rien à sauvegarder." exit_sub end_if file_open_write 1,regles$ file_writeln 1,str$(count(no_list_objets%)) for i%=1 to count(no_list_objets%) file_writeln 1,item_read$(no_list_objets%,i%) file_writeln 1,item_read$(no_list_objets%+1,i%) next i% file_writeln 1,str$(count(no_list_regles%)) if count(no_list_regles%)>0 for i%=1 to count(no_list_regles%) file_writeln 1,item_read$(no_list_regles%,i%) file_writeln 1,item_read$(no_list_regles%+1,i%) next i% end_if file_close 1 end_sub
sub saveas() dim_local f$ f$ = file_name$(no_save_dialog%) if f$="_" then exit_sub regles$ = f$ save() end_sub
et le fichier Premier.rgl correspondant: - Code:
-
3 soldat 2,100 bombe 3,10 infirmier 2,100 2 si <soldat> N=<0> <touche> N=<0> <bombe> N=<0> alors <retirer N points de vie au sujet> N=<20> puis <terminer le cycle> N=<0> 1,0,6,0,2,0,8,20,2,0 si <soldat> N=<0> <est devant> N=<0> <infirmier> N=<0> alors <ajouter N points de vie au sujet> N=<5> puis <enchaîner un autre cycle> N=<0> 1,0,2,0,3,0,9,5,1,0
Dernière édition par Klaus le Sam 27 Fév 2016 - 12:22, édité 2 fois | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 11:47 | |
| Une idée, comme ça: faire une sub de chargement de la carte (l'image de fond). Un fichier 'cartexx.terr' contiendrait l'image de fond et les coordonnées des cases infranchissables. Une extension future sera de fabriquer un générateur/éditeur de carte. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 13:03 | |
| @Silverman, bonne idée (comme dans risk)
@Klaus, Si j'ai bien compris, ton "moteur de règles" (je ne sais pas comment l'appeler), est applicable à n'importe quel projet de jeu ? Si c'est le cas, pourrais-tu ouvrir un post spécifique dans "Grands projets réalisés avec Panoramic", ça sera utile pour la suite et ça permet de garder ce post pour le projet de Jicehel. Attention: je ne suis pas entrain de dire que tu gênes, c'est juste pour plus de clarté. Tu pourras donner tes évolutions ici et garder l'autre post pour le "moteur".
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 13:08 | |
| @Jean Claude: Pourquoi pas ? J'hésite encore à qualifier mon petit code comme "grand projet" indépendant. On verra. Cela dependra aussi du jugement de l'auteur de ce fil de discussion, et également de celui de Jack. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 13:24 | |
| Nouvelle version du concepteur de règles. Nouveautés: - en cas de suppression d'un objet, on interdit la suppression si l'objet est encore utilisé dans une règle, et on affiche la règle en question. Sinon, lors de la suppression, on actualise tous les indices "sujet" et "cible" dans les règles, puis on supprime l'objet - le menu "Règles" a maintenant deux nouvelles fonctions "Monter" et "Descendre". Ces fonctions agissent sur la ligne sélectionnée et permettent de la déplacer. - Spoiler:
- Code:
-
' moteur_de_jeu_definir_regles.bas
label nouveau, ouvrir, fermer, save, saveas, sortir label creer_objet, clic_type_objet, select_objet, modifier_objet, supprimer_objet label clic_sujet_regle, clic_cible_regle, clic_relation_regle, clic_action_regle label creer_regle, modifier_regle, supprimer_regle, clic_finir_regle, select_regles label monter_regle, descendre_regle
dim n_objets% dim n_regles%
dim regles$, no%, no1%, no2% dim no_list_objets%, no_nom_objet%, no_nature_objet%, no_vie_objet% dim no_list_regles%, no_sujet_regle%, no_relation_regle%, no_cible_regle% dim no_action_regle%, no_finir_regle%, no_open_dialog%, no_save_dialog% dim no_Nsujet_regle%, no_Nrelation_regle%, no_Ncible_regle%, no_Naction_regle%, no_Nfinir_regle% dim index_nature_objet%, index_list_objets%, index_list_regles%, index_relation_regle% dim index_action_regle%, index_finir_regle%, index_regle% dim regle_sujet%, regle_cible%
full_space 0
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, nouveau no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." on_click no%,ouvrir no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" on_click no%,fermer no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" on_click no%,sortir no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Objets" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, creer_objet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modifier_objet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer" on_click no%,supprimer_objet no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Règles" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, creer_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modifier_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer" on_click no%,supprimer_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Monter" on_click no%, monter_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Descendre" on_click no%, descendre_regle
no% = no% + 1 : alpha no% : top no%,10 : left no%,10 : caption no%,"Objets:" no% = no% + 1 : list no% : no_list_objets% = no% : top no%,30 : left no%,10 : width no%,150 : height no%,400 on_click no%,select_objet no% = no% + 1 : dlist no%
no% = no% + 1 : alpha no% : top no%,30 : left no%,180 : caption no%,"Nom:" no% = no% + 1 : edit no% : no_nom_objet% = no% : top no%,30 :left no%,220 : width no%,100 no% = no% + 1 : alpha no% : top no%,60 : left no%,180 : caption no%,"Nature:" no% = no% + 1 : combo no% : no_nature_objet% = no% : top no%,60 :left no%,220 : width no%,100 item_add no%,"Décor" item_add no%,"Personnage" item_add no%,"Objet" item_add no%,"Temps écoulé" item_add no%,"Nombre de soldats" on_click no%,clic_type_objet no% = no% + 1 : alpha no% : top no%,90 : left no%,180 : caption no%,"Points de vie:" no% = no% + 1 : spin no% : no_vie_objet% = no% : top no%,90 :left no%,260 : width no%,60
no% = no% + 1 : alpha no% : top no%,10 : left no%,360 : caption no%,"Règles:" no% = no% + 1 : list no% : no_list_regles% = no% : top no%,30 : left no%,360 : width no%,500 : height no%,400 on_click no%,select_regles no% = no% + 1 : dlist no% no% = no% + 1 : alpha no% : top no%,30 : left no%,970 : font_bold no% : caption no%,"Si" no% = no% + 1 : button no% : top no%,60 : left no%,880 : width no%,80 : caption no%,"Sujet" on_click no%,clic_sujet_regle no% = no% + 1 : edit no% : no_sujet_regle% = no% : top no%,60 : left no%,970 : width no%,120 no% = no% + 1 : alpha no% : top no%,60 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Nsujet_regle% = no% : top no%,60 : left no%,1220 : width no%,100 no% = no% + 1 : alpha no% : top no%,90 : left no%,880 : caption no%,"Est en relation" no% = no% + 1 : combo no% : no_relation_regle% = no% : top no%,90 : left no%,970 : width no%,120 item_add no%,"est isolé" item_add no%,"est devant" item_add no%,"est à droite" item_add no%,"est à gauche" item_add no%,"est devant" item_add no%,"touche" item_add no%,"est égal à" item_add no%,"est plus grand que" on_click no%,clic_relation_regle no% = no% + 1 : alpha no% : top no%,90 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Nrelation_regle% = no% : top no%,90 : left no%,1220 : width no%,100 no% = no% + 1 : button no% : top no%,120 : left no%,880 : width no%,80 : caption no%,"Cible" on_click no%,clic_cible_regle no% = no% + 1 : edit no% : no_cible_regle% = no% : top no%,120 : left no%,970 : width no%,120 no% = no% + 1 : alpha no% : top no%,120 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Ncible_regle% = no% : top no%,120 : left no%,1220 : width no%,100 no% = no% + 1 : alpha no% : top no%,160 : left no%,970 : font_bold no% : caption no%,"Alors" no% = no% + 1 : alpha no% : top no%,200 : left no%,880 : caption no%,"Effectuer" no% = no% + 1 : combo no% : no_action_regle% = no% : top no%,200 : left no%,970 : width no%,210 item_add no%,"sujet meurt/est détruit" item_add no%,"déplacer le sujet de N cases en haut" item_add no%,"déplacer le sujet de N cases en bas" item_add no%,"déplacer le sujet de N cases à droite" item_add no%,"déplacer le sujet de N cases à gauche" item_add no%,"retirer N points de vie à la cible" item_add no%,"ajouter N points de vie à la cible" item_add no%,"retirer N points de vie au sujet" item_add no%,"ajouter N points de vie au sujet" item_add no%,"cible meurt/est détruite" on_click no%,clic_action_regle no% = no% + 1 : alpha no% : top no%,200 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Naction_regle% = no% : top no%,200 : left no%,1220 : width no%,100 no% = no% + 1 : alpha no% : top no%,240 : left no%,970 : font_bold no% : caption no%,"Puis" no% = no% + 1 : alpha no% : top no%,280 : left no%,880 : caption no%,"Finir par" no% = no% + 1 : combo no% : no_finir_regle% = no% : top no%,280 : left no%,970 : width no%,150 item_add no%,"enchaîner un autre cycle" item_add no%,"terminer le cycle" item_add no%,"continuer règles" item_add no%,"arrêter règles" on_click no%,clic_finir_regle no% = no% + 1 : alpha no% : top no%,280 : left no%,1200 : caption no%,"N" no% = no% + 1 : spin no% : no_Nfinir_regle% = no% : top no%,280 : left no%,1220 : width no%,100 no% = no% + 1 : : open_dialog no% : no_open_dialog% = no% : filter no%,"Règles *.rgl|*.rgl" no% = no% + 1 : : save_dialog no% : no_save_dialog% = no% : filter no%,"Règles *.rgl|*.rgl"
end
sortir: terminate nouveau: nouveau() return
ouvrir: ouvrir() return
fermer: fermer() return save: save() return saveas: saveas() return clic_type_objet: index_nature_objet% = item_index(no_nature_objet%) select index_nature_objet% case 1: ' décor position no_vie_objet%,0
case 2: ' personnage position no_vie_objet%,100
case 3: ' objet position no_vie_objet%,10 end_select return clic_sujet_regle: clic_sujet_regle() return clic_relation_regle: clic_relation_regle() return
clic_cible_regle: clic_cible_regle%() return clic_action_regle: clic_action_regle() return
clic_finir_regle: clic_finir_regle() return select_regles: select_regles(0) return
select_objet: select_objet() return creer_objet: creer_objet() return
modifier_objet: modifier_objet() return
supprimer_objet: supprimer_objet() return creer_regle: creer_regle() return
modifier_regle: modifier_regle() return
supprimer_regle: supprimer_regle() return
monter_regle: monter_regle() return descendre_regle: descendre_regle() return
sub creer_objet() dim_local nom$, i%, cnt% nom$ = trim$(text$(no_nom_objet%)) if nom$="" message "Le nom manque." exit_sub end_if if index_nature_objet%=0 message "La nature n'est pas choisie." exit_sub end_if cnt% = 0 if count(no_list_objets%)>0 for i%=1 to count(no_list_objets%) if left$(item_read$(no_list_objets%,i%),len(nom$))=nom$ then cnt% = cnt% + 1 next i% end_if if cnt%>0 then nom$ = nom$ + "_"+str$(cnt%) item_add no_list_objets%,nom$ item_add no_list_objets%+1,str$(item_index(no_nature_objet%))+","+str$(position(no_vie_objet%)) index_list_objets% = count(no_list_objets%) end_sub
sub modifier_objet() dim_local nom$, i%, cnt% if count(no_list_objets%)=0 message "Aucun objet n'est défini." exit_sub end_if if index_list_objets%=0 message "Aucun objet n'est sélectionné." exit_sub end_if nom$ = trim$(text$(no_nom_objet%)) if nom$="" message "Le nom manque." exit_sub end_if if nom$<>item_read$(no_list_objets%,index_list_objets%) cnt% = 0 for i%=1 to count(no_list_objets%) if left$(item_read$(no_list_objets%,i%),len(nom$))=nom$ then cnt% = cnt% + 1 next i% if cnt%>0 then nom$ = nom$ + "_"+str$(cnt%) end_if item_delete no_list_objets%,index_list_objets% item_insert no_list_objets%,index_list_objets%,nom$ item_delete no_list_objets%+1,index_list_objets% item_insert no_list_objets%+1,index_list_objets%,str$(item_index(no_nature_objet%))+","+str$(position(no_vie_objet%)) end_sub
sub supprimer_objet() dim_local s$, s1$, i%, p%, p1%, p2%, sujet%, cible% if count(no_list_objets%)=0 message "Aucun objet n'est défini." exit_sub end_if if index_list_objets%=0 message "Aucun objet n'est sélectionné." exit_sub end_if if count(no_list_regles%)>0 for i%=1 to count(no_list_regles%) s$ = item_read$(no_list_regles%+1,i%) p% = instr(s$,",") sujet% = val(left$(s$,p%-1)) s$ = mid$(s$,p%+1,len(s$)) p% = instr(s$,",") s$ = mid$(s$,p%+1,len(s$)) p% = instr(s$,",") s$ = mid$(s$,p%+1,len(s$)) p% = instr(s$,",") s$ = mid$(s$,p%+1,len(s$)) p% = instr(s$,",") cible% = val(left$(s$,p%-1)) if (sujet%=index_list_objets%) or (cible%=index_list_objets%) message "Le sujet est encore utilisé dans une règle." select_regles(i%) exit_sub end_if next i% for i%=1 to count(no_list_regles%) s$ = item_read$(no_list_regles%+1,i%) p% = instr(s$,",") : ' fin "sujet" p1% = p% p1% = instr_pos(s$,",",p1%+1) : ' fin "Nsujet" p1% = instr_pos(s$,",",p1%+1) : ' fin "action" p1% = instr_pos(s$,",",p1%+1) : ' fin "Naction" p2% = instr_pos(s$,",",p1%+1) : ' fin "cible" sujet% = val(left$(s$,p%-1)) cible% = val(mid$(s$,p1%+1,p2%-p1%-1)) if (sujet%>index_list_objets%) or (cible%>index_list_objets%) if sujet%>index_list_objets% then sujet% = sujet% - 1 if cible%>index_list_objets% then cible% = cible% - 1 s1$ = str$(sujet%)+mid$(s$,p%,p1%-p%+1)+str$(cible%)+mid$(s$,p2%,len(s$)) item_delete no_list_regles%+1,i% item_insert no_list_regles%+1,i%,s1$ end_if next i% end_if item_delete no_list_objets%,index_list_objets% item_delete no_list_objets%+1,index_list_objets% index_list_objets% = 0 end_sub
sub select_objet() dim_local nom$, s$ index_list_objets% = item_index(no_list_objets%) text no_nom_objet%,item_read$(no_list_objets%,index_list_objets%) s$ = item_read$(no_list_objets%+1,index_list_objets%) index_nature_objet% = val(left$(s$,1)) text no_nature_objet%,item_read$(no_nature_objet%,index_nature_objet%) position no_vie_objet%,val(mid$(s$,3,len(s$))) end_sub
sub select_regles(ind%) dim_local s$, p%, n% if ind%=0 index_list_regles% = item_index(no_list_regles%) else index_list_regles% = ind% end_if s$ = item_read$(no_list_regles%+1,index_list_regles%)
p% = instr(s$,",") regle_sujet% = val(left$(s$,p%-1)) text no_sujet_regle%,item_read$(no_list_objets%,regle_sujet%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Nsujet_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_relation_regle% = val(left$(s$,p%-1)) text no_relation_regle%,item_read$(no_relation_regle%,index_relation_regle%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Nrelation_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") regle_cible% = val(left$(s$,p%-1)) text no_cible_regle%,item_read$(no_list_objets%,regle_cible%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Ncible_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_action_regle% = val(left$(s$,p%-1)) text no_action_regle%,item_read$(no_action_regle%,index_action_regle%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_Naction_regle%,n% s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_finir_regle% = val(left$(s$,p%-1)) text no_finir_regle%,item_read$(no_finir_regle%,index_finir_regle%) s$ = mid$(s$,p%+1,len(s$))
n% = val(s$) position no_Nfinir_regle%,n%
end_sub
sub clic_sujet_regle() if index_list_objets%=0 message "Aucun objet n'est choisi." exit_sub end_if regle_sujet% = index_list_objets% text no_sujet_regle%,item_read$(no_list_objets%,regle_sujet%) end_sub
sub clic_relation_regle() index_relation_regle% = item_index(no_relation_regle%) end_sub
sub clic_cible_regle%() if index_list_objets%=0 message "Aucun objet n'est choisi." exit_sub end_if regle_cible% = index_list_objets% text no_cible_regle%,item_read$(no_list_objets%,regle_cible%) end_sub
sub clic_action_regle() index_action_regle% = item_index(no_action_regle%) end_sub
sub clic_finir_regle() index_finir_regle% = item_index(no_finir_regle%) end_sub
sub creer_regle() dim_local s$ if regle_sujet%=0 message "Le sujet n'est pas choisi." exit_sub end_if if index_relation_regle%=0 message "La relation n'est pas choisie." exit_sub end_if if regle_cible%=0 message "La cible n'est pas choisie." exit_sub end_if if index_action_regle%=0 message "L'action n'est pas choisie." exit_sub end_if if index_finir_regle%=0 message "La fin n'est pas choisie." exit_sub end_if s$ = "si <"+item_read$(no_list_objets%,regle_sujet%)+">" s$ = s$ + " N=<"+str$(position(no_Nsujet_regle%))+">" s$ = s$ + " <"+item_read$(no_relation_regle%,index_relation_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Nrelation_regle%))+">" s$ = s$ + " <"+item_read$(no_list_objets%,regle_cible%)+">" s$ = s$ + " N=<"+str$(position(no_Ncible_regle%))+">" s$ = s$ + " alors " s$ = s$ + "<"+item_read$(no_action_regle%,index_action_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Naction_regle%))+"> puis " s$ = s$ + "<"+item_read$(no_finir_regle%,index_finir_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Nfinir_regle%))+">" item_add no_list_regles%,s$ s$ = str$(regle_sujet%) +","+str$(position(no_Nsujet_regle%)) s$ = s$ + ","+str$(index_relation_regle%)+","+str$(position(no_Nrelation_regle%)) s$ = s$ + ","+str$(regle_cible%) +","+str$(position(no_Ncible_regle%)) s$ = s$ + ","+str$(index_action_regle%) +","+str$(position(no_Naction_regle%)) s$ = s$ + ","+str$(index_finir_regle%) +","+str$(position(no_Nfinir_regle%)) item_add no_list_regles%+1,s$ end_sub
sub modifier_regle() dim_local s$ if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if
if regle_sujet%=0 message "Le sujet n'est pas choisi." exit_sub end_if if index_relation_regle%=0 message "La relation n'est pas choisie." exit_sub end_if if regle_cible%=0 message "La cible n'est pas choisie." exit_sub end_if if index_action_regle%=0 message "L'action n'est pas choisie." exit_sub end_if if index_finir_regle%=0 message "La fin n'est pas choisie." exit_sub end_if item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles%
s$ = "si <"+item_read$(no_list_objets%,regle_sujet%)+">" s$ = s$ + " <"+item_read$(no_relation_regle%,index_relation_regle%)+">" s$ = s$ + " <"+item_read$(no_list_objets%,regle_cible%)+"> alors " s$ = s$ + "<"+item_read$(no_action_regle%,index_action_regle%)+">" s$ = s$ + " N=<"+str$(position(no_Naction_regle%))+"> puis " s$ = s$ + "<"+item_read$(no_finir_regle%,index_finir_regle%)+">" item_insert no_list_regles%,index_list_regles%,s$ s$ = str$(regle_sujet%)+"," s$ = s$ + str$(position(no_Nsujet_regle%))+"," s$ = s$ + str$(index_relation_regle%)+"," s$ = s$ + str$(position(no_Nrelation_regle%))+"," s$ = s$ + str$(regle_cible%)+"," s$ = s$ + str$(position(no_Ncible_regle%))+"," s$ = s$ + str$(index_action_regle%)+"," s$ = s$ + str$(position(no_Naction_regle%))+"," s$ = s$ + str$(index_finir_regle%)+"," s$ = s$ + str$(position(no_Nfinir_regle%)) item_insert no_list_regles%+1,index_list_regles%,s$ end_sub
sub supprimer_regle() if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles% index_list_regles% = 0 end_sub
sub monter_regle() dim_local s$, s1$ if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if if index_list_regles%=1 message "La règle est déjà en haut de la liste" exit_sub end_if s$ = item_read$(no_list_regles%,index_list_regles%) s1$ = item_read$(no_list_regles%+1,index_list_regles%) item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles% index_list_regles% = index_list_regles% - 1 item_insert no_list_regles%,index_list_regles%,s$ item_insert no_list_regles%+1,index_list_regles%,s1$ end_sub
sub descendre_regle() dim_local s$, s1$ if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if if index_list_regles%=count(no_list_regles%) message "La règle est déjà en bas de la liste" exit_sub end_if s$ = item_read$(no_list_regles%,index_list_regles%) s1$ = item_read$(no_list_regles%+1,index_list_regles%) item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles% index_list_regles% = index_list_regles% + 1 item_insert no_list_regles%,index_list_regles%,s$ item_insert no_list_regles%+1,index_list_regles%,s1$ end_sub
sub nouveau() regles$ = "" clear no_list_objets% clear no_list_objets%+1 clear no_list_regles% clear no_list_regles%+1 n_objets% = 0 index_nature_objet% = 0 index_list_objets% = 0 index_list_regles% = 0 index_relation_regle% = 0 index_action_regle% = 0 index_finir_regle% = 0 regle_sujet% = 0 regle_cible% = 0 text no_nom_objet%,"" text no_nature_objet%,"" position no_vie_objet%,0 text no_sujet_regle%,"" text no_relation_regle%,"" text no_cible_regle%,"" text no_action_regle%,"" position no_Ncible_regle%,0 position no_Nrelation_regle%,0 position no_Nsujet_regle%,0 position no_Naction_regle%,0 position no_Nfinir_regle%,0 text no_finir_regle%,""
end_sub
sub ouvrir() dim_local f$, s$, i%, n% f$ = file_name$(no_open_dialog%) if f$="_" then exit_sub if file_exists(f$)=0 message "Le fichier n'existe pas" exit_sub end_if fermer() regles$ = f$ file_open_read 1,regles$ file_readln 1,s$ n% = val(s$) for i%=1 to n% file_readln 1,s$ item_add no_list_objets%,s$ file_readln 1,s$ item_add no_list_objets%+1,s$ next i% file_readln 1,s$ n% = val(s$) if n%>0 for i%=1 to n% file_readln 1,s$ item_add no_list_regles%,s$ file_readln 1,s$ item_add no_list_regles%+1,s$ next i% end_if file_close 1 end_sub
sub fermer() nouveau() end_sub
sub save() dim_local i% if regles$="" message "Aucun fichier n'est ouvert." exit_sub end_if if count(no_list_objets%)=0 message "Il n'y a rien à sauvegarder." exit_sub end_if file_open_write 1,regles$ file_writeln 1,str$(count(no_list_objets%)) for i%=1 to count(no_list_objets%) file_writeln 1,item_read$(no_list_objets%,i%) file_writeln 1,item_read$(no_list_objets%+1,i%) next i% file_writeln 1,str$(count(no_list_regles%)) if count(no_list_regles%)>0 for i%=1 to count(no_list_regles%) file_writeln 1,item_read$(no_list_regles%,i%) file_writeln 1,item_read$(no_list_regles%+1,i%) next i% end_if file_close 1 end_sub
sub saveas() dim_local f$ f$ = file_name$(no_save_dialog%) if f$="_" then exit_sub regles$ = f$ save() end_sub
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 14:42 | |
| @silverman, oui il y a des tas de possibilités comme le choix des cartes. Là, j'ai vraiment écrit un petit moteur de base rapide en un bout de soirée pour que tout ceux qui le souhaitent puissent prendre un module (un thème à leur charge)
Moi par exemple, je vais prendre le thème des déplacements normaux pour le moment.
Si vous comprenez le bout de code que j'ai écrit, vous pouvez choisir la procédure que vous souhaitez écrire: La gestion du menu, l’éditeur de cartes, la résolution des combats et préciser ce que vous modifiez au programme existant et la procédure ou les procédures à ajouter.
Le but c'est que chacun apporte sa pierre à la construction du jeu ou modifie la pierre de son prédécesseur avec des améliorations ou optimisations. Je ne sais pas si ça va marcher, mais je l'espère. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 16:32 | |
| Je suis en train de réfléchir à un remplacement de la SUB Test_deplacement, afin de la gérer par les règles établies par mon petit outil. J'avance... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 18:38 | |
| OK, je mets la procédure de déplacement vers une case vide qui gère l'éclaireur et qui corrige une petite inversion Ligne - Colonne qui générait un blocage bizarre de l'éclaireur sur certaines cases. Voilà, ma procédure est faite, comme c'est collaboratif, je m’arrête là pour le moment pour laisser d'autres faire leur proposition de procédures (par exemple avec la gestion de la procédure de déplacement par les règles générées depuis le générateur de règles de Klaus, ou - Code:
-
' ------------------------- ' * Structure du Stratego * ' -------------------------
LABEL click_plateau
' * Déclaration des variables DIM compt%
' * Déclaration des variables pour les images DIM I_Fond% : ' Numéro du picture où l'on charge l'image de fond (on n'y touche pas) DIM I_E_affiche% : ' Numéro du picture qui sera affiché DIM I_E_preparation% : ' Numéro du picture de travail (masqué) DIM I_copy% : ' Numéro de l'image servant pour les copies DIM P_Tour% : ' Un petit picture pour mettre l'indicateur de tour
' * Déclaration des numéros des picture où l'on va stocker l'image des pions DIM I_Bombe%, I_Capitaine%, I_Colonel%, I_Drapeau%, I_General%, I_Lieutenant% DIM I_Major%, I_Marechal%, I_Demineur%, I_Eclaireur%, I_Sergent%, I_Espion%
' * Déclaration des constantes contenant les dimensions de l'image de fond DIM Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811
' * Déclaration du nombre de pièces du joueur 1, du joueur 2 et de chacun des types de pièces DIM Nb_piecesJ1%, Nb_piecesJ2% DIM Nb_Bombe%, Nb_Capitaine%, Nb_Colonel%, Nb_Drapeau%, Nb_General%, Nb_Lieutenant% DIM Nb_Major%, Nb_Marechal%, Nb_Demineur%, Nb_Eclaireur%, Nb_Sergent%, Nb_Espion%
' * Déclaration de l'ordre des pièces (hors règles spéciale) DIM O_Bombe%, O_Capitaine%, O_Colonel%, O_Drapeau%, O_General%, O_Lieutenant% DIM O_Major%, O_Marechal%, O_Demineur%, O_Eclaireur%, O_Sergent%, O_Espion%
' * Déclaration des matrices de terrain DIM Franchissable(9,9), Pieces(9,9) ' * Les pions du joueur 1 ont des valeurs de 0 à 11. Ceux du joueur 2 de 20 à 31
' * Déclaration des compteurs et autres variables du jeu DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l% DIM Tour% : ' Indique si c'est au joueur 1 ou au joueur 2 de jouer DIM Sel_X%, Sel_Y% : ' Coordonnées de la case sélectionnée (négative si pas de case sélectionnée) DIM rep$,repimage$ DIM Hcase%,Wcase% : Hcase%=80 : Wcase%=80
' * Création du menu (à développer par la suite) MAIN_MENU 10 SUB_MENU 11 : PARENT 11,10 : CAPTION 11,"Fichier"
' * Initialisation des chemins rep$=DIR_CURRENT$+"\" : repimage$=rep$+"img\"
' * Règles des pièces ' La bombe ne peut pas se déplacer mais détruit toutes les pièces sauf le démineur ' Le Maréchal peut être capturé (détruit) par l'espion et explose sur les mines ' ' L'ordre de pièce est Bomb, Marechal, General, Colonnel, Major, Capitaine, Lieutenant ' Sergent, Démineur, Espion et Drapeau ' ' Nb pièces: Bombes: 6, Maréchal: 1, Général: 1, Colonel: 2, Major: 3, Capitaine: 4, ' Lieutenant: 4, Sergent: 4, Démineur: 5, Eclaireur: 8, Espion: 1, Drapeau: 1
' Les démineur peuvent déminer (détruire les bombes) ' Les éclaireurs peuvent avancer en ligne droite dégagée (ils ne peuvent pas passer par dessus un pièce) ' L'espion peut détruire le Maréchal uniquement quand c'est l'espion qui attaque le Maréchal ' Le drapeau ne peu pas être déplacé, sa capture met fin à la partie
' * Définition des cases franchissables ou non (On met toutes les cases à 1 et on met après les cases infranchissables à 0) FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 Franchissable(Ligne%,Colonne%) = 1 Pieces(Ligne%,Colonne%) = -1 NEXT Colonne% NEXT Ligne% Franchissable(4,2) = 0 : Franchissable(4,3) = 0 Franchissable(4,6) = 0 : Franchissable(4,7) = 0 Franchissable(5,2) = 0 : Franchissable(5,3) = 0 Franchissable(5,6) = 0 : Franchissable(5,7) = 0
' * Création et chargement des images
FULL_SPACE 0
compt% = 100 : ' Compteur pour commencer à numéroter les nouveau objets à partir de 100
' * Chargement du fond dans le picture pour le garder en réserve PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_Fond% = compt% : TOP compt%, -2000 FILE_LOAD compt%,repimage$+"Fond.jpg" : compt% = compt% + 1
' * Créations des autres pictures pour l'écran affiché et l'écran de travail PICTURE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_affiche% = compt% : TOP compt%, (HEIGHT(0)-Hauteur_Fond%)/2 LEFT compt%,(WIDTH(0)-Largeur_Fond%)/2 : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_preparation% = compt% : compt% = compt% + 1
PICTURE compt% : HEIGHT compt%,30 : WIDTH compt%,30 : TOP compt%,15 : LEFT compt%,15 P_Tour% = compt% : compt% = compt% + 1
' * Création de l'image de travail pour effectuer les copies IMAGE compt% : I_copy% = compt% : compt% = compt% + 1
' * Chargement de toutes les images correspondant aux différents pions PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Bombe% = compt% : O_Bombe% = 11 FILE_LOAD compt%,repimage$+"Bomb.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Capitaine% = compt% : O_Capitaine% = 6 FILE_LOAD compt%,repimage$+"Captain.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Colonel% = compt% :O_Colonel% = 8 FILE_LOAD compt%,repimage$+"Colonel.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Drapeau% = compt% : O_Drapeau% = 0 FILE_LOAD compt%,repimage$+"Flag.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_General% = compt% : O_General% = 9 FILE_LOAD compt%,"img/General.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Lieutenant% = compt% : O_Lieutenant% = 5 FILE_LOAD compt%,repimage$+"Lieutenant.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Major% = compt% : O_Major% = 7 FILE_LOAD compt%,repimage$+"Major.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Marechal% = compt% : O_Marechal% = 10 FILE_LOAD compt%,repimage$+"Marshal.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Demineur% = compt% : O_Demineur% = 3 FILE_LOAD compt%,repimage$+"Miner.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Eclaireur% = compt% : O_Eclaireur% = 2 FILE_LOAD compt%,repimage$+"Scout.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Sergent% = compt% :O_Sergent% = 4 FILE_LOAD compt%,repimage$+"Sergeant.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Espion% = compt% : O_Espion% = 1 FILE_LOAD compt%,repimage$+"Spy.jpg" : compt% = compt% + 1
Init() Preparation() Image_Recopy()
ON_CLICK I_E_affiche%,click_plateau
END
SUB Init() Nb_drapeau% = 1 : Nb_Espion% = 1 : Nb_Eclaireur% = 8 : Nb_Demineur% = 5 Nb_Sergent% = 4 : Nb_Lieutenant% = 4: Nb_Capitaine% = 4 : Nb_Major% = 3 Nb_Colonel% = 2 : Nb_General% = 1 : Nb_Marechal% = 1 : Nb_Bombe% = 6 Nb_piecesJ1% = Nb_drapeau% + Nb_Espion% + Nb_Eclaireur% + Nb_Demineur% + Nb_Sergent% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Lieutenant% + Nb_Capitaine% + Nb_Major% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Colonel% + Nb_General% + Nb_Marechal% + Nb_Bombe% Nb_piecesJ2% = Nb_piecesJ1% Tour1()
' * Section à remplacer quand le placement des pièces sera programmé juste pour afficher quelques pions le temps ' * de faire les test ' * 4 pions bleus Pieces(0,3) = O_Drapeau% : Pieces(0,2) = O_Capitaine% Pieces(0,4) = O_Bombe% : Pieces(3,5) = O_Eclaireur% ' * 4 pions rouges Pieces(9,3) = O_Drapeau% + 20 : Pieces(9,2) = O_Eclaireur% + 20 Pieces(9,4) = O_Bombe% + 20 : Pieces(8,4) = O_Lieutenant% + 20
Sel_X% = -1 END_SUB
SUB Trace_piece(l%,c%) DIM_LOCAL image%, p% p%= Pieces(l%,c%) image% = -1 IF p% > 19 THEN p% = p% - 20 SELECT p% CASE 11 : image% = I_Bombe% CASE 10 : image% = I_Marechal% CASE 9 : image% = I_General% CASE 8 : image% = I_Colonel% CASE 7 : image% = I_Major% CASE 6 : image% = I_Capitaine% CASE 5 : image% = I_Lieutenant% CASE 4 : image% = I_Sergent% CASE 3 : image% = I_Demineur% CASE 2 : image% = I_Eclaireur% CASE 1 : image% = I_Espion% CASE 0 : image% = I_Drapeau% END_SELECT IF image% > 0 2D_TARGET_IS image% : 2D_IMAGE_COPY I_copy%,0,2,60,79 2D_TARGET_IS I_E_preparation% IF Pieces(l%,c%) < 20 2D_FILL_COLOR 0,0,200 ELSE 2D_FILL_COLOR 200,0,0 END_IF 2D_RECTANGLE (c%)*81 + 2,(l%)*81 + 2, (c%+1)*81+1,(l%+1)*81 2D_IMAGE_PASTE I_copy%,(c%)*81 + 12,(l%)*81 + 2 END_IF END_SUB
SUB Preparation() DIM_LOCAL piece% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,0,0 FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 piece% = Pieces(Ligne%,Colonne%) Trace_piece(Ligne%,Colonne%) NEXT Colonne% NEXT Ligne% END_SUB
SUB Image_Recopy() 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_affiche% : 2D_IMAGE_PASTE I_copy%,0,0 END_SUB
SUB encadre(lc%,cc%) 2D_LINE (c% )*81+2,(l% )*81 + 2,(c%+1)*81+1,(l% )*81 + 2 2D_LINE (c%+1)*81+1,(l% )*81 + 2,(c%+1)*81+1,(l%+1)*81 + 2 2D_LINE (c%+1)*81+1,(l%+1)*81 + 2,(c% )*81+2,(l%+1)*81 + 2 2D_LINE (c% )*81+2,(l%+1)*81 + 2,(c% )*81+2,(l% )*81 + 2 END_SUB
SUB Deplace(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Type_P%,x_sup%,y_sup%,x_inf%,y_inf% Type_P% = Pieces(L_d%,C_d%) IF L_d% > L_a% y_inf% = (L_d%+1)*81 + 2 y_sup% = (L_a%)*81 ELSE y_inf% = (L_a%+1)*81 + 2 y_sup% = (L_d%)*81 END_IF IF C_d% > C_a% x_inf% = (C_a%)*81 x_sup% = (C_d%+1)*81+1 ELSE x_inf% = (C_d%)*81 x_sup% = (C_a%+1)*81+1 END_IF 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,x_inf%,y_sup%, x_sup%, y_inf% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,x_inf%,y_sup% Pieces(L_a%,C_a%) = Type_P% : Pieces(L_d%,C_d%) = -1 : Sel_X% = -1 Trace_Piece(L_a%,C_a%) Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_SUB
SUB Test_deplacement(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Boucle%,sens% ' CAPTION 0,"Pièce : "+STR$(Type_P%)+" veut se déplacer de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) IF L_d%<>L_a% AND C_d%<>C_a% THEN BEEP_EXCLAMATION : EXIT_SUB IF Pieces(L_d%,C_d%) <> 2 AND Pieces(L_d%,C_d%) <> 22 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 BEEP_EXCLAMATION : EXIT_SUB ELSE ' CAPTION 0,"Deplace la piece de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) Deplace(L_d%,C_d%,L_a%,C_a%) END_IF ELSE IF L_d% = L_a% sens% = (C_a%-C_d%)/ABS(C_a%-C_d%) FOR Boucle%=C_d%+sens% TO C_a% STEP sens% IF Pieces(L_d%,Boucle%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF C_d% = C_a% sens% = (L_a%-L_d%)/ABS(L_a%-L_d%) FOR Boucle%=L_d%+sens% TO L_a% STEP sens% IF Pieces(Boucle%,C_d%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE BEEP_EXCLAMATION : EXIT_SUB END_IF END_IF END_IF END_SUB
SUB Tour1() Tour% = 1 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 0,0,200 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB
SUB Tour2() Tour% = 2 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 200,0,0 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB
click_plateau: OFF_CLICK I_E_affiche% ' CAPTION 0,"CASE : " + STR$(INT(MOUSE_X_POSITION(I_E_affiche%)/81) + 1)+ " : " + STR$(10 - INT(MOUSE_Y_POSITION(I_E_affiche%)/81)) c% = INT(MOUSE_X_POSITION(I_E_affiche%)/81) : l% = INT(MOUSE_Y_POSITION(I_E_affiche%)/81) tmp% = Pieces(l%,c%)
IF tmp% >= 0 IF Tour% = 1 AND tmp% < 12 IF tmp% = 0 OR tmp% = 11 BEEP_EXCLAMATION ELSE IF Sel_X% >= 0 THEN Image_Recopy() Sel_X% = c% : Sel_Y% = l% 2D_PEN_COLOR 200,0,0 : encadre(l%,c%) END_IF ELSE IF Tour% = 1 THEN BEEP_EXCLAMATION IF Tour% = 2 AND tmp% > 19 AND tmp% < 32 IF tmp% = 20 OR tmp% = 31 BEEP_EXCLAMATION ELSE IF Sel_X% >= 0 THEN Image_Recopy() Sel_X% = c% : Sel_Y% = l% 2D_PEN_COLOR 0,0,200 : encadre(l%,c%) END_IF ELSE BEEP_EXCLAMATION END_IF END_IF ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 Test_deplacement(Sel_Y%,Sel_X%,l%,c%) END_IF END_IF ON_CLICK I_E_affiche%,click_plateau RETURN | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 19:03 | |
| Je viens de tester Jicehel, Plus de bocage de l'éclaireur. Rien d'autre pour le moment. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 19:35 | |
| Cool et est-ce que le source te parait plus clair ? Tu as vu, j'ai uniformisé les sens de Lignes Colonnes un peu partout dans le source pour éviter les inversions. Tu essayes de faire une procédure dedans ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 19:50 | |
| Ben je n'ai regardé le code, j'ai juste testé. J'étais occupé sur l'autre version, demain peut-être... A+ | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 22:05 | |
| - jicehel a écrit:
' * 4 pions bleus Pieces(0,3) = O_Drapeau% : Pieces(0,2) = O_Capitaine% Pieces(0,4) = O_Bombe% : Pieces(3,5) = O_Eclaireur% ' * 4 pions rouges Pieces(9,3) = O_Drapeau% + 20 : Pieces(9,2) = O_Eclaireur% + 20 Pieces(9,4) = O_Bombe% + 20 : Pieces(8,4) = O_Lieutenant% + 20
questions/remarques: -il y a 40 pions bleus, donc l'incrément pour les pions rouges devrait être de 40 et non 20? -il n'y a que les images du camp rouge dans le zip -comment comptes tu cacher le jeu à l'adversaire(le rouge ne doit pas voir la valeur des pions bleu quand c'est à lui de jouer, et vice-versa)? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 22:35 | |
| En fait tu as 40 pions mais tu n'as que 12 types de pièces. J'ai mis 20 pour des raisons de simplicité et en prévision d'éventuelles variantes. Pour le nombre de pions, on s'en fou un peu en vrai. J'ai mis un compteur, mais on ne peut jamais atteindre 0 normalement puisque les parties se termine en principe par la prise du drapeau ennemi qui est au pire la dernière pièce mais dans de rare cas. Il y a peut être des cas où la dernière pièce mobile se fait sauter sur une bombe. Au quel cas le joueur qui ne peut plus jouer perd mais dans ce cas, il lui resterait au moins son drapeau. Bref, le compteur de pièce ne servira sans doute pas vraiment.
J'ai mis 4 pions bleus et 4 pions rouges sur le terrain juste pour tester les tests, c'est bien sûr en attendant la procédure de placement des pièces et le démarrage du jeux et des tours.
Je laisse du temps pour que chacun puisse participer s'il le désire mais bien sûr, je ferais d'autres procédures si je vois que ça n'accroche pas mais le but de faire un programme collaboratif ne serait alors pas atteind. Mais bon, pour le moment, il y a déjà Klaus qui fait une adaptation de la procédure déplacement basé sur son moteur de règles.
Est-ce que Silverman va écrire une procédure de gestion de cartes ?
Quelqu'un prendra-t-il la procédure de résolution des "combats"... vous le saurez dans les jours ou heures à venir... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 0:36 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 1:39 | |
| Très bonne video Papydall. Très interessante. A demain tout le monde | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 3:33 | |
| Salut « Stratégoyens » ! A défaut d’être brillant, j’ai inventé le mot Stratégoyen. Et n’ayant pas (encore) de pierres (précieuses !) à mettre à l’édifice de Stratégo, j’ai codé le sous-menu Aide. J’ai également adapté la ligne 113 à la hauteur de mon écran pour supprimer l’ascenseur vertical et voir l’ensemble du terrain de jeu. - Code:
-
TOP compt%, 5000 : I_E_affiche% = compt% : TOP compt%, (HEIGHT(0)-Hauteur_Fond%)/2 -35 Les parties du code ajouté sont entre des lignes REM - Code:
-
rem ============================================================================ rem JEU DU STRATEGO rem SUR UNE IDEE DE JICEHEL rem OUVERT A LA COLLABORATION DES TOUS LES PANORAMICIENS STRATEGOYENS rem ============================================================================ ' ------------------------- ' * Structure du Stratego * ' -------------------------
LABEL click_plateau rem ======================== Papydall ========================================== LABEL Aide DIM tex$ APPLICATION_TITLE "**** STRATEGO COLLABORATIF *****" rem ======================== Papydall ==========================================
' * Déclaration des variables DIM compt%
' * Déclaration des variables pour les images DIM I_Fond% : ' Numéro du picture où l'on charge l'image de fond (on n'y touche pas) DIM I_E_affiche% : ' Numéro du picture qui sera affiché DIM I_E_preparation% : ' Numéro du picture de travail (masqué) DIM I_copy% : ' Numéro de l'image servant pour les copies DIM P_Tour% : ' Un petit picture pour mettre l'indicateur de tour
' * Déclaration des numéros des picture où l'on va stocker l'image des pions DIM I_Bombe%, I_Capitaine%, I_Colonel%, I_Drapeau%, I_General%, I_Lieutenant% DIM I_Major%, I_Marechal%, I_Demineur%, I_Eclaireur%, I_Sergent%, I_Espion%
' * Déclaration des constantes contenant les dimensions de l'image de fond DIM Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811
' * Déclaration du nombre de pièces du joueur 1, du joueur 2 et de chacun des types de pièces DIM Nb_piecesJ1%, Nb_piecesJ2% DIM Nb_Bombe%, Nb_Capitaine%, Nb_Colonel%, Nb_Drapeau%, Nb_General%, Nb_Lieutenant% DIM Nb_Major%, Nb_Marechal%, Nb_Demineur%, Nb_Eclaireur%, Nb_Sergent%, Nb_Espion%
' * Déclaration de l'ordre des pièces (hors règles spéciale) DIM O_Bombe%, O_Capitaine%, O_Colonel%, O_Drapeau%, O_General%, O_Lieutenant% DIM O_Major%, O_Marechal%, O_Demineur%, O_Eclaireur%, O_Sergent%, O_Espion%
' * Déclaration des matrices de terrain DIM Franchissable(9,9), Pieces(9,9) ' * Les pions du joueur 1 ont des valeurs de 0 à 11. Ceux du joueur 2 de 20 à 31
' * Déclaration des compteurs et autres variables du jeu DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l% DIM Tour% : ' Indique si c'est au joueur 1 ou au joueur 2 de jouer DIM Sel_X%, Sel_Y% : ' Coordonnées de la case sélectionnée (négative si pas de case sélectionnée) DIM rep$,repimage$ DIM Hcase%,Wcase% : Hcase%=80 : Wcase%=80
' * Création du menu (à développer par la suite) MAIN_MENU 10 SUB_MENU 11 : PARENT 11,10 : CAPTION 11,"Fichier" rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem =================== Papydall (Début) ======================================= rem J ai commencé les SUB_MENUs à partir de 91 pour laisser la place aux futurs autres SUB_MENUs rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SUB_MENU 91 : PARENT 91,10 : CAPTION 91,"Aide" SUB_MENU 92 : PARENT 92,91 : CAPTION 92,"Stratégo" : ON_CLICK 92,Aide SUB_MENU 93 : PARENT 93,91 : CAPTION 93,"Dispositions des pièces" : ON_CLICK 93,Aide SUB_MENU 94 : PARENT 94,91 : CAPTION 94,"Règles du jeu" : ON_CLICK 94,Aide SUB_MENU 95 : PARENT 95,91 : CAPTION 95,"Tactique" : ON_CLICK 95,Aide
rem =================== Papydall (Fin) =========================================
' * Initialisation des chemins rep$=DIR_CURRENT$+"\" : repimage$=rep$+"img\"
' * Règles des pièces ' La bombe ne peut pas se déplacer mais détruit toutes les pièces sauf le démineur ' Le Maréchal peut être capturé (détruit) par l'espion et explose sur les mines ' ' L'ordre de pièce est Bomb, Marechal, General, Colonnel, Major, Capitaine, Lieutenant ' Sergent, Démineur, Espion et Drapeau ' ' Nb pièces: Bombes: 6, Maréchal: 1, Général: 1, Colonel: 2, Major: 3, Capitaine: 4, ' Lieutenant: 4, Sergent: 4, Démineur: 5, Eclaireur: 8, Espion: 1, Drapeau: 1
' Les démineur peuvent déminer (détruire les bombes) ' Les éclaireurs peuvent avancer en ligne droite dégagée (ils ne peuvent pas passer par dessus un pièce) ' L'espion peut détruire le Maréchal uniquement quand c'est l'espion qui attaque le Maréchal ' Le drapeau ne peu pas être déplacé, sa capture met fin à la partie
' * Définition des cases franchissables ou non (On met toutes les cases à 1 et on met après les cases infranchissables à 0) FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 Franchissable(Ligne%,Colonne%) = 1 Pieces(Ligne%,Colonne%) = -1 NEXT Colonne% NEXT Ligne% Franchissable(4,2) = 0 : Franchissable(4,3) = 0 Franchissable(4,6) = 0 : Franchissable(4,7) = 0 Franchissable(5,2) = 0 : Franchissable(5,3) = 0 Franchissable(5,6) = 0 : Franchissable(5,7) = 0
' * Création et chargement des images
FULL_SPACE 0
compt% = 100 : ' Compteur pour commencer à numéroter les nouveau objets à partir de 100
' * Chargement du fond dans le picture pour le garder en réserve PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_Fond% = compt% : TOP compt%, -2000 FILE_LOAD compt%,repimage$+"Fond.jpg" : compt% = compt% + 1
' * Créations des autres pictures pour l'écran affiché et l'écran de travail PICTURE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_affiche% = compt% : TOP compt%, (HEIGHT(0)-Hauteur_Fond%)/2 -35 LEFT compt%,(WIDTH(0)-Largeur_Fond%)/2 : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_preparation% = compt% : compt% = compt% + 1
PICTURE compt% : HEIGHT compt%,30 : WIDTH compt%,30 : TOP compt%,15 : LEFT compt%,15 P_Tour% = compt% : compt% = compt% + 1
' * Création de l'image de travail pour effectuer les copies IMAGE compt% : I_copy% = compt% : compt% = compt% + 1
' * Chargement de toutes les images correspondant aux différents pions PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Bombe% = compt% : O_Bombe% = 11 FILE_LOAD compt%,repimage$+"Bomb.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Capitaine% = compt% : O_Capitaine% = 6 FILE_LOAD compt%,repimage$+"Captain.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Colonel% = compt% :O_Colonel% = 8 FILE_LOAD compt%,repimage$+"Colonel.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Drapeau% = compt% : O_Drapeau% = 0 FILE_LOAD compt%,repimage$+"Flag.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_General% = compt% : O_General% = 9 FILE_LOAD compt%,"img/General.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Lieutenant% = compt% : O_Lieutenant% = 5 FILE_LOAD compt%,repimage$+"Lieutenant.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Major% = compt% : O_Major% = 7 FILE_LOAD compt%,repimage$+"Major.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Marechal% = compt% : O_Marechal% = 10 FILE_LOAD compt%,repimage$+"Marshal.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Demineur% = compt% : O_Demineur% = 3 FILE_LOAD compt%,repimage$+"Miner.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Eclaireur% = compt% : O_Eclaireur% = 2 FILE_LOAD compt%,repimage$+"Scout.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Sergent% = compt% :O_Sergent% = 4 FILE_LOAD compt%,repimage$+"Sergeant.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Espion% = compt% : O_Espion% = 1 FILE_LOAD compt%,repimage$+"Spy.jpg" : compt% = compt% + 1
Init() Preparation() Image_Recopy()
ON_CLICK I_E_affiche%,click_plateau
END
SUB Init() Nb_drapeau% = 1 : Nb_Espion% = 1 : Nb_Eclaireur% = 8 : Nb_Demineur% = 5 Nb_Sergent% = 4 : Nb_Lieutenant% = 4: Nb_Capitaine% = 4 : Nb_Major% = 3 Nb_Colonel% = 2 : Nb_General% = 1 : Nb_Marechal% = 1 : Nb_Bombe% = 6 Nb_piecesJ1% = Nb_drapeau% + Nb_Espion% + Nb_Eclaireur% + Nb_Demineur% + Nb_Sergent% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Lieutenant% + Nb_Capitaine% + Nb_Major% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Colonel% + Nb_General% + Nb_Marechal% + Nb_Bombe% Nb_piecesJ2% = Nb_piecesJ1% Tour1()
' * Section à remplacer quand le placement des pièces sera programmé juste pour afficher quelques pions le temps ' * de faire les test
' * 4 pions bleus Pieces(0,3) = O_Drapeau% : Pieces(0,2) = O_Capitaine% Pieces(0,4) = O_Bombe% : Pieces(3,5) = O_Eclaireur%
' * 4 pions rouges Pieces(9,3) = O_Drapeau% + 20 : Pieces(9,2) = O_Eclaireur% + 20 Pieces(9,4) = O_Bombe% + 20 : Pieces(8,4) = O_Lieutenant% + 20
Sel_X% = -1
END_SUB
SUB Trace_piece(l%,c%) DIM_LOCAL image%, p% p%= Pieces(l%,c%) image% = -1 IF p% > 19 THEN p% = p% - 20 SELECT p% CASE 11 : image% = I_Bombe% CASE 10 : image% = I_Marechal% CASE 9 : image% = I_General% CASE 8 : image% = I_Colonel% CASE 7 : image% = I_Major% CASE 6 : image% = I_Capitaine% CASE 5 : image% = I_Lieutenant% CASE 4 : image% = I_Sergent% CASE 3 : image% = I_Demineur% CASE 2 : image% = I_Eclaireur% CASE 1 : image% = I_Espion% CASE 0 : image% = I_Drapeau% END_SELECT IF image% > 0 2D_TARGET_IS image% : 2D_IMAGE_COPY I_copy%,0,2,60,79 2D_TARGET_IS I_E_preparation% IF Pieces(l%,c%) < 20 2D_FILL_COLOR 0,0,200 ELSE 2D_FILL_COLOR 200,0,0 END_IF 2D_RECTANGLE (c%)*81 + 2,(l%)*81 + 2, (c%+1)*81+1,(l%+1)*81 2D_IMAGE_PASTE I_copy%,(c%)*81 + 12,(l%)*81 + 2 END_IF END_SUB
SUB Preparation() DIM_LOCAL piece% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,0,0 FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 piece% = Pieces(Ligne%,Colonne%) Trace_piece(Ligne%,Colonne%) NEXT Colonne% NEXT Ligne% END_SUB
SUB Image_Recopy() 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_affiche% : 2D_IMAGE_PASTE I_copy%,0,0 END_SUB
SUB encadre(lc%,cc%) 2D_LINE (c% )*81+2,(l% )*81 + 2,(c%+1)*81+1,(l% )*81 + 2 2D_LINE (c%+1)*81+1,(l% )*81 + 2,(c%+1)*81+1,(l%+1)*81 + 2 2D_LINE (c%+1)*81+1,(l%+1)*81 + 2,(c% )*81+2,(l%+1)*81 + 2 2D_LINE (c% )*81+2,(l%+1)*81 + 2,(c% )*81+2,(l% )*81 + 2 END_SUB
SUB Deplace(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Type_P%,x_sup%,y_sup%,x_inf%,y_inf% Type_P% = Pieces(L_d%,C_d%) IF L_d% > L_a% y_inf% = (L_d%+1)*81 + 2 y_sup% = (L_a%)*81 ELSE y_inf% = (L_a%+1)*81 + 2 y_sup% = (L_d%)*81 END_IF IF C_d% > C_a% x_inf% = (C_a%)*81 x_sup% = (C_d%+1)*81+1 ELSE x_inf% = (C_d%)*81 x_sup% = (C_a%+1)*81+1 END_IF 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,x_inf%,y_sup%, x_sup%, y_inf% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,x_inf%,y_sup% Pieces(L_a%,C_a%) = Type_P% : Pieces(L_d%,C_d%) = -1 : Sel_X% = -1 Trace_Piece(L_a%,C_a%) Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_SUB
SUB Test_deplacement(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Boucle%,sens% ' CAPTION 0,"Pièce : "+STR$(Type_P%)+" veut se déplacer de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) IF L_d%<>L_a% AND C_d%<>C_a% THEN BEEP_EXCLAMATION : EXIT_SUB IF Pieces(L_d%,C_d%) <> 2 AND Pieces(L_d%,C_d%) <> 22 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 BEEP_EXCLAMATION : EXIT_SUB ELSE ' CAPTION 0,"Deplace la piece de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) Deplace(L_d%,C_d%,L_a%,C_a%) END_IF ELSE IF L_d% = L_a% sens% = (C_a%-C_d%)/ABS(C_a%-C_d%) FOR Boucle%=C_d%+sens% TO C_a% STEP sens% IF Pieces(L_d%,Boucle%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF C_d% = C_a% sens% = (L_a%-L_d%)/ABS(L_a%-L_d%) FOR Boucle%=L_d%+sens% TO L_a% STEP sens% IF Pieces(Boucle%,C_d%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE BEEP_EXCLAMATION : EXIT_SUB END_IF END_IF END_IF END_SUB
SUB Tour1() Tour% = 1 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 0,0,200 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB
SUB Tour2() Tour% = 2 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 200,0,0 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB
click_plateau: OFF_CLICK I_E_affiche% ' CAPTION 0,"CASE : " + STR$(INT(MOUSE_X_POSITION(I_E_affiche%)/81) + 1)+ " : " + STR$(10 - INT(MOUSE_Y_POSITION(I_E_affiche%)/81)) c% = INT(MOUSE_X_POSITION(I_E_affiche%)/81) : l% = INT(MOUSE_Y_POSITION(I_E_affiche%)/81) tmp% = Pieces(l%,c%)
IF tmp% >= 0 IF Tour% = 1 AND tmp% < 12 IF tmp% = 0 OR tmp% = 11 BEEP_EXCLAMATION ELSE IF Sel_X% >= 0 THEN Image_Recopy() Sel_X% = c% : Sel_Y% = l% 2D_PEN_COLOR 200,0,0 : encadre(l%,c%) END_IF ELSE IF Tour% = 1 THEN BEEP_EXCLAMATION IF Tour% = 2 AND tmp% > 19 AND tmp% < 32 IF tmp% = 20 OR tmp% = 31 BEEP_EXCLAMATION ELSE IF Sel_X% >= 0 THEN Image_Recopy() Sel_X% = c% : Sel_Y% = l% 2D_PEN_COLOR 0,0,200 : encadre(l%,c%) END_IF ELSE BEEP_EXCLAMATION END_IF END_IF ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 Test_deplacement(Sel_Y%,Sel_X%,l%,c%) END_IF END_IF ON_CLICK I_E_affiche%,click_plateau RETURN rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ======================== Papydall Début ==================================== rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Aide: select number_click case 92 tex$ = "STRATEGO®" + chr$(13) + chr$(13) tex$ = tex$ + "STRATEGO® est un jeu non seulement passionnant" + chr$(13) tex$ = tex$ + "pour les deux joueurs actifs, mais également captivant" + chr$(13) tex$ = tex$ + "pour les spectateurs. La stratégie, qui est le principe" + chr$(13) tex$ = tex$ + "fondamental de nombreux jeux tels que les échecs et" + chr$(13) tex$ = tex$ + "les dames, a donné son nom à Stratego. Le but à " + chr$(13) tex$ = tex$ + "atteindre dans le jeu de Stratego est de s’emparer du" + chr$(13) tex$ = tex$ + "drapeau de la partie adverse. A cet effet, chaque " + chr$(13) tex$ = tex$ + "joueur dispose d’une armée de 40 pièces classées" + chr$(13) tex$ = tex$ + "suivant les grades militaires, ce qui permet de retenir" + chr$(13) tex$ = tex$ + "facilement la valeur des pièces. Cette dénomination " + chr$(13) tex$ = tex$ + "n’a cependant pas été prise avec l’intention de lancer" + chr$(13) tex$ = tex$ + "un jeu inspiré de la guerre, mais simplement comme " + chr$(13) tex$ = tex$ + "exercice psychologique d’attaque et de défense. Chaque " + chr$(13) tex$ = tex$ + "joueur dispose d’une armée de 40 pièces, dont " + chr$(13) tex$ = tex$ + "vous pouvez voir sur le damier les emblèmes, les " + chr$(13) tex$ = tex$ + "grades militaires et le nombre. " + chr$(13) tex$ = tex$ + "On doit disposer stratégiquement les pièces de façon " + chr$(13) tex$ = tex$ + "à ce que l’attaque et la défense se déploient en faveur" + chr$(13) tex$ = tex$ + "de chaque joueur qui les déplace" + chr$(13) case 93 tex$ = "DISPOSITION DES PIÈCES" + chr$(13) + chr$(13) tex$ = tex$ + "Il y a deux camps : les rouges et les bleus. Etant donné" + chr$(13) tex$ = tex$ + "que ce sont les rouges qui ouvrent le jeu, on tire" + chr$(13) tex$ = tex$ + "d’abord au sort pour déterminer à quel joueur cette" + chr$(13) tex$ = tex$ + "couleur sera attribuée." + chr$(13) tex$ = tex$ + "Les joueurs se placent face à face, le carton du jeu" + chr$(13) tex$ = tex$ + "entre eux, l’emblème Stratego étant tourné vers eux." + chr$(13) tex$ = tex$ + "Chaque joueur place une pièce dans chaque case de" + chr$(13) tex$ = tex$ + "la moitié du carton qui lui est attribuée, mais de telle " + chr$(13) tex$ = tex$ + "façon que l’adversaire ne voit que les dos de ces pièces," + chr$(13) tex$ = tex$ + "afin que ce dernier ignore la valeur de chacune" + chr$(13) tex$ = tex$ + "des pièces placées." + chr$(13) tex$ = tex$ + "Les deux rangs de cases du milieu restent inoccupés," + chr$(13) tex$ = tex$ + "de même que les deux lacs à travers lesquels les" + chr$(13) tex$ = tex$ + "deux armées ne peuvent pas se mouvoir au cours du jeu." + chr$(13) tex$ = tex$ + "La disposition des pièces doit être étudiée d’après les" + chr$(13) tex$ = tex$ + "règles du jeu d’une part, et suivant l’inspiration stratégique " + chr$(13) tex$ = tex$ + "du joueur d’autre part." + chr$(13) case 94 tex$ = "RÈGLES DU JEU" + chr$(13) + chr$(13) tex$ = tex$ + "A tour de rôle, les joueurs peuvent déplacer une de leurs pièces d’une case à la fois, soit en avant ou en " + chr$(13) tex$ = tex$ + "arrière, soit latéralement à gauche ou à droite.l’éclaireur, au contraire des autres pièces peut, en une" + chr$(13) tex$ = tex$ + "fois, se déplacer de plus d’une case libre. Il peut alors arriver sur une case vide ou sur une pièce de l’adversaire." + chr$(13) tex$ = tex$ + "Le drapeau et les bombes ne doivent pas être déplacés et restent donc pendant tout le jeu sur les cases" + chr$(13) tex$ = tex$ + "où ils ont été placés au début. Lorsque deux pièces adversaires se sont rapprochées, les pièces se trouvant" + chr$(13) tex$ = tex$ + "soit face à face, soit à côté les unes des autres — le joueur peut prendre sa pièce et en touchant celle de" + chr$(13) tex$ = tex$ + "son adversaire, il doit nommer le grade de sa pièce personnelle. Le joueur adverse répond en nommant" + chr$(13) tex$ = tex$ + "le rang de sa pièce. Si c’est une pièce d’un rang inférieur, elle est alors enlevée du carton et la pièce" + chr$(13) tex$ = tex$ + "de rang supérieur prend la place devenue libre. Si cependant la pièce de l’adversaire est d’un rang " + chr$(13) tex$ = tex$ + "supérieur, alors la pièce de rang inférieur disparaît du carton et la pièce de rang supérieur reste à sa place." + chr$(13) tex$ = tex$ + "En cas de rang identiques, les deux pièces tombent. L’espion tombe devant les éclaireurs, ceux-ci tombent" + chr$(13) tex$ = tex$ + "devant les démineurs, les démineurs tombent devant les sergents, les sergents devant les Lieutenants,etc." + chr$(13) tex$ = tex$ + "Si deux pièces se trouvent rapprochées, il n’est pas nécessaire d’attaquer immédiatement;" + chr$(13) tex$ = tex$ + "l’initiative de l’attaque peut venir de chacun des deux joueurs. Chaque pièce, quel que soit son rang, sauf un démineur," + chr$(13) tex$ = tex$ + "tombe contre une bombe qui, rappelons-le, ne doit pas être déplacée. Si l’un des joueurs vient" + chr$(13) tex$ = tex$ + "à frapper une bombe de l’adversaire, celui-ci répond « boum ». Seul un démineur est en mesure de" + chr$(13) tex$ = tex$ + "détruire une bombe, après quoi elle doit être retirée du jeu. Le drapeau, qui ne doit pas être déplacé, tombe " + chr$(13) tex$ = tex$ + "devant n’importe quelle pièce de l’adversaire. Le maréchal, le plus haut en grade, tombe seulement" + chr$(13) tex$ = tex$ + "devant l’espion, s’il est pris par le dernier. Quand, au contraire, le maréchal attaque l’espion, ce dernier" + chr$(13) tex$ = tex$ + "tombe. Si un joueur ne peut plus déplacer aucune de ses pièces, par exemple lorsqu’il n’a plus" + chr$(13) tex$ = tex$ + "que des bombes et le drapeau, il doit capituler. Une pièce ne peut être déplacée plus de cinq fois de" + chr$(13) tex$ = tex$ + "suite entre les mêmes 2 cases. C’est le joueur qui réussit à s’emparer du drapeau de son adversaire,qui est le gagnant." + chr$(13) case 95 tex$ = "TACTIQUE" + chr$(13) + chr$(13) tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13) tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13) tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13) tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13) tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13) tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13) tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13) tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13) tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13) tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13) tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13) tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13) tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13) tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13) tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13) end_select
message tex$ RETURN rem ======================== Papydall (Fin) ==================================== rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 9:04 | |
| Super tes 4 sujets d'aide. Merci Papydall Du coup je l'ajoute aussi à la version de Jean-Claude sur son post autant garder commune ces parties puisqu'on le peut. Mutualisons les bonnes choses. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 10:14 | |
| Merci Papydall, ça nous fait du boulot en moins. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 10:38 | |
| Comme il n'y a pas d'inscription officielle pour prendre une fonctionnalité pour le moment, je prends la procédure "Résolution des rencontres". | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 12:10 | |
| Mince: Cosmos70 : Tu fais comment déjà la chausse aux end_if mal placés ou manquant. J'ai le problème dans mon code et j'ai oublié ta méthode par manque de pratique .... - Code:
-
REM ============================================================================ REM JEU DU STRATEGO REM SUR UNE IDEE DE JICEHEL REM OUVERT A LA COLLABORATION DES TOUS LES PANORAMICIENS STRATEGOYENS REM ============================================================================ ' ------------------------- ' * Structure du Stratego * ' ------------------------- LABEL click_plateau, Aide DIM tex$ APPLICATION_TITLE "**** STRATEGO COLLABORATIF *****" ' * Déclaration des variables DIM compt% ' * Déclaration des variables pour les images DIM I_Fond% : ' Numéro du picture où l'on charge l'image de fond (on n'y touche pas) DIM I_E_affiche% : ' Numéro du picture qui sera affiché DIM I_E_preparation% : ' Numéro du picture de travail (masqué) DIM I_copy% : ' Numéro de l'image servant pour les copies DIM P_Tour% : ' Un petit picture pour mettre l'indicateur de tour ' * Déclaration des numéros des picture où l'on va stocker l'image des pions DIM I_Bombe%, I_Capitaine%, I_Colonel%, I_Drapeau%, I_General%, I_Lieutenant% DIM I_Major%, I_Marechal%, I_Demineur%, I_Eclaireur%, I_Sergent%, I_Espion% ' * Déclaration des constantes contenant les dimensions de l'image de fond DIM Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811 ' * Déclaration du nombre de pièces du joueur 1, du joueur 2 et de chacun des types de pièces DIM Nb_piecesJ1%, Nb_piecesJ2% DIM Nb_Bombe%, Nb_Capitaine%, Nb_Colonel%, Nb_Drapeau%, Nb_General%, Nb_Lieutenant% DIM Nb_Major%, Nb_Marechal%, Nb_Demineur%, Nb_Eclaireur%, Nb_Sergent%, Nb_Espion% ' * Déclaration de l'ordre des pièces (hors règles spéciale) DIM O_Bombe%, O_Capitaine%, O_Colonel%, O_Drapeau%, O_General%, O_Lieutenant% DIM O_Major%, O_Marechal%, O_Demineur%, O_Eclaireur%, O_Sergent%, O_Espion% ' * Déclaration des matrices de terrain DIM Franchissable(9,9), Pieces(9,9) ' * Les pions du joueur 1 ont des valeurs de 0 à 11. Ceux du joueur 2 de 20 à 31 ' * Déclaration des compteurs et autres variables du jeu DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l% DIM Tour% : ' Indique si c'est au joueur 1 ou au joueur 2 de jouer DIM Sel_X%, Sel_Y% : ' Coordonnées de la case sélectionnée (négative si pas de case sélectionnée) DIM rep$,repimage$ DIM Hcase%,Wcase% : Hcase%=80 : Wcase%=80 ' * Création du menu (à développer par la suite) MAIN_MENU 10 SUB_MENU 11 : PARENT 11,10 : CAPTION 11,"Fichier" REM =================== Papydall (Début) ======================================= SUB_MENU 91 : PARENT 91,10 : CAPTION 91,"Aide" SUB_MENU 92 : PARENT 92,91 : CAPTION 92,"Stratégo" : ON_CLICK 92,Aide SUB_MENU 93 : PARENT 93,91 : CAPTION 93,"Dispositions des pièces" : ON_CLICK 93,Aide SUB_MENU 94 : PARENT 94,91 : CAPTION 94,"Règles du jeu" : ON_CLICK 94,Aide SUB_MENU 95 : PARENT 95,91 : CAPTION 95,"Tactique" : ON_CLICK 95,Aide REM =================== Papydall (Fin) ========================================= ' * Initialisation des chemins rep$=DIR_CURRENT$+"\" : repimage$=rep$+"img\" ' * Règles des pièces ' La bombe ne peut pas se déplacer mais détruit toutes les pièces sauf le démineur ' Le Maréchal peut être capturé (détruit) par l'espion et explose sur les mines ' ' L'ordre de pièce est Bomb, Marechal, General, Colonnel, Major, Capitaine, Lieutenant ' Sergent, Démineur, Espion et Drapeau ' ' Nb pièces: Bombes: 6, Maréchal: 1, Général: 1, Colonel: 2, Major: 3, Capitaine: 4, ' Lieutenant: 4, Sergent: 4, Démineur: 5, Eclaireur: 8, Espion: 1, Drapeau: 1 ' Les démineur peuvent déminer (détruire les bombes) ' Les éclaireurs peuvent avancer en ligne droite dégagée (ils ne peuvent pas passer par dessus un pièce) ' L'espion peut détruire le Maréchal uniquement quand c'est l'espion qui attaque le Maréchal ' Le drapeau ne peu pas être déplacé, sa capture met fin à la partie ' * Définition des cases franchissables ou non (On met toutes les cases à 1 et on met après les cases infranchissables à 0) FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 Franchissable(Ligne%,Colonne%) = 1 Pieces(Ligne%,Colonne%) = -1 NEXT Colonne% NEXT Ligne% Franchissable(4,2) = 0 : Franchissable(4,3) = 0 Franchissable(4,6) = 0 : Franchissable(4,7) = 0 Franchissable(5,2) = 0 : Franchissable(5,3) = 0 Franchissable(5,6) = 0 : Franchissable(5,7) = 0 ' * Création et chargement des images FULL_SPACE 0 compt% = 100 : ' Compteur pour commencer à numéroter les nouveau objets à partir de 100 ' * Chargement du fond dans le picture pour le garder en réserve PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_Fond% = compt% : TOP compt%, -2000 FILE_LOAD compt%,repimage$+"Fond.jpg" : compt% = compt% + 1 ' * Créations des autres pictures pour l'écran affiché et l'écran de travail PICTURE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_affiche% = compt% : TOP compt%, (HEIGHT(0)-Hauteur_Fond%)/2 -35 LEFT compt%,(WIDTH(0)-Largeur_Fond%)/2 : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_preparation% = compt% : compt% = compt% + 1 PICTURE compt% : HEIGHT compt%,30 : WIDTH compt%,30 : TOP compt%,15 : LEFT compt%,15 P_Tour% = compt% : compt% = compt% + 1 ' * Création de l'image de travail pour effectuer les copies IMAGE compt% : I_copy% = compt% : compt% = compt% + 1 ' * Chargement de toutes les images correspondant aux différents pions PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Bombe% = compt% : O_Bombe% = 11 FILE_LOAD compt%,repimage$+"Bomb.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Capitaine% = compt% : O_Capitaine% = 6 FILE_LOAD compt%,repimage$+"Captain.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Colonel% = compt% :O_Colonel% = 8 FILE_LOAD compt%,repimage$+"Colonel.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Drapeau% = compt% : O_Drapeau% = 0 FILE_LOAD compt%,repimage$+"Flag.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_General% = compt% : O_General% = 9 FILE_LOAD compt%,"img/General.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Lieutenant% = compt% : O_Lieutenant% = 5 FILE_LOAD compt%,repimage$+"Lieutenant.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Major% = compt% : O_Major% = 7 FILE_LOAD compt%,repimage$+"Major.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Marechal% = compt% : O_Marechal% = 10 FILE_LOAD compt%,repimage$+"Marshal.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Demineur% = compt% : O_Demineur% = 3 FILE_LOAD compt%,repimage$+"Miner.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Eclaireur% = compt% : O_Eclaireur% = 2 FILE_LOAD compt%,repimage$+"Scout.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Sergent% = compt% :O_Sergent% = 4 FILE_LOAD compt%,repimage$+"Sergeant.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Espion% = compt% : O_Espion% = 1 FILE_LOAD compt%,repimage$+"Spy.jpg" : compt% = compt% + 1 Init() Preparation() Image_Recopy() ON_CLICK I_E_affiche%,click_plateau END SUB Init() Nb_drapeau% = 1 : Nb_Espion% = 1 : Nb_Eclaireur% = 8 : Nb_Demineur% = 5 Nb_Sergent% = 4 : Nb_Lieutenant% = 4: Nb_Capitaine% = 4 : Nb_Major% = 3 Nb_Colonel% = 2 : Nb_General% = 1 : Nb_Marechal% = 1 : Nb_Bombe% = 6 Nb_piecesJ1% = Nb_drapeau% + Nb_Espion% + Nb_Eclaireur% + Nb_Demineur% + Nb_Sergent% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Lieutenant% + Nb_Capitaine% + Nb_Major% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Colonel% + Nb_General% + Nb_Marechal% + Nb_Bombe% Nb_piecesJ2% = Nb_piecesJ1% Tour1() ' * Section à remplacer quand le placement des pièces sera programmé juste pour afficher quelques pions le temps ' * de faire les test ' * 4 pions bleus Pieces(0,3) = O_Drapeau% : Pieces(0,2) = O_Capitaine% Pieces(0,4) = O_Bombe% : Pieces(3,5) = O_Eclaireur% ' * 4 pions rouges Pieces(9,3) = O_Drapeau% + 20 : Pieces(9,2) = O_Eclaireur% + 20 Pieces(9,4) = O_Bombe% + 20 : Pieces(8,4) = O_Lieutenant% + 20 Sel_X% = -1 END_SUB SUB Trace_piece(l%,c%) DIM_LOCAL image%, p% p%= Pieces(l%,c%) image% = -1 IF p% > 19 THEN p% = p% - 20 SELECT p% CASE 11 : image% = I_Bombe% CASE 10 : image% = I_Marechal% CASE 9 : image% = I_General% CASE 8 : image% = I_Colonel% CASE 7 : image% = I_Major% CASE 6 : image% = I_Capitaine% CASE 5 : image% = I_Lieutenant% CASE 4 : image% = I_Sergent% CASE 3 : image% = I_Demineur% CASE 2 : image% = I_Eclaireur% CASE 1 : image% = I_Espion% CASE 0 : image% = I_Drapeau% END_SELECT IF image% > 0 2D_TARGET_IS image% : 2D_IMAGE_COPY I_copy%,0,2,60,79 2D_TARGET_IS I_E_preparation% IF Pieces(l%,c%) < 20 2D_FILL_COLOR 0,0,200 ELSE 2D_FILL_COLOR 200,0,0 END_IF 2D_RECTANGLE (c%)*81 + 2,(l%)*81 + 2, (c%+1)*81+1,(l%+1)*81 2D_IMAGE_PASTE I_copy%,(c%)*81 + 12,(l%)*81 + 2 END_IF END_SUB SUB Preparation() DIM_LOCAL piece% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,0,0 FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 piece% = Pieces(Ligne%,Colonne%) Trace_piece(Ligne%,Colonne%) NEXT Colonne% NEXT Ligne% END_SUB SUB Image_Recopy() 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_affiche% : 2D_IMAGE_PASTE I_copy%,0,0 END_SUB SUB encadre(lc%,cc%) 2D_LINE (c% )*81+2,(l% )*81 + 2,(c%+1)*81+1,(l% )*81 + 2 2D_LINE (c%+1)*81+1,(l% )*81 + 2,(c%+1)*81+1,(l%+1)*81 + 2 2D_LINE (c%+1)*81+1,(l%+1)*81 + 2,(c% )*81+2,(l%+1)*81 + 2 2D_LINE (c% )*81+2,(l%+1)*81 + 2,(c% )*81+2,(l% )*81 + 2 END_SUB SUB Deplace(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Type_P%,x_sup%,y_sup%,x_inf%,y_inf% Type_P% = Pieces(L_d%,C_d%) IF L_d% > L_a% y_inf% = (L_d%+1)*81 + 2 y_sup% = (L_a%)*81 ELSE y_inf% = (L_a%+1)*81 + 2 y_sup% = (L_d%)*81 END_IF IF C_d% > C_a% x_inf% = (C_a%)*81 x_sup% = (C_d%+1)*81+1 ELSE x_inf% = (C_d%)*81 x_sup% = (C_a%+1)*81+1 END_IF 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,x_inf%,y_sup%, x_sup%, y_inf% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,x_inf%,y_sup% Pieces(L_a%,C_a%) = Type_P% : Pieces(L_d%,C_d%) = -1 : Sel_X% = -1 Trace_Piece(L_a%,C_a%) Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_SUB SUB Test_deplacement(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Boucle%,sens% ' CAPTION 0,"Pièce : "+STR$(Type_P%)+" veut se déplacer de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) IF L_d%<>L_a% AND C_d%<>C_a% THEN BEEP_EXCLAMATION : EXIT_SUB IF Pieces(L_d%,C_d%) <> 2 AND Pieces(L_d%,C_d%) <> 22 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 BEEP_EXCLAMATION : EXIT_SUB ELSE ' CAPTION 0,"Deplace la piece de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) Deplace(L_d%,C_d%,L_a%,C_a%) END_IF ELSE IF L_d% = L_a% sens% = (C_a%-C_d%)/ABS(C_a%-C_d%) FOR Boucle%=C_d%+sens% TO C_a% STEP sens% IF Pieces(L_d%,Boucle%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF C_d% = C_a% sens% = (L_a%-L_d%)/ABS(L_a%-L_d%) FOR Boucle%=L_d%+sens% TO L_a% STEP sens% IF Pieces(Boucle%,C_d%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE BEEP_EXCLAMATION : EXIT_SUB END_IF END_IF END_IF END_SUB SUB Prise(L_d%,C_d%,L_a%,C_a%) ' Il faudra ajouter la procédure qui montre les 2 pièces IF (Pieces(L_d%,C_d%) = O_Espion% AND Pieces(L_a%,C_a%) = (O_Marechal% + 20)) OR (Pieces(L_d%,C_d%) = (O_Espion% + 20) AND Pieces(L_a%,C_a%) = O_Marechal%) OR (Pieces(L_d%,C_d%) = O_Demineur% AND Pieces(L_a%,C_a%) = (O_Bombe% + 20)) OR (Pieces(L_d%,C_d%) = (O_Demineur% + 20) AND Pieces(L_a%,C_a%) = O_Bombe%) Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF Pieces(L_d%,C_d%) > Pieces(L_a%,C_a%) Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF Pieces(L_d%,C_d%) <= Pieces(L_a%,C_a%) 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,(C_d%)*81,(L_d%)*81, (C_d%+1)*81+1, (L_d%+1)*81 + 2 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,(C_d%)*81,(L_d%)*81 END_IF IF Pieces(L_d%,C_d%) = Pieces(L_a%,C_a%) 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,(C_a%)*81,(L_a%)*81, (C_a%+1)*81+1, (L_a%+1)*81 + 2 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,(C_a%)*81,(L_a%)*81 Pieces(L_a%,C_a%) = -1 END_IF : Pieces(L_d%,C_d%) = -1 :Sel_X% = -1 : Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_IF END_IF END_SUB SUB Test_prise(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Boucle%,sens% IF L_d%<>L_a% AND C_d%<>C_a% THEN BEEP_EXCLAMATION : EXIT_SUB IF Pieces(L_d%,C_d%) <> 2 AND Pieces(L_d%,C_d%) <> 22 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 BEEP_EXCLAMATION : EXIT_SUB ELSE Prise(L_d%,C_d%,L_a%,C_a%) END_IF ELSE IF L_d% = L_a% sens% = (C_a%-C_d%)/ABS(C_a%-C_d%) IF ABS(C_a%-C_d%) > 1 FOR Boucle%=(C_d%+sens%) TO (C_a%-sens%) STEP sens% IF Pieces(L_d%,Boucle%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% END_IF Prise(L_d%,C_d%,L_a%,C_a%) ELSE IF C_d% = C_a% sens% = (L_a%-L_d%)/ABS(L_a%-L_d%) IF ABS(L_a%-L_d%) > 1 FOR Boucle%=(L_d%+sens%) TO (L_a%-sens%) STEP sens% IF Pieces(Boucle%,C_d%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% END_IF Prise(L_d%,C_d%,L_a%,C_a%) ELSE BEEP_EXCLAMATION : EXIT_SUB END_IF END_IF END_IF END_SUB SUB Tour1() Tour% = 1 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 0,0,200 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB SUB Tour2() Tour% = 2 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 200,0,0 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB click_plateau: OFF_CLICK I_E_affiche% ' CAPTION 0,"CASE : " + STR$(INT(MOUSE_X_POSITION(I_E_affiche%)/81) + 1)+ " : " + STR$(10 - INT(MOUSE_Y_POSITION(I_E_affiche%)/81)) c% = INT(MOUSE_X_POSITION(I_E_affiche%)/81) : l% = INT(MOUSE_Y_POSITION(I_E_affiche%)/81) tmp% = Pieces(l%,c%) IF Tour% = 1 IF tmp% >= 0 AND tmp% < 12 : ' On clic sur un pion bleu durant le tour du joueur 1 (bleu) IF tmp% = 0 OR tmp% = 11 : ' Si c'est une bombe ou le drapeau, on ne peut pas les bouger BEEP_EXCLAMATION : ' On averti par un beep que le mouvement n'est pas autorisé ELSE IF Sel_X% >= 0 THEN Image_Recopy() : ' Si on avait déjà sélectionné un pion, on efface la sélection actuelle Sel_X% = c% : Sel_Y% = l% : ' On enregistre la position de la nouvelle sélection 2D_PEN_COLOR 200,0,0 : encadre(l%,c%) : ' On affiche la case sélectionnée en l'encadrant END_IF ELSE IF Sel_X% >= 0 AND tmp% > 19 AND tmp% < 32 : ' Si le joueur 1 avait sélectionné un pion et qu'il clique sur un ennemi Test_prise(Sel_Y%,Sel_X%,l%,c%) : ' alors on resoud la rencontre ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 : ' Sinon on vérifie que la case cliqué est autorisée par la carte Test_deplacement(Sel_Y%,Sel_X%,l%,c%) : ' Si oui, on test si le joueur peut si déplacer ELSE BEEP_EXCLAMATION : ' Sinon, on l'averti par un beep que le mouvement n'est pas autorisé END_IF END_IF END_IF ELSE IF tmp% > 19 AND tmp% < 32 : ' On clic sur un pion rouge durant le tour du joueur 2 (rouge) IF tmp% = 20 OR tmp% = 31 : ' Si c'est une bombe ou le drapeau, on ne peut pas les bouger BEEP_EXCLAMATION : ' On averti par un beep que le mouvement n'est pas autorisé ELSE IF Sel_X% >= 0 THEN Image_Recopy() : ' Si on avait déjà sélectionné un pion, on efface la sélection actuelle Sel_X% = c% : Sel_Y% = l% : ' On enregistre la position de la nouvelle sélection 2D_PEN_COLOR 0,0,200 : encadre(l%,c%) : ' On affiche la case sélectionnée en l'encadrant END_IF ELSE IF Sel_X% >= 0 AND tmp% >= 0 AND tmp% < 12 : ' Si le joueur 2 avait sélectionné un pion et qu'il clique sur un ennemi Test_prise(Sel_Y%,Sel_X%,l%,c%) : ' alors on resoud la rencontre ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 : ' Sinon on vérifie que la case cliqué est autorisée par la carte Test_deplacement(Sel_Y%,Sel_X%,l%,c%) : ' Si oui, on test si le joueur peut si déplacer ELSE BEEP_EXCLAMATION : ' Sinon, on l'averti par un beep que le mouvement n'est pas autorisé END_IF END_IF END_IF END_IF ON_CLICK I_E_affiche%,click_plateau RETURN REM ======================== Papydall Début ==================================== Aide: SELECT NUMBER_CLICK CASE 92 tex$ = "STRATEGO " + chr$(13) + chr$(13) tex$ = tex$ + "STRATEGO est un jeu non seulement passionnant" + chr$(13) tex$ = tex$ + "pour les deux joueurs actifs, mais également captivant" + chr$(13) tex$ = tex$ + "pour les spectateurs. La stratégie, qui est le principe" + chr$(13) tex$ = tex$ + "fondamental de nombreux jeux tels que les échecs et" + chr$(13) tex$ = tex$ + "les dames, a donné son nom à Stratego. Le but à " + chr$(13) tex$ = tex$ + "atteindre dans le jeu de Stratego est de s’emparer du" + chr$(13) tex$ = tex$ + "drapeau de la partie adverse. A cet effet, chaque " + chr$(13) tex$ = tex$ + "joueur dispose d’une armée de 40 pièces classées" + chr$(13) tex$ = tex$ + "suivant les grades militaires, ce qui permet de retenir" + chr$(13) tex$ = tex$ + "facilement la valeur des pièces. Cette dénomination " + chr$(13) tex$ = tex$ + "n’a cependant pas été prise avec l’intention de lancer" + chr$(13) tex$ = tex$ + "un jeu inspiré de la guerre, mais simplement comme " + chr$(13) tex$ = tex$ + "exercice psychologique d’attaque et de défense. Chaque " + chr$(13) tex$ = tex$ + "joueur dispose d’une armée de 40 pièces, dont " + chr$(13) tex$ = tex$ + "vous pouvez voir sur le damier les emblèmes, les " + chr$(13) tex$ = tex$ + "grades militaires et le nombre. " + chr$(13) tex$ = tex$ + "On doit disposer stratégiquement les pièces de façon " + chr$(13) tex$ = tex$ + "à ce que l’attaque et la défense se déploient en faveur" + chr$(13) tex$ = tex$ + "de chaque joueur qui les déplace" + chr$(13) CASE 93 tex$ = "DISPOSITION DES PIÈCES" + chr$(13) + chr$(13) tex$ = tex$ + "Il y a deux camps : les rouges et les bleus. Etant donné" + chr$(13) tex$ = tex$ + "que ce sont les rouges qui ouvrent le jeu, on tire" + chr$(13) tex$ = tex$ + "d’abord au sort pour déterminer à quel joueur cette" + chr$(13) tex$ = tex$ + "couleur sera attribuée." + chr$(13) tex$ = tex$ + "Les joueurs se placent face à face, le carton du jeu" + chr$(13) tex$ = tex$ + "entre eux, l’emblème Stratego étant tourné vers eux." + chr$(13) tex$ = tex$ + "Chaque joueur place une pièce dans chaque case de" + chr$(13) tex$ = tex$ + "la moitié du carton qui lui est attribuée, mais de telle " + chr$(13) tex$ = tex$ + "façon que l’adversaire ne voit que les dos de ces pièces," + chr$(13) tex$ = tex$ + "afin que ce dernier ignore la valeur de chacune" + chr$(13) tex$ = tex$ + "des pièces placées." + chr$(13) tex$ = tex$ + "Les deux rangs de cases du milieu restent inoccupés," + chr$(13) tex$ = tex$ + "de même que les deux lacs à travers lesquels les" + chr$(13) tex$ = tex$ + "deux armées ne peuvent pas se mouvoir au cours du jeu." + chr$(13) tex$ = tex$ + "La disposition des pièces doit être étudiée d’après les" + chr$(13) tex$ = tex$ + "règles du jeu d’une part, et suivant l’inspiration stratégique " + chr$(13) tex$ = tex$ + "du joueur d’autre part." + chr$(13) CASE 94 tex$ = "RÈGLES DU JEU" + chr$(13) + chr$(13) tex$ = tex$ + "A tour de rôle, les joueurs peuvent déplacer une de leurs pièces d’une case à la fois, soit en avant ou en " + chr$(13) tex$ = tex$ + "arrière, soit latéralement à gauche ou à droite.l’éclaireur, au contraire des autres pièces peut, en une" + chr$(13) tex$ = tex$ + "fois, se déplacer de plus d’une case libre. Il peut alors arriver sur une case vide ou sur une pièce de l’adversaire." + chr$(13) tex$ = tex$ + "Le drapeau et les bombes ne doivent pas être déplacés et restent donc pendant tout le jeu sur les cases" + chr$(13) tex$ = tex$ + "où ils ont été placés au début. Lorsque deux pièces adversaires se sont rapprochées, les pièces se trouvant" + chr$(13) tex$ = tex$ + "soit face à face, soit à côté les unes des autres — le joueur peut prendre sa pièce et en touchant celle de" + chr$(13) tex$ = tex$ + "son adversaire, il doit nommer le grade de sa pièce personnelle. Le joueur adverse répond en nommant" + chr$(13) tex$ = tex$ + "le rang de sa pièce. Si c’est une pièce d’un rang inférieur, elle est alors enlevée du carton et la pièce" + chr$(13) tex$ = tex$ + "de rang supérieur prend la place devenue libre. Si cependant la pièce de l’adversaire est d’un rang " + chr$(13) tex$ = tex$ + "supérieur, alors la pièce de rang inférieur disparaît du carton et la pièce de rang supérieur reste à sa place." + chr$(13) tex$ = tex$ + "En cas de rang identiques, les deux pièces tombent. L’espion tombe devant les éclaireurs, ceux-ci tombent" + chr$(13) tex$ = tex$ + "devant les démineurs, les démineurs tombent devant les sergents, les sergents devant les Lieutenants,etc." + chr$(13) tex$ = tex$ + "Si deux pièces se trouvent rapprochées, il n’est pas nécessaire d’attaquer immédiatement;" + chr$(13) tex$ = tex$ + "l’initiative de l’attaque peut venir de chacun des deux joueurs. Chaque pièce, quel que soit son rang, sauf un démineur," + chr$(13) tex$ = tex$ + "tombe contre une bombe qui, rappelons-le, ne doit pas être déplacée. Si l’un des joueurs vient" + chr$(13) tex$ = tex$ + "à frapper une bombe de l’adversaire, celui-ci répond « boum ». Seul un démineur est en mesure de" + chr$(13) tex$ = tex$ + "détruire une bombe, après quoi elle doit être retirée du jeu. Le drapeau, qui ne doit pas être déplacé, tombe " + chr$(13) tex$ = tex$ + "devant n’importe quelle pièce de l’adversaire. Le maréchal, le plus haut en grade, tombe seulement" + chr$(13) tex$ = tex$ + "devant l’espion, s’il est pris par le dernier. Quand, au contraire, le maréchal attaque l’espion, ce dernier" + chr$(13) tex$ = tex$ + "tombe. Si un joueur ne peut plus déplacer aucune de ses pièces, par exemple lorsqu’il n’a plus" + chr$(13) tex$ = tex$ + "que des bombes et le drapeau, il doit capituler. Une pièce ne peut être déplacée plus de cinq fois de" + chr$(13) tex$ = tex$ + "suite entre les mêmes 2 cases. C’est le joueur qui réussit à s’emparer du drapeau de son adversaire,qui est le gagnant." + chr$(13) CASE 95 tex$ = "TACTIQUE" + chr$(13) + chr$(13) tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13) tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13) tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13) tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13) tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13) tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13) tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13) tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13) tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13) tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13) tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13) tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13) tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13) tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13) tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13) end_select MESSAGE tex$ RETURN REM &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& REM ======================== Papydall (Fin) ==================================== REM &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& | |
| | | Invité Invité
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 13:02 | |
| Bonjour, Il manque un end_if à la ligne 339. Par contre je vois que tu laisses des deux-points en bout de ligne, et le programme le considère comme des labels. Je te remets le code, je l'ai déjà mis ailleurs, mais comme je ne me souviens plus du titre, ça va plus vite de le recopier ici: - Code:
-
' RETROUVER les boucles if
label coller , ouvrir , depile , ligne ,saut , label , return dim ouv$,fer$,sinon$,alor$ ,f$ dim separ$, explode%, copie$, v_explode%, mot$(1000), nb_coord% ,g% , mn$ ,l% ,lig$ , sp% , d$ , d% ,saut$ dim a%,a$,m$,b%,b$ ,li%(10000,2) ,c$ ouv$="IF " :fer$="END_IF" : sinon$="ELSE" :alor$=" THEN "
' choix de memo, vu qu'il est le seul qui puisse recevoir le presse-paier memo 1:left 1,screen_x -width(0)-10:top 1,10:width 1,width(0)-20:height 1,height(0)-130 :bar_both 1 : hide 1
button 2:left 2, 10:width 2,60:caption 2,"coller" :on_click 2,coller button 3:left 3,100:width 3,60:caption 3,"ouvrir" :on_click 3,ouvrir open_dialog 5 list 6:top 6,40:height 6,height(0)-100:width 6,400 :font_name 6,"Courier New" : hide 6 dlist 10:' left 10,620:top 10,:width 10,300 alpha 8:top 8,height(1)+70:left 8,620 END coller: clipboard_paste 1 :gosub depile return ouvrir: filter 5,"Choisir le fichier|*.bas;*.bak;*.txt" f$=file_name$(5) if f$ <> "_" then file_load 1,f$
' ---------------------------------' depile: ' g%: guillemet g%= 0 : sp% = 1 if count(1)>0 for a%=1 to count(1) caption 0,str$(a%) +" / "+str$(count(1)) a$= item_read$(1,a%) : m$ = trim$(upper$(a$)) :g%=0 :clear 10 :l%=0 :c$="" if left$(m$,2)="' " or left$(m$,4) = "REM " else for b%=1 to len(m$) b$=mid$(m$,b%,1) if b$=chr$(34) then g%=-1-g% if b$=":" and g%=0 item_add 10,trim$(c$) : c$="" mn$=trim$(mid$(m$,b%+1,len(m$))) if left$(mn$,2)="' " or left$(mn$,4)="REM " then c$="":exit_for if c$ <> "" then item_add 10,trim$(c$) else c$=c$+b$ end_if next b% item_add 10,trim$(c$) end_if if scancode=27 then exit_for if count(10)>0 ' on commence à regarder les boucles /if/ for b%=1 to count(10) ' on peut prendre a$, on a fini la ligne a$ = item_read$(10,b%) ' caption 8,a$ b$ ="" if left$(a$,3) = ouv$ and instr(a$,alor$) > 0 :' "/if et then" b$="<**IF/THEN**> " gosub ligne else ' if sans then if left$(a$,3) = ouv$ gosub ligne sp%=sp% + 1 end_if end_if ' ligne avec else if left$(a$,4) = sinon$ sp%=sp%-1 gosub ligne sp% = sp% +1 end_if ' ligne avec end_if if left$(a$,6) = fer$ sp%=sp%-1 gosub ligne gosub saut end_if if left$(a$,6) = "RETURN" then b$=">>> " :gosub ligne:gosub return if right$(item_read$(1,a%),1) = ":" then gosub label :exit_for next b% end_if ' display next a% show 6 :full_space 0:full_space 6 end_if return
ligne: d$="" : for d%=1 to sp%:d$=d$+"| ":next d% if sp% <1 then d$="" lig$ = right$(" "+str$(a%),5) item_add 6,lig$ + d$ + b$ + trim$(item_read$(1,a%)) return return: d$="":for d%=1 to sp%:d$=d$+"|...":next d% item_add 6,"....." + d$ + STRING$(70,".") +" Ligne RETURN ......" return label: item_add 6,"LABEL ===>" + trim$(item_read$(1,a%)) item_add 6,"**********" + STRING$( len( trim$(item_read$(1,a%))),"*") return saut: d$="":for d%=1 to sp%:d$=d$+"| ":next d% item_add 6," " + d$ return edit: retiré une phrase qui ne vous concerne pas. désolé.
Dernière édition par cosmos70 le Dim 28 Fév 2016 - 14:23, édité 1 fois |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 13:29 | |
| @Jicehel
Attention : il ne faut pas ajouter un autre END_IF car il n’en manque aucun ! Seulement, enlève les deux-points après END_IF de la ligne 338, et tout ira bien.
PS : Comme la partie Aide est adoptée, tu peux supprimer les lignes REM … Papydall … C’était juste pour montrer la partie du code modifié. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 13:54 | |
| J'ai ajouté un début de moteur de règles dans le code avec la version contenant l'aide de Papydall. Pour le moment, je traite une première règle: - Citation :
- si <Déplacement> N=<0> <est plus grand que> N=<0> <Déplacement> N=<1> alors <rester sur place> N=<0> puis <arrêter règles et rejouer> N=<0>
Je voulais poster le code de l'outil moteur_de_jeu_definir_regles.bas et celui de Stratego.bas, mais le nombre de lignes dépasse ce que le forum autorise. J'ai donc créé un dossier Stratego sur mon WebDav. Ce dossier contient 3 fichiers: Stratego.rgl = règles du moteur Stratego_v1_avec_aide.bas = ma version avec debut du moteur moteur_de_jeu_definir_regles.bas = l'outil permettant de gérer la version actuelle du fichier des règles Dans Stratego, il y a un message de diagnostic pour bien vérifier l'opération. La règle agit sur deux flags globaux: - effectuer le déplacement souhaité ou non - garder la main pour rejouer directement ou non Ceci est inséré dans la procédure TEST_DEPLACEMENT. Si la règle permet le déplacement, le reste du code de cette SUB est exécuté. Sinon, ma modification prend la main. Ca montre dans quel esprit j'imagine ce moteur. Maintenant, je vais implémenter les différentes possibilités, au fur et à mesure.
Dernière édition par Klaus le Dim 28 Fév 2016 - 14:05, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 28 Fév 2016 - 13:58 | |
| OK Merci Papydall et merci d'avoir de bon yeux aussi Du coup je mets le code avec la correction. Si ça ne t'ennuies pas, je laisse les Papydall (j'ai retiré un peu de déco) pour garder une trace des contributeurs. J'ai corrigé une grosse erreur de logique dans les prises. J'attends un peu pour voir s'il y a d'autres volontaires pour écrire un procédure sur un des sujets restants @Klaus. Je m'arrète là pour attendre que tu reprennes la logique de jeu avec ton principe de règles afin de l'intégrer directement dans la prochaine version du code. - Code:
-
REM ============================================================================ REM JEU DU STRATEGO REM SUR UNE IDEE DE JICEHEL REM OUVERT A LA COLLABORATION DES TOUS LES PANORAMICIENS STRATEGOYENS REM ============================================================================ ' ------------------------- ' * Structure du Stratego * ' ------------------------- LABEL click_plateau, Aide DIM tex$ APPLICATION_TITLE "**** STRATEGO COLLABORATIF *****" ' * Déclaration des variables DIM compt% ' * Déclaration des variables pour les images DIM I_Fond% : ' Numéro du picture où l'on charge l'image de fond (on n'y touche pas) DIM I_E_affiche% : ' Numéro du picture qui sera affiché DIM I_E_preparation% : ' Numéro du picture de travail (masqué) DIM I_copy% : ' Numéro de l'image servant pour les copies DIM P_Tour% : ' Un petit picture pour mettre l'indicateur de tour ' * Déclaration des numéros des picture où l'on va stocker l'image des pions DIM I_Bombe%, I_Capitaine%, I_Colonel%, I_Drapeau%, I_General%, I_Lieutenant% DIM I_Major%, I_Marechal%, I_Demineur%, I_Eclaireur%, I_Sergent%, I_Espion% ' * Déclaration des constantes contenant les dimensions de l'image de fond DIM Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811 ' * Déclaration du nombre de pièces du joueur 1, du joueur 2 et de chacun des types de pièces DIM Nb_piecesJ1%, Nb_piecesJ2% DIM Nb_Bombe%, Nb_Capitaine%, Nb_Colonel%, Nb_Drapeau%, Nb_General%, Nb_Lieutenant% DIM Nb_Major%, Nb_Marechal%, Nb_Demineur%, Nb_Eclaireur%, Nb_Sergent%, Nb_Espion% ' * Déclaration de l'ordre des pièces (hors règles spéciale) DIM O_Bombe%, O_Capitaine%, O_Colonel%, O_Drapeau%, O_General%, O_Lieutenant% DIM O_Major%, O_Marechal%, O_Demineur%, O_Eclaireur%, O_Sergent%, O_Espion% ' * Déclaration des matrices de terrain DIM Franchissable(9,9), Pieces(9,9) ' * Les pions du joueur 1 ont des valeurs de 0 à 11. Ceux du joueur 2 de 20 à 31 ' * Déclaration des compteurs et autres variables du jeu DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l% DIM Tour% : ' Indique si c'est au joueur 1 ou au joueur 2 de jouer DIM Sel_X%, Sel_Y% : ' Coordonnées de la case sélectionnée (négative si pas de case sélectionnée) DIM rep$,repimage$ DIM Hcase%,Wcase% : Hcase%=80 : Wcase%=80 ' * Création du menu (à développer par la suite) MAIN_MENU 10 SUB_MENU 11 : PARENT 11,10 : CAPTION 11,"Fichier" REM =================== Papydall (Début) ======================================= SUB_MENU 91 : PARENT 91,10 : CAPTION 91,"Aide" SUB_MENU 92 : PARENT 92,91 : CAPTION 92,"Stratégo" : ON_CLICK 92,Aide SUB_MENU 93 : PARENT 93,91 : CAPTION 93,"Dispositions des pièces" : ON_CLICK 93,Aide SUB_MENU 94 : PARENT 94,91 : CAPTION 94,"Règles du jeu" : ON_CLICK 94,Aide SUB_MENU 95 : PARENT 95,91 : CAPTION 95,"Tactique" : ON_CLICK 95,Aide REM =================== Papydall (Fin) ========================================= ' * Initialisation des chemins rep$=DIR_CURRENT$+"\" : repimage$=rep$+"img\" ' * Règles des pièces ' La bombe ne peut pas se déplacer mais détruit toutes les pièces sauf le démineur ' Le Maréchal peut être capturé (détruit) par l'espion et explose sur les mines ' ' L'ordre de pièce est Bomb, Marechal, General, Colonnel, Major, Capitaine, Lieutenant ' Sergent, Démineur, Espion et Drapeau ' ' Nb pièces: Bombes: 6, Maréchal: 1, Général: 1, Colonel: 2, Major: 3, Capitaine: 4, ' Lieutenant: 4, Sergent: 4, Démineur: 5, Eclaireur: 8, Espion: 1, Drapeau: 1 ' Les démineur peuvent déminer (détruire les bombes) ' Les éclaireurs peuvent avancer en ligne droite dégagée (ils ne peuvent pas passer par dessus un pièce) ' L'espion peut détruire le Maréchal uniquement quand c'est l'espion qui attaque le Maréchal ' Le drapeau ne peu pas être déplacé, sa capture met fin à la partie ' * Définition des cases franchissables ou non (On met toutes les cases à 1 et on met après les cases infranchissables à 0) FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 Franchissable(Ligne%,Colonne%) = 1 Pieces(Ligne%,Colonne%) = -1 NEXT Colonne% NEXT Ligne% Franchissable(4,2) = 0 : Franchissable(4,3) = 0 Franchissable(4,6) = 0 : Franchissable(4,7) = 0 Franchissable(5,2) = 0 : Franchissable(5,3) = 0 Franchissable(5,6) = 0 : Franchissable(5,7) = 0 ' * Création et chargement des images FULL_SPACE 0 compt% = 100 : ' Compteur pour commencer à numéroter les nouveau objets à partir de 100 ' * Chargement du fond dans le picture pour le garder en réserve PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_Fond% = compt% : TOP compt%, -2000 FILE_LOAD compt%,repimage$+"Fond.jpg" : compt% = compt% + 1 ' * Créations des autres pictures pour l'écran affiché et l'écran de travail PICTURE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_affiche% = compt% : TOP compt%, (HEIGHT(0)-Hauteur_Fond%)/2 -35 LEFT compt%,(WIDTH(0)-Largeur_Fond%)/2 : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_preparation% = compt% : compt% = compt% + 1 PICTURE compt% : HEIGHT compt%,30 : WIDTH compt%,30 : TOP compt%,15 : LEFT compt%,15 P_Tour% = compt% : compt% = compt% + 1 ' * Création de l'image de travail pour effectuer les copies IMAGE compt% : I_copy% = compt% : compt% = compt% + 1 ' * Chargement de toutes les images correspondant aux différents pions PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Bombe% = compt% : O_Bombe% = 11 FILE_LOAD compt%,repimage$+"Bomb.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Capitaine% = compt% : O_Capitaine% = 6 FILE_LOAD compt%,repimage$+"Captain.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Colonel% = compt% :O_Colonel% = 8 FILE_LOAD compt%,repimage$+"Colonel.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Drapeau% = compt% : O_Drapeau% = 0 FILE_LOAD compt%,repimage$+"Flag.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_General% = compt% : O_General% = 9 FILE_LOAD compt%,"img/General.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Lieutenant% = compt% : O_Lieutenant% = 5 FILE_LOAD compt%,repimage$+"Lieutenant.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Major% = compt% : O_Major% = 7 FILE_LOAD compt%,repimage$+"Major.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Marechal% = compt% : O_Marechal% = 10 FILE_LOAD compt%,repimage$+"Marshal.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Demineur% = compt% : O_Demineur% = 3 FILE_LOAD compt%,repimage$+"Miner.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Eclaireur% = compt% : O_Eclaireur% = 2 FILE_LOAD compt%,repimage$+"Scout.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Sergent% = compt% :O_Sergent% = 4 FILE_LOAD compt%,repimage$+"Sergeant.jpg" : compt% = compt% + 1 PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Espion% = compt% : O_Espion% = 1 FILE_LOAD compt%,repimage$+"Spy.jpg" : compt% = compt% + 1 Init() Preparation() Image_Recopy() ON_CLICK I_E_affiche%,click_plateau END SUB Init() Nb_drapeau% = 1 : Nb_Espion% = 1 : Nb_Eclaireur% = 8 : Nb_Demineur% = 5 Nb_Sergent% = 4 : Nb_Lieutenant% = 4: Nb_Capitaine% = 4 : Nb_Major% = 3 Nb_Colonel% = 2 : Nb_General% = 1 : Nb_Marechal% = 1 : Nb_Bombe% = 6 Nb_piecesJ1% = Nb_drapeau% + Nb_Espion% + Nb_Eclaireur% + Nb_Demineur% + Nb_Sergent% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Lieutenant% + Nb_Capitaine% + Nb_Major% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Colonel% + Nb_General% + Nb_Marechal% + Nb_Bombe% Nb_piecesJ2% = Nb_piecesJ1% Tour1() ' * Section à remplacer quand le placement des pièces sera programmé juste pour afficher quelques pions le temps ' * de faire les test ' * 4 pions bleus Pieces(0,3) = O_Drapeau% : Pieces(0,2) = O_Capitaine% Pieces(0,4) = O_Bombe% : Pieces(3,5) = O_Eclaireur% ' * 4 pions rouges Pieces(9,3) = O_Drapeau% + 20 : Pieces(9,2) = O_Eclaireur% + 20 Pieces(9,4) = O_Bombe% + 20 : Pieces(8,4) = O_Lieutenant% + 20 Sel_X% = -1 END_SUB SUB Trace_piece(l%,c%) DIM_LOCAL image%, p% p%= Pieces(l%,c%) image% = -1 IF p% > 19 THEN p% = p% - 20 SELECT p% CASE 11 : image% = I_Bombe% CASE 10 : image% = I_Marechal% CASE 9 : image% = I_General% CASE 8 : image% = I_Colonel% CASE 7 : image% = I_Major% CASE 6 : image% = I_Capitaine% CASE 5 : image% = I_Lieutenant% CASE 4 : image% = I_Sergent% CASE 3 : image% = I_Demineur% CASE 2 : image% = I_Eclaireur% CASE 1 : image% = I_Espion% CASE 0 : image% = I_Drapeau% END_SELECT IF image% > 0 2D_TARGET_IS image% : 2D_IMAGE_COPY I_copy%,0,2,60,79 2D_TARGET_IS I_E_preparation% IF Pieces(l%,c%) < 20 2D_FILL_COLOR 0,0,200 ELSE 2D_FILL_COLOR 200,0,0 END_IF 2D_RECTANGLE (c%)*81 + 2,(l%)*81 + 2, (c%+1)*81+1,(l%+1)*81 2D_IMAGE_PASTE I_copy%,(c%)*81 + 12,(l%)*81 + 2 END_IF END_SUB SUB Preparation() DIM_LOCAL piece% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,0,0 FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 piece% = Pieces(Ligne%,Colonne%) Trace_piece(Ligne%,Colonne%) NEXT Colonne% NEXT Ligne% END_SUB SUB Image_Recopy() 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_affiche% : 2D_IMAGE_PASTE I_copy%,0,0 END_SUB SUB encadre(lc%,cc%) 2D_LINE (c% )*81+2,(l% )*81 + 2,(c%+1)*81+1,(l% )*81 + 2 2D_LINE (c%+1)*81+1,(l% )*81 + 2,(c%+1)*81+1,(l%+1)*81 + 2 2D_LINE (c%+1)*81+1,(l%+1)*81 + 2,(c% )*81+2,(l%+1)*81 + 2 2D_LINE (c% )*81+2,(l%+1)*81 + 2,(c% )*81+2,(l% )*81 + 2 END_SUB SUB Deplace(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Type_P%,x_sup%,y_sup%,x_inf%,y_inf% Type_P% = Pieces(L_d%,C_d%) IF L_d% > L_a% y_inf% = (L_d%+1)*81 + 2 y_sup% = (L_a%)*81 ELSE y_inf% = (L_a%+1)*81 + 2 y_sup% = (L_d%)*81 END_IF IF C_d% > C_a% x_inf% = (C_a%)*81 x_sup% = (C_d%+1)*81+1 ELSE x_inf% = (C_d%)*81 x_sup% = (C_a%+1)*81+1 END_IF 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,x_inf%,y_sup%, x_sup%, y_inf% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,x_inf%,y_sup% Pieces(L_a%,C_a%) = Type_P% : Pieces(L_d%,C_d%) = -1 : Sel_X% = -1 Trace_Piece(L_a%,C_a%) Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_SUB SUB Test_deplacement(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Boucle%,sens% ' CAPTION 0,"Pièce : "+STR$(Type_P%)+" veut se déplacer de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) IF L_d%<>L_a% AND C_d%<>C_a% THEN BEEP_EXCLAMATION : EXIT_SUB IF Pieces(L_d%,C_d%) <> 2 AND Pieces(L_d%,C_d%) <> 22 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 BEEP_EXCLAMATION : EXIT_SUB ELSE ' CAPTION 0,"Deplace la piece de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) Deplace(L_d%,C_d%,L_a%,C_a%) END_IF ELSE IF L_d% = L_a% sens% = (C_a%-C_d%)/ABS(C_a%-C_d%) FOR Boucle%=C_d%+sens% TO C_a% STEP sens% IF Pieces(L_d%,Boucle%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF C_d% = C_a% sens% = (L_a%-L_d%)/ABS(L_a%-L_d%) FOR Boucle%=L_d%+sens% TO L_a% STEP sens% IF Pieces(Boucle%,C_d%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE BEEP_EXCLAMATION : EXIT_SUB END_IF END_IF END_IF END_SUB SUB Prise(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL p_d%,p_a% ' Il faudra ajouter la procédure qui montre les 2 pièces p_d% = Pieces(L_d%,C_d%) : IF p_d% > 19 THEN p_d% = p_d% - 20 p_a% = Pieces(L_a%,C_a%) : IF p_a% > 19 THEN p_a% = p_a% - 20 IF (p_d% = O_Espion% AND p_a% = O_Marechal% ) OR (p_d% = O_Demineur% AND p_a% = O_Bombe%) Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF p_d% > p_a% Deplace(L_d%,C_d%,L_a%,C_a%) ELSE IF p_d% <= p_a% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,(C_d%)*81,(L_d%)*81, (C_d%+1)*81+1, (L_d%+1)*81 + 2 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,(C_d%)*81,(L_d%)*81 END_IF IF p_d% = p_a% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,(C_a%)*81,(L_a%)*81, (C_a%+1)*81+1, (L_a%+1)*81 + 2 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,(C_a%)*81,(L_a%)*81 Pieces(L_a%,C_a%) = -1 END_IF Pieces(L_d%,C_d%) = -1 :Sel_X% = -1 : Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_IF END_IF END_SUB SUB Test_prise(L_d%,C_d%,L_a%,C_a%) DIM_LOCAL Boucle%,sens% IF L_d%<>L_a% AND C_d%<>C_a% THEN BEEP_EXCLAMATION : EXIT_SUB IF Pieces(L_d%,C_d%) <> 2 AND Pieces(L_d%,C_d%) <> 22 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 BEEP_EXCLAMATION : EXIT_SUB ELSE Prise(L_d%,C_d%,L_a%,C_a%) END_IF ELSE IF L_d% = L_a% sens% = (C_a%-C_d%)/ABS(C_a%-C_d%) IF ABS(C_a%-C_d%) > 1 FOR Boucle%=(C_d%+sens%) TO (C_a%-sens%) STEP sens% IF Pieces(L_d%,Boucle%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% END_IF Prise(L_d%,C_d%,L_a%,C_a%) ELSE IF C_d% = C_a% sens% = (L_a%-L_d%)/ABS(L_a%-L_d%) IF ABS(L_a%-L_d%) > 1 FOR Boucle%=(L_d%+sens%) TO (L_a%-sens%) STEP sens% IF Pieces(Boucle%,C_d%) <> -1 THEN BEEP_EXCLAMATION : EXIT_SUB NEXT Boucle% END_IF Prise(L_d%,C_d%,L_a%,C_a%) ELSE BEEP_EXCLAMATION : EXIT_SUB END_IF END_IF END_IF END_SUB SUB Tour1() Tour% = 1 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 0,0,200 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB SUB Tour2() Tour% = 2 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 200,0,0 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB click_plateau: OFF_CLICK I_E_affiche% ' CAPTION 0,"CASE : " + STR$(INT(MOUSE_X_POSITION(I_E_affiche%)/81) + 1)+ " : " + STR$(10 - INT(MOUSE_Y_POSITION(I_E_affiche%)/81)) c% = INT(MOUSE_X_POSITION(I_E_affiche%)/81) : l% = INT(MOUSE_Y_POSITION(I_E_affiche%)/81) tmp% = Pieces(l%,c%) IF Tour% = 1 IF tmp% >= 0 AND tmp% < 12 : ' On clic sur un pion bleu durant le tour du joueur 1 (bleu) IF tmp% = 0 OR tmp% = 11 : ' Si c'est une bombe ou le drapeau, on ne peut pas les bouger BEEP_EXCLAMATION : ' On averti par un beep que le mouvement n'est pas autorisé ELSE IF Sel_X% >= 0 THEN Image_Recopy() : ' Si on avait déjà sélectionné un pion, on efface la sélection actuelle Sel_X% = c% : Sel_Y% = l% : ' On enregistre la position de la nouvelle sélection 2D_PEN_COLOR 200,0,0 : encadre(l%,c%) : ' On affiche la case sélectionnée en l'encadrant END_IF ELSE IF Sel_X% >= 0 AND tmp% > 19 AND tmp% < 32 : ' Si le joueur 1 avait sélectionné un pion et qu'il clique sur un ennemi Test_prise(Sel_Y%,Sel_X%,l%,c%) : ' alors on resoud la rencontre ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 : ' Sinon on vérifie que la case cliqué est autorisée par la carte Test_deplacement(Sel_Y%,Sel_X%,l%,c%) : ' Si oui, on test si le joueur peut si déplacer ELSE BEEP_EXCLAMATION : ' Sinon, on l'averti par un beep que le mouvement n'est pas autorisé END_IF END_IF END_IF ELSE IF tmp% > 19 AND tmp% < 32 : ' On clic sur un pion rouge durant le tour du joueur 2 (rouge) IF tmp% = 20 OR tmp% = 31 : ' Si c'est une bombe ou le drapeau, on ne peut pas les bouger BEEP_EXCLAMATION : ' On averti par un beep que le mouvement n'est pas autorisé ELSE IF Sel_X% >= 0 THEN Image_Recopy() : ' Si on avait déjà sélectionné un pion, on efface la sélection actuelle Sel_X% = c% : Sel_Y% = l% : ' On enregistre la position de la nouvelle sélection 2D_PEN_COLOR 0,0,200 : encadre(l%,c%) : ' On affiche la case sélectionnée en l'encadrant END_IF ELSE IF Sel_X% >= 0 AND tmp% >= 0 AND tmp% < 12 : ' Si le joueur 2 avait sélectionné un pion et qu'il clique sur un ennemi Test_prise(Sel_Y%,Sel_X%,l%,c%) : ' alors on resoud la rencontre ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 : ' Sinon on vérifie que la case cliqué est autorisée par la carte Test_deplacement(Sel_Y%,Sel_X%,l%,c%) : ' Si oui, on test si le joueur peut si déplacer ELSE BEEP_EXCLAMATION : ' Sinon, on l'averti par un beep que le mouvement n'est pas autorisé END_IF END_IF END_IF END_IF ON_CLICK I_E_affiche%,click_plateau RETURN REM ======================== Papydall Début ==================================== Aide: SELECT NUMBER_CLICK CASE 92 tex$ = "STRATEGO " + chr$(13) + chr$(13) tex$ = tex$ + "STRATEGO est un jeu non seulement passionnant" + chr$(13) tex$ = tex$ + "pour les deux joueurs actifs, mais également captivant" + chr$(13) tex$ = tex$ + "pour les spectateurs. La stratégie, qui est le principe" + chr$(13) tex$ = tex$ + "fondamental de nombreux jeux tels que les échecs et" + chr$(13) tex$ = tex$ + "les dames, a donné son nom à Stratego. Le but à " + chr$(13) tex$ = tex$ + "atteindre dans le jeu de Stratego est de s’emparer du" + chr$(13) tex$ = tex$ + "drapeau de la partie adverse. A cet effet, chaque " + chr$(13) tex$ = tex$ + "joueur dispose d’une armée de 40 pièces classées" + chr$(13) tex$ = tex$ + "suivant les grades militaires, ce qui permet de retenir" + chr$(13) tex$ = tex$ + "facilement la valeur des pièces. Cette dénomination " + chr$(13) tex$ = tex$ + "n’a cependant pas été prise avec l’intention de lancer" + chr$(13) tex$ = tex$ + "un jeu inspiré de la guerre, mais simplement comme " + chr$(13) tex$ = tex$ + "exercice psychologique d’attaque et de défense. Chaque " + chr$(13) tex$ = tex$ + "joueur dispose d’une armée de 40 pièces, dont " + chr$(13) tex$ = tex$ + "vous pouvez voir sur le damier les emblèmes, les " + chr$(13) tex$ = tex$ + "grades militaires et le nombre. " + chr$(13) tex$ = tex$ + "On doit disposer stratégiquement les pièces de façon " + chr$(13) tex$ = tex$ + "à ce que l’attaque et la défense se déploient en faveur" + chr$(13) tex$ = tex$ + "de chaque joueur qui les déplace" + chr$(13) CASE 93 tex$ = "DISPOSITION DES PIÈCES" + chr$(13) + chr$(13) tex$ = tex$ + "Il y a deux camps : les rouges et les bleus. Etant donné" + chr$(13) tex$ = tex$ + "que ce sont les rouges qui ouvrent le jeu, on tire" + chr$(13) tex$ = tex$ + "d’abord au sort pour déterminer à quel joueur cette" + chr$(13) tex$ = tex$ + "couleur sera attribuée." + chr$(13) tex$ = tex$ + "Les joueurs se placent face à face, le carton du jeu" + chr$(13) tex$ = tex$ + "entre eux, l’emblème Stratego étant tourné vers eux." + chr$(13) tex$ = tex$ + "Chaque joueur place une pièce dans chaque case de" + chr$(13) tex$ = tex$ + "la moitié du carton qui lui est attribuée, mais de telle " + chr$(13) tex$ = tex$ + "façon que l’adversaire ne voit que les dos de ces pièces," + chr$(13) tex$ = tex$ + "afin que ce dernier ignore la valeur de chacune" + chr$(13) tex$ = tex$ + "des pièces placées." + chr$(13) tex$ = tex$ + "Les deux rangs de cases du milieu restent inoccupés," + chr$(13) tex$ = tex$ + "de même que les deux lacs à travers lesquels les" + chr$(13) tex$ = tex$ + "deux armées ne peuvent pas se mouvoir au cours du jeu." + chr$(13) tex$ = tex$ + "La disposition des pièces doit être étudiée d’après les" + chr$(13) tex$ = tex$ + "règles du jeu d’une part, et suivant l’inspiration stratégique " + chr$(13) tex$ = tex$ + "du joueur d’autre part." + chr$(13) CASE 94 tex$ = "RÈGLES DU JEU" + chr$(13) + chr$(13) tex$ = tex$ + "A tour de rôle, les joueurs peuvent déplacer une de leurs pièces d’une case à la fois, soit en avant ou en " + chr$(13) tex$ = tex$ + "arrière, soit latéralement à gauche ou à droite.l’éclaireur, au contraire des autres pièces peut, en une" + chr$(13) tex$ = tex$ + "fois, se déplacer de plus d’une case libre. Il peut alors arriver sur une case vide ou sur une pièce de l’adversaire." + chr$(13) tex$ = tex$ + "Le drapeau et les bombes ne doivent pas être déplacés et restent donc pendant tout le jeu sur les cases" + chr$(13) tex$ = tex$ + "où ils ont été placés au début. Lorsque deux pièces adversaires se sont rapprochées, les pièces se trouvant" + chr$(13) tex$ = tex$ + "soit face à face, soit à côté les unes des autres — le joueur peut prendre sa pièce et en touchant celle de" + chr$(13) tex$ = tex$ + "son adversaire, il doit nommer le grade de sa pièce personnelle. Le joueur adverse répond en nommant" + chr$(13) tex$ = tex$ + "le rang de sa pièce. Si c’est une pièce d’un rang inférieur, elle est alors enlevée du carton et la pièce" + chr$(13) tex$ = tex$ + "de rang supérieur prend la place devenue libre. Si cependant la pièce de l’adversaire est d’un rang " + chr$(13) tex$ = tex$ + "supérieur, alors la pièce de rang inférieur disparaît du carton et la pièce de rang supérieur reste à sa place." + chr$(13) tex$ = tex$ + "En cas de rang identiques, les deux pièces tombent. L’espion tombe devant les éclaireurs, ceux-ci tombent" + chr$(13) tex$ = tex$ + "devant les démineurs, les démineurs tombent devant les sergents, les sergents devant les Lieutenants,etc." + chr$(13) tex$ = tex$ + "Si deux pièces se trouvent rapprochées, il n’est pas nécessaire d’attaquer immédiatement;" + chr$(13) tex$ = tex$ + "l’initiative de l’attaque peut venir de chacun des deux joueurs. Chaque pièce, quel que soit son rang, sauf un démineur," + chr$(13) tex$ = tex$ + "tombe contre une bombe qui, rappelons-le, ne doit pas être déplacée. Si l’un des joueurs vient" + chr$(13) tex$ = tex$ + "à frapper une bombe de l’adversaire, celui-ci répond « boum ». Seul un démineur est en mesure de" + chr$(13) tex$ = tex$ + "détruire une bombe, après quoi elle doit être retirée du jeu. Le drapeau, qui ne doit pas être déplacé, tombe " + chr$(13) tex$ = tex$ + "devant n’importe quelle pièce de l’adversaire. Le maréchal, le plus haut en grade, tombe seulement" + chr$(13) tex$ = tex$ + "devant l’espion, s’il est pris par le dernier. Quand, au contraire, le maréchal attaque l’espion, ce dernier" + chr$(13) tex$ = tex$ + "tombe. Si un joueur ne peut plus déplacer aucune de ses pièces, par exemple lorsqu’il n’a plus" + chr$(13) tex$ = tex$ + "que des bombes et le drapeau, il doit capituler. Une pièce ne peut être déplacée plus de cinq fois de" + chr$(13) tex$ = tex$ + "suite entre les mêmes 2 cases. C’est le joueur qui réussit à s’emparer du drapeau de son adversaire,qui est le gagnant." + chr$(13) CASE 95 tex$ = "TACTIQUE" + chr$(13) + chr$(13) tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13) tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13) tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13) tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13) tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13) tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13) tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13) tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13) tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13) tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13) tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13) tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13) tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13) tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13) tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13) END_SELECT MESSAGE tex$ RETURN REM ======================== Papydall (Fin) ====================================
Dernière édition par Jicehel le Sam 5 Mar 2016 - 14:00, édité 1 fois | |
| | | Contenu sponsorisé
| Sujet: Re: Stratego collaboratif | |
| |
| | | | Stratego collaboratif | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |