FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Jeu d'Echecs Emptypar papydall Aujourd'hui à 16:57

» PANORAMIC V 1
Jeu d'Echecs Emptypar papydall Aujourd'hui à 3:22

» select intégrés [résolu]
Jeu d'Echecs Emptypar jjn4 Hier à 17:00

» number_mouse_up
Jeu d'Echecs Emptypar jjn4 Hier à 11:59

» Aide de PANORAMIC
Jeu d'Echecs Emptypar jjn4 Hier à 11:16

» trop de fichiers en cours
Jeu d'Echecs Emptypar lepetitmarocain Hier à 10:43

» Je teste PANORAMIC V 1 beta 1
Jeu d'Echecs Emptypar papydall Hier à 4:17

» bouton dans autre form que 0
Jeu d'Echecs Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Jeu d'Echecs Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Jeu d'Echecs Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
Jeu d'Echecs Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Jeu d'Echecs Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Jeu d'Echecs Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Jeu d'Echecs Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Jeu d'Echecs Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-40%
Le deal à ne pas rater :
Tefal Ingenio Emotion – Batterie de cuisine 10 pièces (induction, ...
59.99 € 99.99 €
Voir le deal

 

 Jeu d'Echecs

Aller en bas 
+2
Jack
Marc
6 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Jeu d'Echecs   Jeu d'Echecs EmptyJeu 7 Jan 2021 - 18:45

Bonjour à tous !

Rubrique:
Jeu d'Echecs Projet10

Et bien j’ai envie de développer un jeu d’échecs. Un jeu d’échecs tout simple, où l’on joue à deux personnes physiques. Hors de question de créer une intelligence artificielle pour jouer contre l’ordinateur : j’en serais bien incapable et de plus, je ne connais quasiment rien aux échecs.
Après avoir lu l’article de Wikipédia sur le sujet -ce qui m’a permis d’apprendre beaucoup de choses sur le jeu d’échecs-, je souhaiterais créer un simple plateau de jeu équipé de ses pièces. Puis, si tout va bien, y adjoindre une pendule avec les différents modes de jeu. Et pour finir, ajouter une feuille de partie avec sauvegarde et possibilité de rejouer une partie.
J’ai déjà couché sur papier pas mal d’idées et de dessins.

Je ne sais pas encore comment je vais pouvoir gérer les différents évènements avec une pendule qui tourne en tache de fond… On verra le moment venu !

Et puis l'union fait la force, avec l'aide de tous les Panoramiciens, nous devrions y arriver !

Allez hop, c’est parti ! En espérant que mon projet ne se termine pas par un échec !

A bientôt !
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyJeu 7 Jan 2021 - 22:21

Très bonne idée que de lancer un tel projet !

_________________
Jeu d'Echecs Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
mimic

mimic


Nombre de messages : 103
Localisation : france
Date d'inscription : 02/09/2009

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyVen 8 Jan 2021 - 11:26

Bonjour,
J'ai déjà essayé d'implémenter une variante personnelle (règles différentes) du jeu d’échecs, le code n'est pas commenté, mais si cela peut aider je peux le poster.
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyVen 8 Jan 2021 - 12:07

Bonjour tous !

Jack a écrit:
Très bonne idée que de lancer un tel projet !
Merci Jack !

Mimic a écrit:
...mais si cela peut aider je peux le poster.
Merci Mimic !
Oui, je suis intéressé. Je suis preneur de tous renseignements, idées, suggestions, critiques…


Voici une première vue, accompagnée de son code-source, du plateau de jeu.

Vous pouvez cliquer dessus !
Les coordonnées de la souris et de la case cliquée s’afficheront dans la caption 0. Bien entendu, ceci est provisoire, juste le temps de la mise au point.

Jeu d'Echecs Echecs10

Code:
' Jeu d'Echecs
' Janvier 2021

label clic

interfaceUtilisateur()

on_click 10,clic

end

clic:
    identiferCaseCliquee()
return

sub identiferCaseCliquee()
    dim_local x%,y%,a,o
    x% = mouse_x_position(10)-30
    y% = 590 - mouse_y_position(10)
    if x% > 0 and y% > 0 and x% < 560 and y% < 560
        a = int(x% / 70) + 1
        o = int(y% / 70) + 1
    end_if
    caption 0,str$(x%) + "  /  "+str$(y%) + "                    Case : "+str$(a) + "  /  " + str$(o)
end_sub


sub interfaceUtilisateur()
    width 0,width(0) - width_client(0) + 619
    height 0,height(0) - height_client(0) + 619
    top 0,(screen_y - height(0)) / 2
    left 0,(screen_x - width(0)) / 2
    
    picture 1
    2d_target_is 1
'    hide 1

    scene2d 10
    width 10,619
    height 10,619
    hide 10  

    creerUneCaseFoncee()
    creerUneCaseClaire()
    creerDamier()
    creerCadreDamier()
    creerReglesCoordonnees()
    assemblagePlateauJeu()

    show 10
end_sub

sub creerUneCaseFoncee()
    dim_local i%,x%,y%,r%,v%,b%,c%
    r% = 222
    v% = 195
    b% = 160
    width 1,71
    height 1,71
    color 1,r%,v%,b%
    for i% = 1 to 1500
        c% = rnd(25)
        2d_pen_color r%-c%,v%-c%,b%-c%
        x% = rnd(71)
        y% = rnd(71)
        2d_line x%,y%,x%+rnd(5),y%
    next i%
    2d_pen_color 51,51,0
    2d_fill_off
    2d_rectangle 0,0,71,71
    image 2
    2d_image_copy 2,0,0,71,71
end_sub

sub creerUneCaseClaire()
    dim_local i%,x%,y%,r%,v%,b%,c%
    r% = 245
    v% = 228
    b% = 200
    width 1,71
    height 1,71
    color 1,r%,v%,b%
    for i% = 1 to 1500
        c% = rnd(25)
        2d_pen_color r%-(c%/2),v%-c%,b%-(c%/4)
        x% = rnd(71)
        y% = rnd(71)
        2d_line x%,y%,x%,y%+rnd(5)
    next i%
    2d_pen_color 51,51,0
    2d_fill_off
    2d_rectangle 0,0,71,71
    image 3
    2d_image_copy 3,0,0,71,71
end_sub

sub creerDamier()
    dim_local n%,x%,y%
    width 1,617
    height 1,617
    for n% = 1 to 32
        if odd(y%) = 0
            2d_image_paste 3,x%*70,y%*70
            x% = x% + 1
            2d_image_paste 2,x%*70,y%*70
            x% = x% + 1
        else
            2d_image_paste 2,x%*70,y%*70
            x% = x% + 1
            2d_image_paste 3,x%*70,y%*70
            x% = x% + 1
        end_if
        if x% > 7
            x% = 0
            y% = y% + 1
        end_if
    next n%
    image 4
    2d_image_copy 4,0,0,561,561
    sprite 50
    sprite_image_load 50,4
end_sub

sub creerCadreDamier()
    dim_local i%,x%,y%,r%,v%,b%,c%
    r% = 222
    v% = 195
    b% = 160
    
    ' bordure horizontale haute
    width 1,619
    height 1,29
    color 1,r%,v%,b%
    for i% = 1 to 3000
        c% = rnd(25)
        2d_pen_color r%-c%,v%-c%,b%-c%
        x% = rnd(619)
        y% = rnd(29)
        2d_line x%,y%,x%+rnd(5),y%
    next i%
    2d_pen_color 0,0,0
    ' découpe à 45° extrémité gauche
    for i% = 1 to 28
        2d_line 0,i%,i%,i%
    next i%
    ' découpe à 45° extrémité droite
    for i% = 1 to 28
        2d_line 619-i%,i%,619,i%
    next i%
    image 5
    2d_image_copy 5,0,0,619,29
    sprite 51
    sprite_image_load 51,5

    ' bordure verticale droite
    width 1,29
    height 1,619
    color 1,r%,v%,b%
    for i% = 1 to 3000
        c% = rnd(25)
        2d_pen_color r%-c%,v%-c%,b%-c%
        x% = rnd(29)
        y% = rnd(619)
        2d_line x%,y%,x%,y%+rnd(5)
    next i%
    2d_pen_color 0,0,0
    ' découpe à 45° extrémité haute
    for i% = 0 to 28
        2d_line 0,i%,28-i%,i%
    next i%
    ' découpe à 45° extrémité droite
    for i% = 0 to 28
        2d_line 0,590+i%,i%,590+i%
    next i%
    image 6
    2d_image_copy 6,0,0,29,619
    sprite 52
    sprite_image_load 52,6

    ' bordure horizontale basse
    width 1,619
    height 1,29
    color 1,r%,v%,b%
    for i% = 1 to 3000
        c% = rnd(25)
        2d_pen_color r%-c%,v%-c%,b%-c%
        x% = rnd(619)
        y% = rnd(29)
        2d_line x%,y%,x%+rnd(5),y%
    next i%
    2d_pen_color 0,0,0
    ' découpe à 45° extrémité gauche
    for i% = 0 to 28
        2d_line 0,i%,28-i%,i%
    next i%
    ' découpe à 45° extrémité droite
    for i% = 0 to 28
        2d_line 591+i%,i%,619,i%
    next i%
    image 7
    2d_image_copy 7,0,0,619,29
    sprite 53
    sprite_image_load 53,7

    ' bordure verticale gauche
    width 1,29
    height 1,619
    color 1,r%,v%,b%
    for i% = 1 to 3000
        c% = rnd(25)
        2d_pen_color r%-c%,v%-c%,b%-c%
        x% = rnd(29)
        y% = rnd(619)
        2d_line x%,y%,x%,y%+rnd(5)
    next i%
    2d_pen_color 0,0,0
    ' découpe à 45° extrémité haute
    for i% = 0 to 29
        2d_line i%+1,i%,29,i%
    next i%
    ' découpe à 45° extrémité droite
    for i% = 0 to 28
        2d_line 28-i%,591+i%,29,591+i%
    next i%
    image 8
    2d_image_copy 8,0,0,29,619
    sprite 54
    sprite_image_load 54,8
end_sub


sub creerReglesCoordonnees()
    ' règle abscisse lettres
    width 1, 503
    height 1,12
    color 1,0,0,0
    2d_pen_color 51,51,0
    ' lettre A
    2d_line 6,0,6,2
    2d_line 5,2,5,4
    2d_line 4,4,4,6
    2d_line 3,6,3,9
    2d_line 2,9,2,12
    2d_line 0,11,4,11
    2d_point 1,10
    2d_line 4,7,9,7
    2d_line 7,0,7,5
    2d_line 8,2,8,8
    2d_line 9,5,9,12
    2d_line 10,8,10,12
    2d_line 8,11,13,11
    2d_point 11,10
    ' lettre B
    2d_line 70,0,79,0
    2d_line 72,1,72,11
    2d_line 73,1,73,11
    2d_line 70,11,79,11
    2d_line 74,5,79,5
    2d_line 78,0,78,7
    2d_line 79,1,79,5
    2d_line 79,6,79,11
    2d_line 80,7,80,10
    2d_point 78,10
    ' lettre C
    2d_line 140,4,140,9
    2d_line 141,2,141,10
    2d_line 142,1,142,3
    2d_line 142,9,142,11
    2d_point 143,1
    2d_point 143,10
    2d_line 144,0,148,0
    2d_line 148,1,151,1
    2d_line 150,0,150,4
    2d_line 143,11,149,11
    2d_point 149,10
    2d_point 150,9
    ' lettre D
    2d_line 210,0,219,0
    2d_line 212,0,212,11
    2d_line 213,0,213,11
    2d_line 210,11,218,11
    2d_line 218,1,220,1
    2d_line 219,2,221,2
    2d_line 220,3,220,10
    2d_line 221,3,221,9
    2d_line 219,9,221,9
    2d_line 218,10,220,10
    ' lettre E
    2d_line 280,0,290,0
    2d_line 289,0,289,3
    2d_line 282,1,282,11
    2d_line 283,1,283,11
    2d_line 280,11,290,11
    2d_point 289,10
    2d_point 290,9
    2d_line 284,5,288,5
    2d_line 287,3,287,8
    ' lettre F
    2d_line 350,0,360,0
    2d_line 359,0,359,3
    2d_line 352,1,352,11
    2d_line 353,1,353,11
    2d_line 350,11,356,11
    2d_line 354,5,358,5
    2d_line 357,3,357,8
    ' lettre G
    2d_line 420,3,420,9
    2d_line 421,2,421,10
    2d_line 422,1,422,3
    2d_point 423,1
    2d_line 422,8,422,11
    2d_line 422,10,425,10
    2d_line 424,11,430,11
    2d_line 427,5,433,5
    2d_line 429,6,429,11
    2d_line 430,6,430,11
    2d_line 424,0,428,0
    2d_line 428,1,431,1
    2d_line 430,0,430,4
    ' lettre H
    2d_line 490,0,496,0
    2d_line 497,0,503,0
    2d_line 492,1,492,11
    2d_line 493,1,493,11
    2d_line 490,11,496,11
    2d_line 497,11,503,11
    2d_line 494,5,499,5
    2d_line 499,1,499,11
    2d_line 500,1,500,11
    2d_image_copy 2,0,0,503,12
    sprite 55
    sprite_image_load 55,2

' règle Ordonnee chiffres    
    width 1, 8
    height 1,502
    color 1,0,0,0
    2d_pen_color 51,51,0
    ' chiffre 8
    2d_line 1,0,6,0
    2d_line 0,1,0,4
    2d_line 1,0,1,5
    2d_line 5,0,5,4
    2d_line 6,1,6,3
    2d_line 2,4,2,7
    2d_line 4,4,4,7
    2d_point 3,5
    2d_line 1,6,1,12
    2d_line 0,7,0,11
    2d_line 5,6,5,11
    2d_line 6,7,6,11
    2d_point 2,10
    2d_line 1,11,5,11
    ' chiffre 7
    2d_line 1,70,8,70
    2d_line 1,71,7,71
    2d_point 0,72
    2d_point 6,72
    2d_line 5,73,5,76
    2d_line 4,76,4,78
    2d_line 3,78,3,81
    2d_point 2,81
    ' chiffre 6
    2d_line 5,140,8,140
    2d_line 3,141,6,141
    2d_line 2,142,4,142
    2d_line 1,143,3,143
    2d_point 1,144
    2d_line 3,144,6,144
    2d_line 0,145,3,145
    2d_line 5,145,7,145
    2d_line 0,145,0,150
    2d_line 1,145,1,151
    2d_point 2,150
    2d_line 2,151,6,151
    2d_point 5,150
    2d_line 6,146,6,151
    2d_line 7,146,7,150
    ' cjiffre 5
    2d_line 3,210,7,210
    2d_line 2,211,7,211
    2d_point 2,212
    2d_line 2,213,4,213
    2d_line 1,214,6,214
    2d_line 4,215,7,215
    2d_point 5,216
    2d_line 6,215,6,220
    2d_point 5,220
    2d_line 0,220,2,220
    2d_line 0,221,5,221
    ' chiffre 4
    2d_line 5,280,5,292
    2d_line 6,280,6,292
    2d_point 4,282
    2d_point 3,283
    2d_line 2,284,2,286
    2d_point 1,286
    2d_point 0,287
    2d_line 0,288,8,288
    ' chiffre 3
    2d_line 2,350,6,350
    2d_line 0,351,2,351
    2d_point 0,352
    2d_line 4,351,7,351
    2d_line 5,352,7,352
    2d_line 5,353,7,353
    2d_line 4,354,6,354
    2d_line 3,355,7,355
    2d_point 5,356
    2d_line 6,356,6,361
    2d_line 7,356,7,360
    2d_line 5,360,7,360
    2d_line 0,360,2,360
    2d_line 0,361,5,361
    ' chiffre 2
    2d_line 2,420,6,420
    2d_point 1,421
    2d_point 0,422
    2d_point 4,421
    2d_line 5,420,5,426
    2d_line 6,421,6,425
    2d_line 4,426,4,428
    2d_line 3,427,3,429
    2d_point 2,429
    2d_point 7,429
    2d_line 1,430,8,430
    2d_line 0,431,7,431
    ' chiffre 1
    2d_line 1,491,3,491
    2d_line 3,490,3,501
    2d_line 4,490,4,501
    2d_line 1,501,7,501
    2d_image_copy 2,0,0,8,502
    sprite 56
    sprite_image_load 56,2
end_sub

sub assemblagePlateauJeu()
    sprite_position 50,29,29
    sprite_position 51,0,0
    sprite_position 52,590,0
    sprite_position 53,0,590
    sprite_position 54,0,0
    sprite_position 55,58,598
    sprite_position 56,11,59
end_sub

Bonne journée à tous !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2704
Date d'inscription : 13/09/2009

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyVen 8 Jan 2021 - 14:32

J'avais travaillé un peu le même projet que toi, il y a quelques années,
en moins ambitieux mais avec quelques idées créatives.
Je te le mets sur le webdav n° 1 (panoramic@jjn4 + panoramic123)
au cas où tu voudrais t'en inspirer (il est trop long pour rentrer dans ce forum).
Pareil, ce n'est pas un simulateur qui joue, c'est juste une table d'exercice pour apprendre).
(et il est trop long pour rentrer directement dans ce forum).
geek
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyVen 8 Jan 2021 - 17:30

Merci beaucoup JJN4 !

C'est fait, j'ai téléchargé le dossier "Echecs" présent dans ton Webdav.
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyDim 17 Jan 2021 - 1:46

Bonjour à tous !

J'ai commencé à dessiner le contour des différentes pièces du jeu. Chaque pièce est un sprite.
Je les ai placées sur l'échiquier pour avoir un premier aperçu :

Jeu d'Echecs Echecs11

Le code-source est disponible dans mon WebDav.

A bientôt !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2704
Date d'inscription : 13/09/2009

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyDim 17 Jan 2021 - 14:34

Bon courage !
Parce que jusque là, c'est simple !
C'est après que ça se complique...
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 0:38

J'apporte également une petite contribution au jeud d'échecs.

Il faut télécharger KGF.dll sur mon site (voir dans la signature de ce post). Puis exécuter le code suivant:
Code:
' test_jeu_echecs.bas

label close0

dim res%, CNV%, w%, h%, hc%, x1%, y1%, row1%, col1%, x2%, y2%, row2%, col2%, CB%

w% = 1 + 8*(48+1)
h% = w%
width 0,w%+50
height 0,h%+200
edit 101 : top 101,50+h%+10 : left 101,10 : width 101,w%
edit 102 : top 102,top(101)+30 : left 102,10 : width 102,w%

dll_on "KGF.dll"

CB% = dll_call6("CreateChessBoard",handle(0),48,10,50,hex("8080FF"),hex("FFF0F0"))
res% = dll_call2("SetChessBoardTrace",CB%,handle(102))

on_close 0,close0

end
 
close0:
  res% = dll_call1("FreeCanvas",CNV%)
  return

On affiche un plateau de jeu d'échecs avec les figures en position initiale, les blans ayant le premier coup.
On peut cliquer sur une case et un EDIT en bas de la fenêtre montre la pièce trouvée.
On peut "tirer" un pion avec la souris sur une case autorisée, il se déplace et le mouvement est affiché en bas.
Les mouvements interdits pour un pion sont bloqués. Un pion peut prendre une pièce adverse mais mas une pièce de la même couleur.
Si un pion atteint la ligne de base adverse, il se transforme en dame.
Si un pion prend le roi, on détecte "victoire" et aucun autre mouvement n'est possible.
Après un mouvement d'un pion blanc, seul un pion noir peut bouger, et vice-versa.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 1:47

Merci et bravo Klaus !

La possibilité de "tirer" les pièces est sympa. Pour mon jeu, je ne sais pas encore comment je vais opérer le déplacement. Une autre possibilité serait de cliquer la pièce à déplacer puis cliquer la case de destination.

Les algorithmes de gestion de ton jeu sont très poussés. Impossible de se tromper, tout est surveillé et verrouillé.
Je suis curieux de connaître les techniques employées.

J'ai remarqué quelques points :
Je n'ai pas réussi à déplacer les cavaliers.

Je ne peux pas avancer les pions blancs a2,b2,d2,g2 et h2 de deux cases lors de leur premier déplacement.
Idem pour certains pions noirs.

Citation :
Si un pion atteint la ligne de base adverse, il se transforme en dame.
J'ai lu que l'on avait le choix de la promotion : dame, tour, cavalier ou fou. Je vais prévoir ces différentes possibilités.

Lors du jeux, j'ai assez souvent une "violation d'accès...."
Spoiler:

En tout cas encore bravo ! De mon coté la route est encore très longue et les heures disponibles pour programmer ne sont pas assez nombreuses.
Revenir en haut Aller en bas
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 2:25

Merci d'avoir testé, Marc.

Je vais vérifier ce défaut de déplacement des pions que tu as constaté. En attendant, je suis en train de coder le déplacement des tours. Ca marche déjà chez moi, pour les tours blanches.

Ta remarque sur le remplacement du pion arrivé en bout de course est judicieuse. Je vais prévoir un choix à ce niveau, également.

Juste pour donner une idée, je poste ci-après le code de "verrouillage" pour un pion blanc (enn fait, tout le traitement du déplacement d'un pion blanc):
Code:
      0: begin  // white pawn
          // vérifier l'autorisation de déplacement
          bad := false;
          if (EndRow<=StartRow) or (EndRow>StartRow+2) then bad := true;
          if not bad then  if (StartRow>1) and (EndRow>StartRow+1) then bad := true;
          if not bad then if StartCol<>EndCol then begin
            if (StartCol<>EndCol-1) and (StartCol<>EndCol+1) then bad := true;
            if not bad then if fField[EndCol,EndRow].Piece=cpNone then bad := true;
            if not bad then if (fField[EndCol,EndRow].Piece<>cpNone) and (fField[EndCol,EndRow].Color=ccWhite) then bad := true;
          end else begin
            if not bad then if (EndRow=StartRow+2) and (fField[EndRow-1,EndCol].Piece<>cpNone) then bad := true;
            if not bad then if fField[EndCol,EndRow].Piece<>cpNone then bad := true;
          end;

          // déplacer le pion blanc
          if bad then begin
            s := 'Mouvement impossible';
          end else begin
            s := 'Déplacer Pion blanc de '+chr(64+StartCol)+chr(48+StartRow)+' en '+chr(64+EndCol)+chr(48+EndRow);
            victory := (fField[EndCol,EndRow].Piece=cpKing) and (fField[EndCol,EndRow].Color=ccBlack);
            if victory then s := s + '  *** VICTORE ***';
            fField[EndCol,EndRow].Piece := fField[StartCol,StartRow].Piece;
            fField[EndCol,EndRow].Color := fField[StartCol,StartRow].Color;
            if EndRow=7 then fField[EndCol,EndRow].Piece := cpQueen;          // white pawn gains a white queen !
            fField[StartCol,StartRow].Piece := cpNone;
            fField[StartCol,StartRow].Color := ccNone;
            NextMove := ccBlack;
            if victory then NextMove := ccNone;
            self.Paint;
          end;

          // log
            if Trace<>0 then SendMessage(Trace,WM_SetText,0,integer(@s[1]));
        end;
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 9:30

Citation :
La possibilité de "tirer" les pièces est sympa. Pour mon jeu, je ne sais pas encore comment je vais opérer le déplacement. Une autre possibilité serait de cliquer la pièce à déplacer puis cliquer la case de destination.
Pour ce faire, il te faut:
- 2 jeux de variables: le premier identifiant la case et la pièce d'origine, le second identifiant la case (et éventuellement la pièce) de destination
- tu n'utiliseras pas l'évènement 0N_CLICK
- tu utilises l'évènement ON_MOUSE_DOWN pour la case de départ, et tu gardes le bouton gauche enfoncé
- tu "tires" la pièce jusqu'à la case de destination et tu relâches le bouton gauche
- tu utilises l'évènement ON_MOUSE_UP pour identifier la cible.
- dans ON_MOUSE_DOWN, tu utilises la fonction MOUSE_X_LEFT_DOWN et MOUSE_Y_LEFT_DOWN pour obtenir les coordoonnées en pixels, relatifs à l'objet
- dans ON_MOUSE_UP, tu utilises la fonction MOUSE_X_LEFT_UP et MOUSE_Y_LEFT_UP pour obtenir les coordoonnées en pixels, relatifs à l'objet
- tu effectues ensuite un savant calcul pour convertir les pixels en numéros de ligne et de colonne, et le tout est joué.

EDIT

Le problème de la violation de mémoire vient d'être corrigé également.
EDIT

J'ai corrigé le mouvement des pions dont tu m'as indiqué les anomalies. Voici la partie concernant le pion blanc:
Code:
      0: begin   // white pawn
           // vérifier l'autorisation de déplacement
           bad := false;
           if (EndRow<=StartRow) or (EndRow>StartRow+2) then bad := true;
           if not bad then  if (StartRow>1) and (EndRow>StartRow+1) then bad := true;
           if not bad then if StartCol<>EndCol then begin
             if (StartCol<>EndCol-1) and (StartCol<>EndCol+1) then bad := true;
             if not bad then if fField[EndCol,EndRow].Piece=cpNone then bad := true;
             if not bad then if (fField[EndCol,EndRow].Piece<>cpNone) and (fField[EndCol,EndRow].Color=ccWhite) then bad := true;
           end else begin
             if not bad then if (EndRow=StartRow+2) and (fField[EndCol,EndRow-1].Piece<>cpNone) then bad := true;
             if not bad then if fField[EndCol,EndRow].Piece<>cpNone then bad := true;
           end;

           // déplacer le pion blanc
           if bad then begin
             s := 'Mouvement impossible';
           end else begin
             s := 'Déplacer Pion blanc de '+chr(64+StartCol)+chr(48+StartRow)+' en '+chr(64+EndCol)+chr(48+EndRow);
             victory := (fField[EndCol,EndRow].Piece=cpKing) and (fField[EndCol,EndRow].Color=ccBlack);
             if victory then s := s + '  *** VICTORE ***';
             fField[EndCol,EndRow].Piece := fField[StartCol,StartRow].Piece;
             fField[EndCol,EndRow].Color := fField[StartCol,StartRow].Color;
             if EndRow=7 then fField[EndCol,EndRow].Piece := cpQueen;           // white pawn gains a white queen !
             fField[StartCol,StartRow].Piece := cpNone;
             fField[StartCol,StartRow].Color := ccNone;
             NextMove := ccBlack;
             if victory then NextMove := ccNone;
             self.Paint;
           end;

           // log
             if Trace<>0 then SendMessage(Trace,WM_SetText,0,integer(@s[1]));
         end;

D'ailleurs, les tours blanches et noires peuvent bouger aussi, maintenant. Le reste suivra..

EDIT

Ces cavaliers blancs et noirs bougent aussi, maintenant !

EDIT

Les fous blancs et noirs bougent aussi, maintenant !

EDIT

Un pion arrivant sur la ligne de base adverse peut se changer en un officier au choix (tout, cavalier, fou ou reine). Un petit dialogue s'affiche automatiquement. Il suffit de cocher la bonen option (défaut: reine), et le pion est remplacé par la pièce choisie.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
jjn4

jjn4


Nombre de messages : 2704
Date d'inscription : 13/09/2009

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 15:59


Marc a écrit:
Pour mon jeu, je ne sais pas encore comment je vais opérer le déplacement.
Une autre possibilité serait de cliquer la pièce à déplacer puis cliquer la case de destination.
Oui, en général, dans les jeux d'échec électronique, c'est comme ça que ça marche,
l'ordinateur ne pouvant pas deviner quelle pièce on veut déplacer et où on veut la mettre Laughing
Bon courage pour la suite !
(je sens qu'un nouveau Kasparov est en train de naître...)
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 16:14

Dans ma version, les reines blanches et noires bougent aussi, maintenant !

Prochainement, les rois bougeront aussi. Et je suis en train de créer une fonction permettant de déplacer une pièce par programme, en donnant les oordonnées de départ et d'arrivée, avec tous les contrôles nécessaires. Cette fonction pourra également effectuer un Roque.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 17:07

Les rois blancs et noirs bougent aussi !

Maintenant, toutes les pièces sont mobiles, avec contrôle des règles de déplacement, de prise de pièces et de victire d'un camp ou d'un autre.

Prochaine étape: commander les deplacements par une fonction, y compris le roque.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 18:25

Les déplacements par programme sont maintenant possibles, y compris le grand et petit roque pour joeur blanc ou noir.

Voici un aperçu des fonctions créées:
Code:
CB% = dll_call6("CreateChessBoard",handle(dest%),IconSize%,left%,top%,CouleurSombre%,CouleurClaire%)
      dest% = numéro d'objet dans lequel l'échiquer doit apparaître
      IconSize:  taille des icônes   valeurs possibles: 16 ou 48
      left%, top%: position de l'échiquier dans l'objet dest%
      CouleurSombre%, CouleurClaire%: couleurs RBG pour les nuances des cases

      Résultat: CB% = identifiant de l'échiquer créé

res% = dll_call2("SetChessBoardTrace",CB%,handle(edit%))
      edit% = numéro d'un objet EDIT Panoramic recevant la trace de chaque mouvement

      Résultat: res%:  -1=erreur   0=ok

res% = dll_call6("MoveChessBoardPiece",CB%,StartCol%,StartRow%,EndCol%,EndRow%,Roque%)
      StartCol%, StartRow%: coordonnées de la pièce à déplacer (1...8)
      EndCol%, EndRow%: coordonnées de la case recevant la pièce à déplacer (1...8)
      Roque%:   0=pas de roque   1=petit roque  2=grand roque

      Résultat:  res%:   -1=erreur   0=ol

Si la pièce à déplacer n'appartient pas au joueur dont c'est le tour, le mouvement est rejeté et le tour reste à qui de droit.

Si un roque est demandé, les paramètres StartCol%,StartRow%,EndCol%,EndRow% sont ignorés.
Dans ce cas, le roque s'applique au joueur dont c'est le tour. Le tout passe au joueur opposé.

Quelque soit le type de mouvement demandé, il est soumis au contrôle des règles de déplacements et est rejeté si elles sont violées. Le tour reste au joueur ciblé par le mouvement. Si tout est valide, le résultat est affiché et le tour passe au joueur opposé.

Utilisation ?
Développer vos propres interfaces utilisateur, intégrer un jeu d'échecs dans une application (je rappelle que la taille des icônes peut être 48x48 pixels, mais également 16x16 pixels ce qui permet un "mini-jeu" parfaitement fonctionnel), même des démos "téléguidées" à l'aide de MoveChessBoardPiece et d'un timer, par exemple.

Il y aura bientôt une fonction permettant de "peubler" un échiquier afin de créer des exemples, de démstration de problèmes d'échecs etc.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 20:40

Bonsoir à tous !

@Klaus
Je rentre à la maison et je vois que tu as abattu un travail énorme !

Quelle belle avancée !

Merci pour le code source d’exemple pour le pion, et merci pour tout le reste !

Je vais prendre un peu de temps pour tester ton jeu. Je continuerai le mien ultérieurement.
Revenir en haut Aller en bas
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyLun 18 Jan 2021 - 21:53

Eh bien, en voilà encore un rajout important: le peuplement du plateau avec une configuration quelconque !

On prépare la configuration dans un MEMO, et on appelle:
Code:
res% = dll_call3("PopulateChessBoard",CB%,handle(memo%),StartColor%)
    memo% = numéro d'un objet MEMO contenant la configuration
    StartColor: couleur du joueur de départ    1=blanc  2=noir

Voici le programme de démo avec un bouton de peuplement:
Code:
' test_jeu_echecs.bas

label peupler

dim res%, w%, h%, hc%, x1%, y1%, row1%, col1%, x2%, y2%, row2%, col2%, CB%

w% = 1 + 8*(48+1)
h% = w%
width 0,w%+50
height 0,h%+200
button 101 : top 101,50+h%+10 : left 101,10 : width 101,w% : caption 101,"Peupler l'échiquer avec un exemple"
  on_click 101,peupler
edit 102 : top 102,top(101)+30 : left 102,10 : width 102,w%
memo 103 : hide 103 : bar_both 103

dll_on "KGF.dll"

CB% = dll_call6("CreateChessBoard",handle(0),48,10,50,hex("8080FF"),hex("FFF0F0"))
res% = dll_call2("SetChessBoardTrace",CB%,handle(102))

end
 
peupler:
  clear 103
  item_add 103,"*****k**"
  item_add 103,"**b*****"
  item_add 103,"******r*"
  item_add 103,"********"
  item_add 103,"********"
  item_add 103,"**Q*****"
  item_add 103,"*****K**"
  item_add 103,"********"
  res% = dll_call3("PopulateChessBoard",CB%,handle(103),1)
  if res%<0 then message "Echec du peublement"
  return

P.S.
Faudra recharger KGF.dll, bien sûr !

Pour le codage du conten du mémo, il faut:
- 8 lignes de 8 caractères (chaque caractère représentant une case)
- le caractère "*" représente une case vide
- les caractères an majuscules sont des pièces blanches
- les caractères an minuscules sont des pièces noires

Les pièces sont codées comme suit:
- PRHBQK = Pawn (pion), Rook (tour), Horse (cavalier), Bishop (fou), Queen (reine), King (roi), couleur blanche
- idem avec prhbqk pour la couleur noire

Amusez-vous ! Cela devrait même permettre de jouer contre l'ordinateur (l'ordinateur utilisant la fonction MoveChessBoardPiece pour jouer ses coups, et le joueur humain utilise la souris pour déplacer ses pions. Il vous reste à inventer une intelligence artificielle pour animer le jeu de l'ordinateur.

Je peux même créer une fonctionnalité de mémoire des coups, avec possibilité d'annulation de chaque coup, jusqu'à la configuration de départ, si cela intéresse quelqu'un. Tel que c'est conçu, ce serait extrêmement simple.

EDIT

Petit ajout de fonctionnalité: la prise "en passant" d'un pion par un autre est implémentée, selon les règles du jeu d'échecs.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMar 19 Jan 2021 - 18:47

Excellent !
Bravo Klaus !

Reste un petit bug "violation..." lorsque l'on clique dans les dix derniers pixels de la colonne H.
J'ai matérialisé cette zone en bleu :

Jeu d'Echecs Klaus_12

Bonne continuation !

Edit : J'ai évalué la zone critique à une largeur de 10 pixels, ce serait plutôt 15, voire 20 pixels de large.
Revenir en haut Aller en bas
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMar 19 Jan 2021 - 20:10

Merci pour le diagnostic, Marc ! J'avais noté des crashs aléatoires, mais je n'avais pas pu trouver un diagnistic aussi précis. Cela me permettra de corriger ce problème.

As-tu vu le roque et la prise "en passant" ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMar 19 Jan 2021 - 20:59

@Klaus,

En fait, les coordonnées sont légèrement décalées en abscisse sur toutes les cases. Ceci explique peut-être le plantage en fin de ligne, colonne H.

Je n’ai pas réussi à effectuer le grand ou le petit roque. Je pense avoir bien respecté les règles dictées dans Wikipédia pour roquer :

"Les conditions suivantes sont nécessaires pour pouvoir roquer :
1. aucune pièce ne se trouve entre le roi et la tour concernée ;
2. le roi et la tour concernée n'ont encore jamais joué ;
3. le roi n'est pas en échec ;
4. la case traversée par le roi n'est contrôlée par aucune pièce adverse."


Je ne peux pas déplacer le roi de deux cases pour provoquer le roque.


La prise en passant : excellent ! cheers
Revenir en haut Aller en bas
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMer 20 Jan 2021 - 0:42

Citation :
Je ne peux pas déplacer le roi de deux cases pour provoquer le roque.
Je n'ai pas pu imaginer un moyen non équivoque pour commander cela par la souris. Désolé. Mais le roque est accessible via la fonction MoveChessBoardPiece, par son dernier paramètre. Il suffit de placer un bouton dans la fenêtre et d'appeler cette fonction dans la routine ON_CLICK du bouton.

Par contre, je remarque que je n'ai pas eu conscience de toutes les conditions nécessaires pour le roque. Je vais intégrer cela dans mes contrôles.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMer 20 Jan 2021 - 2:04

Le codage des contrôles du roque est en cours, selon les règles que tu as postées.

J'ai trouvé un moyen simple de commander le roque par la souris: faire glisser le roi sur la case vide juste à-côté de la tour. La distance horizontale dépassant alors 1 case, je déclenche le contrôle de légalité pour le roque potentiel. Si tout est bon, j'effectue le roque, sinon je rejette le déplacement.

J'ai déjà le contrôle si les cases entre le roi et la tour sont vides (condition 1).
Je suis en train de coder la condition 2: ni roi ni tour concernée ont bougé auparavant.
Les conditions 3 et 4 étant similaires (une aucune pièce adverse ne doit menacer la case concernée), ce contrôle sera réalisé en bloc après la condition 2.

Je te suis très reconnaissant de m'aider à progresser ainsi !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMer 20 Jan 2021 - 7:29

Citation :
J'ai trouvé un moyen simple de commander le roque par la souris: faire glisser le roi sur la case vide juste à-côté de la tour.

Ceci n’est valable que pour le petit roque.

La détection serait plutôt :

Si le roi se déplace de 2 cases en abscisse, vers la droite ou vers la gauche, alors il y a roque.

Ce déplacement exceptionnel du roi de 2 cases n’étant autorisé que si les 4 conditions énumérées sont vraies.

Jeu d'Echecs Klaus_13

Puis, si un déplacement de 2 cases a été effectué, alors la tour concernée prend sa nouvelle place.



Autre approche :

Pour les blancs :
Si les 4 conditions énumérées sont remplies, alors le roi est autorisé à se déplacer de 2 pas.
Si le roi se déplace en G1 alors petit roque, la tour H1 va en F1
Si le roi se déplace en C1 alors grand roque, la tour A1 va en D1

Pour les noirs :
Si les 4 conditions énumérées sont remplies, alors le roi est autorisé à se déplacer de 2 pas.
Si le roi se déplace en G8 alors petit roque, la tour H8 va en F8
Si le roi se déplace en C8 alors grand roque, la tour A8 va en D8
Revenir en haut Aller en bas
Klaus

Klaus


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

Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs EmptyMer 20 Jan 2021 - 10:59

J'ai progressé pour le roque. En déplacement du roi de deux cases latéralement, on vérifie que les conditions 1 et 2 sont remplies. Dans ce cas, le roque est effectué automatiquement.

Je suis en train de coder les conditions 3 et 4..
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Jeu d'Echecs Empty
MessageSujet: Re: Jeu d'Echecs   Jeu d'Echecs Empty

Revenir en haut Aller en bas
 
Jeu d'Echecs
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: