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
» 2D_fill_color
Stratego collaboratif - Page 4 Emptypar papydall Aujourd'hui à 14:47

» Consommation gaz électricité
Stratego collaboratif - Page 4 Emptypar leclode Mer 17 Avr 2024 - 11:07

» trop de fichiers en cours
Stratego collaboratif - Page 4 Emptypar lepetitmarocain Mer 17 Avr 2024 - 10:19

» on_key_down (résolu)
Stratego collaboratif - Page 4 Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Stratego collaboratif - Page 4 Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

» Bataille-navale
Stratego collaboratif - Page 4 Emptypar jjn4 Mer 3 Avr 2024 - 14:08

» Minimiser une fenêtre Panoramic.
Stratego collaboratif - Page 4 Emptypar Pedro Mar 2 Avr 2024 - 13:50

» Récapitulatif ludothèque panoramic jjn4
Stratego collaboratif - Page 4 Emptypar jjn4 Lun 1 Avr 2024 - 18:04

» demande explication KGF pour imprimer en mm
Stratego collaboratif - Page 4 Emptypar JL35 Jeu 28 Mar 2024 - 17:28

» Petit passage furtif
Stratego collaboratif - Page 4 Emptypar Froggy One Mer 27 Mar 2024 - 14:26

» SPIN et aide langage (résolu)
Stratego collaboratif - Page 4 Emptypar leclode Sam 23 Mar 2024 - 15:20

» Aide-mémoire des mots-clés Panoramic
Stratego collaboratif - Page 4 Emptypar papydall Mer 20 Mar 2024 - 21:23

» Je ne comprend pas pourquoi la largeur de la scene 3d change
Stratego collaboratif - Page 4 Emptypar Marc Mar 12 Mar 2024 - 20:06

» Comment télécharger panoramic?
Stratego collaboratif - Page 4 Emptypar lepetitmarocain Sam 9 Mar 2024 - 13:31

» @lepetitmarocain <==> KGFGrid
Stratego collaboratif - Page 4 Emptypar Klaus Dim 3 Mar 2024 - 9:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
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 : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyLun 29 Fév 2016 - 15:12

Nouvelle version.

J'ai ajouté la condition "Toujours". Dans ce cas, les paramétrages pour "sujet" et "objet" sont toujours requis (pour des raisons de validité de paramétrage qu je n'ai pas encore résolues), mais ces paramètres sont superbement ignorées et la condition est toujours vraie, ce qui entraîne une exécution automatique de l'action et du paramètre "finir" configurés pour la règle concernée.

Pour le moment, cette possibilité n'est pas encore utilisée dans les règles pour Stratego.

Le WebDav est à jour.

EDIT

Conseil d'intégration:
Normalement, il devrait suffire de placer l'appel du moteur au début de la routine évènement, juste après l'établissement des coordonnées. Ensuite, il suffit de traiter ce que les variables du moteur indiquent.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMar 1 Mar 2016 - 10:56

Nouvelle version:
J'ai ajouté 2 règles pour interdire de bouger le drapeau et la bombe. Je les avais oubliées...

Il faut recharger les 3 fichiers.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMar 1 Mar 2016 - 11:43

OK, merci Klaus, je n'ai pas regardé hier soir, mais du coup tu as implémenté toute la logique actuelle ou tu as encore des règles à créer ?

A ton avis, le fait d'afficher ou de masquer l'image du pion est à gérer dans le programme ou via une règle de ton moteur ?

J'hésite, les 2 façon de faire ont des arguments valables selon moi.
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMar 1 Mar 2016 - 18:22

Ben, je pense qu'il vaut mieux le faire en-dehors du moteur. Il ne connaît rien à la représentation graphique. Il ne travaille que sur des tables et des règles. Il indique, via des variables globales (créées par lui) ce qu'il faut faire. Ces variables sont celles qui sont éventuellement affichées à la fin du moteur, si la variable KlausTraceRegle% a la valeur 1 (définie en ligne 11 de Stratego.bas):
Code:
    dim NePasBouger%        : ' flag global "ne pas déplacer le pion sélectionné"
    dim GarderLaMain%        : ' flag global "le joueur garde la main et rejoue"
    dim SupprimerSujet%      : ' flag global "le pion sujet (acteur) est supprimé"
    dim SupprimerCible%      : ' flag global "le pion cible (touché par acteur) est supprimé"
    dim FinDePartieVictoire% : ' flag global "victoire - fin de partie"

Ces variables sont définies automatiquement dans la SUB ChargerRegles() qui doit être appelée en début du programme. Le nom de chaque variable indique l'action à effectuer, et elle est décrite dans le commentaire.

Tel que l'intégration est faite actuellement, j'ai appelé la SUB AppliquerRegles(...) à deux endroits. L'idéal serait de l'appeler à un seul endroit et de réagir en fonction des variables retournées. Tu as ensuite toute latitude de déplacer et/ou cacher des personnages, et tu sais même si le camp en train de jouer a gagné (pris le drapeau). Donc, à partir de là, tu peux agir sur les graphismes (picture ou sprites), sur les animations (déplacer un pion lentement de son départ à son arrivée ou le "téléporter" comme maintenant); jouer des sons etc.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMar 1 Mar 2016 - 22:35

Je ne suis pas très bon en tact, mais je donne mon opinion avec un peu de recul sur le système de règles.
Mais je dis bien que c'est mon opinion car je n'ai peut être pas tout compris à l'utilisation, mais en regardant l'établissement et la mise en oeuvre, je trouve que ça allonge le programme et que ça complique plutôt.

Alors avant d'intégrer réellement ce système dans le programme (enfin plutôt de continuer sur le travail de Klaus), j'aimerais avoir le retour de tous ceux qui le souhaitent et que chacun puisse dire s'il trouve ça plus simple, plus clair, plus intuitif. Ce n'est pas par ce que pour moi, c'est somme toute plus intuitif directement en code que c'est le cas pour tous.

Voilà, bien qu'au début le système de règle externe me semblaient être une bonne idée, je préfère reviser mon premier jugement. Et vous quel est votre sentiment à ce sujet ?
Revenir en haut Aller en bas
papydall

papydall


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMar 1 Mar 2016 - 23:17

En y réfléchissant, le problème me semble de plus en plus difficile et le code qui en résulterait sera inextricable.
Mais ne jetons pas l’éponge.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMar 1 Mar 2016 - 23:28

J'en suis arrivé un peu à la même conclusion (par le système de règles externes) les conditions me semble plus complexes à appréhender qu'en code pur. Peut être par manque d'expérience de ce type d'écriture. Je crois que je vais continuer sur ce type de codage des règles quitte à ce que Klaus fasse une variante.
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMer 2 Mar 2016 - 0:41

Je te comprends, Jicehel. Je vais donc, de mon côté, tenter une intégration complète, et je la placerai sur le WebDav lorsqu'elle sera opérationnelle, avec la version actuelle du Stratego que j'utilise. Pas de problème, Jicehel.

En attendant, j'ai placé sur le WebDav une nouvelle version du programme d'établissement des règles moteur_de_jeu_definir_regles.bas, avec un début de documentation en bas de la fenêtre. Pas de changement de fonctionnalités.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMer 2 Mar 2016 - 0:45

Merci de ta compréhension Klaus.
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMer 2 Mar 2016 - 0:55

Ben voyons, Jicehel... C'est ton bébé. Tu as appelé des contributions et tu en reçois, mais c'est à toi de faire ton choix, selon tes préférences. Et il est normal que tu ne sois pas familier avec la méthode que j'ai employée.

Donc, pas de soucis. Je vais faire une démonstration d'intégration et tu pourras voir à quoi ça ressemble. Maintenant, il est clair qu'un moteur paramétrables par des règles sera toujours plus "lourd" en termes de nombres de lignes qu'un codage en "dur"du comportement directement dans le code. Mais l'intérêt serait justement de pouvoir "jouer" avec les règles, et éventuellement adapter le système à d'autres jeux, en changeant les paramétrages. Tu verras lorsque j'aurai fini.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyMer 2 Mar 2016 - 21:45

Je viens d'ecouter les musiques de Bignono. Il y a pas à dire Jean-Louis, tu es doué... La 2 colle tout à fait à l'esprit Napoléonien des pièces de base.

Bon si de mon côté je fais différent thèmes de pièces, tu essayes de faire d'autres thèmes de musiques ?

Les 5 sont très différentes et je vais déjà me servir de 2 des 5 (pour le moment). C'est du super boulot, big merci Jean-Louis
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptySam 5 Mar 2016 - 2:27

Je viens de remettre une nouvelle version en ligne. Nouveautés:

1. j'ai intégré le moteur dans la boucle de jeu, et le déplacement et la prise sont conditionnés par me moteur
2. le cas de l'éclaireur est décrit complètement dans les règles
3. la victoire est reconnue par la prise du drapeau
4. la prise et/ou perte de pion en fonction de leur puissance est reconnue

Je n'ai pas encore complètement testé le traitement de la bombe.
Je n'ai pas encore traité du tout le cas où aucun pion adverse reste, bien que le drapeau ne soit pas pris.

La sub Prise(...) devrait être remaniée pour en retirer la partie "déplacement" - ça viendra.

Toute la partie de la logique gérant la reconnaissance de la situation après un clic a été désactive par un if 1=2 ... end_if (et marquée par un commentaire). La boucle de jeu proprement dite est maintenant tgrès petite:
Code:
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%)

rem ======================== Klaus Début =======================================
  AppliquerRegles(Sel_Y%,Sel_X%,l%,c%)
  if SelectionnerSujet%=1                : ' on sélectionne le sujet si nécessaire
    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
    ON_CLICK  I_E_affiche%,click_plateau
    return
  end_if
  if SupprimerSujet%=1
    Prise(Sel_Y%,Sel_X%,l%,c%)
  else
    if SupprimerCible%=1
      Prise(Sel_Y%,Sel_X%,l%,c%)
      NePasBouger% = 1          : ' <==== provisoire: faudra modifier Prise() pour retirer le déplacement !
    end_if
  end_if
  if FinDePartieVictoire%=1
    Sel_X% = -1
    message "Victoire ! Vous avez gagné !"
    ON_CLICK  I_E_affiche%,click_plateau
    return
  end_if
  if NePasBouger%=0 then Deplace(Sel_Y%,Sel_X%,l%,c%)  : ' on déplace le sujet si nécessaire
rem ======================== Klaus Fin =========================================

if 1=2
... logique d'origine
end_if

  ON_CLICK  I_E_affiche%,click_plateau
RETURN

Le programme de maintenance des règles a maintenant des boutons de gestion, ainsi qu'un début de fonctionnalité d'aide et de documentation. Ca évoluera.

Actuellement, la ligne 11 du programme est rédigée comme suit:
Code:
dim KlausTraceRegle% : KlausTraceRegle% = 0
Il suffit de remplacer le 0 par un 1 pour avoir des messages de diagostics en cours d'analyse.

Qu'est-ce que tu penses de l'intégration du moteur, Jicehel ?
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptySam 5 Mar 2016 - 11:56

La lecture de la boucle est très clair. C'est un des avantages de cette méthode, c'est indéniable.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptySam 5 Mar 2016 - 13:37

Vous trouverez les sons pour le futur Stratego et la Musique pour agrémenter le jeu au bout du lien ci dessous (Pour la musique, je n'ai pris que 2 des musiques de Bignono pour rester dans l'esprit du jeu que j'ai dans la tête, mais les autres musiques pourront servir pour d'autres jeux ou des variantes de la version Napoléonienne)
Sons pour Stratego
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptySam 5 Mar 2016 - 14:08

Je continue à travailler dans deux directions:
- améliorer et compléter les règles pour coller vraiment à la règle du jeu
- améliorer l'intégration du moteur, en particulier en optimisant les subs Prise() et Deplace()

Pour ces deux subs, je vais retirer tout ce qui concerne la gestion des règles (c'est supposé être déjà fait par le moteur !), et je vais séparer plus nettement Prise() et Deplace() afin d'avoir deux modules parfaitement distincts, faisant chacun ce que son nom indique. L'intégration du moteur s'en trouvera facilité, et ces subs deviendront simples et limpides.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptySam 5 Mar 2016 - 14:18

Je vois que dans le fil de discussion sur le jeu de dames, tu as écrit:
Citation :
Ce sera pareil pour faire jouer l'ordi à Stratego. Bien sûr il peut jour une pièce (ou un pion) au hazard, mais le mieux c'est qu'il ait une tactique (prendre des emplacements plus stratégique, manger le plus de pions possible, trouver le drapeau, détruire le Maréchal adverse, faire une feinte, etc ...) et ça c'est dur à coder.

Alors, je précise:
- à ce jour, le moteur que je développe, applique les règles du jeu à un coup à jouer, indiqué par l'un des deux joueurs, qu'il soit humain ou ordinateur.
- pour faire jouer l'ordinateur, il faut effectivement développer une IA qui indiquera alors le coup à jouer au moteur.

Si tu veux, une fois que le moteur et son intégration seront terminés, je peux tenter une IA minimaliste, s'il n'y a pas d'autre candidat. En effet, l'IA est totalement indépendante du moteur, bien qu'elle peut se servir du moteur pour évaluer les conséquences d'un coup: coup possible ou refusé, perte de son pion, destruction du pion adverse, prise du drapeau etc. Ainsi, la tâche de l'IA se trouvera facilité, par l'évaluation aisée de chaque coup qu'elle envisage.

Bien évidemment, dès qu'il s'agira de réfléchir à plusieurs coup en avance, la tâche sera infiniment plus ardue, car le nombre de combinaisons s'accroît de façon exponentielle, compte tenu de toutes les réactions possibles de l'adversaire humain.
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptySam 5 Mar 2016 - 16:11

Alors là, je prends Klaus. Je pense que tu es l'un de ceux qui peuvent faire un truc sympa. Moi j'ai des idées, mais de là à ce que je les code ... Mon idée c'est d'avoir une série de cas de figure ou l'on peut jouer des coups (exemple quand on découvre le Maréchal, on peut partir à la chasse avec l'espion ou simuler que l'on part en chasse avec l'espion pour essayer de faire que le Marechal se rapproche de notre espion.) Pareil si on découvre une bombe, on peut aller essayer de la deminer ou simuler de le faire pour que le joueur adverse se fasse avoir). Je pense que tu vois le principe. Ca doit pouvoir se développer en utilisant ton moteur, mais c'est une vrai réflexion à part entière et ce n'est clairement pas simple. Les choses pas simples à priori, ça ne te rebute pas alors oui, j'accepte avec grand plaisir que tu t'essayes sur ce sujet Wink
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 0:28

Bon pendant "The Voice", j'ai repris un peu le programme pour commencer à y mettre les sons et surtout pour intégrer le concept de tour pour gérer la visibilité des pièces qui est un élément fondamental du jeu

Je n'en dit pas plus et je vous mets le code ci-dessous (en espérant qu'il ne mange pas de caractères) et un zip avec le tout source + fichiers multimédias (dont le 'dos' des pions qui n'étaient pas présents avant)

Télécharger l'archive

PS: S'il y a quelqu'un de fou parmi nous, savez vous qu'il existe une version 3 et un version 4 joueurs ?
Si ça dit à quelqu'un de travailler sur ces versions, dites le moi si vous avez besoin d'images. Pour la version 3 joueurs, les terrains ne se croisent pas à angle droit et toutes les cases n'ont pas la même forme ... Ca doit être un vrai bonheur à programmer. A réserver aux programmeurs fous, aux vicieux, aux masochistes ou aux plus téméraires...
La version 4 joueurs et beaucoup plus facile (cases carrées) et serait amusante pour un nombre de joueurs entre 1 et 4 jouant en réseau et des joueurs gérés par l'ordinateur si on arrive déjà à le faire pour le Stratego normal.

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%
DIM I_Bleu%, I_Rouge%

' * 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 sons associés aux attaques des pièces gagnantes
DIM S_Bombe%,  S_Capitaine%, S_Colonel%, S_Drapeau%, S_General%, S_Lieutenant%
DIM S_Major%, S_Marechal%, S_Demineur%, S_Eclaireur%, S_Sergent%, S_Espion%

' * Déclaration des autres sons
DIM S_OK1%,S_OK2%, S_OK3%, S_OK4%,S_Erreur%,S_Clic1%,S_Clic2%,S_Clic3%,S_Clic4%

' * 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$, repson$, repmusique$ : ' Différents répertoires d'objets
DIM Hcase%,Wcase%,Lcase% : Hcase%=80 : Wcase%=80 : Lcase% = 60
DIM Cache_piece%

' * 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\" : repson$=rep$+"snd\"

' * 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 des sons des attaques gagnantes des pièces
SOUND compt% : S_Bombe% = compt% : FILE_LOAD compt%,repson$+"Tir_Bombe.mp3" : compt% = compt% + 1
SOUND compt% : S_Marechal% = compt% : FILE_LOAD compt%,repson$+"Tir_Epee.mp3" :  S_General% = compt%
S_Major% = compt% : S_Colonel% = compt% : S_Capitaine% = compt% :  S_Lieutenant% = compt% : compt% = compt% + 1
SOUND compt% : S_Sergent% = compt% : FILE_LOAD compt%,repson$+"Tir_Mousquet.mp3" : compt% = compt% + 1
SOUND compt% : S_Demineur% = compt% : FILE_LOAD compt%,repson$+"Tir_Demineur.mp3" : compt% = compt% + 1
SOUND compt% : S_Eclaireur% = compt% : FILE_LOAD compt%,repson$+"Tir_Arquebuse.mp3" : compt% = compt% + 1
SOUND compt% : S_Espion% = compt% : FILE_LOAD compt%,repson$+"Tir_Assassin.mp3" : compt% = compt% + 1
SOUND compt% : S_Drapeau% = compt% : FILE_LOAD compt%,repson$+"Tir_Drapeau.mp3" : compt% = compt% + 1

' * Chargeùent des autres sons
SOUND compt% : S_OK1% = compt% : FILE_LOAD compt%,repson$+"OK1.mp3" : compt% = compt% + 1
SOUND compt% : S_OK2% = compt% : FILE_LOAD compt%,repson$+"OK3.mp3" : compt% = compt% + 1
SOUND compt% : S_OK3% = compt% : FILE_LOAD compt%,repson$+"OK4.mp3" : compt% = compt% + 1
SOUND compt% : S_OK4% = compt% : FILE_LOAD compt%,repson$+"OK5.mp3" : compt% = compt% + 1
SOUND compt% : S_Erreur% = compt% : FILE_LOAD compt%,repson$+"Bruit_Mauvais_clic.mp3" : compt% = compt% + 1
SOUND compt% : S_Clic1% = compt%  : FILE_LOAD compt%,repson$+"Bruit_Clic1.mp3" : compt% = compt% + 1
SOUND compt% : S_Clic2% = compt%  : FILE_LOAD compt%,repson$+"Bruit_Clic2.mp3" : compt% = compt% + 1
SOUND compt% : S_Clic3% = compt%  : FILE_LOAD compt%,repson$+"Bruit_Clic3.mp3" : compt% = compt% + 1
SOUND compt% : S_Clic4% = compt%  : FILE_LOAD compt%,repson$+"Bruit_Clic4.mp3" : compt% = compt% + 1


' * Chargement de toutes les images correspondant aux différents pions

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Bombe% = compt% : O_Bombe% = 11
FILE_LOAD compt%,repimage$+"Bomb.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Marechal% = compt% : O_Marechal% = 10
FILE_LOAD compt%,repimage$+"Marshal.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_General% = compt%  : O_General% = 9
FILE_LOAD compt%,"img/General.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Colonel% = compt% :O_Colonel% = 8
FILE_LOAD compt%,repimage$+"Colonel.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Major% = compt%  : O_Major% = 7
FILE_LOAD compt%,repimage$+"Major.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Capitaine% = compt% : O_Capitaine% = 6
FILE_LOAD compt%,repimage$+"Captain.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Lieutenant% = compt% : O_Lieutenant% = 5
FILE_LOAD compt%,repimage$+"Lieutenant.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Sergent% = compt% :O_Sergent% = 4
FILE_LOAD compt%,repimage$+"Sergeant.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Demineur% = compt% : O_Demineur% = 3
FILE_LOAD compt%,repimage$+"Miner.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Eclaireur% = compt% : O_Eclaireur% =  2
FILE_LOAD compt%,repimage$+"Scout.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Espion% = compt%  : O_Espion% = 1
FILE_LOAD compt%,repimage$+"Spy.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase%
TOP compt%, 5000  : I_Drapeau% = compt% : O_Drapeau% = 0
FILE_LOAD compt%,repimage$+"Flag.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase% : TOP compt%, 5000
I_Bleu% = compt% : FILE_LOAD compt%,repimage$+"Dos_Bleu.jpg" : compt% = compt% + 1

PICTURE compt% : HIDE compt% : HEIGHT compt%,Hcase% : WIDTH compt%,Lcase% : TOP compt%, 5000
I_Rouge% = compt% : FILE_LOAD compt%,repimage$+"Dos_Rouge.jpg" : compt% = compt% + 1

Init()
Preparation()


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%
  Cache_piece% = 0 :  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,Lcase%,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%)*(Wcase%+1) +  2,(l%)*(Hcase%+1) + 2, (c%+1)*(Wcase%+1)+1,(l%+1)*(Hcase%+1)
            2D_IMAGE_PASTE I_copy%,(c%)*(Wcase%+1) +  12,(l%)*(Hcase%+1) + 2
        END_IF
END_SUB


SUB Trace_dos(l%,c%)
DIM_LOCAL image%, p%
    IF Tour% = 2
      2D_FILL_COLOR 0,0,200
      image% = I_bleu%
    ELSE
      2D_FILL_COLOR 200,0,0
      image% = I_rouge%
    END_IF
    2D_TARGET_IS image% : 2D_IMAGE_COPY I_copy%,0,2,Lcase%,79
    2D_TARGET_IS I_E_preparation%
    2D_RECTANGLE (c%)*(Wcase%+1) +  2,(l%)*(Hcase%+1) + 2, (c%+1)*(Wcase%+1)+1,(l%+1)*(Hcase%+1)
    2D_IMAGE_PASTE I_copy%,(c%)*(Wcase%+1) +  12,(l%)*(Hcase%+1) + 2
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%)
        IF Tour% = 1 AND piece% < 20 AND Cache_piece% = 0
            Trace_piece(Ligne%,Colonne%)
        ELSE
          IF (Tour% = 1 OR Cache_piece% = 1) AND piece% > 19
            Trace_dos(Ligne%,Colonne%)
          ELSE
            IF piece% > 19  AND Cache_piece% = 0
              Trace_piece(Ligne%,Colonne%)
            ELSE
              IF (piece% > 0 OR Cache_piece% = 1) THEN Trace_dos(Ligne%,Colonne%)
            END_IF
          END_IF
        END_IF
    NEXT Colonne%
  NEXT Ligne%
  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%  )*(Wcase%+1)+2,(l%  )*(Hcase%+1) + 2,(c%+1)*(Wcase%+1)+1,(l%  )*(Hcase%+1) + 2
      2D_LINE (c%+1)*(Wcase%+1)+1,(l%  )*(Hcase%+1) + 2,(c%+1)*(Wcase%+1)+1,(l%+1)*(Hcase%+1) + 2
      2D_LINE (c%+1)*(Wcase%+1)+1,(l%+1)*(Hcase%+1) + 2,(c%  )*(Wcase%+1)+2,(l%+1)*(Hcase%+1) + 2
      2D_LINE (c%  )*(Wcase%+1)+2,(l%+1)*(Hcase%+1) + 2,(c%  )*(Wcase%+1)+2,(l%  )*(Hcase%+1) + 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)*(Hcase%+1) + 2
    y_sup% =  (L_a%)*(Hcase%+1)
  ELSE
    y_inf% =  (L_a%+1)*(Hcase%+1) + 2
    y_sup% =  (L_d%)*(Hcase%+1)
  END_IF
  IF C_d% > C_a%
    x_inf% =  (C_a%)*(Wcase%+1)
    x_sup% =  (C_d%+1)*(Wcase%+1)+1
  ELSE
    x_inf% =  (C_d%)*(Wcase%+1)
    x_sup% =  (C_a%+1)*(Wcase%+1)+1
  END_IF
  Pieces(L_a%,C_a%) = Type_P% : Pieces(L_d%,C_d%) = -1 : Sel_X% = -1
  Change_tour()
END_SUB


SUB Change_tour()
  Preparation()
  WAIT 1000
  IF Tour% = 1
      Tour2()
  ELSE
      Tour1()
  END_IF
  Cache_piece% = 1 :  Preparation()
  IF Tour% = 1
      MESSAGE "Valider pour commencer votre tour joueur bleu"
  ELSE
      MESSAGE "Valider pour commencer votre tour joueur rouge"
  END_IF
  Cache_piece% = 0 :  Preparation()
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 PLAY S_Erreur% : 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
        PLAY S_Erreur% : EXIT_SUB
      ELSE
          ' CAPTION 0,"Deplace la piece de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%)
          PLAY S_OK1% : 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 PLAY S_Erreur% : EXIT_SUB
          NEXT Boucle%
          PLAY S_OK2% :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 PLAY S_Erreur% : EXIT_SUB
            NEXT Boucle%
            PLAY S_OK2% :Deplace(L_d%,C_d%,L_a%,C_a%)
          ELSE
              PLAY S_Erreur% : 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
  Trace_piece(L_a%,C_a%) :  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 : WAIT 2000
  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
      Pieces(L_d%,C_d%) = -1 :Sel_X% = -1 : Preparation()
      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 PLAY S_Erreur% : 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
        PLAY S_Erreur% : 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 PLAY S_Erreur% : 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 PLAY S_Erreur% : EXIT_SUB
              NEXT Boucle%
            END_IF
            Prise(L_d%,C_d%,L_a%,C_a%)
          ELSE
              PLAY S_Erreur% : 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%
  c% = INT(MOUSE_X_POSITION(I_E_affiche%)/(Wcase%+1)) : l% =  INT(MOUSE_Y_POSITION(I_E_affiche%)/(Hcase%+1))
  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
          PLAY S_Erreur%        : ' 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
          PLAY S_Clic2%
          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
            PLAY S_Erreur%                        : ' 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
          PLAY S_Erreur%          : ' 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
          PLAY S_Clic2%
          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
            PLAY S_Erreur%                        : ' 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) ====================================
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 9:46

Mon moteur gère maintenant correctement le comportement de l'espion.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 10:00

J'ai téléchargé, à ce propos si on ne veut pas en avoir plein le bureau il faut dézipper dans un dossier.

Tout à l'air de fonctionner. J'ai mis le casque (En Avant ! , A vos Ordres !)
Le visuel genre "carte face cachée" est pas mal.

A ce stade, c'est difficile d'en dire plus.
Maintenant il faut que je regarde le code pour voir si je peux y prendre quelque chose.

A+
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 18:24

Voilà une nouvelle version du moteur qui semble assez complète.

On gère:
- tous les déplacements
- la limitation des déplacements à 1 case verticale ou horizontale pour tous, sauf l'éclaireur
- l'impossibilité de pénétrer (ou traverser) une zone impénétrable
- l'impossibilité pour l'éclaireur d'enjamber un pion quelconque
- le comportement de l'espion face au maréchal
- le comportement du démineur face à une bombe
- le comportement des autres personnages face à une bombe
- le comportement de tous les personnages en contact, selon leur force
- la victoire par prise du drapeau
- la victoire par l'élimination de tous les pions mobiles de la partie adverse

De plus, il y a de petits messages annonçant la prise/perte d'un personnage ainsi que la victoire.

J'ai reconfiguré le programme avec une variable Delta% dont la valeur est 40, pour remplacer toutes les occurrences de +/-20 ou 19, afin de pouvoir gérer le nombre correct de pions dans chaque camp.

Reste à faire:
"purger" la sub Prise(...) pour retirer tout ce qui est tests (déjà faits dans le moteur !) et positionnement (sera fait après, conditionné par une variable retournée par le moteur).

Voilà. Ca semble assez complet, au niveau du moteur. Ce qui reste à faire ne sert qu'à simplifier et améliorer l'intégration du moteur dans le programme.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 20:00

@Jicehel,

il manque une SUB dans ton code: Image_Recopy(). Elle est appelée 2 fois, mais elle n'existe pas.

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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 21:26

oups, tu as raison, ils ont échappé à la purge.
Remplace les 2 if où ils apparaissent par ces lignes, ce sera corrigé dans le prochain source
Code:

IF Sel_X% >= 0          : ' Si on avait déjà sélectionné un pion, on efface la sélection actuelle
    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_IF
Revenir en haut Aller en bas
Klaus

Klaus


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

Stratego collaboratif - Page 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 23:00

Ca y est: l'intégration du moteur est complète !

J'ai gardé la sub Deplace(...) en la smplifiant, j'ai supprimé la sub Test_Deplace() ainsi que les subs Test_Prise() et Prise(). L'intégration devient alors extrèmement simple. Il y a même un petit commentaire spécial au moment du sacrifice d'un pion, éliminant un autre de même puissance ou une bombe.

Il faut reprendre les 3 fichiers sur le WebDav.

Qu'est-ce que tu penses de cette intégration, Jicehel ?
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 4 Empty
MessageSujet: Re: Stratego collaboratif   Stratego collaboratif - Page 4 EmptyDim 6 Mar 2016 - 23:20

oui, la boucle est très lisible par contre j'ai un blocage suite à la perte d'une pièce que je viens de bouger et une erreur ligne 271 quand je prend une pièce. Toi, tu n'as pas d'erreur ?
Revenir en haut Aller en bas
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Stratego collaboratif
Revenir en haut 
Page 4 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: