Jeu d'echec

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Sin_Mth
Messages : 5
Inscription : ven. 20/juil./2012 15:28

Jeu d'echec

Message par Sin_Mth »

Bonjour, cela fait quelques jour que j'ai découvert purebasic et j'ai commencer a apprendre par moi même quelque trucs, mais là j'en arrive à une impasse et décide de vous demander votre aide

Voila l'histoire, j'ai décidé de créer mon propre jeu d’échec mais je ne vois vraiment pas comment détecter le clic sur une case ni la position d'un pion sur une case, donc auriez vous l'amabilité de me venir en aide ? (sans me donner le code si possible j’aimerais bien travailler quand même hein (x )


Ah et aussi comment rendre "portable" la résolution du plein écran, j'ai essayer plusieurs méthode mais aucune ne marche


Merci d'avance pour votre aide (:
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Jeu d'echec

Message par MLD »

Bonjour et bienvenu

Si tu ne nous montre pas un petit peu de code ou si tu nous explique pas comment est ton graphisme pour le jeu (le damier). Il nous est difficile de pouvoir t'aidé. :wink:
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Jeu d'echec

Message par falsam »

Bienvenu. Pour un jeu en 2D j'utiliserais le CanvasGadget (je suis un peu accro à ce gadget en ce moment) associé à une structure qui contient les informations de chaque cellule.

0 - Création d'une structure représentant le jeu d’échec
1 - Dessin des 64 cases du jeu d'échec. Chaque case est un CanvasGadget
2 - Analyse des évènement de chaque CanvasGadget

Tu ne veux pas de code c'est ok. Mais si tu en souhaites un peu quand même pour illustrer ce que je viens de dire, tu le dis.
Dernière modification par falsam le ven. 20/juil./2012 18:20, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Sin_Mth
Messages : 5
Inscription : ven. 20/juil./2012 15:28

Re: Jeu d'echec

Message par Sin_Mth »

merci falsam, je pense que ce sera le moyen le plus simple, j'essaye dans la soirée et je posterais mon code pour avoir quelques avis sa si vous derange pas (si je n'est pas le temps se sera surement demain dans l'apres midi (: )


Edit : mon purebasic me dit que canvas gadget n'est pas une fonction ni un tableau, normal ?
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Jeu d'echec

Message par jbernard13 »

Sin_Mth a écrit :merci falsam, je pense que ce sera le moyen le plus simple, j'essaye dans la soirée et je posterais mon code pour avoir quelques avis sa si vous derange pas (si je n'est pas le temps se sera surement demain dans l'apres midi (: )


Edit : mon purebasic me dit que canvas gadget n'est pas une fonction ni un tableau, normal ?

quel version de purebasic tu as ?
Jbernard13
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Jeu d'echec

Message par falsam »

Sin_Mth a écrit :mon purebasic me dit que canvas gadget n'est pas une fonction ni un tableau, normal ?
Le CanvasGadget a été introduit avec la version 4.60 de Pure Basic. Pour ton information, la version 4.61 est la version officiel.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Sin_Mth
Messages : 5
Inscription : ven. 20/juil./2012 15:28

Re: Jeu d'echec

Message par Sin_Mth »

ah oui 4.51 (x merci de l'information (:
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Jeu d'echec

Message par Fig »

Pour le plein écran je te conseille cette méthode plutôt:

Tu as un tableau qui fait Jeu.i(8,8) qui contient les pièces de ton jeu et les cases vides. (0=case vide, 1=pion, 2=tour, 3=cavalier, 4=fou, 5=reine, 6=roi pour les blancs et 11=pion, 12=tour etc... pour les noirs)
Tu as des sprites qui correspondent à tes pièces. Tu les numérotes comme ci dessus par exemple.

Tes cases affichées ont une certaine largeur par exemple 64x64 pixels. Tu affiches 8 cases sur 8 cases pour ton ère de jeu (si je me rappelle bien)
Tu as la coordonnée du sprite de ta souris X et Y.
Tu as la coordonnée de ta première case en haut à gauche biasX et biasY

pour savoir sur quelle case ton curseur est, tu fais:
caseX= (X-biasX)/64+1
caseY=(Y-biasY)/64+1

Lors du clic, tu sais que la case cliquée est CaseX et caseY.
Si CaseX ou CaseY<1 ou >8 ton curseur est en dehors du jeu.
Voila.

Pour ce qui est de tes pièces, tu les déplaces dans le tableau.
C'est le contenu de ce tableau que tu affiche à l'écran sur ton damier.

Tu es sûr que tu ne veux pas un petit code d'exemple ? :wink:

Par contre pour l'IA du jeu ça va être plus coton. Je serai toi je commencerai par un jeu de dame plutôt ...

POur la résolution courante de l'écran, tu peux la connaitre avec ça:
xmax=DesktopWidth(0),ymax=DesktopHeight(0)
xmax contient la résolution du bureau en X et ymax en Y.
tu fais ensuite un produit en croix pour ajuster la taille de tes éléments si tu le souhaite.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Jeu d'echec

Message par Ar-S »

Salut.
Si tu as une version d'essai, sache que les API (sous windows donc) ne sont pas pris en compte.
Si c'est une version complète "non officielle", nous te conseillons d'investir dans une licence (79€ à vie...).
Tu participeras ainsi à la pérennité de ce langage et tu pourras te "mettre à jour" sans soucis.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Jeu d'echec

Message par jbernard13 »

salut sin_Mth

tu as un exemple sur le forum de la création d'un damier :

http://www.purebasic.fr/french/viewtopi ... =6&t=12555
Jbernard13
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Jeu d'echec

Message par falsam »

Je n'ai pas pu m'en empécher :p

Code : Tout sélectionner

Enumeration
  #Mainform
  #Information
EndEnumeration

Enumeration 10 Step 64 ;Réservation de  64 constantes
  #Cell_Start
  #Cell_End
EndEnumeration

;Evenements (Fenetre, Menu, Gadget, Dernier evenement)
Define.l Event, WEvent, MEvent, GEvent, TEvent

;Style window
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered

;Definition trés simplifiée d'une cellule de ton jeu d'echec
Structure Cell
  Idgadget.i    ;Canvas associé
  NumCell.i     ;Numéro de cellule
  BackColor.i   ;Couleur de fond pour redessin de la cellule
EndStructure

Global NewList Chess.Cell() ;Le jeu d'échec

Procedure Open_MainForm()
  Protected NumCell.i, X.b, BackColor.i
  
  OpenWindow(#Mainform, 0, 0, 450, 450, "New Form", WindowStyle)
  
  ;Un jeu d'echec c'est une grille de 8 x 8
  ;Le Canvasgadget peut être une solution pour créer une grille
  For Row = 1 To 8
    For Col = 1 To 8
      IdGadget = #Cell_Start+NumCell
      CanvasGadget(IdGadget, Col*43, Row*43, 40, 40) ;J'ecarte volontairement les cases
            
      ;Un peu de couleur. On dessine sur le canvas nouvellement crée.
      StartDrawing(CanvasOutput(IdGadget))
      
      ;Si X = #False, on colore en jaune sinon marron
      If X=#False
        BackColor = RGB(255, 215, 0)
        X=#True
      Else
        BackColor = RGB(210, 105, 30)
        X=#False
      EndIf
      
      ;Dessin du fond de la cellule
      Box(0, 0, 40 ,40, BackColor)
      
      ;Dessin d'un cadre
      DrawingMode(#PB_2DDrawing_Outlined)
      Box(0, 0, 40, 40, RGB(0, 0, 0))
      StopDrawing() ;Fin du dessin et affichage
      
      ;Mise à jour de la structure associé au jeu d'echec
      AddElement(Chess()) ;Ajout d'un élement dans la structure du jeu d'echec
      SetGadgetData(IdGadget, NumCell) ;Le Canvasgadget connait sa position dans la structure
            
      With Chess()
        \IdGadget = IdGadget ;Quel est le canvas associé
        \NumCell = NumCell ;Numéro de cellule
        \BackColor = BackColor
      EndWith
            
      NumCell+1
    Next
    
    ;C'est une astuce pour la création du damier.Peut etre qu'il y a mieux :)
    If X=#True 
      X=#False
    Else
      X=#True
    EndIf
  Next
  
  TextGadget(#Information, 200, 420, 50, 20, "?/?")
  
EndProcedure
  
Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  WEvent = EventWindow() ;Quelle fenetre reçoit l'evenement. Different de WindowEvent() :p (oui je me suis fais avoir !!!)
  MEvent = EventMenu() ;Evenement menu
  GEvent = EventGadget() ;Evenement gadget
  TEvent = EventType() ;Type du dernier évènement survenu 
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
        Case #Cell_Start To #Cell_End ;Quel est la cellule qui reçoit l'evenement
          Select TEvent ;Quel type d'évenement reçoit la cellule  
              
            Case #PB_EventType_MouseEnter 
              ;La souris survole la cellule
              SetGadgetAttribute(GEvent, #PB_Canvas_Cursor, #PB_Cursor_Hand) ;Changement de curseur
              
              ;Dessin d'un cadre de sélection
              StartDrawing(CanvasOutput(GEvent))
              DrawingMode(#PB_2DDrawing_Outlined)
              Box(0, 0, 40, 40, RGB(255, 0, 0))
              StopDrawing()
              
            Case #PB_EventType_MouseLeave
              ;La souris quitte la cellule : Dessin du cadre noir sur la cellule (CanvasGadget)
              StartDrawing(CanvasOutput(GEvent))
              DrawingMode(#PB_2DDrawing_Outlined)
              Box(0, 0, 40, 40, RGB(0, 0, 0))
              StopDrawing()
              
            Case #PB_EventType_LeftButtonUp
              ;Le joueur clique sur une cellule : Recherche de la cellule correspondante dans la structure
              ;Le canvas represantant une case de ton jeu d'echec connait une position dans la structure
              SelectElement(Chess(), GetGadgetData(GEvent)) ;On se positionne dans la structure
              SetGadgetText(#Information, Str(Chess()\NumCell + 1)) ;Affichage du numéro de cellule
              
          EndSelect          
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Jeu d'echec

Message par dayvid »

Une vrais machine a codé se Falsam :lol:
Tu code a la chaine c'est impressionnant :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre