1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

[Travail collectif] Projet commun : Echecs

Discussion dans 'Windev' créé par channibal, Juil 6, 2018.

  1. obir

    obir Member

    Inscrit:
    Jan 1, 2018
    Messages:
    78
    J'aime reçus:
    78

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour a toutes et a tous,

    Comme je suis en vacances (techniquement :) ) et que je ne peux pas partir en vacances (pratiquement :D ) et que la Coupe de Monde n'est plus intéressante :( et que le Tour de France ne l'est plus depuis les affaires de dopage :( je me suis penché sur mes archives, pas de l’époque de Basic, c++ ou de pascal, mais celles des anciennes versions de windev. Oui je suis accro :)
    Alors une idée m'a venu a l’esprit:
    J'ai travaillé en collectif, depuis le PFE (comme la plus part de nous tous) jusqu’à des gros projets qui nécessitent plus d'organisation et d'effort, et je sais, par expérience, que c'est très intéressant d’échanger les idées et les manières de faire entre des développeurs sur un même projet. Il y a toujours des différentes manières de faire, ce qui met en évidence la créativité du cerveau humain. Si vous avez vécu cette expérience vous me comprendriez facilement.
    L'idée est de mettre en ligne un petit projet, avec une version 0 par exemple, et de fixer un but, une tache a faire, pour passer a la version suivante.
    J'ai trouvé des petits projets genre: sudoku, jeux de cartes, Motus , des chiffres et des lettres, les échecs ... c'était des projets de dimanche ou quand j'avais pas trop de boulot, bref, je passai le temps tout en enrichissant ma maitrise du langage. Et ça m'a beaucoup aidé dans mon long parcours (bientôt 30 ans de programmation et de développement dont 18 ans de windev!) alors pourquoi ne pas en faire profiter des autres ;)

    Si vous êtes d'accord je vous propose, pour commencer, un projet de jeu d’Échecs, version 14 d'origine je crois, que je viens de le passer à la version 22. j'ai choisi les échecs parce que, contrairement aux apparences, est très simple a le faire oui je vous assure ;)

    Nom de projet : Chess
    La méthode de développement : Procédurale. (Pas de POO pour que tout le monde y trouve son bonheur)
    Progression : Je dirais 10%
    Les interfaces moderne des jeux d’Échecs se base sur les puissants moteurs existants et ne font qu’interpréter les commandes en visuel, chose qu'on va pas le faire dans ce projet ;)
    Pas d'utilisation de moteurs, pas encore.
    Si on va intégrer des moteurs comme Stockfish, Houdini, Rybka ..., pour les calculs, contrôle des coups et l'analyse alors ça ne va pas nous laisser grande chose a faire et on aura qu'un simple interface graphique.
    Alors que le but initial est de TOUT faire par nous même ou presque :)
    L’intégration des moteurs sera dans l'étape finale.

    Je vais pas proposer une tache a faire (pas encore) je vous laisse le temps de comprendre la démarche que j'ai choisi et de poser les questions pour qu'on puisse partir sur la même base.

    PS : N'oubliez pas que le but initial est d'exploiter au maximum le langage de programmation pour mieux maitriser notre outil de travail ;)

    Voici le projet.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bonnes vacances :D
    Cliquez pour agrandir...
    ______________________________________________________________________________________
    Conception d'un jeu d'échecs
    En cherchant des exemples à étudier, je suis tombé sur un programme court, rapide et d'un niveau de jeu correct, que je vais bientôt présenter aux "fekwxiens" Commissaires,
     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Avons-nous le droit de critiquer ?
    Je sais très bien qu’il n’y a pas qu’une façon de programmer,
    mais un avis peu aider dans le futur, qu’il soit constructif ou pas.

    L’idée des cases vides sur l’image permet d’avoir tout de suite la zone cliquée,
    et pour les débutants, les aider en affichant le fond d’une couleur différente.
    Car si ce n’est pas pour ce cas, une simple formule aurait pu faire l’affaire dans le clic de l’image,
    pour connaitre les coordonnées du plateau de 0 à 7 :
    Code (Text):
    info(arrondi((SourisPosX() - IMG_Image1..X) / (IMG_Image1..Largeur / 8)) + ":" + Arrondi((SourisPosy() - IMG_Image1..Y) / (IMG_Image1..Hauteur / 8)))
    Sur le bouton nouveau, j’aurai caché le déplacement des pièces, en désactivant l’affichage de la fenêtre,
    et c’est plus rapide : FEN_Principale..AffichageActif = Faux
    et réactivé avant le chrono, mais bon, ce n’est que de l’esthétisme.

    J’aurais comme même une vraie remarque, c’est au sujet de l’optimisation,
    bon j’ai trouvé quelque chose qui n’est pas transcendant, mais récurrent dans le code,
    et si on commence à faire des traitements pour rien, la partie risque d’être longue ;).

    RelevePosition :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    DeplacementValide :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    MovePiece :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Les boucle n’ont pas une grosse occurrence, mais ça ne sert à rien de continuer,
    il faut utiliser SORTIR dans le SI, petit à petit … oui, je sais, je chipote un peu.

    Un autre conseil, n’utilise pas TRACE directement, pour debugger il faut pourvoir l’activer ou pas.
    Tu devrais utiliser une méthode, par exemple AfficheTrace avec la méthode TRACE à l’intérieur pour
    pouvoir mettre la ligne de TRACE en commentaire quand tu en n’as plus besoin.

    A mettre dans les procédures globales :
    Code (Text):
    PROCÉDURE AfficheTrace(*)
    Trace(MesParamètres)
    Une chose que je n’ai pas compris, c’est pourquoi la procédure RemplireTableauTapie est en globale ?

    Et évitez d’utiliser les variables i, j, c, xx …, quand on peut leurs donner un sens pour le lecteur.
    Par exemple dans RemplireTableauTapie, "j" aurait dû se nommer nLigneInverse (par ex),
    Et "i" en "nColonne", cela t’aurait permis de voir que "i" et "nCol" sont les mêmes.
    Il ne faut pas "coder" le code, mais en faire un livre pour les autres.

    Je n’ai pas tout regardé, mais c’est propre et ça le mérite de fonctionner,
    et en tout cas, c’est du bon boulot.

    A+.

    Edit :


    Le lecteur, ce serait peut-être vous dans 10 ou 15 ans pour debugger,
    vous serez content de pourvoir lire une partie du code sans essayer de tout comprendre,
    et en ayant aucun souvenir de comment cela s’articule.
     
    #22 FreudWD, Juil 13, 2018
    Dernière édition: Juil 13, 2018
    lpcpgc et joker aiment ça.
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    Bonsoir,

    Enfin des créatiques :) ça me fait plaisir :D

    Je vais pas prendre cas par cas, mais oui t'as raison sur l’ensemble.

    C'est normal que le code ne soit pas optimisé. J'ai dis dans le premier post que "c'était des projets de dimanche ou quand j'avais pas trop de boulot" qui m'ont pas pris beaucoup de temps.

    Généralement lorsque je suis sur un projet professionnel, de 30, 60 voir même 90 jours ou plus selon le final deadline, je passe facilement de 10 à 16 heures par jours, y compris les weekends, en programmation. Après, le projet passe à l’étape d'optimisation avant le déploiement chez les clients. Donc pas de souci je ne plaisante pas au boulot :p

    Le code de ce projet n'est pas parfait et le but était/est de l’améliorer en collectif, tous ensemble :D donc tes remarques entrent forcement dans ce même cadre et je t'invite a faire les modifs et a poster une nouvelle version avec les correctifs (+une solution pour les prises par exemple :) )

    Merci encore pour l’intérêt que t'a porter a l'idée
     
    lpcpgc et joker aiment ça.
  • WX1331

    WX1331 Well-Known Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    614
    J'aime reçus:
    679
    Moi j'ajouterai pour améliorer le programme d'échecs, il faut ajouté pour une pièce donnée les différents endroits ou elle pourra se placer.

    Salutations
     
    #24 WX1331, Juil 13, 2018
    Dernière édition: Juil 13, 2018
    channibal apprécie ceci.
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Code du dimanche ou pas, tu n’as pas les bons reflets, oublie les phases d’optimisation, le code tu le conçois nickel une fois pour toute,
    tu ne reviens pas dessus après l’avoir testée et validé, c’est la pire façon d’injecter des effets de bord. Je dis ça, mais tu fais comme tu veux.

    Par exemple, tu gères à la fois gbSelection et gnIDPiece_Selectionnee, le premier on comprend bien,
    mais le second, à la deuxième boucle pour rechercher quelle pièce est sélectionnée par le nom, je me serais dit que je ne stock pas la bonne valeur.
    Le reflex aurait été d’utiliser nIDPiece_Selectionnee pour stocker d’indice du tableau des pièces, et quand-t-il est à 0, c’est qu’il n’y a pas de sélection,
    fini les boucles de recherche et la variable gbSelection.

    Réfléchir avant de coder, c’est du gain de temps et d’argent.
    Je ne critique pas pour critiquer, mais pour que vous ayez les bons reflexes,
    moi je dis qu’il faut plutôt en profiter, que de se braquer.

    Bon, je n’ai pas changé grand-chose malgré les critiques, juste un petit peu,
    Mais je t’ai mis les captures, il manque le "en passant" des pions.
    J’ai aussi ajouté la dé-sélection.

    A+.

    PS : Zut, ce n’était pas le bon lien :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (en WD22)
     
    #25 FreudWD, Juil 13, 2018
    Dernière édition par un modérateur: Juil 14, 2018
    joker apprécie ceci.
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    Bonsoir a tous,

    Une nouvelle version

    - Restructuration totale niveau code
    - Alternance entre les 2 joueurs
    - Alternance entre les 2 horloges (2 chronos et 2 Timer).
    - Prises
    - Ajout de son
    - Ajout d'un système de notation des coups (il faut installer la police de caractère Figurine Symbole T2: les deux fichier FIG-TB-2 et FIG-TN-2 qui se trouvent dans le répertoire ressources)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bon dev
     
    #26 channibal, Juil 15, 2018
    Dernière édition: Juil 15, 2018
    bindev, WX1331 et joker aiment ça.
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Il manque la prise en passant, j’ai fait ça, mais je ne sais pas si tu pourras le récupérer.

    Bon, j’ai fait un peu le ménage, je suis vraiment désolé, je n’ai pas pu me retenir.
    Même si je suis un peu maniaque, tu pourrais jeter un œil pour voir comment, avec un minimum,
    cela serait un délice pour le lecteur (et toi dans 5 ans), et là je n’ai pas osé tout casser.

    L’utilisation d’une énumération, ce n’était pas pour faire beau, c’était pour tous les coups spéciaux, aussi bien le "en passant", que les échecs.
    Mais là, avant de coder, il aurait fallu avoir une bonne vision de ce qu’on doit réaliser,
    et de ne pas faire du one shot, comme tu as tendance à faire et défaire en permanence.
    Ne le prends pas mal, ce n’est pas que pour toi.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    A+.
     
    #27 FreudWD, Juil 16, 2018
    Dernière édition: Juil 16, 2018
    joker apprécie ceci.
  • Partager cette page

    Chargement...