FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Une autre façon de terminer une application.
par Francis-mr Aujourd'hui à 12:07

» Compilateur FBPano
par jean_debord Aujourd'hui à 10:09

» Copier / coller du texte à partir de la fenêtre de commandes
par jean_debord Aujourd'hui à 9:46

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par papydall Aujourd'hui à 5:01

» Mettre en windows en veille
par papydall Aujourd'hui à 4:15

» Stretch_on ne stretch plus...
par papydall Hier à 15:22

» Pb 18 (en analyse): RESTORE_LABEL avec DATA à la fin
par Jack Hier à 13:21

» Problème de traitement des opérateurs avec le compilateur.
par Pedro Alvarez Sam 19 Aoû 2017 - 20:01

» Pb 17 (résolu): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (résolu): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (résolu): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Stratégo Colaboratif (version sur un scene2d)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2, 3, 4  Suivant
AuteurMessage
Jean Claude

avatar

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

MessageSujet: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 15:12

J'ouvre ce post en parallèle avec le projet de Jicehel, pour éviter des confusions entre les 2.
Le projet est le même (Stratégo). Il ne s'agit pas de concurrence, mais de pouvoir comparer.
Si on doit sortir le même jeu de 2 manières différentes, c'est tant mieux.

J'espère pouvoir vous donner la base de départ d'ici ce soir....

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 16:35

C'est super Jean-Claude et une partie des procédure pourront être communes de toute façon, normalement.
Par exemple si quelqu'un plus tard essaye de faire la partie IA de l'ordinateur pour jouer contre lui.
(Dans un premier temps, ce sera en mode joueur vs joueur humains)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 17:34

Bon c'est parti !

Vous trouverez sur mon Webdav un zip nommé Stratégo_en_2D.
Attention: Le fichier img contenant les images n'est pas le même que celui de Jicehel.
Le code à charger est Statego_2D_v1.bas (tiens encore une faute statego, je corrigerai)

Pour le moment j'ai deux BUG(s)
 ' 1) le message " la case est vide (à développer)" est répeté 2 fois ???
 ' 2) ' sprite_create_hide et sprite_show_all ne fonctionnent pas, mais là je crois que ça été signalé.

Dites-moi ce que vous en pensez et faites vos commentaires.

Du travail pour les intéressés:
 ' 1) message "Attention: vous risquez de vous mouiller les pieds..."
   ' je cherche des idées d'animation pour ce message....
 ' 2) SUB init_case() voir la qualité de la méthode

C'est terminé pour moi aujourd'hui, il faut que je passe en cuisine....

A+


Dernière édition par Jean Claude le Mar 1 Mar 2016 - 9:53, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7975
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 27 Fév 2016 - 18:10

Je vais regarder mais...qu' est ce qu' on mange ?...
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 21:04

C'est choucroute Alsacienne faite maison. Very Happy
A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 21:16

Nous ce soir, ce n'est pas compliqué, c'est raclette ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 21:56

bonne raclette !

As-tu regarder la version en 2D, je n'ai pas eu de commentaire ?

Je viens de recharger sur mon Webdav, j'ai créer toute les images pour les sprites (en bmp), tu peux les essayer sur ta version.

Je pourrais maintenant, diffuser le code ici, tant qu'il n'y aura pas de nouvelles images.

Bon, je vais passer à table.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Sam 27 Fév 2016 - 23:08

J'ai testé mais je n'ais pas encore mis de commentaire, j'attends la suite mais ça commence bien Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 0:25

Mes réflexions pour la suite.

Si vous voyez que je fais fausse route merci de me le dire.


' liste des images et grade et nombre par joueur
 ' à noter: les bombes et le drapeau ne sont pas déplaçable
 ' les bombes => "Bomb.bmp"=0 6/Joueur            . le drapeau => "Flag.bmp"=0 1/Joueur
 ' l'espion => "Spy.bmp"=1 1/Joueur                    . les Éclaireurs => "Scout.bmp"=2 8/Joueur
 ' les Démineurs => "Miner.bmp"=3 5/Joueur         . les Sergents => "Sergeant.bmp"=4 4/Joueur
 ' les Lieutenants => "Lieutenant.bmp"=5 4/Joueur  . les Capitaines => "Captain.bmp"=6 4/Joueur
 ' les Commandants => "Major.bmp"=7 4/Joueur     . les Colonels => "Colonel.bmp"=8 3/Joueur
 ' le Général => "General.bmp"=9 1/Joueur            . le Maréchal => "Marshal.bmp"=10 1/Joueur
 
' Réflexion pour la suite
 ' il faut 40 acteurs (pions) par équipe
 ' en utilisant des sprites rouges pour l'ordi et bleus pour le joueur
 ' en conséquence: il faut 80 images (sprites) au total (80 pions)
 ' chaque numéro de sprite doit fournir sa position actuel, son grade, et son état (Mort ou vivant) et sa visibilité
 ' donc c'est à gérer par des variables:
  - ' PPC%(p%)=Kaz% => Position du pion p% dans la case Kaz%
  - ' GP%(p%)=grade% du pion (0=pas de dépacement, 1=espion traitement particulier, ensuite voir tableau précédent)
  - ' EP%(p%)=état du pion 0=vivant, 1=mort (invisible ou delete)
  - ' VP%(p%)=visibilité du pion . 1=visible pour les pions bleus, 0=invisible pour les pions rouges de l'ordi
    - ' prévoir de masquer le pion rouge de l'ordi (sprite)
  - ' p% correspond au n° de sprite
 ' donc créer 80 pions (sprites) p% avec les 4 variables ci-dessus en respectant les couleurs de chaque camps.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 2:23

Pour le "grade" de la bombe moi j'ai mis 11 puisqu'elle détruit tout sauf le démineur.
C'est de toute façon un cas à part, mais je trouvais ça mieux de le mettre au dessus des pièces qu'elle détruisait (A part pour le démineur qui du coup est la seule exception à gérer pour la bombe)

Perso, je ne prévois pas de rendre les pièces visibles car dans le jeu, on ne montre les pièces que lors de l'attaque (pendant la résolution de l'attaque). Le joueur valide le résultat durant lequel il voit le pion ennemi qui disparaît s'il perd. C'est au joueur de ce souvenir de l'emplacement et de la valeur des pièces qu'il a vu. Le Stratego a un peu des échecs et du Memory Wink

Pour moi, pendant le tour 1, le joueur 1 voit ses pions et des rectangles rouges pour ceux du joueur 2. Il y a une fenêtre qui s'affiche quand le joueur 1 à joué pour valider que le joueur 2 est prêt à jouer. Quand cette fenêtre est affichée tous les pions sont sous formes de rectangles monochromes (rouges ou bleus) quand le joueur 2 valide qu'il est pret, ces pions apparaissent sur les rectangles .

Voilà mes remarques et avis / conseils / façon imaginée de résoudre le mode 2 joueurs sur le même ordi.
En mode joueurs vs ordinateur, ou jours vs joueur en mode réseau, en effet les pions du joueur 1 resteraient affichés et ceux du joueur 2 resteraient masqués.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 11:27

Je t'offre l'intégration de l'aide de Papydall qui m'ont couté le terrible effort de faire 3 copier / coller Smile

Son aide est très bien mais bien sûr tu peux l'adapter si tu veux faire autrement Very Happy

Je t'ai fais une petite boucle pour l'init des cases et j'ai cherché pour l'histoire du double affichage des message, mais par contre ça, je n'ai pas trouvé d'où ça venait et j'ai essayé différents palliatifs sans succès.

Solution proposé: Affiche plutôt les textes dans un alpha sur le côté de ton plateau de jeu. Ca j'ai essayé et ça marche bien Wink (Je n'ai pas mis dans le code mais c'est simple à coder)

Code:
rem ============================================================================
rem                  JEU DU STRATEGO (Version en 2d)
rem          VERSION DE JEAN-CLAUDE BASEE SUR SCENE2D / SPRITES
rem    OUVERT A LA COLLABORATION DES TOUS LES PANORAMICIENS STRATEGOYENS
rem ============================================================================

' Notes sur la version actuelle :

' Problème à résoudre (BUG)
  ' 1) le message " la case est vide (à développer)" est répeté 2 fois ???
  ' 2) ' sprite_create_hide et sprite_show_all ne fonctionnent pas

' Travail à faire
  ' 1) message "Attention: vous risquez de vous mouiller les pieds..."
    ' je cherche des idées d'animation pour ce message....
  ' 2) SUB init_case() voir la qualité de la méthode

dim rep$,repimage$
dim n%,x%,y%

rem ======================== Papydall ==========================================
LABEL Aide
DIM tex$
APPLICATION_TITLE "**** STRATEGO Version 2d / Sprites *****"
rem ======================== Papydall ==========================================

width 0,811+16 : height 0,811+31+8+20

' Menu (à développer par la suite)
main_menu 10
command_target_is 0
sub_menu 11 : parent 11,10 : caption 11,"Fichier"
rem =================== Papydall (Début) =======================================
rem J ai commencé les SUB_MENUs à partir de 91 pour laisser la place aux futurs autres SUB_MENUs
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

SUB_MENU 91 : PARENT 91,10 : CAPTION 91,"Aide"
SUB_MENU 92 : PARENT 92,91 : CAPTION 92,"Stratégo" : ON_CLICK 92,Aide
SUB_MENU 93 : PARENT 93,91 : CAPTION 93,"Dispositions des pièces" :  ON_CLICK 93,Aide
SUB_MENU 94 : PARENT 94,91 : CAPTION 94,"Règles du jeu" :  ON_CLICK 94,Aide
SUB_MENU 95 : PARENT 95,91 : CAPTION 95,"Tactique" :  ON_CLICK 95,Aide

rem =================== Papydall (Fin) =========================================


' répertoire
rep$=dir_current$+"\" : repimage$=rep$+"img" : dir_change repimage$

' scene2D 100
dim TypSel% : TypSel%=0 :' pour déterminer si c'est un clic de sélection (0) ou de déplacement(1)
label click, rien
scene2d 100 : on_click 100,click : file_load 100,"Fond.bmp" :  width 100,811 : height 100,811

' les cases
dim Hcase%,Wcase%,CaseSel%:' Hcase%=Hauteur d'une case, Wcase%=largeur d'une case, CaseSel%= case sélectionnée
dim cases%(100) , Top_cases%(100) , Left_cases%(100) , ContenuCase%(100)
Hcase%=80 : Wcase%=80
init_case()

' création des sprites (à développer)
' sprite_create_hide
    sprite 101
' pour essai
'  sprite_show_all
  sprite_file_load 101,"Bomb.bmp"
  sprite_x_position 101,Top_cases%(cases%(12))+10 : sprite_y_position 101,Left_cases%(cases%(12))+5

' affiche() : ' Sub de test à supprimer à la fin

END
rem ============================================================================
' SUB provisoire
SUB affiche()
    dim_local i%
  for i%=1 to 100
    caption 0,str$(cases%(i%))+" => "+str$(Top_cases%(cases%(i%)))+"/"+str$(Left_cases%(cases%(i%))) : stop
  next i%
END_SUB

rem ============================================================================
rien:
RETURN

click:
 off_click 100:' neutraliser pendant le traitement du click
  ' retrouver la case qui correspond au clic
 x%=mouse_x_position(100) : y%=mouse_y_position(100)
 for n%=1 to 100
  if y%>Top_cases%(cases%(n%)) and y%<Top_cases%(cases%(n%))+Hcase%
      if x%>Left_cases%(cases%(n%)) and x%<Left_cases%(cases%(n%))+Wcase%
        CaseSel%=cases%(n%)
        ' prévoir une animation de la case sélectionnée (Encadré, changement de couleur, etc.)
        caption 0,str$(CaseSel%)
      end_if
  end_if
 next n%
' gerer les cases des lacs
 if CaseSel%=43 or CaseSel%=44 or CaseSel%=47 or CaseSel%=48 or CaseSel%=53 or CaseSel%=54 or CaseSel%=57 or CaseSel%=58
    ' prévoir une animation
    message "Attention: vous risquez de vous mouiller les pieds..."
    ' on sort sans changer TypSel% et on réactive le clic
    on_click 100,click : RETURN
 end_if
 
' Sélection ou déplacement
 if TypSel%=0
    ' c'est une sélection
    ' regarde ce qu'il y a dans la case sélectionnée
    Contenu_de_la_Case(CaseSel%)
    ' agit en fonction du résultat du contenu
   
    ' gestion du prochain clic
    TypSel%=1: ' pour que le prochain clic soit un déplacement

 end_if
 if TypSel%=1
    ' c'est un déplacement
    ' regarde ce qu'il y a dans la case visée
    Contenu_de_la_Case(CaseSel%)
    ' déplace le pion si c'est possible (pas chez un collègue)
   
    ' agit en fonction du résultat du contenu (gain ou défaite ou nul)
   
    ' gestion du prochain clic
    TypSel%=0: ' pour que le prochain clic soit une sélection
 end_if
 on_click 100,click
RETURN
rem ============================================================================
SUB Contenu_de_la_Case(NumCase%)

    if ContenuCase%(NumCase%)=0
        message " la case n°"+str$(NumCase%)+" est vide (à développer)" : exit_sub
    else
        message " retourne le contenu de la case n°"+str$(NumCase%)+" (à développer)" : exit_sub
    end_if
    set_focus 1
END_SUB
rem ============================================================================
SUB init_case()
  dim_local tt%,ll%,i%, j%, k%
  for j%=0 to 9
    for k% = 1 to 10
      i% = j%*10 + k%
      cases%(i%)=i% : ContenuCase%(cases%(i%))=0 : Top_cases%(cases%(i%))=tt% : Left_cases%(cases%(i%))=ll%
      ll%=ll%+Wcase%
    next k%
    ll%=0 : tt%=tt%+Hcase%
  next j%
END_SUB

rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ======================== Papydall Début ====================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Aide:
  select number_click
      case 92
              tex$ = "STRATEGO®" + chr$(13) + chr$(13)
              tex$ = tex$ + "STRATEGO® est un jeu non seulement passionnant" + chr$(13)
              tex$ = tex$ + "pour les deux joueurs actifs, mais également captivant" + chr$(13)
              tex$ = tex$ + "pour les spectateurs. La stratégie, qui est le principe" + chr$(13)
              tex$ = tex$ + "fondamental de nombreux jeux tels que les échecs et" + chr$(13)
              tex$ = tex$ + "les dames, a donné son nom à Stratego. Le but à " + chr$(13)
              tex$ = tex$ + "atteindre dans le jeu de Stratego est de s’emparer du" + chr$(13)
              tex$ = tex$ + "drapeau de la partie adverse. A cet effet, chaque " + chr$(13)
              tex$ = tex$ + "joueur dispose d’une armée de 40 pièces classées" + chr$(13)
              tex$ = tex$ + "suivant les grades militaires, ce qui permet de retenir" + chr$(13)
              tex$ = tex$ + "facilement la valeur des pièces. Cette dénomination " + chr$(13)
              tex$ = tex$ + "n’a cependant pas été prise avec l’intention de lancer" + chr$(13)
              tex$ = tex$ + "un jeu inspiré de la guerre, mais simplement comme " + chr$(13)
              tex$ = tex$ + "exercice psychologique d’attaque et de défense. Chaque " + chr$(13)
              tex$ = tex$ + "joueur dispose d’une armée de 40 pièces, dont " + chr$(13)
              tex$ = tex$ + "vous pouvez voir sur le damier les emblèmes, les " + chr$(13)
              tex$ = tex$ + "grades militaires et le nombre. " + chr$(13)
              tex$ = tex$ + "On doit disposer stratégiquement les pièces de façon " + chr$(13)
              tex$ = tex$ + "à ce que l’attaque et la défense se déploient en faveur" + chr$(13)
              tex$ = tex$ + "de chaque joueur qui les déplace" + chr$(13)
      case 93
              tex$ = "DISPOSITION DES PIÈCES" + chr$(13) + chr$(13)
              tex$ = tex$ + "Il y a deux camps : les rouges et les bleus. Etant donné" + chr$(13)
              tex$ = tex$ + "que ce sont les rouges qui ouvrent le jeu, on tire" + chr$(13)
              tex$ = tex$ + "d’abord au sort pour déterminer à quel joueur cette" + chr$(13)
              tex$ = tex$ + "couleur sera attribuée." + chr$(13)
              tex$ = tex$ + "Les joueurs se placent face à face, le carton du jeu" + chr$(13)
              tex$ = tex$ + "entre eux, l’emblème Stratego étant tourné vers eux." + chr$(13)
              tex$ = tex$ + "Chaque joueur place une pièce dans chaque case de" + chr$(13)
              tex$ = tex$ + "la moitié du carton qui lui est attribuée, mais de telle " + chr$(13)
              tex$ = tex$ + "façon que l’adversaire ne voit que les dos de ces pièces," + chr$(13)
              tex$ = tex$ + "afin que ce dernier ignore la valeur de chacune" + chr$(13)
              tex$ = tex$ + "des pièces placées." + chr$(13)
              tex$ = tex$ + "Les deux rangs de cases du milieu restent inoccupés," + chr$(13)
              tex$ = tex$ + "de même que les deux lacs à travers lesquels les" + chr$(13)
              tex$ = tex$ + "deux armées ne peuvent pas se mouvoir au cours du jeu." + chr$(13)
              tex$ = tex$ + "La disposition des pièces doit être étudiée d’après les" + chr$(13)
              tex$ = tex$ + "règles du jeu d’une part, et suivant l’inspiration stratégique " + chr$(13)
              tex$ = tex$ + "du joueur d’autre part." + chr$(13)

      case 94
              tex$ = "RÈGLES DU JEU" + chr$(13) + chr$(13)
              tex$ = tex$ + "A tour de rôle, les joueurs peuvent déplacer une de leurs pièces d’une case à la fois, soit en avant ou en " + chr$(13)
              tex$ = tex$ + "arrière, soit latéralement à gauche ou à droite.l’éclaireur, au contraire des autres pièces peut, en une" + chr$(13)
              tex$ = tex$ + "fois, se déplacer de plus d’une case libre. Il peut alors arriver sur une case vide ou sur une pièce de l’adversaire." + chr$(13)
              tex$ = tex$ + "Le drapeau et les bombes ne doivent pas être déplacés et restent donc pendant tout le jeu sur les cases" + chr$(13)
              tex$ = tex$ + "où ils ont été placés au début. Lorsque deux pièces adversaires se sont rapprochées, les pièces se trouvant" + chr$(13)
              tex$ = tex$ + "soit face à face, soit à côté les unes des autres — le joueur peut prendre sa pièce et en touchant celle de" + chr$(13)
              tex$ = tex$ + "son adversaire, il doit nommer le grade de sa pièce personnelle. Le joueur adverse répond en nommant" + chr$(13)
              tex$ = tex$ + "le rang de sa pièce. Si c’est une pièce d’un rang inférieur, elle est alors enlevée du carton et la pièce" + chr$(13)
              tex$ = tex$ + "de rang supérieur prend la place devenue libre. Si cependant la pièce de l’adversaire est d’un rang " + chr$(13)
              tex$ = tex$ + "supérieur, alors la pièce de rang inférieur disparaît du carton et la pièce de rang supérieur reste à sa place." + chr$(13)
              tex$ = tex$ + "En cas de rang identiques, les deux pièces tombent. L’espion tombe devant les éclaireurs, ceux-ci tombent" + chr$(13)
              tex$ = tex$ + "devant les démineurs, les démineurs tombent devant les sergents, les sergents devant les Lieutenants,etc." + chr$(13)
              tex$ = tex$ + "Si deux pièces se trouvent rapprochées, il n’est pas nécessaire d’attaquer immédiatement;" + chr$(13)
              tex$ = tex$ + "l’initiative de l’attaque peut venir de chacun des deux joueurs. Chaque pièce, quel que soit son rang, sauf un démineur," + chr$(13)
              tex$ = tex$ + "tombe contre une bombe qui, rappelons-le, ne doit pas être déplacée. Si l’un des joueurs vient" + chr$(13)
              tex$ = tex$ + "à frapper une bombe de l’adversaire, celui-ci répond « boum ». Seul un démineur est en mesure de" + chr$(13)
              tex$ = tex$ + "détruire une bombe, après quoi elle doit être retirée du jeu. Le drapeau, qui ne doit pas être déplacé, tombe " + chr$(13)
              tex$ = tex$ + "devant n’importe quelle pièce de l’adversaire. Le maréchal, le plus haut en grade, tombe seulement" + chr$(13)
              tex$ = tex$ + "devant l’espion, s’il est pris par le dernier. Quand, au contraire, le maréchal attaque l’espion, ce dernier" + chr$(13)
              tex$ = tex$ + "tombe. Si un joueur ne peut plus déplacer aucune de ses pièces, par exemple lorsqu’il n’a plus" + chr$(13)
              tex$ = tex$ + "que des bombes et le drapeau, il doit capituler. Une pièce ne peut être déplacée plus de cinq fois de" + chr$(13)
              tex$ = tex$ + "suite entre les mêmes 2 cases. C’est le joueur qui réussit à s’emparer du drapeau de son adversaire,qui est le gagnant." + chr$(13)
      case 95
              tex$ = "TACTIQUE" + chr$(13)  + chr$(13)
              tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13)
              tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13)
              tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13)
              tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13)
              tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13)
              tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13)
              tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13)
              tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13)
              tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13)
              tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13)
              tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13)
              tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13)
              tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13)
              tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13)
              tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13)
    end_select

  message tex$
RETURN
rem ======================== Papydall (Fin) ====================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 12:10

Bonjour à tous,

Je prends le fichier aide fait par Papydall, il y aura peut-être des changements à y faire, mais ce n'est pas certain.
à ce sujet, une petite correction à faire: Le maréchal, le plus haut en grade, tombe seulement devant l’espion, s’il est pris par le ce dernier.
Merci Papydall pour cette participation.

@Jicehel,
Concernant le double affichage des messages dans la SUB Contenu_de_la_Case(NumCase%), je l'ai signalé pour que Jack se penche dessus (car à mon avis ça ne vient pas du code). Mais c'est sans importance car ces messages disparaîtront, ils ne servent qu'à repérer les partis à coder .

Concernant l'attribution du grade 11 à la bombe, je prends car c'est logique et de plus en cas de sub commune.....

Concernant la SUB init_case(), je prends également. C'est là qu'on voit mes limites en programmation, je suis un programmeur du dimanche. Mais peu importe, c'est le but d'un projet collaboratif. C'est bien pour cela que j'ai demandé (plus haut) d'y regarder. Very Happy

Concernant les différents types de partie, je vais en priorité revoir le menu pour que l'utilisateur ait le choix de jouer à deux ou contre l'ordi (pour le réseau on verra plus tard).

Il me reste à mettre tout ça en pratique, mais d'abord, il faut que je décortique ton code...

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 464
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 12:21

@jean-claude
Pourquoi plusieurs variables pour les propriétés du pion?
Une seule est plus simple à gérer:
Code:

dim positionx,positiony,grade,etat,visibilite,pion(80,5)

positionx=1
positiony=2
grade=3
etat=4
visibilite=5

' exemple
lecture=pion(p%,etat)

Pour le message qui se repète 2 fois, ce n'est pas un bug, c'est toi qui l'a codé comme ça:
Code:

' Sélection ou déplacement
 if TypSel%=0
    ' c'est une sélection
    ' regarde ce qu'il y a dans la case sélectionnée
    Contenu_de_la_Case(CaseSel%)
    ' agit en fonction du résultat du contenu
   
    ' gestion du prochain clic
    TypSel%=1: ' pour que le prochain clic soit un déplacement

 end_if
 if TypSel%=1
    ' c'est un déplacement
    ' regarde ce qu'il y a dans la case visée
    Contenu_de_la_Case(CaseSel%)
    ' déplace le pion si c'est possible (pas chez un collègue)
   
    ' agit en fonction du résultat du contenu (gain ou défaite ou nul)
   
    ' gestion du prochain clic
    TypSel%=0: ' pour que le prochain clic soit une sélection
 end_if
dès que TypSel%=0, tu affiche le message puis tu fais TypSel%=1, donc la deuxième condition s'effectue dans la foulé!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 12:34

Bien vu Silverman, j'avais remarqué cette anomalie de code, mais d'une part j'ai oublié de la signaler et d'autre part je n'ai pas pensé que c'était elle qui créait le double affichage du message. Bien vu.

Comme quoi, c'est bien d'avoir plusieurs relecteurs Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 12:59

Merci Sylverman,

Pour les messages doublés, bien vu. j'aurai dû mettre un stop en attendant....
Pour les variables des pions, ben oui, pourquoi je me complique la vie.... Very Happy

C'est super le collaboratif... cheers

Voici le nouveau code qui ressort de toutes vos interventions.
Pour moi ce sera tout pour aujourd'hui, j'ai ma famille qui commence à me regarder d'un air menaçant...
Very Happy

Code:
' Stratego_2D_v1_01.bas


' Travail à faire
  ' 1) message "Attention: vous risquez de vous mouiller les pieds..."
    ' je cherche des idées d'animation pour ce message....

dim rep$,repimage$,tex$
dim n%,x%,y%

width 0,811+16 : height 0,811+31+8+20

' Menu (à développer par la suite)
label aide
main_menu 10
command_target_is 0
  sub_menu 11 : parent 11,10 : caption 11,"Jeu"
    sub_menu 12 : parent 12,11 : caption 12,"Nouvelle partie contre l'ordinateur "
    sub_menu 13 : parent 13,11 : caption 13,"Nouvelle partie à 2 joueurs "
    sub_menu 14 : parent 14,11 : caption 14,"Charger une partie "
    sub_menu 15 : parent 15,11 : caption 15,"Sauver la partie "
  sub_menu 20 : parent 20,10 : caption 20,"Aide"
    SUB_MENU 21 : PARENT 21,20 : CAPTION 21,"Stratégo" : ON_CLICK 21,Aide
    SUB_MENU 22 : PARENT 22,20 : CAPTION 22,"Dispositions des pièces" :  ON_CLICK 22,Aide
    SUB_MENU 23 : PARENT 23,20 : CAPTION 23,"Règles du jeu" :  ON_CLICK 23,Aide
    SUB_MENU 24 : PARENT 24,20 : CAPTION 24,"Tactique" :  ON_CLICK 24,Aide


' répertoire
rep$=dir_current$+"" : repimage$=rep$+"img" : dir_change repimage$

' scene2D 100
dim TypSel% : TypSel%=0 :' pour déterminer si c'est un clic de sélection (0) ou de déplacement(1)
label click
scene2d 100 : on_click 100,click : file_load 100,"Fond.bmp" :  width 100,811 : height 100,811

' les cases
dim Hcase%,Wcase%,CaseSel%:' Hcase%=Hauteur d'une case, Wcase%=largeur d'une case, CaseSel%= case sélectionnée
dim cases%(100) , Top_cases%(100) , Left_cases%(100) , ContenuCase%(100)
Hcase%=80 : Wcase%=80
init_case()

' création des sprites (à développer)
' sprite_create_hide
     sprite 101
' pour essai
'  sprite_show_all
  sprite_file_load 101,"Captain.bmp"
  sprite_x_position 101,Left_cases%(cases%(12))+10 : sprite_y_position 101,Top_cases%(cases%(12))+2

' liste des images et grade et nombre par joueur
  ' à noter: les bombes et le drapeau ne sont pas déplaçable
  ' les bombes => "Bomb.bmp"=0 6/Joueur           . le drapeau => "Flag.bmp"=0 1/Joueur
  ' l'espion => "Spy.bmp"=1 1/Joueur              . les Éclaireurs => "Scout.bmp"=2 8/Joueur
  ' les Démineurs => "Miner.bmp"=3 5/Joueur       . les Sergents => "Sergeant.bmp"=4 4/Joueur
  ' les Lieutenants => "Lieutenant.bmp"=5 4/Joueur. les Capitaines => "Captain.bmp"=6 4/Joueur
  ' les Commandants => "Major.bmp"=7 4/Joueur     . les Colonels => "Colonel.bmp"=8 3/Joueur
  ' le Général => "General.bmp"=9 1/Joueur        . le Maréchal => "Marshal.bmp"=10 1/Joueur
  
' sur proposition de Silverman les variables pour gérer les pions
dim positionX%,positionY%,grade%,etat%,visibilite%,pion%(80,5)
' exemple
 ' positionX%=1 : positionY%=2 : grade%=3 : etat%=4 : visibilite%=5
 ' lecture=pion%(p%,etat)


rem ======================================== Notes diverses (Partie à supprimer)
' affiche() : ' Sub de test à supprimer à la fin

rem ============================================================================
END
rem ============================================================================
' SUB provisoire
SUB affiche()
    dim_local i%
   for i%=1 to 100
    caption 0,str$(cases%(i%))+" => "+str$(Top_cases%(cases%(i%)))+"/"+str$(Left_cases%(cases%(i%))) : stop
   next i%
END_SUB

rem ============================================================================
click:
 off_click 100:' neutraliser pendant le traitement du click
   ' retrouver la case qui correspond au clic
 x%=mouse_x_position(100) : y%=mouse_y_position(100)
 for n%=1 to 100
   if y%>Top_cases%(cases%(n%)) and y%<Top_cases%(cases%(n%))+Hcase%
      if x%>Left_cases%(cases%(n%)) and x%<Left_cases%(cases%(n%))+Wcase%
         CaseSel%=cases%(n%)
         ' prévoir une animation de la case sélectionnée (Encadré, changement de couleur, etc.)
         caption 0,str$(CaseSel%)
      end_if
   end_if
 next n%
' gerer les cases des lacs
 if CaseSel%=43 or CaseSel%=44 or CaseSel%=47 or CaseSel%=48 or CaseSel%=53 or CaseSel%=54 or CaseSel%=57 or CaseSel%=58
    ' prévoir une animation
    message "Attention: vous risquez de vous mouiller les pieds..."
    ' on sort sans changer TypSel% et on réactive le clic
    on_click 100,click : RETURN
 end_if
 
' Sélection ou déplacement
 if TypSel%=0
    ' c'est une sélection
    ' regarde ce qu'il y a dans la case sélectionnée
    Contenu_de_la_Case(CaseSel%)
    ' agit en fonction du résultat du contenu
STOP
    ' gestion du prochain clic
    TypSel%=1: ' pour que le prochain clic soit un déplacement

 end_if
 if TypSel%=1
    ' c'est un déplacement
    ' regarde ce qu'il y a dans la case visée
    Contenu_de_la_Case(CaseSel%)
    ' déplace le pion si c'est possible (pas chez un collègue)
    
    ' agit en fonction du résultat du contenu (gain ou défaite ou nul)
STOP
    ' gestion du prochain clic
    TypSel%=0: ' pour que le prochain clic soit une sélection
 end_if
 on_click 100,click
RETURN
rem ============================================================================
SUB Contenu_de_la_Case(NumCase%)
     if ContenuCase%(NumCase%)=0
        message " la case n°"+str$(NumCase%)+" est vide (à développer)" : stop
     else
        message " retourne le contenu de la case n°"+str$(NumCase%)+" (à développer)" : stop
     end_if
END_SUB
rem ============================================================================
SUB init_case()
  dim_local tt%,ll%,i%, j%, k%
  for j%=0 to 9
    for k% = 1 to 10
      i% = j%*10 + k%
      cases%(i%)=i% : ContenuCase%(cases%(i%))=0 : Top_cases%(cases%(i%))=tt% : Left_cases%(cases%(i%))=ll%
      ll%=ll%+Wcase%
    next k%
    ll%=0 : tt%=tt%+Hcase%
  next j%
END_SUB
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ====================== Aide de Papydall Début ==============================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Aide:
  select number_click
      case 21
              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 22
              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 23
              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 ce 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 24
              tex$ = "TACTIQUE" + chr$(13)  + chr$(13)
              tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13)
              tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13)
              tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13)
              tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13)
              tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13)
              tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13)
              tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13)
              tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13)
              tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13)
              tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13)
              tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13)
              tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13)
              tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13)
              tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13)
              tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13)
    end_select

  message tex$
RETURN
rem ======================== Papydall (Fin) ====================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


A+

Réédition 11:58:
Correction Bug (sprite 101) et suppression de 2 commentaires devenus inutiles.


Dernière édition par Jean Claude le Mar 1 Mar 2016 - 9:55, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 16:04

Hello Jean Claude.

Une fois de plus le forum t’a bouffé l’anti-slash en ligne 32.
Il est recommandé d’utiliser CHR$(92) au lieu de « \ » dont le forum en est avide !
Code:
rep$=dir_current$+chr$(92) : repimage$=rep$+"img" :  dir_change repimage$

D’autre part, (et c’est STRICTEMENT PERSONNEL), j’aime mieux que FORM 0 soit centré.
J’ai donc modifié la ligne 13 comme ceci :
Code:
width 0,811+16 : height 0,811+31+8+20 : left 0,(screen_x - width(0))/2
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 16:55

@Papydall
Merci pour cette mise en garde contre les méfaits du forum bouffeur de certains caractères.
Pour la question de centrer FORM 0, j'y serai venu tôt ou tard.

Application immédiate avec repérage de la taille du bandeau et des bords pour une meilleure portabilité du code:
Code:
' Stratego_2D_v1_01.bas

'
' Travail à faire
  ' 1) message "Attention: vous risquez de vous mouiller les pieds..."
    ' je cherche des idées d'animation pour ce message....

' portabilité
Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord%

dim rep$,repimage$,tex$
dim n%,x%,y%

width 0,811+(bord%*2) : height 0,811+bandeau%+bord%+20 :top 0,(screen_Y - height(0))/2 : left 0,(screen_x - width(0))/2

' Menu (à développer par la suite)
label aide
main_menu 10
command_target_is 0
  sub_menu 11 : parent 11,10 : caption 11,"Jeu"
    sub_menu 12 : parent 12,11 : caption 12,"Nouvelle partie contre l'ordinateur "
    sub_menu 13 : parent 13,11 : caption 13,"Nouvelle partie à 2 joueurs "
    sub_menu 14 : parent 14,11 : caption 14,"Charger une partie "
    sub_menu 15 : parent 15,11 : caption 15,"Sauver la partie "
  sub_menu 20 : parent 20,10 : caption 20,"Aide"
    SUB_MENU 21 : PARENT 21,20 : CAPTION 21,"Stratégo" : ON_CLICK 21,Aide
    SUB_MENU 22 : PARENT 22,20 : CAPTION 22,"Dispositions des pièces" :  ON_CLICK 22,Aide
    SUB_MENU 23 : PARENT 23,20 : CAPTION 23,"Règles du jeu" :  ON_CLICK 23,Aide
    SUB_MENU 24 : PARENT 24,20 : CAPTION 24,"Tactique" :  ON_CLICK 24,Aide


' répertoire
rep$=dir_current$+chr$(92) : repimage$=rep$+"img" : dir_change repimage$

' scene2D 100
dim TypSel% : TypSel%=0 :' pour déterminer si c'est un clic de sélection (0) ou de déplacement(1)
label click
scene2d 100 : on_click 100,click : file_load 100,"Fond.bmp" :  width 100,811 : height 100,811

' les cases
dim Hcase%,Wcase%,CaseSel%:' Hcase%=Hauteur d'une case, Wcase%=largeur d'une case, CaseSel%= case sélectionnée
dim cases%(100) , Top_cases%(100) , Left_cases%(100) , ContenuCase%(100)
Hcase%=80 : Wcase%=80
init_case()

' création des sprites (à développer)
' sprite_create_hide

' pour essai
'  sprite_show_all
  sprite 101 : sprite_file_load 101,"Bomb.bmp"
  sprite_x_position 101,Left_cases%(cases%(12))+10 : sprite_y_position 101,Top_cases%(cases%(12))+2
  sprite 102 : sprite_file_load 102,"Flag.bmp"
  sprite_x_position 102,Left_cases%(cases%(13))+10 : sprite_y_position 102,Top_cases%(cases%(13))+2
  sprite 103 : sprite_file_load 103,"Captain.bmp"
  sprite_x_position 103,Left_cases%(cases%(14))+10 : sprite_y_position 103,Top_cases%(cases%(14))+2

' liste des images et grade et nombre par joueur
  ' à noter: les bombes et le drapeau ne sont pas déplaçable
  ' les bombes => "Bomb.bmp"=11 6/Joueur          . le drapeau => "Flag.bmp"=0 1/Joueur
  ' l'espion => "Spy.bmp"=1 1/Joueur              . les Éclaireurs => "Scout.bmp"=2 8/Joueur
  ' les Démineurs => "Miner.bmp"=3 5/Joueur       . les Sergents => "Sergeant.bmp"=4 4/Joueur
  ' les Lieutenants => "Lieutenant.bmp"=5 4/Joueur. les Capitaines => "Captain.bmp"=6 4/Joueur
  ' les Commandants => "Major.bmp"=7 4/Joueur     . les Colonels => "Colonel.bmp"=8 3/Joueur
  ' le Général => "General.bmp"=9 1/Joueur        . le Maréchal => "Marshal.bmp"=10 1/Joueur
  
' sur proposition de Silverman les variables pour gérer les pions
dim positionX%,positionY%,grade%,etat%,visibilite%,pion%(80,5)
' exemple
 ' positionX%=1 : positionY%=2 : grade%=3 : etat%=4 : visibilite%=5
 ' lecture=pion%(p%,etat)


rem ======================================== Notes diverses (Partie à supprimer)
' affiche() : ' Sub de test à supprimer à la fin

rem ============================================================================
END
rem ============================================================================
' SUB provisoire
SUB affiche()
    dim_local i%
   for i%=1 to 100
    caption 0,str$(cases%(i%))+" => "+str$(Top_cases%(cases%(i%)))+"/"+str$(Left_cases%(cases%(i%))) : stop
   next i%
END_SUB

rem ============================================================================
click:
 off_click 100:' neutraliser pendant le traitement du click
   ' retrouver la case qui correspond au clic
 x%=mouse_x_position(100) : y%=mouse_y_position(100)
 for n%=1 to 100
   if y%>Top_cases%(cases%(n%)) and y%<Top_cases%(cases%(n%))+Hcase%
      if x%>Left_cases%(cases%(n%)) and x%<Left_cases%(cases%(n%))+Wcase%
         CaseSel%=cases%(n%)
         ' prévoir une animation de la case sélectionnée (Encadré, changement de couleur, etc.)
         caption 0,str$(CaseSel%)
      end_if
   end_if
 next n%
' gerer les cases des lacs
 if CaseSel%=43 or CaseSel%=44 or CaseSel%=47 or CaseSel%=48 or CaseSel%=53 or CaseSel%=54 or CaseSel%=57 or CaseSel%=58
    ' prévoir une animation
    message "Attention: vous risquez de vous mouiller les pieds..."
    ' on sort sans changer TypSel% et on réactive le clic
    on_click 100,click : RETURN
 end_if
 
' Sélection ou déplacement
 if TypSel%=0
    ' c'est une sélection
    ' regarde ce qu'il y a dans la case sélectionnée
    Contenu_de_la_Case(CaseSel%)
    ' agit en fonction du résultat du contenu
' STOP
    ' gestion du prochain clic
    TypSel%=1: ' pour que le prochain clic soit un déplacement

 end_if
 if TypSel%=1
    ' c'est un déplacement
    ' regarde ce qu'il y a dans la case visée
    Contenu_de_la_Case(CaseSel%)
    ' déplace le pion si c'est possible (pas chez un collègue)
    
    ' agit en fonction du résultat du contenu (gain ou défaite ou nul)
' STOP
    ' gestion du prochain clic
    TypSel%=0: ' pour que le prochain clic soit une sélection
 end_if
 on_click 100,click
RETURN
rem ============================================================================
SUB Contenu_de_la_Case(NumCase%)
     if ContenuCase%(NumCase%)=0
        message " la case n°"+str$(NumCase%)+" est vide (à développer)" :' stop
     else
        message " retourne le contenu de la case n°"+str$(NumCase%)+" (à développer)" :' stop
     end_if
END_SUB
rem ============================================================================
SUB init_case()
  dim_local tt%,ll%,i%, j%, k%
  for j%=0 to 9
    for k% = 1 to 10
      i% = j%*10 + k%
      cases%(i%)=i% : ContenuCase%(cases%(i%))=0 : Top_cases%(cases%(i%))=tt% : Left_cases%(cases%(i%))=ll%
      ll%=ll%+Wcase%
    next k%
    ll%=0 : tt%=tt%+Hcase%
  next j%
END_SUB

rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ====================== Aide de Papydall Début ==============================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Aide:
  select number_click
      case 21
              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 22
              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 23
              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 ce 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 24
              tex$ = "TACTIQUE" + chr$(13)  + chr$(13)
              tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13)
              tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13)
              tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13)
              tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13)
              tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13)
              tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13)
              tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13)
              tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13)
              tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13)
              tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13)
              tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13)
              tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13)
              tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13)
              tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13)
              tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13)
    end_select

  message tex$
RETURN
rem ======================== Papydall (Fin) ====================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ======================== ===================================================
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
       message "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
       terminate
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 then DIM bandeau%
    IF VARIABLE("bord%")=0 then DIM bord%
    ' Calcul de bandeau% et bord%
    dim_local w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    picture 1 : full_space 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    delete 1
END_SUB

A+


Dernière édition par Jean Claude le Mar 1 Mar 2016 - 9:55, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 17:16

Sous Windows 7, il vaut mieux laisser le TOP implicite à 0 et  ne pas utiliser :
Code:
top 0,(screen_Y - height(0))/2

Ce n’est qu’un détail que tout un chacun peut régler selon ses préférences.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 17:20

Oui, là chacun fera ce qu'il voudra.

Je viens de modifier le code (juste au dessus) pour que le programme détecte les dimensions du bandeau et des bords suivant la version Windows.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 464
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 18:02

@jean-claude
tu aurais dû reprendre les noms de variables de jicehel, c'est pas facile d'intégrer une sub dans ta version. Voici ce que j'ai fait pour la création des sprites(version d'hier soir, déplacement ou l'on veut sauf les zones infranchissables):
Code:

' -------------------------
' * Structure du Stratego *
' -------------------------

LABEL click_plateau

' * Déclaration des variables
DIM compt%

' * Déclaration des variables pour les images
DIM I_Fond%, I_E_affiche%,  I_E_preparation%, I_copy%
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 Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811

' * Déclaration du nombre de pièces
DIM Nb_piecesJ1%, Nb_piecesJ2%
DIM Nb_Bombe%, Nb_Capitaine%, Nb_Colonel%, Nb_Drapeau%, Nb_General%, Nb_Lieutenant%
DIM Nb_Major%, Nb_Marechal%, Nb_Demineur%, Nb_Eclaireur%, Nb_Sergent%, Nb_Espion%

' * Déclaration de l'ordre des pièces (hors règles spéciale)
DIM O_Bombe%,  O_Capitaine%, O_Colonel%, O_Drapeau%, O_General%, O_Lieutenant%
DIM O_Major%, O_Marechal%, O_Demineur%, O_Eclaireur%, O_Sergent%, O_Espion%

' * Déclaration des matrices de terrain
DIM Franchissable(9,9), Pieces(9,9)
' * Les pions du joueur 1 ont des valeurs de 0 à 11. Ceux du joueur 2 de 20 à 31

' * Déclaration des compteurs et autres variables du jeu
DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l%
DIM Tour% : ' Indique si c'est au joueur 1 ou au joueur 2 de jouer
DIM Selection% : ' Si >=0 donne la case actuellement sélectionnée

'
'
'
'
'
' * Déclaration des variables pour les sprites
DIM file$,plateau%,max_sprite% : max_sprite%=80 : ' sprites
DIM rouge%,bleu%,vert%,blanc%
DIM sprites(max_sprite%)
FOR compt%=0 to max_sprite% : sprites(compt%)= -1 : NEXT compt%

' * 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
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) = -1 : Franchissable(4,3) = -1
Franchissable(4,6) = -1 : Franchissable(4,7) = -1
Franchissable(5,2) = -1 : Franchissable(5,3) = -1
Franchissable(5,6) = -1 : Franchissable(5,7) = -1

O_Drapeau% = 0
O_Espion% = 1
O_Eclaireur% =  2
O_Demineur% = 3
O_Sergent% = 4
O_Lieutenant% = 5
O_Capitaine% = 6
O_Major% = 7
O_Colonel% = 8
O_General% = 9
O_Marechal% = 10
O_Bombe% = 11




' * Création et chargement des images

FULL_SPACE 0

sprite_create_hide

' plateau
plateau%=99
make_plateau(plateau%)


' BLEU
' bombe1
file$="Bomb"
load_sprite(file$,O_Bombe%,"bleu")
POSITION_PIECE(1,0,2)


' drapeau
file$="Flag"
load_sprite(file$,O_Drapeau%,"bleu")
POSITION_PIECE(2,0,3)


' bombe2
file$="Captain"
load_sprite(file$,O_Capitaine%,"bleu")
POSITION_PIECE(3,0,4)


' ROUGE
' bombe1
file$="Bomb"
load_sprite(file$,O_Bombe%+40,"rouge")
POSITION_PIECE(1+40,9,2)


' drapeau
file$="Flag"
load_sprite(file$,O_Drapeau%+40,"rouge")
POSITION_PIECE(2+40,9,3)


' bombe2
file$="Captain"
load_sprite(file$,O_Capitaine%+40,"rouge")
POSITION_PIECE(3+40,9,4)


' cadres colorés autour des pièces (fabriqué en dernier pour recouvrir les autres sprites)
' rouge
make_encadre(255,0,0) :' numero de ce sprite = plateau%-1
rouge% = plateau%-1
' bleu
make_encadre(0,0,255) :' numero de ce sprite = plateau%-2
bleu% = plateau%-2


' montre les sprites
sprite_show plateau%
for tmp%=0 to max_sprite%
   if sprites(tmp%)>-1 then sprite_show tmp%
next tmp%




END
' pour plus tard
data "Flag",1
data "Spy",1
data "Scout"8,
data "Miner",5
data "Sergeant",4
data "Lieutenant",4
data "Captain",4
data "Major",3
data "Colonel",2
data "General",1
data "Marshal",1
data "Bomb",6
data "_",0



sub make_plateau(plateau%)
 dim_local I_fond%,tmp_pic
   ' cherche une image libre
   I_fond%=0
   repeat
      I_fond%=I_fond%+1
   until object_exists(I_fond%)=0
   image I_fond%

   ' cherche un picture libre
   tmp_pic=0
   repeat
      tmp_pic=tmp_pic+1
   until object_exists(tmp_pic)=0
   ' NOTE: colorer un picture apès sa création évite le clignotement blanc très bref
   picture tmp_pic : color tmp_pic,236,233,216 : hide tmp_pic : 2d_target_is tmp_pic

   ' charge le fichier plateau
   file_load tmp_pic,"img/Fond.jpg": width tmp_pic,Largeur_fond% : height tmp_pic,Hauteur_Fond%
   2d_image_copy I_fond%,0,0,Largeur_fond%,Hauteur_Fond%

   ' fabrique le plateau
   scene2D plateau%
   color plateau%,236,233,216
   on_click plateau%,click_plateau
  
   ' taille et centrage du plateau
   width plateau%,Largeur_fond% : height plateau%,Hauteur_Fond%
   top plateau%,(height(0)-Hauteur_Fond%)/2 : left plateau%,(width(0)-Largeur_Fond%)/2
  
   ' attribue un numéro de sprite pour le plateau
   sprite plateau%
   sprite_image_load plateau%,I_fond%
   sprite_position plateau%,0,0
  
   ' libere les ressources inutiles
   2d_target_is 0
   delete tmp_pic
   delete I_fond%
end_sub


sub make_encadre(r%,g%,b%)
dim_local tmp_pic,tmp_sprite
   ' cherche une image libre
   I_fond%=0
   repeat
      I_fond%=I_fond%+1
   until object_exists(I_fond%)=0
   image I_fond%

   ' cherche un picture libre
   tmp_pic=0
   repeat
      tmp_pic=tmp_pic+1
   until object_exists(tmp_pic)=0
   ' NOTE: colorer un picture apès sa création évite le clignotement blanc très bref
   picture tmp_pic : color tmp_pic,236,233,216 : hide tmp_pic : 2d_target_is tmp_pic
  
   ' cherche un sprite libre
   tmp_sprite=plateau%
   repeat
      tmp_sprite=tmp_sprite-1
   until sprite_exists(tmp_sprite)=0
  
   ' trace le cadre
   2d_fill_on
   2d_pen_color 0,0,0 : 2d_fill_color 0,0,0
   2d_rectangle 3,3,78,78
   2d_fill_off
   2d_pen_color r%,g%,b%
   2d_rectangle 0,0,81+0,81+0
   2d_rectangle 1,1,80+0,80+0
   2d_rectangle 2,2,79+0,79+0

   ' le capturer
   2d_image_copy I_fond%,0,0,81+0,81+0
   sprite tmp_sprite
   sprite_image_load tmp_sprite,I_fond%
  
   ' libere les ressources inutiles
   2d_target_is 0
   delete tmp_pic
   delete I_fond%
end_sub


'
sub encadre_on(coul,x,y)
   sprite_position coul,1+(y*81),1+(x*81)
   sprite_show coul
end_sub


'
sub encadre_off(coul)
   sprite_hide coul
end_sub


'
sub load_sprite(file$,N%,r$)
 dim_local tmp_pic,I_E_preparation%,I_E_affiche%,r%,g%,b%,compt%
   ' cherche un picture libre
   tmp_pic=0
   repeat
      tmp_pic=tmp_pic+1
   until object_exists(tmp_pic)=0
   ' NOTE: colorer un picture apès sa création évite le clignotement blanc très bref
   picture tmp_pic : color tmp_pic,236,233,216 : hide tmp_pic : 2d_target_is tmp_pic

   ' cherche une image libre
   I_E_preparation%=0
   repeat
      I_E_preparation%=I_E_preparation%+1
   until object_exists(I_E_preparation%)=0
   image I_E_preparation%

   ' cherche une image libre
   I_E_affiche%=0
   repeat
      I_E_affiche%=I_E_affiche%+1
   until object_exists(I_E_affiche%)=0
   image I_E_affiche%

   ' charge le fichier pions
   file_load tmp_pic,"img/"+file$+".jpg" : width tmp_pic,81 : height tmp_pic,81
   2d_image_copy I_E_preparation%,0,0,61,81 : 2d_clear : 2d_image_paste I_E_preparation%,11,0
  
   ' ajoute des bords colorés
   if r$="rouge"
      r%=200 : g%=0 : b%=0
      compt%=40 :' incrément de sprite pour la couleur rouge
   else
      r%=0 : g%=0 : b%=200
      compt%=0 :' incrément de sprite pour la couleur bleu
   end_if
   '
   2d_fill_off
   2d_pen_color r%,g%,b% : 2d_rectangle 10,1,71,80 : 2d_rectangle 10,1,71,79 :  2d_rectangle 10,1,71,78
   2d_pen_color 1,1,1 : 2d_rectangle 0,0,81,81 : 2d_flood 5,1,r%,g%,b% : 2d_flood 75,1,r%,g%,b%

   ' capture l'image finale
   2d_image_copy I_E_affiche%,0,0,81,81
  
   ' fabrique et attribue un numero à un sprite en fonction de sa couleur
   repeat
      compt%=compt%+1
   until sprites(compt%)=-1
   sprites(compt%)=N%
   sprite compt%
   sprite_image_load compt%,I_E_affiche%
  
   ' libere les ressources inutiles
   2d_target_is 0
   delete tmp_pic
   delete I_E_preparation%
   delete I_E_affiche%
end_sub


'
sub POSITION_PIECE(N%,x,y)
   Pieces(x,y)=N%
   ' Type_Pieces = sprites(N%)
   sprite_position N%,1+(y*81),1+(x*81)
end_sub




click_plateau:
   ' affiche les coordonnées de la case cliqué
   Ligne%=int(abs((mouse_y_position(plateau%)-1)/81)) : ' bord exclu
   Colonne%=int(abs((mouse_x_position(plateau%)-1)/81)) : ' bord exclu
'   caption 0,"Ligne="+str$(Ligne%)+"     Colonne="+str$(Colonne%)

   ' sélection/déselection
   if pieces(Ligne%,Colonne%)>-1
      if Selection%=0
         encadre_on(bleu%,Ligne%,Colonne%)
         '
         l%=ligne%
         c%=colonne%
         Selection%=1
      else
         encadre_off(bleu%)
         Selection%=0
      end_if
   end_if

   if pieces(Ligne%,Colonne%)=-1 and Selection%=Franchissable(Ligne%,Colonne%)
      POSITION_PIECE(pieces(l%,c%),Ligne%,Colonne%)
      encadre_off(bleu%)
      pieces(l%,c%)=-1
      Selection%=0
   end_if
return
les subs sont 'presques' portables('presque' car elles utilisent des tableaux)

EDIT: je viens d'avoir une illumination drunken ,je vais integrer les tableaux dans les subs pour les rendre 100% portable! santa
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 18:26

Bravo Silverman. Le déplacement est très propre et je pense que les ajouts que les procédures que j'ai ajouté dans ma version pourront être intégrée assez facilement dans cette version. En tout cas la sélection et l'affichage est très propre (pas de clignotement)

Note dans la version de Jean-Claude, il utilise fond.bmp et le programme de Silverman utilise fond.jpg mais vous pouvez soit transformer le bmp en jpg soit reprendre le jpg depuis les images de la version utilisant les pictures.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 18:45

A priori Sprite et scene2d n'acceptent pas les des images autre que bmp.

Il faut que je vérifie.

Changer les variables: là, ça va être difficile car je ne suis pas parti sur les mêmes bases que Jicehel.

Je vais regarder ce que je peux faire.
Non je vais plutôt attendre que Sylverman ai fait ce qu'il a dit dans son dernier message.
Sylverman a écrit:
EDIT: je viens d'avoir une illumination drunken ,je vais integrer les tableaux dans les subs pour les rendre 100% portable! santa

A+


Dernière édition par Jean Claude le Dim 28 Fév 2016 - 18:53, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 464
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 18:52

Merci jicehel Very Happy . En effet, j'ai converti les '.jpg' en '.bmp' en interne pour ne pas à avoir à recharger le zip que tu as fourni; j'essaie de me rapprocher au plus près de la structure du code et des ressources.
voici les subs intégrées dans le code de jean-claude:
Code:

' Stratego_2D_v1_01.bas

' Problème à résoudre (BUG)
  ' 2) ' sprite_create_hide et sprite_show_all ne fonctionnent pas

' Travail à faire
  ' 1) message "Attention: vous risquez de vous mouiller les pieds..."
    ' je cherche des idées d'animation pour ce message....

' portabilité
Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord%

dim rep$,repimage$,tex$
dim n%,x%,y%







DIM compt%
DIM Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811
' * Déclaration des matrices de terrain
DIM Franchissable(9,9), Pieces(9,9)
DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l%
DIM Selection% : ' Si >=0 donne la case actuellement sélectionnée
' * 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%
DIM I_Fond%, I_E_affiche%,  I_E_preparation%, I_copy%









width 0,811+(bord%*2) : height 0,811+bandeau%+bord%+20 :top 0,(screen_Y - height(0))/2 : left 0,(screen_x - width(0))/2

' Menu (à développer par la suite)
label aide
main_menu 10
command_target_is 0
  sub_menu 11 : parent 11,10 : caption 11,"Jeu"
    sub_menu 12 : parent 12,11 : caption 12,"Nouvelle partie contre l'ordinateur "
    sub_menu 13 : parent 13,11 : caption 13,"Nouvelle partie à 2 joueurs "
    sub_menu 14 : parent 14,11 : caption 14,"Charger une partie "
    sub_menu 15 : parent 15,11 : caption 15,"Sauver la partie "
  sub_menu 20 : parent 20,10 : caption 20,"Aide"
    SUB_MENU 21 : PARENT 21,20 : CAPTION 21,"Stratégo" : ON_CLICK 21,Aide
    SUB_MENU 22 : PARENT 22,20 : CAPTION 22,"Dispositions des pièces" :  ON_CLICK 22,Aide
    SUB_MENU 23 : PARENT 23,20 : CAPTION 23,"Règles du jeu" :  ON_CLICK 23,Aide
    SUB_MENU 24 : PARENT 24,20 : CAPTION 24,"Tactique" :  ON_CLICK 24,Aide


' répertoire
' rep$=dir_current$+chr$(92) : repimage$=rep$+"img" : dir_change repimage$

' scene2D 100
dim TypSel% : TypSel%=0 :' pour déterminer si c'est un clic de sélection (0) ou de déplacement(1)
label click
' scene2d 100 : on_click 100,click : file_load 100,"Fond.bmp" :  width 100,811 : height 100,811

' les cases
dim Hcase%,Wcase%,CaseSel%:' Hcase%=Hauteur d'une case, Wcase%=largeur d'une case, CaseSel%= case sélectionnée
dim cases%(100) , Top_cases%(100) , Left_cases%(100) , ContenuCase%(100)
Hcase%=80 : Wcase%=80
init_case()

' création des sprites (à développer)








' * Définition des cases franchissables ou non
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) = -1 : Franchissable(4,3) = -1
Franchissable(4,6) = -1 : Franchissable(4,7) = -1
Franchissable(5,2) = -1 : Franchissable(5,3) = -1
Franchissable(5,6) = -1 : Franchissable(5,7) = -1

O_Drapeau% = 0
O_Espion% = 1
O_Eclaireur% =  2
O_Demineur% = 3
O_Sergent% = 4
O_Lieutenant% = 5
O_Capitaine% = 6
O_Major% = 7
O_Colonel% = 8
O_General% = 9
O_Marechal% = 10
O_Bombe% = 11

sprite_create_hide

' plateau
make_plateau(99)


' BLEU
' bombe1
file$="Bomb"
load_sprite(file$,O_Bombe%,"bleu")
POSITION_PIECE(1,0,2)


' drapeau
file$="Flag"
load_sprite(file$,O_Drapeau%,"bleu")
POSITION_PIECE(2,0,3)


' bombe2
file$="Captain"
load_sprite(file$,O_Capitaine%,"bleu")
POSITION_PIECE(3,0,4)


' ROUGE
' bombe1
file$="Bomb"
load_sprite(file$,O_Bombe%+40,"rouge")
POSITION_PIECE(1+40,9,2)


' drapeau
file$="Flag"
load_sprite(file$,O_Drapeau%+40,"rouge")
POSITION_PIECE(2+40,9,3)


' bombe2
file$="Captain"
load_sprite(file$,O_Capitaine%+40,"rouge")
POSITION_PIECE(3+40,9,4)


' cadres colorés autour des pièces (fabriqué en dernier pour recouvrir les autres sprites)
' rouge
make_encadre(255,0,0) :' numero de ce sprite = plateau%-1
rouge% = plateau%-1
' bleu
make_encadre(0,0,255) :' numero de ce sprite = plateau%-2
bleu% = plateau%-2


' montre les sprites
sprite_show plateau%
for tmp%=0 to max_sprite%
   if sprites(tmp%)>-1 then sprite_show tmp%
next tmp%










' liste des images et grade et nombre par joueur
  ' à noter: les bombes et le drapeau ne sont pas déplaçable
  ' les bombes => "Bomb.bmp"=11 6/Joueur          . le drapeau => "Flag.bmp"=0 1/Joueur
  ' l'espion => "Spy.bmp"=1 1/Joueur              . les Éclaireurs => "Scout.bmp"=2 8/Joueur
  ' les Démineurs => "Miner.bmp"=3 5/Joueur      . les Sergents => "Sergeant.bmp"=4 4/Joueur
  ' les Lieutenants => "Lieutenant.bmp"=5 4/Joueur. les Capitaines => "Captain.bmp"=6 4/Joueur
  ' les Commandants => "Major.bmp"=7 4/Joueur    . les Colonels => "Colonel.bmp"=8 3/Joueur
  ' le Général => "General.bmp"=9 1/Joueur        . le Maréchal => "Marshal.bmp"=10 1/Joueur

' sur proposition de Silverman les variables pour gérer les pions
dim positionX%,positionY%,grade%,etat%,visibilite%,pion%(80,5)
' exemple
 ' positionX%=1 : positionY%=2 : grade%=3 : etat%=4 : visibilite%=5
 ' lecture=pion%(p%,etat)


rem ======================================== Notes diverses (Partie à supprimer)
' affiche() : ' Sub de test à supprimer à la fin

rem ============================================================================
END
rem ============================================================================
' fabrique le plateau
sub make_plateau(num%)
 if variable("plateau%")=0
   ' * Déclaration des variables pour les sprites
   DIM file$,plateau%,max_sprite% : max_sprite%=80 : ' sprites
   DIM rouge%,bleu%,vert%,blanc%
   DIM sprites(max_sprite%)
   label click_plateau
   FOR compt%=0 to max_sprite% : sprites(compt%)= -1 : NEXT compt%
   plateau%=num%
 end_if
 '
 dim_local I_fond%,tmp_pic

   ' cherche une image libre
   I_fond%=0
   repeat
      I_fond%=I_fond%+1
   until object_exists(I_fond%)=0
   image I_fond%

   ' cherche un picture libre
   tmp_pic=0
   repeat
      tmp_pic=tmp_pic+1
   until object_exists(tmp_pic)=0
   ' NOTE: colorer un picture apès sa création évite le clignotement blanc très bref
   picture tmp_pic : color tmp_pic,236,233,216 : hide tmp_pic : 2d_target_is tmp_pic

   ' charge le fichier plateau
   file_load tmp_pic,"img/Fond.jpg": width tmp_pic,Largeur_fond% : height tmp_pic,Hauteur_Fond%
   2d_image_copy I_fond%,0,0,Largeur_fond%,Hauteur_Fond%

   ' fabrique le plateau
   scene2D plateau%
   color plateau%,236,233,216
   on_click plateau%,click_plateau

   ' taille et centrage du plateau
   width plateau%,Largeur_fond% : height plateau%,Hauteur_Fond%
   top plateau%,(height(0)-Hauteur_Fond%)/2 : left plateau%,(width(0)-Largeur_Fond%)/2

   ' attribue un numéro de sprite pour le plateau
   sprite plateau%
   sprite_image_load plateau%,I_fond%
   sprite_position plateau%,0,0

   ' libere les ressources inutiles
   2d_target_is 0
   delete tmp_pic
   delete I_fond%
end_sub


' fabrique un cadre coloré pour entourer le pion
sub make_encadre(r%,g%,b%)
dim_local tmp_pic,tmp_sprite
   ' cherche une image libre
   I_fond%=0
   repeat
      I_fond%=I_fond%+1
   until object_exists(I_fond%)=0
   image I_fond%

   ' cherche un picture libre
   tmp_pic=0
   repeat
      tmp_pic=tmp_pic+1
   until object_exists(tmp_pic)=0
   ' NOTE: colorer un picture apès sa création évite le clignotement blanc très bref
   picture tmp_pic : color tmp_pic,236,233,216 : hide tmp_pic : 2d_target_is tmp_pic

   ' cherche un sprite libre
   tmp_sprite=plateau%
   repeat
      tmp_sprite=tmp_sprite-1
   until sprite_exists(tmp_sprite)=0

   ' trace le cadre
   2d_fill_on
   2d_pen_color 0,0,0 : 2d_fill_color 0,0,0
   2d_rectangle 3,3,78,78
   2d_fill_off
   2d_pen_color r%,g%,b%
   2d_rectangle 0,0,81+0,81+0
   2d_rectangle 1,1,80+0,80+0
   2d_rectangle 2,2,79+0,79+0

   ' le capturer
   2d_image_copy I_fond%,0,0,81+0,81+0
   sprite tmp_sprite
   sprite_image_load tmp_sprite,I_fond%

   ' libere les ressources inutiles
   2d_target_is 0
   delete tmp_pic
   delete I_fond%
end_sub


' place le cadre coloré sur le plateau
sub encadre_on(coul,x,y)
   sprite_position coul,1+(y*81),1+(x*81)
   sprite_show coul
end_sub


' cache le cadre coloré
sub encadre_off(coul)
   sprite_hide coul
end_sub


' charge les pions
sub load_sprite(file$,N%,r$)
 dim_local tmp_pic,I_E_preparation%,I_E_affiche%,r%,g%,b%,compt%
   ' cherche un picture libre
   tmp_pic=0
   repeat
      tmp_pic=tmp_pic+1
   until object_exists(tmp_pic)=0
   ' NOTE: colorer un picture apès sa création évite le clignotement blanc très bref
   picture tmp_pic : color tmp_pic,236,233,216 : hide tmp_pic : 2d_target_is tmp_pic

   ' cherche une image libre
   I_E_preparation%=0
   repeat
      I_E_preparation%=I_E_preparation%+1
   until object_exists(I_E_preparation%)=0
   image I_E_preparation%

   ' cherche une image libre
   I_E_affiche%=0
   repeat
      I_E_affiche%=I_E_affiche%+1
   until object_exists(I_E_affiche%)=0
   image I_E_affiche%

   ' charge le fichier pions
   file_load tmp_pic,"img/"+file$+".jpg" : width tmp_pic,81 : height tmp_pic,81
   2d_image_copy I_E_preparation%,0,0,61,81 : 2d_clear : 2d_image_paste I_E_preparation%,11,0

   ' ajoute des bords colorés
   if r$="rouge"
      r%=200 : g%=0 : b%=0
      compt%=40 :' incrément de sprite pour la couleur rouge
   else
      r%=0 : g%=0 : b%=200
      compt%=0 :' incrément de sprite pour la couleur bleu
   end_if
   '
   2d_fill_off
   2d_pen_color r%,g%,b% : 2d_rectangle 10,1,71,80 : 2d_rectangle 10,1,71,79 :  2d_rectangle 10,1,71,78
   2d_pen_color 1,1,1 : 2d_rectangle 0,0,81,81 : 2d_flood 5,1,r%,g%,b% : 2d_flood 75,1,r%,g%,b%

   ' capture l'image finale
   2d_image_copy I_E_affiche%,0,0,81,81

   ' fabrique et attribue un numero à un sprite en fonction de sa couleur
   repeat
      compt%=compt%+1
   until sprites(compt%)=-1
   sprites(compt%)=N%
   sprite compt%
   sprite_image_load compt%,I_E_affiche%

   ' libere les ressources inutiles
   2d_target_is 0
   delete tmp_pic
   delete I_E_preparation%
   delete I_E_affiche%
end_sub


' positionne le pion sur le plateau
sub POSITION_PIECE(N%,x,y)
   Pieces(x,y)=N%
   ' Type_Pieces = sprites(N%)
   sprite_position N%,1+(y*81),1+(x*81)
end_sub






' SUB provisoire
SUB affiche()
    dim_local i%
  for i%=1 to 100
    caption 0,str$(cases%(i%))+" => "+str$(Top_cases%(cases%(i%)))+"/"+str$(Left_cases%(cases%(i%))) : stop
  next i%
END_SUB


rem ============================================================================
' test du plateau + deplacement(incomplet)
click_plateau:
   ' affiche les coordonnées de la case cliqué
   Ligne%=int(abs((mouse_y_position(plateau%)-1)/81)) : ' bord exclu
   Colonne%=int(abs((mouse_x_position(plateau%)-1)/81)) : ' bord exclu
'   caption 0,"Ligne="+str$(Ligne%)+"     Colonne="+str$(Colonne%)

   ' sélection/déselection
   if pieces(Ligne%,Colonne%)>-1
      if Selection%=0
         encadre_on(bleu%,Ligne%,Colonne%)
         '
         l%=ligne%
         c%=colonne%
         Selection%=1
      else
         encadre_off(bleu%)
         Selection%=0
      end_if
   end_if

   if pieces(Ligne%,Colonne%)=-1 and Selection%=Franchissable(Ligne%,Colonne%)
      POSITION_PIECE(pieces(l%,c%),Ligne%,Colonne%)
      encadre_off(bleu%)
      pieces(l%,c%)=-1
      Selection%=0
   end_if
return






click:
 off_click 100:' neutraliser pendant le traitement du click
  ' retrouver la case qui correspond au clic
 x%=mouse_x_position(100) : y%=mouse_y_position(100)
 for n%=1 to 100
  if y%>Top_cases%(cases%(n%)) and y%<Top_cases%(cases%(n%))+Hcase%
      if x%>Left_cases%(cases%(n%)) and x%<Left_cases%(cases%(n%))+Wcase%
        CaseSel%=cases%(n%)
        ' prévoir une animation de la case sélectionnée (Encadré, changement de couleur, etc.)
        caption 0,str$(CaseSel%)
      end_if
  end_if
 next n%
' gerer les cases des lacs
 if CaseSel%=43 or CaseSel%=44 or CaseSel%=47 or CaseSel%=48 or CaseSel%=53 or CaseSel%=54 or CaseSel%=57 or CaseSel%=58
    ' prévoir une animation
    message "Attention: vous risquez de vous mouiller les pieds..."
    ' on sort sans changer TypSel% et on réactive le clic
    on_click 100,click : RETURN
 end_if

' Sélection ou déplacement
 if TypSel%=0
    ' c'est une sélection
    ' regarde ce qu'il y a dans la case sélectionnée
    Contenu_de_la_Case(CaseSel%)
    ' agit en fonction du résultat du contenu
' STOP
    ' gestion du prochain clic
    TypSel%=1: ' pour que le prochain clic soit un déplacement

 end_if
 if TypSel%=1
    ' c'est un déplacement
    ' regarde ce qu'il y a dans la case visée
    Contenu_de_la_Case(CaseSel%)
    ' déplace le pion si c'est possible (pas chez un collègue)

    ' agit en fonction du résultat du contenu (gain ou défaite ou nul)
' STOP
    ' gestion du prochain clic
    TypSel%=0: ' pour que le prochain clic soit une sélection
 end_if
 on_click 100,click
RETURN
rem ============================================================================
SUB Contenu_de_la_Case(NumCase%)
    if ContenuCase%(NumCase%)=0
        message " la case n°"+str$(NumCase%)+" est vide (à développer)" :' stop
    else
        message " retourne le contenu de la case n°"+str$(NumCase%)+" (à développer)" :' stop
    end_if
END_SUB
rem ============================================================================
SUB init_case()
  dim_local tt%,ll%,i%, j%, k%
  for j%=0 to 9
    for k% = 1 to 10
      i% = j%*10 + k%
      cases%(i%)=i% : ContenuCase%(cases%(i%))=0 : Top_cases%(cases%(i%))=tt% : Left_cases%(cases%(i%))=ll%
      ll%=ll%+Wcase%
    next k%
    ll%=0 : tt%=tt%+Hcase%
  next j%
END_SUB

rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ====================== Aide de Papydall Début ==============================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Aide:
  select number_click
      case 21
              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 22
              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 23
              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 ce 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 24
              tex$ = "TACTIQUE" + chr$(13)  + chr$(13)
              tex$ = tex$ + "D’après les règles du jeu ci-dessus indiquées, il" + chr$(13)
              tex$ = tex$ + "ressort que la mise en place des pièces au début" + chr$(13)
              tex$ = tex$ + "du jeu peut être déterminante pour l’issue de la" + chr$(13)
              tex$ = tex$ + "partie. Il sera donc raisonnable d’entourer le drapeau" + chr$(13)
              tex$ = tex$ + "de quelques bombes, afin de bien pourvoir le" + chr$(13)
              tex$ = tex$ + "défendre. Pour tromper l’adversaire, on fera bien," + chr$(13)
              tex$ = tex$ + "toutefois, de disposer aussi deux ou trois bombes à " + chr$(13)
              tex$ = tex$ + "une certaine distance de ce drapeau. Quelques " + chr$(13)
              tex$ = tex$ + "pièces d’un grade supérieur en première ligne peuvent " + chr$(13)
              tex$ = tex$ + "être d’une bonne valeur stratégique, mais un" + chr$(13)
              tex$ = tex$ + "joueur qui perd rapidement ses officiers supérieurs" + chr$(13)
              tex$ = tex$ + "se trouve dans une position défavorable. Les éclaireurs " + chr$(13)
              tex$ = tex$ + "ont leur raison d’être en première ligne, car ils" + chr$(13)
              tex$ = tex$ + "permettent de sonder la puissance de l’adversaire" + chr$(13)
              tex$ = tex$ + "mais si l’on vient à les perdre, on doit jouer ensuite comme un aveugle." + chr$(13)
    end_select

  message tex$
RETURN
rem ======================== Papydall (Fin) ====================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ======================== ===================================================
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
      message "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
      terminate
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 then DIM bandeau%
    IF VARIABLE("bord%")=0 then DIM bord%
    ' Calcul de bandeau% et bord%
    dim_local w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    picture 1 : full_space 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    delete 1
END_SUB
Par contre, il va falloir faire un peu de ménage dans le source What a Face
Pour les variables, c'est bon, je me suis arrangé.
La main passe Very Happy Very Happy Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 19:05

Cette fois, je suis largué.

Sylverman, je te propose de reprendre le flambeau car vous allez trop vite pour moi.
Je veux dire que je reste à disposition, mais je préfère que tu reprennes le code, car tu sais où tu vas. Moi je suis parti à l'aventure sans vision à long terme.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   Dim 28 Fév 2016 - 19:47

OK, Silverman, peux tu nettoyer le code des variables qui ne sont plus utiles ?
Je pense que puisque l'on part sur une organisation commune, on peut développer les 2 versions en parallèle
Le plus dur sera de faire la partie intelligence de l'ordinateur en mode humain / ordi. Moi c'est un truc que je n'arrive pas à bien penser mais certains y arrive assez facilement (les chanceux).
Comme les programmes sont homogéniser, que ce soit fait dans une des versions ou dans l'autre, on pourra la reprendre.
Moi, j'attend un peu Klaus pour voir s'il arrive à adapter son système d'écriture de règles et aussi pour pouvoir juger réellement si cela facilite l'écriture des règles.
Je n'arrive pas encore à en juger mais ça permettrait sans doute de faire des espèce de moteur de jeux standard où l'on pourrait associer une image à un "acteur" ou à un objet définir quelques paramètres et écrire les règles pour avoir un jeu, ce qui me parait intéressant. C'est un vrai concept en soit, alors j'attends de voir et connaissant Klaus, ça ne m'étonnerait vraiment pas qu'il y arrive (il est bien parti pour ça d'ailleurs).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Stratégo Colaboratif (version sur un scene2d)   

Revenir en haut Aller en bas
 
Stratégo Colaboratif (version sur un scene2d)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 4Aller à la page : 1, 2, 3, 4  Suivant
 Sujets similaires
-
» Stratégo Colaboratif (version sur un scene2d)
» Offre promotionnelle : SnagIT 7.25 en version gratuite !
» Comment envoyer une détection chez avira avec Antivir 9 français - Version Classic
» Offre exceptionnelle : True Image 10 en version gratuite et complète
» [Résolu] Pb pour la désinstallation d'Antivir version Anglaise

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: