Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Stratego collaboratif | |
|
+5Yannick JL35 silverman Jean Claude Jicehel 9 participants | |
Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Stratego collaboratif Jeu 25 Fév 2016 - 0:14 | |
| Voilà, je jette ici l'embryon d'un Stratego. Le début du source avec le plateau et les pions. Le programme est embryonnaire et il est tard, je vais aller me coucher bien que j'ai une erreur dans la copie du fond quand je déplace une pièce mais je suis trop fatigué pour bien réfléchir alors je poste dans l'état. Le but serait que chacun donne ses idées pour améliorer bien sûr mais surtout que chacun développe une fonction. Par exemple: dise qu'il gère le placement des pions sur le plateau pour remplir le tableau des pièces, un autre dise qu'il gère les déplacements, un autre qu'il résolve les 'combats', etc ... http://www.fichier-zip.com/2016/02/25/stratego/ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 8:42 | |
| J'ai téléchargé, et testé.
Pour moi, ça ne va pas être simple, le code est déjà complexe. C'est le problème quand on ne l'a pas écrit soi-même.
Effectivement, l'image de fond est modifiée l'ors du déplacement d'une pièce. En remettant en service la ligne 245, on voit dans le bandeau que les numéros des cases cliquées ne correspondent pas à la réalité, c'est sans doute là le problème....
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 11:27 | |
| Tu es sur ? En bas tu a la ligne 0, en haut la ligne 9 A gauche la colonne 0 et à droite la colonne 9
Je n'ai pas eu le temps de trop commenté le source hier mais j'ai essayé de le rendre le plus clair possible sauf à la fin comme je voulais finir un début de moteur qui tourne.
Je peux prendre en charge la routine de déplacement et j'essayerais de faire une passe de commentaires sur le code ce soir.
Si tu te poses des questions, tu ne sera pas le seul, alors n'hésites pas à les poster ici après avoir regardé le code source, j'essayerais d'y répondre ou de corriger si c'est suite à une erreur de ma part. Après dans quelques temps, ce ne sera plus mon code mais le notre et ça devra donc être plus clair sinon c'est qu'il faudra travailler pour l'éclaircir. N'hésites pas à le triturer pour le rendre plus facilement compréhensible. Moi, comme j'ai l'esprit tordu, j'ai du mal à rendre les choses simples... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 12:03 | |
| Oui OK, Le problème est que d'une part on a des numéros de cases, de l'autre des positions de la pièce.
Ce soir, quand tu changeras le zip, mets les éléments dans un dossier car je dézippe sur le bureau et je voudrais le tout dans un seul dossier.
Si j'ai un peu de temps cet après-midi, je vais essayer de comprendre le code.
A+
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 14:28 | |
| OK et si tu veux, rajoute les commentaires avec ce que tu as compris comme ça si tu le poste ce soir, je n'aurais pas à le faire d'une part et en plus je pourrais vérifier que l'on s'est bien compris Sinon, pour le zip, normalement, on n'en a plus besoin pour le moment puisque l'on a les graphiques. Tous les graphiques sont dans un répertoire img. Seul le code source est à la racine. Je l'ai mis dedans puisque je me suis dit que pour la version de base, ce serait plus pratique à récupérer avec le zip (ça évite un copier / coller avec risque de transformation ou de suppression de caractères), mais normalement maintenant, on peut échanger directement les évolutions sur le forum (sans avoir à retélécharger le zip) sauf si à la fin on rajoute des musiques ou des bruitage. (Qui sait, si le jeu est sympa, bignono nous fera peut être un (ou plusieurs) thème original. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 18:18 | |
| Pourquoi ne pas utiliser des sprites? l'image de fond, les pièces,... tout est rectangulaire, ça ne serait pas adapté? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 19:01 | |
| Je me suis posé la même question Silverman...
Bon je n'ai pas eu le temps de regarder le code en détail, et ce ne sera pas pour ce soir.
Pour le zip, c'est OK tant qu'on ajoute pas des images.
Une Question Importante: Pangine2D ne conviendrait-il pas mieux pour ce jeu.
A+
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Jeu 25 Fév 2016 - 21:20 | |
| Les sprites sont très mal adaptés je pense (pas de gestion des clics etc ...) il me semble. En fait je trouve qu'ils n'apporteraient pas grand chose pour ce type de jeux, mais je peux me tromper et vous pouvez proposer d'autres approches. J'ai juste proposer une ossature avec quelques graphiques et le but et surtout d'essayer de construire un programme de façon collaborative donc avant d'aller plus loin, on peut essayer différentes approches.
Tout est possible à ce stade et rien n'est validé ou écrit dans le marbre.
Au contraire ce sera intéressant , je pense de voir pourquoi on choisit telle solution ou telle solution.
N'héistez pas à proposer, corriger, modifier, critiquer, etc ... On est là pour se faire un mécano avec les atouts et idées de chacun et si on arrive à prendre un peu du meilleur de chacun, le résultat sera sans doute intéressant.
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 10:12 | |
| Bon, j'aurais essayé. Je ne parviens pas à comprendre le code. Il y a des objets Panoramic (comme IMAGE_...) que je n'ai jamais utilisé. Je vais, pour le moment, rester spectateur et je ferais mes commentaires si besoin. En attendant j'ai pioché ça dans Wikipédia - règles du stratégo:
Règles du jeu de Stratego[modifier | modifier le code] Le Stratego se joue à 2 joueurs (un joueur avec les pièces rouges, l'autre avec les pièces bleues) sur un plateau carré de 92 cases (10 cases de côté moins 2 lacs carrés de 4 cases chacun). Chaque joueur possède 40 pièces. Les pièces représentent des unités militaires et ont deux faces. Une face ne peut être vue que par un seul joueur à la fois, l'autre ne voyant que la couleur de la pièce. Les pièces sont placées de telle façon que le joueur ne voit que le rang de ses propres pièces. Au début de la partie chaque joueur dispose ses pièces comme il l'entend sur ses quatre premières rangées. Cette pré-phase du jeu est stratégique et déterminante pour la suite de la partie. Chaque joueur déplace une pièce d'une case par tour : à gauche, à droite, en avant ou en arrière (pas en diagonale). Une attaque se produit quand le joueur déplace sa pièce sur une case déjà occupée par l'adversaire. Chaque joueur montre alors sa pièce à l'adversaire. La pièce la plus forte reste en jeu, l'autre est éliminée ; en cas d'égalité, les deux sont éliminées. Stratego L'édition de 2006 par Jumbo Voici les pièces classées de la plus forte à la plus faible (la force entre parenthèses) : le Maréchal (10), 1 par joueur le Général (9), 1 par joueur les Colonels ( , 2 par joueur les Commandants (7), 3 par joueur les Capitaines (6), 4 par joueur les Lieutenants (5), 4 par joueur les Sergents (4), 4 par joueur les Démineurs (3), 5 par joueur les Éclaireurs (2), 8 par joueur l'Espion (1), 1 par joueur le Drapeau (0), 1 par joueur À ces pièces s'ajoutent les Bombes (6 par joueur). Ni les Bombes ni le Drapeau ne se déplacent. Le but du jeu est de capturer le Drapeau de l'adversaire ou d'éliminer assez de pièces adverses afin que l'adversaire ne puisse plus faire de déplacements. Certaines pièces obéissent à des règles spéciales : Si l'Espion, grade le plus faible, attaque le Maréchal, grade le plus élevé, l'Espion gagne (si le Maréchal attaque en premier, le Maréchal gagne); Toute pièce attaquant une Bombe est éliminée, sauf le Démineur qui prend alors la place de la Bombe (si une pièce autre qu'un Démineur attaque une Bombe, cette pièce est éliminée, et la Bombe reste en place jusqu'à l'éventuelle attaque d'un Démineur); L'Éclaireur peut se déplacer d'autant de cases libres qu'il le souhaite, en ligne droite. Il existe une variante du Stratego, conseillée pour les débutants : Dans cette variante appelée Stratego Duel, les deux joueurs disposent chacun de : 1 Maréchal 1 Général 1 Espion 2 Démineurs 2 Éclaireurs 2 Bombes 1 Drapeau. La règle de déroulement de jeu est la même. La durée du jeu est plus courte.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 14:11 | |
| OK, alors, je retournerais sur le code ce soir pour essayer de le rendre plus clair et pour avancer sur la procédure de déplacement d'une pièce vers une case vide.
Je rajouterais du commentaire. Après sinon l'idée c'est de charger les objets graphiques fond, pièces etc ... De travailler sur une image et de recopier cette image de travail quand elle est prête vers l'écran affiché.
Je contrôlerais ce soir que c'est bien ce que j'ai codé et je rajouterais du commentaire avant de le publier sur le forum pour que tu puisse MAJ.
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 14:41 | |
| Eh, les mecs, quand vous aurez fini de confondre le futur et le conditionnel ! 'j'aurai s essayé', 'je ferai s mes commentaires', 'je retournerai s', je rajouterai s', je contrôlerai s', 'je rajouterai s' | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 26 Fév 2016 - 14:45 | |
| Je viens de lire les règles du jeu. Le code, je suis un peu comme Jean Claude . On peut utiliser les sprites car les déplacements sont simples (avant,arrière,droite,gauche) le click à déjà été détourné sur d' autres jeux comme le taquin. On doit en avoir une trace quelque part. Le plus compliqué est le placement des pièces au départ qui est à la volonté des joueurs. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 15:16 | |
| oui, mais pour ce genre de jeu honnêtement, je ne sais pas ce qu'apporte les sprites. Je trouve les sprites limitatifs pour ce genre d'usage et je trouve qu'ils n'apporte rien d'intéressant (Toujours dans ce cadre). Si quelqu'un veut faire une maquette fonctionnelle basé sur les sprites pour me montrer que j'ai tord par contre, je ne demande pas mieux. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 15:55 | |
| Une petite remarque technique, concernant les spites, Jicehel.
Le grand avantage des sprites est leur couleur de transparence, ce qui permet de donner n'importe quelle forme à un objet ou personnage, sans avoir des modifications complexes du dessin à faire.
Certes, il y a le problème du clic. Mais je pense que de toutes façons, un tel jeu doit garder, dans des tables, tous les caractéristiques de chaque objet, et donc les coordonnées et dimensions. Ce qui permet de déduire le sprite ciblé à l'endroit du clic, ou au contraire déterminer l'endroit du terrain de jeu clique.
Je suis peut-être tout à fait en-dehors du sujet, auquel cas je te demande de ne tenir aucun cas de mon commentaire, puisque je n'interviens pas sur le fond du sujet que tu proposes. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 17:20 | |
| C'est vrai que les sprites offrent cet avantage de la transparence.
Voila comment je vois les choses: Pour les déplacement des sprites le clic dans le scene2d peut nous servir à repérer la case qui est cliqué. les cases seraient numérotées de 1 à 100 [cases%(n%)], et pour chacune on définie dès le début la position du coin supérieur-gauche par Top_cases%(cases%(n%)) et Left_cases%(cases%(n%)) Ces 2 variables nous servent d'une part à définir quelle case est cliquée en fonction de la position de la souris et ensuite à positionner le Sprite dans la case (si c'est le moment du déplacement.
Il y a une chose à ne pas oublier c'est que chaque pion a 2 états. Un état visible, et un état invisible, du moins pour les pions joués par l'ordinateur, (je suppose que que l'on joues contre l'ordinateur).
Je vais tenter de mettre ça en pratique, si j'ai un minimum de temps.
De ton coté Jicehel, fais ce que tu as dit plus bas, puis nous ferons le point.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Ven 26 Fév 2016 - 17:26 | |
| oui je suis d'accord Klaus, la transparence est sympas pour les sprites quand on en a besoin mais pour des pions pleins rectangulaires, la transparence n'est pas utile. C'est bien pour cela que je dis que je ne pense pas que les sprites apportent grand chose dans ce contexte. Pour simplifier la gestion, j'avais pensé aussi à créer un picture par case sur un fond noir pour simplifier la gestion des clics, mais un clic sur un picture divisé de façon matricielle est déjà tellement simple que je ne suis pas sûr que ce soit nécessaire.
Il faut juste que je prenne quelques minutes ce soir pour corriger le problème de copie de colonne ou de ligne que j'ai fais un peu trop vite avant hier soir et pour lequel j'ai dû faire une erreur de logique.
J'aurais dû numéroter les lignes et les colonnes dans le même sens que les axes de l'écran pour simplifier d'avantage.
Je vais peut être quand même faire le test d'une version avec les pictures pour voir ce que ça donne, mais n'hésitez pas à jouer avec le code pour faire les essais que vous voulez pour trouver la solution la plus simple et la plus jolie.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 0:25 | |
| Voilà, j'ai inversé le sens de numérotation des lignes pour que les formules soient plus simples et j'ai corrigé le petit problème de logique dans la copie de l'image de fond (lié au fait qu'il fallait réfléchir les bords "à l'envers" par rapport à la numérotation des lignes) J'ai rajouté la gestion des cases infranchissables et mis le principe des tours avec une petite lumière temporaire (en attendant un affichage plus joli) qui indique les tours. Je me suis arrêté là, comme ça on peut faire le point déjà sur cette partie Jean-Claude. Tu pourras me dire si c'est plus clair et on pourra voir si ta méthode est meilleure. Edit: Vous trouverez les images dans le zip du premier message - Code:
-
' ------------------------- ' * Structure du Stratego * ' -------------------------
LABEL click_plateau
' * Déclaration des variables DIM compt%
' * Déclaration des variables pour les images DIM I_Fond% : ' Numéro du picture où l'on charge l'image de fond (on n'y touche pas) DIM I_E_affiche% : ' Numéro du picture qui sera affiché DIM I_E_preparation% : ' Numéro du picture de travail (masqué) DIM I_copy% : ' Numéro de l'image servant pour les copies DIM P_Tour% : ' Un petit picture pour mettre l'indicateur de tour
' * Déclaration des numéros des picture où l'on va stocker l'image des pions DIM I_Bombe%, I_Capitaine%, I_Colonel%, I_Drapeau%, I_General%, I_Lieutenant% DIM I_Major%, I_Marechal%, I_Demineur%, I_Eclaireur%, I_Sergent%, I_Espion%
' * Déclaration des constantes contenant les dimensions de l'image de fond DIM Largeur_Fond%,Hauteur_Fond% : Largeur_Fond% = 811 : Hauteur_Fond% = 811
' * Déclaration du nombre de pièces du joueur 1, du joueur 2 et de chacun des types de pièces DIM Nb_piecesJ1%, Nb_piecesJ2% DIM Nb_Bombe%, Nb_Capitaine%, Nb_Colonel%, Nb_Drapeau%, Nb_General%, Nb_Lieutenant% DIM Nb_Major%, Nb_Marechal%, Nb_Demineur%, Nb_Eclaireur%, Nb_Sergent%, Nb_Espion%
' * Déclaration de l'ordre des pièces (hors règles spéciale) DIM O_Bombe%, O_Capitaine%, O_Colonel%, O_Drapeau%, O_General%, O_Lieutenant% DIM O_Major%, O_Marechal%, O_Demineur%, O_Eclaireur%, O_Sergent%, O_Espion%
' * Déclaration des matrices de terrain DIM Franchissable(9,9), Pieces(9,9) ' * Les pions du joueur 1 ont des valeurs de 0 à 11. Ceux du joueur 2 de 20 à 31
' * Déclaration des compteurs et autres variables du jeu DIM Ligne%, Colonne%, tmp%,tmp2%, c%, l% DIM Tour% : ' Indique si c'est au joueur 1 ou au joueur 2 de jouer DIM Sel_X%, Sel_Y% : ' Coordonnées de la case sélectionnée (négative si pas de case sélectionnée)
' * Règles des pièces ' La bombe ne peut pas se déplacer mais détruit toutes les pièces sauf le démineur ' Le Maréchal peut être capturé (détruit) par l'espion et explose sur les mines ' ' L'ordre de pièce est Bomb, Marechal, General, Colonnel, Major, Capitaine, Lieutenant ' Sergent, Démineur, Espion et Drapeau ' ' Nb pièces: Bombes: 6, Maréchal: 1, Général: 1, Colonel: 2, Major: 3, Capitaine: 4, ' Lieutenant: 4, Sergent: 4, Démineur: 5, Eclaireur: 8, Espion: 1, Drapeau: 1
' Les démineur peuvent déminer (détruire les bombes) ' Les éclaireurs peuvent avancer en ligne droite dégagée (ils ne peuvent pas passer par dessus un pièce) ' L'espion peut détruire le Maréchal uniquement quand c'est l'espion qui attaque le Maréchal ' Le drapeau ne peu pas être déplacé, sa capture met fin à la partie
' * Définition des cases franchissables ou non (On met toutes les cases à 1 et on met après les cases infranchissables à 0) FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 Franchissable(Ligne%,Colonne%) = 1 Pieces(Ligne%,Colonne%) = -1 NEXT Colonne% NEXT Ligne% Franchissable(4,2) = 0 : Franchissable(4,3) = 0 Franchissable(4,6) = 0 : Franchissable(4,7) = 0 Franchissable(5,2) = 0 : Franchissable(5,3) = 0 Franchissable(5,6) = 0 : Franchissable(5,7) = 0
' * Création et chargement des images
FULL_SPACE 0
compt% = 100 : ' Compteur pour commencer à numéroter les nouveau objets à partir de 100
' * Chargement du fond dans le picture pour le garder en réserve PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_Fond% = compt% : TOP compt%, -2000 FILE_LOAD compt%,"img/Fond.jpg" : compt% = compt% + 1
' * Créations des autres pictures pour l'écran affiché et l'écran de travail PICTURE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_affiche% = compt% : TOP compt%, (HEIGHT(0)-Hauteur_Fond%)/2 LEFT compt%,(WIDTH(0)-Largeur_Fond%)/2 : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,Hauteur_Fond% : WIDTH compt%,Largeur_Fond% TOP compt%, 5000 : I_E_preparation% = compt% : compt% = compt% + 1
PICTURE compt% : HEIGHT compt%,30 : WIDTH compt%,30 : TOP compt%,15 : LEFT compt%,15 P_Tour% = compt% : compt% = compt% + 1
' * Création de l'image de travail pour effectuer les copies IMAGE compt% : I_copy% = compt% : compt% = compt% + 1
' * Chargement de toutes les images correspondant aux différents pions PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Bombe% = compt% : O_Bombe% = 11 FILE_LOAD compt%,"img/Bomb.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Capitaine% = compt% : O_Capitaine% = 6 FILE_LOAD compt%,"img/Captain.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Colonel% = compt% :O_Colonel% = 8 FILE_LOAD compt%,"img/Colonel.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Drapeau% = compt% : O_Drapeau% = 0 FILE_LOAD compt%,"img/Flag.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_General% = compt% : O_General% = 9 FILE_LOAD compt%,"img/General.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Lieutenant% = compt% : O_Lieutenant% = 5 FILE_LOAD compt%,"img/Lieutenant.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Major% = compt% : O_Major% = 7 FILE_LOAD compt%,"img/Major.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Marechal% = compt% : O_Marechal% = 10 FILE_LOAD compt%,"img/Marshal.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Demineur% = compt% : O_Demineur% = 3 FILE_LOAD compt%,"img/Miner.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Eclaireur% = compt% : O_Eclaireur% = 2 FILE_LOAD compt%,"img/Scout.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Sergent% = compt% :O_Sergent% = 4 FILE_LOAD compt%,"img/Sergeant.jpg" : compt% = compt% + 1
PICTURE compt% : HIDE compt% : HEIGHT compt%,80 : WIDTH compt%,60 TOP compt%, 5000 : I_Espion% = compt% : O_Espion% = 1 FILE_LOAD compt%,"img/Spy.jpg" : compt% = compt% + 1
Init() Preparation() Image_Recopy()
ON_CLICK I_E_affiche%,click_plateau
END
SUB Init() Nb_drapeau% = 1 : Nb_Espion% = 1 : Nb_Eclaireur% = 8 : Nb_Demineur% = 5 Nb_Sergent% = 4 : Nb_Lieutenant% = 4: Nb_Capitaine% = 4 : Nb_Major% = 3 Nb_Colonel% = 2 : Nb_General% = 1 : Nb_Marechal% = 1 : Nb_Bombe% = 6 Nb_piecesJ1% = Nb_drapeau% + Nb_Espion% + Nb_Eclaireur% + Nb_Demineur% + Nb_Sergent% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Lieutenant% + Nb_Capitaine% + Nb_Major% Nb_piecesJ1% = Nb_piecesJ1% + Nb_Colonel% + Nb_General% + Nb_Marechal% + Nb_Bombe% Nb_piecesJ2% = Nb_piecesJ1% Tour1()
' * Section à remplacer quand le placement des pièces sera programmé juste pour afficher quelques pions le temps ' * de faire les test ' * 4 pions bleus Pieces(0,3) = O_Drapeau% : Pieces(0,2) = O_Capitaine% Pieces(0,4) = O_Bombe% : Pieces(3,5) = O_Eclaireur% ' * 4 pions rouges Pieces(9,3) = O_Drapeau% + 20 : Pieces(9,2) = O_Eclaireur% + 20 Pieces(9,4) = O_Bombe% + 20 : Pieces(8,4) = O_Lieutenant% + 20
Sel_X% = -1 END_SUB
SUB Trace_piece(p%,c%,l%) DIM_LOCAL image% image% = -1 IF p% > 19 THEN p% = p% - 20 SELECT p% CASE 11 : image% = I_Bombe% CASE 10 : image% = I_Marechal% CASE 9 : image% = I_General% CASE 8 : image% = I_Colonel% CASE 7 : image% = I_Major% CASE 6 : image% = I_Capitaine% CASE 5 : image% = I_Lieutenant% CASE 4 : image% = I_Sergent% CASE 3 : image% = I_Demineur% CASE 2 : image% = I_Eclaireur% CASE 1 : image% = I_Espion% CASE 0 : image% = I_Drapeau% END_SELECT IF image% > 0 2D_TARGET_IS image% : 2D_IMAGE_COPY I_copy%,0,2,60,79 2D_TARGET_IS I_E_preparation% IF Pieces(l%,c%) < 20 2D_FILL_COLOR 0,0,200 ELSE 2D_FILL_COLOR 200,0,0 END_IF 2D_RECTANGLE (c%)*81 + 2,(l%)*81 + 2, (c%+1)*81+1,(l%+1)*81 2D_IMAGE_PASTE I_copy%,(c%)*81 + 12,(l%)*81 + 2 END_IF END_SUB
SUB Preparation() DIM_LOCAL piece% 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,0,0 FOR Ligne% = 0 TO 9 FOR Colonne% = 0 TO 9 piece% = Pieces(Ligne%,Colonne%) Trace_piece(piece%,Colonne%,Ligne%) NEXT Colonne% NEXT Ligne% END_SUB
SUB Image_Recopy() 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_COPY I_copy%,0,0,Largeur_Fond%,Hauteur_Fond% 2D_TARGET_IS I_E_affiche% : 2D_IMAGE_PASTE I_copy%,0,0 END_SUB
SUB encadre(cc%,lc%) 2D_LINE (c% )*81+2,(l% )*81 + 2,(c%+1)*81+1,(l% )*81 + 2 2D_LINE (c%+1)*81+1,(l% )*81 + 2,(c%+1)*81+1,(l%+1)*81 + 2 2D_LINE (c%+1)*81+1,(l%+1)*81 + 2,(c% )*81+2,(l%+1)*81 + 2 2D_LINE (c% )*81+2,(l%+1)*81 + 2,(c% )*81+2,(l% )*81 + 2 END_SUB
SUB Test_deplacement(Type_P%,C_d%,L_d%,C_a%,L_a%) DIM_LOCAL Boucle%,x_sup%,y_sup%,x_inf%,y_inf% ' CAPTION 0,"Pièce : "+STR$(Type_P%)+" veut se déplacer de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) IF L_d%<>L_a% AND C_d%<>C_a% THEN EXIT_SUB IF Type_P% <> 2 IF ABS(L_d% - L_a%) > 1 OR ABS(C_d% - C_a%) > 1 EXIT_SUB ELSE ' CAPTION 0,"Deplace la piece de : "+STR$(L_d%)+","+STR$(C_d%)+" en :"+STR$(L_a%)+","+STR$(C_a%) IF L_d% > L_a% y_inf% = (L_d%+1)*81 + 2 y_sup% = (L_a%)*81 ELSE y_inf% = (L_a%+1)*81 + 2 y_sup% = (L_d%)*81 END_IF IF C_d% > C_a% x_inf% = (C_a%)*81 x_sup% = (C_d%+1)*81+1 ELSE x_inf% = (C_d%)*81 x_sup% = (C_a%+1)*81+1 END_IF 2D_TARGET_IS I_Fond% : 2D_IMAGE_COPY I_copy%,x_inf%,y_sup%, x_sup%, y_inf% 2D_TARGET_IS I_E_preparation% : 2D_IMAGE_PASTE I_copy%,x_inf%,y_sup% Pieces(L_a%,C_a%) = Pieces(L_d%,C_d%) : Pieces(L_d%,C_d%) = -1 : Sel_X% = -1 Trace_Piece(Pieces(L_a%,C_a%),C_a%,L_a%) Image_Recopy() IF Tour% = 1 THEN Tour2() : ELSE : Tour1() END_IF ELSE END_IF END_SUB
SUB Tour1() Tour% = 1 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 0,0,200 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB
SUB Tour2() Tour% = 2 2D_TARGET_IS P_Tour% : 2D_FILL_COLOR 200,0,0 : 2D_CIRCLE 15,15,12 2D_TARGET_IS I_E_affiche% END_SUB
click_plateau: OFF_CLICK I_E_affiche% ' CAPTION 0,"CASE : " + STR$(INT(MOUSE_X_POSITION(I_E_affiche%)/81) + 1)+ " : " + STR$(10 - INT(MOUSE_Y_POSITION(I_E_affiche%)/81)) c% = INT(MOUSE_X_POSITION(I_E_affiche%)/81) : l% = INT(MOUSE_Y_POSITION(I_E_affiche%)/81) tmp% = Pieces(l%,c%) IF tmp% >= 0 IF Tour% = 1 AND tmp% < 11 AND tmp% > 0 IF Sel_X% >= 0 THEN Image_Recopy() Sel_X% = c% : Sel_Y% = l% 2D_PEN_COLOR 200,0,0 : encadre(c%,l%) ELSE IF Tour% = 2 AND tmp% > 20 AND tmp% < 31 IF Sel_X% >= 0 THEN Image_Recopy() Sel_X% = c% : Sel_Y% = l% 2D_PEN_COLOR 0,0,200 : encadre(c%,l%) END_IF END_IF ELSE IF Sel_X% > 0 AND Franchissable(l%,c%) > 0 Test_deplacement(Pieces(Sel_X% , Sel_Y%),Sel_X% , Sel_Y%,c%,l%) END_IF END_IF ON_CLICK I_E_affiche%,click_plateau RETURN | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 2:41 | |
| Je me permets d'apporter une petite contribution: un générateur de fichier de règles. C'est une maquette, fonctionnelle pour l'essentiel. Il manque encore des fonctions pour changer l'ordre des règles. Mais on peut créer des objets avec certains attributs, et les utiliser dans des règles qu'un peut créer. Un clic sur une règle existante affiche son détail dans les champs sur la droite. On peut aussi modifier ou supprimer une règle. On peut bien sûr créer, modifier ou supprimer un objet. Mais attention: dans cette version, il n'y a pas encore de contrôle, en cas de suppression d'un objet, si cet objet est encore utilisé dans une règle, et il n'y a pas non plus l'ajustement des références aux objets, dans les règles, suite à la suppression d'un objet au milieu de la liste. Ca viendra. C'est encore très simple, et on peut ajouter plein de choses dans ce schéma. Si cela peut présenter un intérêt, je peux faire une SUB d'application des règles, par rapport à une situation donnée... Ca peut être un noyau de moteur de jeu, géré par des règles paramétrables par un tel fichier. Voici le programme: - Code:
-
' moteur_de_jeu_definir_regles.bas
label nouveau, ouvrir, fermer, save, saveas, sortir label creer_objet, clic_type_objet, select_objet, modifier_objet, supprimer_objet label clic_sujet_regle, clic_cible_regle, clic_relation_regle, clic_action_regle label creer_regle, modifier_regle, supprimer_regle, clic_finir_regle, select_regles
dim n_objets% dim n_regles%
dim regles$, no%, no1%, no2% dim no_list_objets%, no_nom_objet%, no_nature_objet%, no_vie_objet% dim no_list_regles%, no_sujet_regle%, no_relation_regle%, no_cible_regle% dim no_action_regle%, no_N_regle%, no_finir_regle%, no_open_dialog%, no_save_dialog% dim index_nature_objet%, index_list_objets%, index_list_regles%, index_relation_regle% dim index_action_regle%, index_finir_regle%, index_regle% dim regle_sujet%, regle_cible%
full_space 0
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, nouveau no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." on_click no%,ouvrir no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" on_click no%,fermer no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" on_click no%,sortir no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Objets" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, creer_objet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modifier_objet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer" on_click no%,supprimer_objet no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Règles" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" on_click no%, creer_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modifier_regle no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer" on_click no%,supprimer_regle
no% = no% + 1 : alpha no% : top no%,10 : left no%,10 : caption no%,"Objets:" no% = no% + 1 : list no% : no_list_objets% = no% : top no%,30 : left no%,10 : width no%,150 : height no%,400 on_click no%,select_objet no% = no% + 1 : dlist no%
no% = no% + 1 : alpha no% : top no%,30 : left no%,180 : caption no%,"Nom:" no% = no% + 1 : edit no% : no_nom_objet% = no% : top no%,30 :left no%,220 : width no%,100 no% = no% + 1 : alpha no% : top no%,60 : left no%,180 : caption no%,"Nature:" no% = no% + 1 : combo no% : no_nature_objet% = no% : top no%,60 :left no%,220 : width no%,100 item_add no%,"Décor" item_add no%,"Personnage" item_add no%,"Objet" on_click no%,clic_type_objet no% = no% + 1 : alpha no% : top no%,90 : left no%,180 : caption no%,"Points de vie:" no% = no% + 1 : spin no% : no_vie_objet% = no% : top no%,90 :left no%,260 : width no%,60
no% = no% + 1 : alpha no% : top no%,10 : left no%,360 : caption no%,"Règles:" no% = no% + 1 : list no% : no_list_regles% = no% : top no%,30 : left no%,360 : width no%,500 : height no%,400 on_click no%,select_regles no% = no% + 1 : dlist no% no% = no% + 1 : alpha no% : top no%,30 : left no%,970 : caption no%,"Si" no% = no% + 1 : button no% : top no%,60 : left no%,880 : width no%,80 : caption no%,"Sujet" on_click no%,clic_sujet_regle no% = no% + 1 : edit no% : no_sujet_regle% = no% : top no%,60 : left no%,970 : width no%,100 no% = no% + 1 : alpha no% : top no%,90 : left no%,880 : caption no%,"Est en relation" no% = no% + 1 : combo no% : no_relation_regle% = no% : top no%,90 : left no%,970 : width no%,100 item_add no%,"est isolé" item_add no%,"est devant" item_add no%,"est à droite" item_add no%,"est à gauche" item_add no%,"est devant" item_add no%,"touche" on_click no%,clic_relation_regle no% = no% + 1 : button no% : top no%,120 : left no%,880 : width no%,80 : caption no%,"Cible" on_click no%,clic_cible_regle no% = no% + 1 : edit no% : no_cible_regle% = no% : top no%,120 : left no%,970 : width no%,100 no% = no% + 1 : alpha no% : top no%,150 : left no%,970 : caption no%,"Alors" no% = no% + 1 : alpha no% : top no%,180 : left no%,880 : caption no%,"Effectuer" no% = no% + 1 : combo no% : no_action_regle% = no% : top no%,180 : left no%,970 : width no%,210 item_add no%,"sujet meurt/est détruit" item_add no%,"déplacer le sujet de N cases en haut" item_add no%,"déplacer le sujet de N cases en bas" item_add no%,"déplacer le sujet de N cases à droite" item_add no%,"déplacer le sujet de N cases à gauche" item_add no%,"retirer N points de vie à la cible" item_add no%,"ajouter N points de vie à la cible" item_add no%,"retirer N points de vie au sujet" item_add no%,"ajouter N points de vie au sujet" item_add no%,"cible meurt/est détruite" on_click no%,clic_action_regle no% = no% + 1 : alpha no% : top no%,210 : left no%,880 : caption no%,"N" no% = no% + 1 : spin no% : no_N_regle% = no% : top no%,210 : left no%,970 : width no%,100 no% = no% + 1 : alpha no% : top no%,240 : left no%,970 : caption no%,"Puis" no% = no% + 1 : alpha no% : top no%,270 : left no%,880 : caption no%,"Finir par" no% = no% + 1 : combo no% : no_finir_regle% = no% : top no%,270 : left no%,970 : width no%,150 item_add no%,"enchaîner un autre cycle" item_add no%,"terminer le cycle" on_click no%,clic_finir_regle no% = no% + 1 : : open_dialog no% : no_open_dialog% = no% : filter no%,"Règles *.rgl|*.rgl" no% = no% + 1 : : save_dialog no% : no_save_dialog% = no% : filter no%,"Règles *.rgl|*.rgl"
end
sortir: terminate nouveau: nouveau() return
ouvrir: ouvrir() return
fermer: fermer() return save: save() return saveas: saveas() return clic_type_objet: index_nature_objet% = item_index(no_nature_objet%) select index_nature_objet% case 1: ' décor position no_vie_objet%,0
case 2: ' personnage position no_vie_objet%,100
case 3: ' objet position no_vie_objet%,10 end_select return clic_sujet_regle: clic_sujet_regle() return clic_relation_regle: clic_relation_regle() return
clic_cible_regle: clic_cible_regle%() return clic_action_regle: clic_action_regle() return
clic_finir_regle: clic_finir_regle() return select_regles: select_regles() return
select_objet: select_objet() return creer_objet: creer_objet() return
modifier_objet: modifier_objet() return
supprimer_objet: supprimer_objet() return creer_regle: creer_regle() return
modifier_regle: modifier_regle() return
supprimer_regle: supprimer_regle() return
sub creer_objet() dim_local nom$, i%, cnt% nom$ = trim$(text$(no_nom_objet%)) if nom$="" message "Le nom manque." exit_sub end_if if index_nature_objet%=0 message "La nature n'est pas choisie." exit_sub end_if cnt% = 0 if count(no_list_objets%)>0 for i%=1 to count(no_list_objets%) if left$(item_read$(no_list_objets%,i%),len(nom$))=nom$ then cnt% = cnt% + 1 next i% end_if if cnt%>0 then nom$ = nom$ + "_"+str$(cnt%) item_add no_list_objets%,nom$ item_add no_list_objets%+1,str$(item_index(no_nature_objet%))+","+str$(position(no_vie_objet%)) index_list_objets% = count(no_list_objets%) end_sub
sub modifier_objet() dim_local nom$, i%, cnt% if count(no_list_objets%)=0 message "Aucun objet n'est défini." exit_sub end_if if index_list_objets%=0 message "Aucun objet n'est sélectionné." exit_sub end_if nom$ = trim$(text$(no_nom_objet%)) if nom$="" message "Le nom manque." exit_sub end_if if nom$<>item_read$(no_list_objets%,index_list_objets%) cnt% = 0 for i%=1 to count(no_list_objets%) if left$(item_read$(no_list_objets%,i%),len(nom$))=nom$ then cnt% = cnt% + 1 next i% if cnt%>0 then nom$ = nom$ + "_"+str$(cnt%) end_if item_delete no_list_objets%,index_list_objets% item_insert no_list_objets%,index_list_objets%,nom$ item_delete no_list_objets%+1,index_list_objets% item_insert no_list_objets%+1,index_list_objets%,str$(item_index(no_nature_objet%))+","+str$(position(no_vie_objet%)) end_sub
sub supprimer_objet() if count(no_list_objets%)=0 message "Aucun objet n'est défini." exit_sub end_if if index_list_objets%=0 message "Aucun objet n'est sélectionné." exit_sub end_if item_delete no_list_objets%,index_list_objets% item_delete no_list_objets%+1,index_list_objets% end_sub
sub select_objet() dim_local nom$, s$ index_list_objets% = item_index(no_list_objets%) text no_nom_objet%,item_read$(no_list_objets%,index_list_objets%) s$ = item_read$(no_list_objets%+1,index_list_objets%) index_nature_objet% = val(left$(s$,1)) text no_nature_objet%,item_read$(no_nature_objet%,index_nature_objet%) position no_vie_objet%,val(mid$(s$,3,len(s$))) end_sub
sub select_regles() dim_local s$, p%, n% index_list_regles% = item_index(no_list_regles%) s$ = item_read$(no_list_regles%+1,index_list_regles%)
p% = instr(s$,",") regle_sujet% = val(left$(s$,p%-1)) text no_sujet_regle%,item_read$(no_list_objets%,regle_sujet%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_relation_regle% = val(left$(s$,p%-1)) text no_relation_regle%,item_read$(no_relation_regle%,index_relation_regle%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") regle_cible% = val(left$(s$,p%-1)) text no_cible_regle%,item_read$(no_list_objets%,regle_cible%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") index_action_regle% = val(left$(s$,p%-1)) text no_action_regle%,item_read$(no_action_regle%,index_action_regle%) s$ = mid$(s$,p%+1,len(s$))
p% = instr(s$,",") n% = val(left$(s$,p%-1)) position no_N_regle%,n% s$ = mid$(s$,p%+1,len(s$))
index_finir_regle% = val(s$) text no_finir_regle%,item_read$(no_finir_regle%,index_finir_regle%)
end_sub
sub clic_sujet_regle() if index_list_objets%=0 message "Aucun objet n'est choisi." exit_sub end_if regle_sujet% = index_list_objets% text no_sujet_regle%,item_read$(no_list_objets%,regle_sujet%) end_sub
sub clic_relation_regle() index_relation_regle% = item_index(no_relation_regle%) end_sub
sub clic_cible_regle%() if index_list_objets%=0 message "Aucun objet n'est choisi." exit_sub end_if regle_cible% = index_list_objets% text no_cible_regle%,item_read$(no_list_objets%,regle_cible%) end_sub
sub clic_action_regle() index_action_regle% = item_index(no_action_regle%) end_sub
sub clic_finir_regle() index_finir_regle% = item_index(no_finir_regle%) end_sub
sub creer_regle() dim_local s$ if regle_sujet%=0 message "Le sujet n'est pas choisi." exit_sub end_if if index_relation_regle%=0 message "La relation n'est pas choisie." exit_sub end_if if regle_cible%=0 message "La cible n'est pas choisie." exit_sub end_if if index_action_regle%=0 message "L'action n'est pas choisie." exit_sub end_if if index_finir_regle%=0 message "La fin n'est pas choisie." exit_sub end_if s$ = "si <"+item_read$(no_list_objets%,regle_sujet%)+">" s$ = s$ + " <"+item_read$(no_relation_regle%,index_relation_regle%)+">" s$ = s$ + " <"+item_read$(no_list_objets%,regle_cible%)+"> alors " s$ = s$ + "<"+item_read$(no_action_regle%,index_action_regle%)+">" s$ = s$ + " N=<"+str$(position(no_N_regle%))+"> puis " s$ = s$ + "<"+item_read$(no_finir_regle%,index_finir_regle%)+">" item_add no_list_regles%,s$ s$ = str$(regle_sujet%)+","+str$(index_relation_regle%)+","+str$(regle_cible%) s$ = s$ + ","+str$(index_action_regle%)+","+str$(position(no_N_regle%)) s$ = s$ + ","+str$(index_finir_regle%) item_add no_list_regles%+1,s$ end_sub
sub modifier_regle() dim_local s$ if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if
if regle_sujet%=0 message "Le sujet n'est pas choisi." exit_sub end_if if index_relation_regle%=0 message "La relation n'est pas choisie." exit_sub end_if if regle_cible%=0 message "La cible n'est pas choisie." exit_sub end_if if index_action_regle%=0 message "L'action n'est pas choisie." exit_sub end_if if index_finir_regle%=0 message "La fin n'est pas choisie." exit_sub end_if item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles%
s$ = "si <"+item_read$(no_list_objets%,regle_sujet%)+">" s$ = s$ + " <"+item_read$(no_relation_regle%,index_relation_regle%)+">" s$ = s$ + " <"+item_read$(no_list_objets%,regle_cible%)+"> alors " s$ = s$ + "<"+item_read$(no_action_regle%,index_action_regle%)+">" s$ = s$ + " N=<"+str$(position(no_N_regle%))+"> puis " s$ = s$ + "<"+item_read$(no_finir_regle%,index_finir_regle%)+">" item_insert no_list_regles%,index_list_regles%,s$ s$ = str$(regle_sujet%)+","+str$(index_relation_regle%)+","+str$(regle_cible%) s$ = s$ + ","+str$(index_action_regle%)+","+str$(position(no_N_regle%)) s$ = s$ + ","+str$(index_finir_regle%) item_insert no_list_regles%+1,index_list_regles%,s$ end_sub
sub supprimer_regle() if count(no_list_regles%)=0 message "Il n'y a pas de règles." exit_sub end_if if index_list_regles%=0 message "Aucune règle n'est sélectionnée." exit_sub end_if item_delete no_list_regles%,index_list_regles% item_delete no_list_regles%+1,index_list_regles% end_sub
sub nouveau() regles$ = "" clear no_list_objets% clear no_list_objets%+1 clear no_list_regles% clear no_list_regles%+1 n_objets% = 0 index_nature_objet% = 0 index_list_objets% = 0 index_list_regles% = 0 index_relation_regle% = 0 index_action_regle% = 0 index_finir_regle% = 0 regle_sujet% = 0 regle_cible% = 0 text no_nom_objet%,"" text no_nature_objet%,"" position no_vie_objet%,0 text no_sujet_regle%,"" text no_relation_regle%,"" text no_cible_regle%,"" text no_action_regle%,"" position no_N_regle%,0 text no_finir_regle%,""
end_sub
sub ouvrir() dim_local f$, s$, i%, n% f$ = file_name$(no_open_dialog%) if f$="_" then exit_sub if file_exists(f$)=0 message "Le fichier n'existe pas" exit_sub end_if fermer() regles$ = f$ file_open_read 1,regles$ file_readln 1,s$ n% = val(s$) for i%=1 to n% file_readln 1,s$ item_add no_list_objets%,s$ file_readln 1,s$ item_add no_list_objets%+1,s$ next i% file_readln 1,s$ n% = val(s$) if n%>0 for i%=1 to n% file_readln 1,s$ item_add no_list_regles%,s$ file_readln 1,s$ item_add no_list_regles%+1,s$ next i% end_if file_close 1 end_sub
sub fermer() nouveau() end_sub
sub save() dim_local i% if regles$="" message "Aucun fichier n'est ouvert." exit_sub end_if if count(no_list_objets%)=0 message "Il n'y a rien à sauvegarder." exit_sub end_if file_open_write 1,regles$ file_writeln 1,str$(count(no_list_objets%)) for i%=1 to count(no_list_objets%) file_writeln 1,item_read$(no_list_objets%,i%) file_writeln 1,item_read$(no_list_objets%+1,i%) next i% file_writeln 1,str$(count(no_list_regles%)) if count(no_list_regles%)>0 for i%=1 to count(no_list_regles%) file_writeln 1,item_read$(no_list_regles%,i%) file_writeln 1,item_read$(no_list_regles%+1,i%) next i% end_if file_close 1 end_sub
sub saveas() dim_local f$ f$ = file_name$(no_save_dialog%) if f$="_" then exit_sub regles$ = f$ save() end_sub
Et voici le fichier Premier.rgl (*.rgl est l'extension imposée, puisque *.reg est en principe réservée pour le système): - Code:
-
3 soldat 2,100 bombe 3,10 infirmier 2,100 2 si <soldat> <touche> <bombe> alors <retirer N points de vie au sujet> N=<20> puis <terminer le cycle> 1,6,2,8,20,2 si <soldat> <est devant> <infirmier> alors <ajouter N points de vie au sujet> N=<5> puis <enchaîner un autre cycle> 1,2,3,9,5,1
Pour chaque élément, il y a deux lignes: la première est le libellé affiché dans les listes du programme, et la deuxième est un codage interne qui s'y rattache. Il y a donc 2 personnages et 1 objet, et deux règles que je vous laisse découvrir. | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 8:38 | |
| J'ai déplacé la discussion dans une nouvelle rubrique "Stratego" des Grands projets réalisés avec Panoramic _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 9:32 | |
| C'est intéressant Klaus, car en effet, ça permettrait de relayer toute la logique sous forme de règle facilement lisible. Il y a encore du travail à faire dessus (J'ai créé un objet mais je ne pouvais pas le renommer) et je pense qu'il faudrait faire un petit programme qui montre l'interprétation des règles générées pour être exhaustif.
Pour être peut être encore plus intéressant, le top selon moi serait de rendre les règle plus graphiques sous formes de blocs (tel que dans Ardublock ou Blockly)
Tu prendrais un bloc personnage, objet ou décor (je pense qu'il faudrait rajouter aussi temps) ou d'autre types d'objet d'une bibliothèque à enrichir avec chacun ses propre propriétés que l'on pourrait paramétrer sur les blocs
Tu prendrais un bloc relation ("est à gauche", "est à droite", "touche", ...) mais ces types de relations dépendraient de l'objet sujet (par exemple pour un sujet "temps", la position n'a pas de sens, mais le temps peut avoir par exemple "est égal" ou "dépasse")
La cible n'a de sens que selon le type de relations. Toujours pour garder l'exemple du temps, (mais j'aurais pu prendre score ou niveau ou points de vie)
L'idée serait vraiment de pouvoir vraiment avoir toutes les conditions et actions fondamentales du jeu dans ces règles
Si <touche_appuyée> <égale> <Z><deplacement_soldat><égale><vers le haut> Si <deplacement_soldat><égale><obstacle><ne pas deplacer> Si <deplacement_soldat><égale><ennemi><retirer n points de vie à soldat> Si <deplacement_soldat><égale><ennemi><ennemi meurt>
Je pense qu'en travaillant par objet, ce serait plus simple mais ça reste un très gros boulot dans lequel tu te lances pour que les règles soient suffisantes pour pouvoir interpréter toute la logique d'un jeu.
J'espère avoir bien compris le but de ce que tu viens de commencer et ne pas être parti hors sujet. Par contre vu l'ampleur de la tâche si j'ai bien compris ce que tu veux faire, tu peux ouvrir un sujet dédié car le chemin sera quand même assez long, je pense. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 9:41 | |
| Bonjour à tous, @Jack, Merci pour cette rubrique spéciale... @Klaus, J'ai regardé ton "moteur de règle", c'est pas mal. A suivre... @Jicehel, Ça avance, j'ai testé et j'ai découvert un bug. C'est peut-être dû au fait que le code est incomplet. Sur l'image ci-dessous le pion bleu, qui est sélectionné, ne peut plus bouger ???De mon coté, Je suis parti sur une version avec sprites. J'ai terminé le codage pour la détection des cases. Il faut que je fabrique 2 ou 3 images pour mes sprites pour continuer. J'espère pouvoir vous sortir une première version avant demain soir. J'ai un peu de mal, à cause de Lilou (ma petite fille) qui me demande toute les 3 minutes "Papy qu'est-ce que tu fais" A+ PS: Je viens de regarder la page d’accueil du forum en bas "Grands projets réalisés avec Panoramic" Je constate que Jack a eu l'excellente idée d'y mettre les règles du jeu (pour ceux que ça intéresse)
D'autre part, je propose d'ouvrir un post pour la version avec sprite, pour éviter les confusions... Si vous êtes d'accord ce sera fait dans la journée...
Dernière édition par Jean Claude le Sam 27 Fév 2016 - 9:53, édité 2 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 9:50 | |
| DE toute façon Jean-Claude, on n'est pas pressé. Collaboré ça prend du temps. Surtout au début, mais si ça marche, plus on travaillera l'exercice, plus vite on rendra un travail abouti et ça nous permettra peut être de nous attaquer plus tard à des projets plus importants, mais ne brusquons rien et commençons déjà par tranquillement finir ce Stratego | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 9:54 | |
| On s'est croisé Jicehel.
PS: Je viens de regarder la page d’accueil du forum en bas "Grands projets réalisés avec Panoramic" Je constate que Jack a eu l'excellente idée d'y mettre les règles du jeu (pour ceux que ça intéresse)
D'autre part, je propose d'ouvrir un post pour la version avec sprite, pour éviter les confusions... Si vous êtes d'accord ce sera fait dans la journée... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 10:07 | |
| Bien sûr Jean-Claude.
On peut faire ça et le top serait de garder les mêmes noms de procédures principales pour garder la même structure de jeux en dehors des spécificités graphiques.
Ca permettra ainsi que les procédures que certains feront puisse être ajoutées dans les 2 versions.
PS: Tu as raisons pour le bug, ça met arrivé aussi. Il faut que j'arrive à le reproduire et à comprendre d'où ça vient... Certainement un problème de logique quelque part ou le en effet, le fait que pour le moment je n'ai pas encore fini de le faire mais pour le moment, je n'ai pas encore compris pourquoi et ce sera certainement pour ce soir cr là, c'est course, repas avec les parents, jouer avec les enfants, etc ... Comme pour vous certainement... A bientôt | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Stratego collaboratif Sam 27 Fév 2016 - 10:28 | |
| Ok, j'ouvre un post dans la journée.
Pour le moment, c'est comme toi: courses, petit enfants, etc.....
A+ | |
| | | Contenu sponsorisé
| Sujet: Re: Stratego collaboratif | |
| |
| | | | Stratego collaboratif | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |