Page 1 sur 3

Koyo K - Triple Triad en C++ (0.1d)

MessagePosté: 16 Aoû 08 à 10:29
par FFTiger
Post original

Salut tout le monde,

Je vais faire court :

http://sourceforge.net/projects/koyo-k/

Voilà, en résumer j'avais commencé à programmer un triple triad en C++ à l'époque où j'étais webmestre du site. Je ne le finirai pas, si quelqu'un souhaite le continuer, ça me ferait très plaisir. Tout ce dont vous avez besoin est sur sourceforge. Je vous conseille d'utiliser l'IDE codeblock. Il reste à peaufiner l'IA qui n'est pas terminé, à créer une interface graphique, et permettre le jeu en réseau. Bref tout reste à faire.

A l'époque j'avais essayé de faire un code clair, il ne devrait pas être trop difficile à déchiffrer, si vous avez des questions n'hésitez pas. Mais je risque de mettre un moment à répondre.

Merci aux modérateurs de laisser ce post le plus longtemps possible. Du moins assez longtemps pour qu'une grande part des visiteurs est le temps de le lire.

Mais...

Étant donné le peu d'enthousiasme... J'ai finalement décidé de poursuivre ce projet après 4 mois sans mise à jour, enfin au moins de terminer le moteur du jeu et donc l'IA. C'est chose faite, il subsiste peut être encore quelques bugs mais l'IA fonctionne et c'est peu dire étant donné la qualité de son jeu qui n'a rien à envier à celle de certains humains. C'est une vraie IA dans le sens ou elle ne triche pas, c'est à dire que tout ce dont elle dispose, le joueur en dispose lui aussi. En fait il ne restait que quelques heures de travail pour la faire fonctionner.

Particularités de ce TT

Je vais maintenant m'attarder sur les qualité de mon triple triad qui justifient à elles seules la poursuite du développement de celui-ci :

- Il est open-source, tout le monde peut en disposer et le modifier. Ainsi si le projet s'élargissait sur le jeu en réseau tous les sites sur ff ou autre d'ailleurs pourrait disposer de leur propre serveur, voir modifier le jeu pour y intégrer leurs propres règles ou autres. Et non désolé, qu'il aboutisse ou pas ce projet ne sera pas une exclusivité FFDream, c'est contraire au principe du logiciel libre.

- Il est multi-plateforme et fonctionne aussi bien sous un environnement Windows ou Unix (Linux, MAC OS X). Et il le restera car j'ai décidé que le projet utilisera Qt et OpenGL pour la GUI.

C'est dans cette optique très ouverte que j'ai programmé le moteur du jeu qui ne dispose que de très peu de limites et offre des possibilités qu'il est le seul moteur de triple triad actuel à offrir. A savoir :

- Un plateau de taille variable dont les dimensions peuvent même atteindre des proportions déraisonnables si voulu (j'ai déjà généré des plateaux de plusieurs millions de cases sur lesquelles il est bien entendu possible de jouer, par contre mieux vaut ne pas tenter d'afficher le plateau ou de faire joueur une IA dessus :D).

- Un nombre de joueur variable par partie, on peut faire des parties standards à deux joueurs mais aussi pourquoi pas des parties à 10 joueurs (en élargissant le plateau bien sur)

- Le moteur du jeu n'applique pas les règles à la partie mais au joueur. Cela signifie simplement que chaque joueur peut théoriquement être soumis à des règles différentes. Même si pour le moment je n'ai pas intégrer cette possibilité à mon client en invite de commande car cela obligerait à spécifier les règles à chaque fois qu'on ajoute un joueur. C'est une possibilité qui sera surement exploité lors de la création d'une interface graphique.

- Il est séparé du client, c'est ce qui permet de le contrôler actuellement avec une invite de commande tout en pouvant plus tard utiliser une interface graphique et tout ça sans modifier une seule ligne de code.

- Il est très facile d'ajouter de nouvelles règles... D'ailleurs le moteur supporte "murs cassés" mais je n'ai pas ajouté l'option à l'invite de commande pour des raisons évidentes :D (cependant il ne me faut pas plus de 5 secondes pour le faire). J'ai décidé de supporter d'entrer cette règle car si j'avais décidé de l'intégrer après coup, elle aurait demandé un très grand nombre de modifications. C'est une règle qui a en effet une place très particulière dans le moteur du jeu.


Avancement du projet

Image

Note : Oui j'ai fait exprès d'utiliser un plateau 4*4 sur cette image :D... Bien entendu vous pouvez jouer sur du 3*3.

Autre information il pèse actuellement 2800 lignes de code (un code très peu redondant). Il reste certainement quelques bugs, c'est pour ça que je vous invite à le tester. Oui, j'ai un gros défaut, j'ose rarement tester toutes les fonctionnalités du programme de peur de voir ressurgir des bugs... Ce qui fait que certaines fonctions élémentaires ne marchent parfois plus dans les dernières releases... Sachez cependant que si quelque chose ne marche pas, c'est bien une situation anormale et je ne suis certainement pas au courant.

J'ai d'ailleurs modifié l'affichage du plateau dans l'invite de commande pour lui donner une apparence plus proche du triple triad de Myst6re sur calculatrice. Cela va vous permettre de le tester même si vous avez un QI inférieur à 150 :D... L'ancien affichage n'était en effet pas très intuitif. A noter que les cartes que possède le joueur sont toujours affichées ainsi : Nom NORD EST SUD OUEST IdElement. À noter qu'il faut utiliser des noms de moins de 6 lettres pour les cartes et les joueur. De plus je ne l'ai testé que sous Windows. Si vous souhaitez utiliser l'ancien affichage (qui supporte les noms longs), aller dans les options pour rétablir l'ancien affichage.

Maintenant je rêve de faire des tests pour opposer mon IA à celle de la PS1 et celle de Myst6re (l'auteur du TT sur ti 83/84 +) les deux seules à ma connaissance. À noter que la mienne agit suivant trois facteur qu'il est possible de régler (un réglage qu'il faut effectuer avant la création de l'IA pour qu'il prenne effet !) : La défense (placer ses cartes de façon la moins vulnérable possible), l'offense (joueur LE coup qui fera perdre le plus de carte à l'adversaire), et la prévoyance (garder les meilleures cartes pour la fin). À noter que mon IA est actuellement capable de trouver LE meilleur coup pour chacun de ces trois attributs et ce quelques soient les règles. La difficulté est de savoir donner une importance à chacun d'eux. Même si dans la configuration par défaut, elle joue déjà très bien. Surtout avec des règles complexes comme plus, identique, combo ou elle trouve à coup sûr le coup pour tout retourner (s'il existe ;-)) ! N'oubliez pas non plus que quand vous jouez contre l'IA vous pouvez voir ces cartes (interface de test oblige) mais, elle, joue comme si elle ne les voyait pas !

Et tout ce que je dis n'est pas de l'ordre de la prévision mais bien des possibilités actuelles du moteur. Voilà, j'espère vous avoir convaincu que malgrès son apparence actuelle, ce projet avait du potentiel.

Vous l'aurez compris maintenant c'est des gens qui ont une expérience avec Qt et OpenGL dont le jeu à besoin, pour le réseau ca viendra plus tard. Si vous êtes partant faites moi signe. Personnellement je ne connais pas OpenGL, je me formerai sur le tat, ce n'est pas vraiment un problème (j'ai déjà réalisé une démo technique avec des cartes).

Astuce

Dernier point l'invite de commande actuelle est faite de telle façon qu'il est très facile pour les novices pour de se servir de mon IA, pour qu'elle lui indique le meilleur coup à jouer dans sa partie de FF8, ou tout simplement lors d'une partie en réseau (je sens que je vais pas me faire que des amies ^^). Il suffit de reproduire la partie avec l'invite et de faire jouer mon ia à votre place, vous vous jouerez à la place de votre adversaire en vous ajoutant les cartes qu'il pose en cours de partie (seul bémol c'est elle qui doit vous remplacer du début à la fin, avant bien sur que j'ajoute le support de la substitution joueur/IA).

À propos de cet invite de commande justement, n'ayez pas peur, aucune connaissance particulière en informatique n'est nécessaire pour l'utiliser (à moins que vous ne sachiez écrire et appuyer sur entrer :)).

Se procurer l'exécutable et les sources

Exécutable :

https://sourceforge.net/projects/koyo-k/

Rappel : Il s'agit d'une interface pour tester le moteur de jeu et non pour jouer au jeu... N'espérer pas vous amuser beaucoup... Désoler mais ce n'est pas encore la priorité du projet.

Voici le lien pour visualiser les sources :
http://koyo-k.svn.sourceforge.net/viewvc/koyo-k/trunk/

Et celui du dépôt svn (utilisez TortoiseSVN) :
https://koyo-k.svn.sourceforge.net/svnroot/koyo-k

MessagePosté: 08 Sep 08 à 23:22
par Laupif
ça peut paraitre c*n comme question mais c'est quoi un triple triad ?

MessagePosté: 08 Sep 08 à 23:24
par yoda
Le jeu de cartes de FF8 non ?

MessagePosté: 08 Sep 08 à 23:38
par Laupif
Je n'ai pas joué à FF8 mais si vous trouvez un exemple du jeu quelques part je peux peut être m'en occuper ou du moins faire avancer le tout.

MessagePosté: 09 Sep 08 à 06:28
par shadow_project11
GHYAAAAAAAAAAAAAA PAS DU C++!!!

Enfin bon pardon, je vais jeter un coup d'oeil, ca pourrait etre sympa...

Si j'ai le courage^^

MessagePosté: 09 Sep 08 à 15:13
par TheUltimaSephiroth
Moi j'ai déjà récupéré les sources :wink: Par contre, il faudrait que j'analyse bien le code x)

MessagePosté: 09 Sep 08 à 15:39
par cloud02000
je confirme que le triple triad est bien le jeu de carte de FF8 !

plus d'infos "içi"

MessagePosté: 21 Sep 08 à 16:53
par FFTiger
Au fait pour ceux qui ne connaissent pas trop sourceforge voici comment accéder aux sources :

http://koyo-k.svn.sourceforge.net/viewvc/koyo-k/trunk/

MessagePosté: 25 Sep 08 à 15:22
par FFTiger
Petite mise à jour du premier post suite à des modifications majeures. Voir ci dessus.

MessagePosté: 25 Sep 08 à 18:14
par TheUltimaSephiroth
Pour la SDL je vois l'utilité (j'ai déjà un peu regardé à ton code), mais pour l'OpenGL ? Il sera utilisé dans quel cas ^o) ? Pourquoi ne pas tout faire en OpenGl ?

(J'ai update à la dernière révision ;) )

MessagePosté: 25 Sep 08 à 18:17
par Invité
Il se joue sur son pc ? c'est comme le VIII en toute qualité et tout ?

Trop de lien a télécharger je comprends rien...

C'est un projet qu'est en cours ? pas encore terminé quoi ?

MessagePosté: 25 Sep 08 à 18:19
par TheUltimaSephiroth
La partie graphique n'est pas finie (à peine commencée) pour l'instant ça fonctionne en invite de commande.

Sinon oui, c'est un projet à FFT :)

MessagePosté: 25 Sep 08 à 18:21
par Invité
Bon dans ce cas j'attendrais la forme final du projet ,en esperant tout avoir dans le dossier sans trucs a déziper et tout.

MessagePosté: 25 Sep 08 à 19:42
par FFTiger
TheUltimaSephiroth a écrit:Pour la SDL je vois l'utilité (j'ai déjà un peu regardé à ton code), mais pour l'OpenGL ? Il sera utilisé dans quel cas ^o) ? Pourquoi ne pas tout faire en OpenGl ?

(J'ai update à la dernière révision ;) )


En fait je veux utiliser l'OpenGL pour des effet comme la rotation des cartes... Le problème c'est que l'OpenGL ne gère pas le fenêtrage, et comme je veux une solution multiplateforme (hors de question de faire du Win32) je veux utiliser la SDL pour le fenêtrage et la gestion des évènement. Maintenant j'ai pas beaucoup d'expérience dans ce domaine, j'accepte volontier toutes vos remarques ou vos conseils. Après c'est sur que du tout SDL ça serait surement plus simple...

MessagePosté: 16 Oct 08 à 23:56
par myst6re
Gyahaha, il va falloir attendre que je me mette à l'SDL alors :kefka:

J'ai tenté de jouer au triple triad, pardonne-moi mon manque de QI, mais j'ai pas réussi à lancer une partie... enfin j'y étais presque, mais ça à planté ^^

MessagePosté: 18 Oct 08 à 15:30
par FFTiger
Hahaha, faible d'esprit... Sinon te mets pas à SDL, finalement je vais certainement utiliser QT pour l'UI, mais ça devait rester secret hihi... :D. En effet ce dernier va me permettre de développer l'UI relativement rapidement tout en supportant OpenGL et en restant portable. Avec le recul je me rend compte que du faire une interface tout SDL/OpenGL m'aurait prit beaucoup trop de temps.

Sinon tu viens de me dire que ça a planté, mais tu ne m'as pas dit de quelle manière... Même si le bug à peut être été corrigé depuis ton dernier test, il est peut être toujours présent.

Dans la version 0.1c, pour faire une partie :

// Menu du bas
On commence par ajouter 2 joueurs, et par leur ajouter des cartes.

// Menu du haut
Ensuite on créer une partie, on affecte les 2 joueurs, (dont une IA). On leur affecte certaines de leurs cartes. On pose des cartes (l'IA posera la carte sans vous demander de coordonnées).

Voilà c'est un peu compliqué mais je vous rappelle que c'est une interface de test et non de jeu. Note : Le code source de l'interface en ligne de commande (et donc son mode d'emplois :) ) sont dans cmdline.cpp.

J'avance "peu" en ce moment car je suis en train de changer mon environnement de développement... Notamment pour le passage à QT, je suis en train d'essayer différentes solutions.

Actuellement j'explore les pistes suivantes :

Windows/Code::Blocks
Linux/KDevelop
Linux/Editeur de texte (Kate, Emacs, etc)

Bien entendu sans compter avec qmake, QTDesigner et tout le tralala QT...

Chacune ayant ses avantages et ses inconvénients... J'avoue que j'ai une préférence pour KDevelop qui est plus adapté à QT, mais ce dernier me pose quelques problèmes lors de l'édition des liens (il est pourtant censé supporter nativement QT) ce qui m'oblige à lancer une commande à la main à chaque compilation, ce qui est un peu contraignant. Mais bon ce n'est surement qu'une question de temps avant que je m'acclimate à cet IDE.

Bref dès que j'aurai un peu avancé je pense que le projet paraitra tout de suite bien plus avancé et crédible. (C'est l'effet GUI :D ). A noter que j'ai réalisé une petite démo en OpenGL qui affiche des carte qui se baladent sur un plateau de triple triad, je la diffuserai peut être prochainement (toujours une histoire de crédibilité).

PS :

myst6re a écrit:bon bah en fait ton tt est parfait

MessagePosté: 18 Oct 08 à 21:00
par Elk
pourquoi tu n'as pas pris le code du FFworld TT ?

Car bon, le soft tourne bien, tu aurais pu t'en inspirer ^^'

MessagePosté: 19 Oct 08 à 15:47
par FFTiger
Tout simplement parce qu'il n'est ni open source (donc je ne peux pas récupérer le code), ni multi-plateforme (si vous étiez sous linux vous comprendriez le problème). Il existe cependant bien un autre triple triad open source, mais le code était vraiment minable, j'ai préféré repartir de zéro. Et de toute manière je voulais faire mon propre triple triad.

PS :

En parlant du triple triad open source voisi une comparaison que j'aime bien faire pour justifier la réécriture du code et mettre en valeur ma manière de programmer :

Sa règle standard sur la case NORD :

Code: Tout sélectionner
  if (boardBuffer_[n - 5].isPlayed())
    if (boardBuffer_[n].getColor() != boardBuffer_[n - 5].getColor() &&
   boardBuffer_[n].getUpper() > boardBuffer_[n - 5].getLower())
      boardBuffer_[n - 5].flipCard();


La mienne :

Code: Tout sélectionner
    if ( isAdverse[NORD]
        && laCase[CENTRE]->getValeur(NORD) > laCase[NORD]->getValeur(SUD) )
    {
        lesCases.push_back( laCase[NORD] );
    }


Je pense que ça se passe de commentaires...

Bien sûr, ce style n'est possible que parce que j'ai construit toute l'architecture autour le permettant. Un programme open source illisible est à mon sens Open Source pour rien.

MessagePosté: 13 Déc 08 à 21:41
par FFTiger
Release 0.1d

Ca y est le release 0.1d vient de sortir... Enfin ! Pourquoi est elle si importante ? Tout simplement parce que le moteur de jeu de Koyo K passe en statut beta. C'est à dire que toutes les règles du triple triad y sont implémentées, il est complet. Cependant, ça reste une beta et je ne peux pas garantir que la beta soit exempte de bug (mais rassurez vous votre PC ne risque rien :D).

Alors c'est bien gentil tout ça mais quelles sont les nouveautés ?

    - Support des règles du vainqueur.
    - Gestion accrues des dépendances et des suppressions
    - Gestionnaire de scripts
    - Nombreuses corrections de bugs
    - Diverses améliorations moins perceptibles

A qui s'adresse cette release ?

Premièrement voici les personnes à qui elle ne s'adresse pas : ceux qui voudraient jouer au TT pour en retirer du plaisir. Pour tout ceux là je suis désolé mais il va falloir attendre encore un peu.

Par contre si vous souhaitez contribuer au développement de programme en partant à la recherche de bugs ou tout simplement que vous êtes curieux, cette release est faite pour vous.

Quel est l'avancement du projet ?

Note : Il est évident que plus le projet sera à un stade avancé, plus ces données seront exactes et précises.

À chaque fois un point de vue optimiste et pessimiste sera donné.

    1 - Moteur du jeu : beta
    2 - Interface Utilisateur : demo
    3 - Moteur graphique (OpenGL) : demo
    4 - Interface réseau : -

Définitions :

demo : Aperçu du concept
alpha : Implémentation incomplète du concept mais fonctionnelle
beta : Implémentation de tous les éléments de base du concept
final : Utopie

Avancement global du projet avant première beta (estimation : min~max) : 27~36 %

Méthode de calcul :
- : 0~1%
demo : 1~5%
alpha : 5~25%
beta : 25%

Taille actuelle du projet : 2800 lignes de code (sans les commentaires).

Taille de la première beta (estimation : min~max) : 7 800~10 400 lignes de code (sans les commentaires).

Mais où est elle donc cette release ?

Sur SourceForge, comme d'habitude. Mais comme je suis gentil je vais poster un lien :

- Télécharger ici -.

C'est nul !

Alors là on est bien d'accord, mais le client n'est pas fait pour plaire mais pour tester au maximum toutes les fonctionnalités du moteur de jeu. Cependant pour vous éviter certaines taches rébarbatives comme la création des cartes et des joueurs, il existe un système de script. Je vous est concocté un script qu'il suffira de coller dans un fichier script.dat du répertoire de Koyo K et de charger dans le menu script de Koyo K :

Code: Tout sélectionner
CarteRapide   0   3   2   Ekar   6   5   6   5   0   2   Kani   3   6   5   7   0   2   Chim   7   6   5   3   1   2   KoyoK   3   10   2   1   0   2   Prote   6   2   6   7   0   2   Pika   5   5   7   4   0   2   Xylo   7   7   4   2   4   2   Griff   7   2   7   4   2   2   Sulf   5   3   7   6   0   2   Tomb   4   6   7   4   0   2   W&B   6   6   2   7   0   0   2   2   FFT   2   Myst   2   Milo   3   0   2   Ben   2   Kiku   4   1   1   4   2   1   4   3   1   4   4   1   4   5   1   4   6   2   4   7   2   4   8   2   4   9   2   4   10   2   0   4   2   



Note : Attention ce fichier doit impérativement se terminer par une ligne vide ! Il sera créé dés le premier lancement de Koyo K mais vous pouvez le créer vous même. PS : Utilisez votre éditeur de texte pour remplacer les 4 espaces par des tabulations (bug du fofo). Vous pouvez aussi télécharger le fichier - ici - .

Et après ?

Et bien normalement, mis à part si on révèle un problème majeur dans le moteur de jeu (auquel cas il y aura une 0.1e), la prochaine release aura une interface graphique, et sera donc dénommée 0.2, ça va faire plaisir à plus d'un... L'affichage sera géré par QT (de la 2D donc) mais la démo OpenGL en 3D dont j'ai parlé précédemment devrait également être intégrée.

Enjoy !

PS : Le package de sources pour la compilation via "make" multiplateforme sera uploadé sur sourceforge dans la soirée. Dernière chose : merci de me faire part des éventuels bugs que vous rencontrerez. Cette release sert avant tout à ça.

Bugs

Voici une liste des bugs qui me sont déjà remontés concernant cette version.

    - Lors d'une mort subite, le plateau n'est pas regénéré, les éléments restent les mêmes. Ce qui n'est pas conforme au Triple Triad original.
    - Plantage lors de la fermeture du programme dans certains cas (origine encore non identifiée). PS : Du programme seulement je précise...

MessagePosté: 16 Déc 08 à 01:34
par TheUltimaSephiroth
C:\Users\JM\Documents\Programmation\TripleTriadNew\trunk\src\liste.cpp:27: error: template-id `liste<>' for `KGameNgineK::liste::liste()' does not match any template declaration
C:\Users\JM\Documents\Programmation\TripleTriadNew\trunk\src\liste.cpp:27: error: invalid function declaration
C:\Users\JM\Documents\Programmation\TripleTriadNew\trunk\src\liste.cpp: In member function `T& KGameNgineK::liste::get() const [with T = KGameNgineK::carte]':
C:\Users\JM\Documents\Programmation\TripleTriadNew\trunk\src\liste.cpp:38: error: `getCarte' is not a member of `KGameNgineK::deck'
C:\Users\JM\Documents\Programmation\TripleTriadNew\trunk\src\liste.cpp:38: error: `_idcarte' was not declared in this scope
C:\Users\JM\Documents\Programmation\TripleTriadNew\trunk\src\liste.cpp:38: warning: unused variable '_idcarte'


J'arrive pas à compiler le programme tel qu'il est sur le tracker :s (et j'ai la flemme de chercher la en fait xD)