FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Stratego collaboratif - Page 2 Emptypar Pedro Aujourd'hui à 10:32

» item_index(résolu)
Stratego collaboratif - Page 2 Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Stratego collaboratif - Page 2 Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Stratego collaboratif - Page 2 Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Stratego collaboratif - Page 2 Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Stratego collaboratif - Page 2 Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Stratego collaboratif - Page 2 Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Stratego collaboratif - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Stratego collaboratif - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Stratego collaboratif - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Stratego collaboratif - Page 2 Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Stratego collaboratif - Page 2 Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Stratego collaboratif - Page 2 Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Stratego collaboratif - Page 2 Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Stratego collaboratif - Page 2 Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Bon plan achat en duo : 2ème robot cuiseur Moulinex Companion ...
600 €
Voir le deal

 

 Stratego collaboratif

Aller en bas 
+5
Yannick
JL35
silverman
Jean Claude
Jicehel
9 participants
Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
AuteurMessage
Klaus

Klaus


Nombre de messages : 12299
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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 vsuite
Les 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12299
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12299
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12299
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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:
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12299
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 27 Fév 2016 - 19:03

Je viens de tester Jicehel,
Plus de bocage de l'éclaireur.
Rien d'autre pour le moment.
A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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 ?
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 27 Fév 2016 - 19:50

Ben je n'ai regardé le code, j'ai juste testé. Embarassed

J'étais occupé sur l'autre version, demain peut-être...

A+
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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)?
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptySam 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...
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 28 Fév 2016 - 0:36

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 28 Fév 2016 - 1:39

Très bonne video Papydall. Très interessante. A demain tout le monde
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 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 ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 28 Fév 2016 - 9:04

Super tes 4 sujets d'aide. Merci Papydall Wink
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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 28 Fév 2016 - 10:14

Merci Papydall,
ça nous fait du boulot en moins. Very Happy
A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 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".
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 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 .... Embarassed

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 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Revenir en haut Aller en bas
Invité
Invité




Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 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
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 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é.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12299
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 EmptyDim 28 Fév 2016 - 13:58

OK  Smile Merci Papydall et merci d'avoir de bon yeux aussi  Smile

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
Revenir en haut Aller en bas
Contenu sponsorisé





Stratego collaboratif - Page 2 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 2 Empty

Revenir en haut Aller en bas
 
Stratego collaboratif
Revenir en haut 
Page 2 sur 5Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
 Sujets similaires
-
» site web de notre projet collaboratif
» Stratego
» information sur stratégo 2D
» Stratégo Colaboratif (version sur un scene2d)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Grands projets réalisés avec Panoramic :: Stratego-
Sauter vers: