Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONNECT 4 / PUISSANCE 4 / TOP 4 AVEC ALGORITHME ALPHA-BETA


Information sur la source

Catégorie :Jeux Source .NET ( DotNet ) Classé sous : puissance4, connect4, alphabeta, jeu, top4 Niveau : Initié Date de création : 02/02/2007 Date de mise à jour : 23/11/2008 22:41:40 Vu / téléchargé: 8 280 / 546

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Connect 4 / Puissance 4 en C#

C'est le jeu très connu qui se nomme Puissance4, Top4 ou encore Connect4.
L'interface graphique n'est pas très soignée comme vous allez pouvoir vous en rendre compte, mais je ne suis pas designer :D

Il y a un menu d'options très basique pour paramétrer quelque peu le jeu.

L'intérêt de la source se trouve au niveau de l'implémentation de l'algorithme Alpha-Beta. Dans le Tic-Tac-Toe (ou Morpion) que j'avais posté ici (http://www.csharpfr.com/codes/JEU-MORPION-TIC-TAC-TOE-AVEC-ALGORITHME-MINIMAX_35814.aspx) j'avais utilisé un algorithme de type Minimax car le jeu ne contient que 9 cases, ce qui nous permet de vérifier toutes les possibilités (toutes les feuilles de l'arbres).
Pour un Puissance 4, le nombre de possibilité est immense et il faut donc utiliser un algorithme moins gourmand, commme Alpha-Beta, qui n'évalue pas toutes les branches de l'arbre mais fait des simplifications.
De plus, il faut spécifier une profondeur maximale de recherche dans l'arbre pour éviter d'une part des temps de calculs immenses, et d'autres part de faire sauter le stack (récursivité oblige).

L'algorithme peut (doit!) être encore amélioré, car pour l'instant j'ai des temps de réponses relativement longs (avec une recherche de profondeur 8 dans l'arbre) et il est possible de gagner contre l'IA en mode difficile. De plus, l'algo ne semble pas plus performant (ou alors très légèrement) avec des profondeurs de recherches plus grandes. Du coup, on a un temps de calcul beaucoup plus grand pour une IA pas plus intelligente...
 

Source

  • /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • /// <summary>
  • /// Return the best column.
  • /// </summary>
  • /// <param name="game"> The current game. </param>
  • /// <param name="maxDepth"> The maximum depth (in tree). </param>
  • /// <returns> The best column. </returns>
  • /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • public int AlphaBeta(Game game, int maxDepth)
  • {
  • List<Game> gResult = new List<Game>(); // The best points
  • int max = Int32.MinValue;
  • foreach (Game curGame in game.GetSuccessors(PlayerType.Computer))
  • {
  • int sonValue = AlphaBetaInternal(curGame, Int32.MinValue, Int32.MaxValue, maxDepth);
  • if (sonValue > max) // We have a new best point
  • {
  • gResult.Clear();
  • max = sonValue;
  • }
  • if (sonValue == max) gResult.Add(curGame);
  • }
  • return gResult[Tools.ChooseColumn(gResult.Count)].BestColumn; // Choose one between the bests
  • }
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// <summary>
/// Return the best column.
/// </summary>
/// <param name="game"> The current game. </param>
/// <param name="maxDepth"> The maximum depth (in tree). </param>
/// <returns> The best column. </returns>
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public int AlphaBeta(Game game, int maxDepth)
{
      List<Game> gResult = new List<Game>(); // The best points
      int max = Int32.MinValue;
      foreach (Game curGame in game.GetSuccessors(PlayerType.Computer))
      {
            int sonValue = AlphaBetaInternal(curGame, Int32.MinValue, Int32.MaxValue, maxDepth);
            if (sonValue > max) // We have a new best point
            {
                  gResult.Clear();
                  max = sonValue;
            }
            if (sonValue == max) gResult.Add(curGame);
      }
      return gResult[Tools.ChooseColumn(gResult.Count)].BestColumn; // Choose one between the bests
}

Conclusion

Tous commentaires et/ou notes sont bien entendu les biens venus!
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

02 février 2007 22:47:16 :
Mise en page du code, GUI, petites corrections diverses
04 février 2007 12:00:58 :
Légère amélioration de l'IA et corrections de quelques petits bugs...
07 novembre 2008 09:38:38 :
Ortho
23 novembre 2008 22:41:41 :
^^

Commentaires et avis

signaler à un administrateur
Commentaire de romagny13 le 02/02/2007 18:51:58

Génial !!
non seulement cela donne envie de jouer à puissance 4
mais vu le code qu'il y a derriere en plus ...
je vais finir par me mettre moi aussi a developper des jeux avec toutes les excellentes sources de Bidou :p

signaler à un administrateur
Commentaire de Bidou le 02/02/2007 21:06:40 administrateur CS

Bah c'est léger ;-)
Ce qui est pas mal, c'est de découvrir les algorithmes qui tournent la derrière!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

lancement d'une appli [ par rintchu ] salut a tous,voila, je voudrais mettre dans mon programme un jeu secret comme ceux que l'on trouve dans Word ou Excel. Comment dois je faire pour reli Changer l'image d'un label ... [ par Baelorn ] Bonjour,je suis actuellement en train de réaliser un jeu en C# mode graphique et je rencontre un problème au niveau du changement de l'image d'un labe jeu vache taureau language c [ par cafou ] est ce que quelqu'un pourrait me donner la solution du jeu vache taureau en language cmerci d'avanceCAFOU Jeu de cartes en reseau [ par PeterG ] J'ai créer un jeu de Black Jack (2 joueur et +) avec visual studio dans mon cours de programmation 1, et j'aimerai pouvoir y jouer contre un ami chacu Jeu en réseau local [ par CMatt ] Bonjour à tous!J'ai développé un petit jeu en C# qui possède une "base de données" plutôt complexe, par ex. : - une classe Systeme contient un tabl Remoting et "sécurité" [ par CMatt ] Bonjour tout le monde!J'ai commenc&#233; &#224; d&#233;velopper un jeu en temps r&#233;el&nbsp;et j'essaie d'impl&#233;menter un mode multijoueurs (pa Problème sous DIRECTX [ par Lord_ZanTe ] Bonjour,nous sommes &#233;tudiant et nous d&#233;veloppons un jeu 3D sous DirectX, en C# dans le cadre d'un projet tuteur&#233;.Nous arrivons &#224; a Comment gerer input pour jeu en opengl ? [ par gimli123 ] Salut tout le monde ! J'aurai voulu savoir, comment me conseillez-vous de g&#233;rer les inputs (clavier/souri), si je veux faire un petit jeu en c#/c conditions [ par Kbitnik ] salut, je fais un jeu en c# ou je g&#233;n&#233;re des nombre &#224; chaque foi que j'appuie sur un bonton.et ainsi, un label ajoute a chaque fois son Poker client-serveur [ par malara ] Salut tout le monde,&nbsp;&nbsp;&nbsp;J'ai un petit probl&#232;me, c'est pourquoi j'ai besoin de l'expertise des membres de ce forum ... J'ai d&#233;v


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.