IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Codes sources à télécharger Delphi Discussion :

Mini-jeu d'échecs jouable à deux joueurs à l'aide de la souris


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 133
    Points
    133
    Billets dans le blog
    1
    Par défaut Mini-jeu d'échecs jouable à deux joueurs à l'aide de la souris
    J'ai créé un composant ChessBoard qui implémente un plateau de jeu d'échecs.

    Tout est entièrement écrit en Delphi 6 Personal Edition.
    L'unité Chess.pas (implémentant le composant que j'ai créé) est un extrait de ma vaste DLL de soutien à un autre langage.

    Les couleurs "sombre" et "claire" des cases sont paramétrables.
    Les pièces sont jouables en les "tirant" avec la souris pour les "lâcher" dans la case cible.
    Chaque mouvement est soumis au contrôle des règles de déplacement du jeu d'échecs et un mouvement invalide est rejeté.
    Le premier mouvement revient à la couleur blanche, pour alterner ensuite.
    La prise d'un pion "en passant" est implémentée.
    Le roque est implémenté avec les conditions requises pour le roque.
    Pour roquer, il suffit de déplacer le roi de deux cases vers la tour concernée.
    Si le roque est autorisé, roi et tour bougent automatiquement.
    La prise d'une pièce adverse est autorisée.
    La mise en échec du roi adverse est détectée.
    La prise du roi adverse est détectée comme "victoire".

    Initialement, le plateau est rempli avec la configuration de base standard.
    Une configuration personnalisée peut être chargée via un bouton "Peupler.."
    Ce bouton utilise le contenu d'un MEMO invisible (8 lignes de 8 caractères) comme définition de la configuration à charger.
    Ce code contient une documentation complète des caractères à placer dans ce mémo pour définir une configuration.
    Ceci peut être utilisée pour essayer de résoudre un problème d'échec publié dans un journal, par exemple.

    Le projet complet se trouve dans un fichier ZIP en pièce jointe.

    Voici à quoi ressemble l'écran initial:
    Nom : ChessGame.JPG
Affichages : 65
Taille : 53,1 Ko
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 052
    Points : 5 069
    Points
    5 069
    Par défaut
    salut

    l'affichage ne devrais être qu'une boucle sur un tableau
    pour moi trop de confusion entre l'affichage et le traitement mais ce n'est que mon avis


    en regardant le code .... j'ai trouvé un illogisme dans une fonction

    la fonction est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsRoqueLegal(CP: TChessPanel; Roque: TChessRoque): boolean; stdcall;
    dans le si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if CP.NextMove=ccWhite then begin
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (CP.Piece[4,0]<>cpKing) and (CP.Color[0,4]<>ccWhite) then exit;
    sinon donc le cas ou le prochain mouvement est sombre
    tu as ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (CP.Piece[4,7]<>cpKing) and (CP.Color[0,4]<>ccWhite) then exit;
    alors que pour le large
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (CP.Piece[4,7]<>cpKing) and (CP.Color[0,4]<>ccBlack) then exit;
    je pense qu'il y a un loupé quelque part

    bon j'ai pas approfondi mais il a l'air sympa ...
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 918
    Points : 25 697
    Points
    25 697
    Par défaut
    sympa...je n'ai pas regardé le code, mais je constate une faiblesse, quand on est en échec, il est possible de jouer n'importe quel coup et rester en échec.

    NB: le projet compile sans problème sous Delphi Sydney

    et on obtient quelques conseils intéressants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [dcc32 Conseil] chess.pas(299): H2164 La variable 'col' est déclarée mais jamais utilisée dans 'TChessPanel.IsAdverseCheck'
    [dcc32 Conseil] chess.pas(299): H2164 La variable 'row' est déclarée mais jamais utilisée dans 'TChessPanel.IsAdverseCheck'
    [dcc32 Conseil] chess.pas(300): H2164 La variable 'found' est déclarée mais jamais utilisée dans 'TChessPanel.IsAdverseCheck'
    [dcc32 Avertissement] chess.pas(357): W1035 La valeur de retour de la fonction 'TChessPanel.IdentifyPiece' peut être indéfinie
    [dcc32 Conseil] chess.pas(431): H2077 La valeur affectée à 'res' n'est jamais utilisée
    [dcc32 Conseil] chess.pas(444): H2164 La variable 'c' est déclarée mais jamais utilisée dans 'DoesPieceMenaceField'
    [dcc32 Conseil] chess.pas(444): H2164 La variable 'r' est déclarée mais jamais utilisée dans 'DoesPieceMenaceField'
    [dcc32 Conseil] chess.pas(444): H2164 La variable 'i' est déclarée mais jamais utilisée dans 'DoesPieceMenaceField'
    [dcc32 Conseil] chess.pas(655): H2077 La valeur affectée à 'victory' n'est jamais utilisée
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 133
    Points
    133
    Billets dans le blog
    1
    Par défaut
    sympa...je n'ai pas regardé le code, mais je constate une faiblesse, quand on est en échec, il est possible de jouer n'importe quel coup et rester en échec.
    Merci pour la remarque. Je vais bloquer cela.

    Je vais regarder également la liste des avertissements. Pour épurer le code...

  5. #5
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 133
    Points
    133
    Billets dans le blog
    1
    Par défaut
    Voici l'obligation de résoudre la situation d'échec au roi avant de jouer une pièce quelconque. Je regarderai les avertissements plus tard.
    Exemple:
    Nom : ChessGame1.JPG
Affichages : 48
Taille : 56,6 Ko
    Dans cette situation, on ne peut jouer que:
    - le cavalier de B8 vers D7
    - le fou de C8 verd D7
    - la dame de D8 à D7
    Tous les autres coups des noirs sont refusés.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 052
    Points : 5 069
    Points
    5 069
    Par défaut
    salut

    j'ai pas du etre assez clair


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    // check if a rook is legal for the active color
    function IsRoqueLegal(CP: TChessPanel; Roque: TChessRoque): boolean; stdcall;
    ...
    var
      col: integer;
    begin
      result := false;                                                                 // technical error
      try
        case Roque of
          crSmall: begin         // petit roque du joueur dont c'est le tour
                     if CP.NextMove=ccWhite then  
                     begin // Cas des Blanc
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,0]<>cpKing) and (CP.Color[0,4]<>ccWhite) then exit;
                       ....
                       if (CP.Piece[7,0]<>cpRook) and (CP.Color[0,7]<>ccWhite) then exit;
                       //  2. le roi et la tour concernée n'ont encore jamais joué ;
                        ....  
                       for col:=4 to 6 do if DoesPieceMenaceField(CP,col,0,ccBlack) then exit;
                     end  else
                    begin    // Cas des noir
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,7]<>cpKing) and (CP.Color[0,4]<>ccWhite) then exit;
                        ...
                       if (CP.Piece[7,7]<>cpRook) and (CP.Color[0,7]<>ccWhite) then exit;
                        ......                  
                        // ne serait ce pas plutot ccBlack
                        for col:=4 to 6 do if DoesPieceMenaceField(CP,col,7,ccWhite) then exit;
                     end;
                   end;
          crLarge: begin         // grand roque du joueur dont c'est le tour
                     if CP.NextMove=ccWhite then 
                    begin  // Cas des Blancs
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,0]<>cpKing) and (CP.Color[0,4]<>ccWhite) then exit;
                       ...                     
                       if (CP.Piece[0,0]<>cpRook) and (CP.Color[0,0]<>ccWhite) then exit;
                        ..... 
                       for col:=1 to 4 do if DoesPieceMenaceField(CP,col,0,ccBlack) then exit;
                     end else begin  // Cas des Noir
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,7]<>cpKing) and (CP.Color[0,4]<>ccBlack) then exit;
                       ....
                       if (CP.Piece[0,7]<>cpRook) and (CP.Color[0,0]<>ccBlack) then exit;
                       ....
                       for col:=1 to 4 do if DoesPieceMenaceField(CP,col,7,ccWhite) then exit;
                     end;
                   end;
        end;
        result := true;
      except
      end;
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 133
    Points
    133
    Billets dans le blog
    1
    Par défaut
    Oui, l y avait des erreurs d'indice. Je pense que c'est corrigé maintenant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    // check if a rook is legal for the active color
    function IsRoqueLegal(CP: TChessPanel; Roque: TChessRoque): boolean; stdcall;
    {
      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.
      The followong conditions must be valid before a rook can happen:
        1. no other piece must be present between the king and the concerned rook
        2. the king and the concerned rook must never have moved
        3. the king must not actually be menaced
        4. the case traversed by the king must not be menaced by any adverse piece
    }
    var
      col: integer;
    begin
      result := false;                                                                 // technical error
      try
        case Roque of
          crSmall: begin         // petit roque du joueur dont c'est le tour
                     if CP.NextMove=ccWhite then begin
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,0]<>cpKing) and (CP.Color[4,0]<>ccWhite) then exit;
                       if (CP.Piece[5,0]<>cpNone) then exit;
                       if (CP.Piece[6,0]<>cpNone) then exit;
                       if (CP.Piece[7,0]<>cpRook) and (CP.Color[7,0]<>ccWhite) then exit;
                       //  2. le roi et la tour concernée n'ont encore jamais joué ;
                       if CP.WhiteKingMoved then exit;
                       if CP.RightWhiteRookMoved then exit;
                       //  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.
                       for col:=4 to 6 do if DoesPieceMenaceField(CP,col,0,ccBlack) then exit;
                     end else begin
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,7]<>cpKing) and (CP.Color[4,7]<>ccBlack) then exit;
                       if (CP.Piece[5,7]<>cpNone) then exit;
                       if (CP.Piece[6,7]<>cpNone) then exit;
                       if (CP.Piece[7,7]<>cpRook) and (CP.Color[7,7]<>ccBlack) then exit;
                       //  2. le roi et la tour concernée n'ont encore jamais joué ;
                       if CP.BlackKingMoved then exit;
                       if CP.RightBlackRookMoved then exit;
                       //  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.
                       for col:=4 to 6 do if DoesPieceMenaceField(CP,col,7,ccWhite) then exit;
                     end;
                   end;
          crLarge: begin         // grand roque du joueur dont c'est le tour
                     if CP.NextMove=ccWhite then begin
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,0]<>cpKing) and (CP.Color[4,0]<>ccWhite) then exit;
                       if (CP.Piece[3,0]<>cpNone) then exit;
                       if (CP.Piece[2,0]<>cpNone) then exit;
                       if (CP.Piece[1,0]<>cpNone) then exit;
                       if (CP.Piece[0,0]<>cpRook) and (CP.Color[0,0]<>ccWhite) then exit;
                       //  2. le roi et la tour concernée n'ont encore jamais joué ;
                       if CP.WhiteKingMoved then exit;
                       if CP.LeftWhiteRookMoved then exit;
                       //  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.
                       for col:=1 to 4 do if DoesPieceMenaceField(CP,col,0,ccBlack) then exit;
                     end else begin
                       //  1. aucune pièce ne se trouve entre le roi et la tour concernée ;
                       if (CP.Piece[4,7]<>cpKing) and (CP.Color[4,7]<>ccBlack) then exit;
                       if (CP.Piece[3,7]<>cpNone) then exit;
                       if (CP.Piece[2,7]<>cpNone) then exit;
                       if (CP.Piece[1,7]<>cpNone) then exit;
                       if (CP.Piece[0,7]<>cpRook) and (CP.Color[0,7]<>ccBlack) then exit;
                       //  2. le roi et la tour concernée n'ont encore jamais joué ;
                       if CP.BlackKingMoved then exit;
                       if CP.LeftBlackRookMoved then exit;
                       //  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.
                       for col:=1 to 4 do if DoesPieceMenaceField(CP,col,7,ccWhite) then exit;
                     end;
                   end;
        end;
        result := true;
      except
      end;
    end;
    Fichiers attachés Fichiers attachés

  8. #8
    Membre émérite
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    1 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 830
    Points : 2 664
    Points
    2 664
    Par défaut
    Bonjour,

    belle réalisation, il y a aussi celle de Roland Chastain :

    https://gitlab.com/rchastain/hopeless

    réalisé avec le moteur de jeu d'échecs WinBoard

    A+
    Charly

  9. #9
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 133
    Points
    133
    Billets dans le blog
    1
    Par défaut
    Pour finir cette présentation, voici une version avec deux améliorations:
    - correction d'une violation de mémoire en cliquant juste sur un des bords extérieurs
    - changer dynamiquement la taille des icônes de 48x48 vers 72x72 pixels et vice-versa
    (sans changer la situation du plateau !)
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 483
    Points : 33 674
    Points
    33 674
    Billets dans le blog
    42
    Par défaut
    Bonjour,

    Grillé par Charly910 , j'allais également signaler le travail de Roland Chastain

    J'imagine déjà ce que cela pourrait donner avec une nouvelle version de Delphi : version FMX, utilisation de SVG plutôt que Icones, etc. J'avoue qu'après le travail de Roland, les proposition d'Alain Weber niveau 3D j'y avais déjà pensé mais c'est un travail de retraité (ce qui n'est pas encore mon cas, 887j avant la quille)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  11. #11
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 918
    Points : 25 697
    Points
    25 697
    Par défaut
    et pour un rendu nickel il faudrait passer par un Shader

    https://www.shadertoy.com/view/tsGSDc

    j'ai fait un composant FMX pour utiliser directement un Shader comme texture...par contre sous Windows il faut utiliser du HLSL

    https://github.com/tothpaul/Firemonk.../SourceShaders

    pour ceux qui ne le savent pas, un Shader c'est un programme exécuté directement par la carte video, ça permet de faire des rendus de dingue en exploitant pleinement les capacités du processeur graphique.

    dans le cas de Shadertoy, on le voit bien c'est n'est pas Javascript qui fait le calcul, mais grâce à WebGL le source du Shader est exécuté par la carte graphique

    pour les pièces d'échec ci-dessous c'est du RayMarching que j'utilise ci-dessous

    https://github.com/tothpaul/Delphi/tree/master/3D

    j'en parle aussi dans cette vidéo (sans Shader au départ d'où le FPS très faible au départ)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #12
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : novembre 2006
    Messages : 579
    Points : 3 131
    Points
    3 131
    Billets dans le blog
    2
    Par défaut
    Je vais être hors sujet concernant le jeu d'échec mais pour compléter le message de Paul sur les shaders, je vous conseille la lecture de cette page de l’excellent blog d'Erik van Bilsen : https://blog.grijjy.com/2021/01/14/shader-programming/
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 133
    Points
    133
    Billets dans le blog
    1
    Par défaut
    J'ai ajouté une fonctionnalité sympatique: l'annulation coup par coup (Undo).
    Il y a un bouton pour cela, et il permet de revenir en arrière jusqu'à début de la partie.

    Le projet complet est dans le zip joint.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Projet d'IA pour un jeu à deux joueurs Reversi/Awale
    Par GemRire dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 24/03/2019, 22h01
  2. [Projet en cours] SupergunArena, jeu d'arène à deux joueurs.
    Par Uriopass dans le forum Projets
    Réponses: 39
    Dernier message: 04/07/2015, 21h00
  3. Jeu du pendu deux joueurs mode reseau
    Par jessikap dans le forum Débuter
    Réponses: 0
    Dernier message: 12/10/2014, 21h42
  4. [ancien jeu] Snake deux joueur en ligne?
    Par Extra-Nitro dans le forum Web
    Réponses: 7
    Dernier message: 28/02/2007, 19h59
  5. Jeu d'échec borland soap
    Par rpoulin dans le forum Web & réseau
    Réponses: 2
    Dernier message: 20/10/2005, 06h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo