Un jeu ou il faut aligner 4 couleurs pour casser des blocks - exemple algorithme de diffusion

Description

Bonjour à tous,

Vous devez surement connaitre le jeu puyo puyo ou le principe est de mettre au moins 4 blocks de même couleur ensemble, étant fan de ce jeu(j'y joue casiment tout les jours), je me suis mis au défit de le refaire. J'ai fais ce programme en 2 jours sans trop m'attarder dessus, donc il doit surement exister encore des bugs. Ce programme utilise l'algorithme de diffusion pour calculer le nombre de block de même couleur qui se touchent.

Source / Exemple :


//voila la principale fonction qui détermine les collisions entre couleur.

        float FallingSpeed = 0.05f;//Vitesse de chute des blocks
        bool canfall = false;//gachette qui indique si on peut faire tomber les block
        bool fallfinished = true;//gachette qui indique si le block a finit de tomber
        int MaxColor = 5;//nombre de couleur maximale avec lesquelles jouer peut aller jusqu'à 10
        int ContactNeeded = 4;//nombre de contacte a établir avant de faire disparaître les blocks

        private void MakeLink(int x, int y, ref List<Point> PointList)
        {
            Block mBlock = Plateau[x, y];
            if (mBlock.Color == BlockColor.Aucun || mBlock.Checked) return;
            PointList.Add(new Point(x, y));
            Plateau[x, y].Checked = true;
            if (x + 1 < Bx)
                if (Plateau[x + 1, y].Color == mBlock.Color)
                {
                    Plateau[x, y].Liens |= BlockLink.Droite;
                    MakeLink(x + 1, y, ref PointList);
                }
            if (y + 1 < By)
                if (Plateau[x, y + 1].Color == mBlock.Color)
                {
                    Plateau[x, y].Liens |= BlockLink.Bas;
                    MakeLink(x, y + 1, ref PointList);
                }
            if (x - 1 >= 0)
                if (Plateau[x - 1, y].Color == mBlock.Color)
                {
                    Plateau[x, y].Liens |= BlockLink.Gauche;
                    MakeLink(x - 1, y, ref PointList);
                }
            if (y - 1 >= 0)
                if (Plateau[x, y - 1].Color == mBlock.Color)
                {
                    Plateau[x, y].Liens |= BlockLink.Haut;
                    MakeLink(x, y - 1, ref PointList);
                }
        }

Conclusion :


Ne supprimez pas le fichier Block.png dans le dossier debug, ce sont les sprites du jeu.
Ce jeu est tout en Gdi donc l'accuracité n'est pas la meilleur, mais c'est un choix que j'ai fait parceque tout le monde peut l'utiliser. Je le poste pour permettre a ceux qui ont eu envie de le programme de voir comment je m'y suis pris et pour voir tout les commentaires/conseils et avis que vous pourrez me donner. N'hésitez pas j'attends vos commentaire.

Merci.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.