Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Stratego collaboratif | |
|
+5Yannick JL35 silverman Jean Claude Jicehel 9 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Lun 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Mar 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Mar 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Mar 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Mar 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 ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Stratego collaboratif Mar 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Mar 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Mer 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Mer 2 Mar 2016 - 0:45 | |
| Merci de ta compréhension Klaus.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Mer 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Mer 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 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 ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 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.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 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'archivePS: 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) ==================================== | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Dim 6 Mar 2016 - 9:46 | |
| Mon moteur gère maintenant correctement le comportement de l'espion. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Dim 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+
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Dim 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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Dim 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+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 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
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Dim 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 ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Dim 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 ? | |
| | | Contenu sponsorisé
| Sujet: Re: Stratego collaboratif | |
| |
| | | | Stratego collaboratif | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |