C# debutant, snake

CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009 - 13 juin 2009 à 03:08
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 13 juin 2009 à 12:12
Bonjour,
je suis debutant en C# et je cherche a faire un petit jeu de type "snake".

Mon plan etais:
1) Creer un tableau general dans lequel le snake se deplace
2) Creer un tableau pour stocker les valeurs du corps du snake dedans(pour le positionnement dans le premier tableau)

Pour le moment tout ce que j'ai c'est un asterix qui se promene correctement dans le premier tableau, mais comment faire pour avoir, exemple, 5 asterix composant le corps du snake et se deplacant avec lui? J'ai essayer quelques trucs mais j'ai l'impression que c'est toujours trop compliquer. ;) Je veut que le corps se deplace de cette facon ci: la tete se deplace d'un point, la 2ieme partie va prendre la position que la tete avais avant le deplacement, la 3ieme partie va prendre la position que la 2ieme partie avais avant le deplacement... etc...

Je n'ai pas encore diviser mon code en function pour que ce soit plus clair, j'essayais de trouver , en premier, une facon simple d'avoir plusieurs parties au corps de mon serpent.

Aussi , j'aimerais savoir si c'est possible de faire un "Switch...Case" sur un String pour mon "key.Key.ToString()"?

Merci d'avance!

Voici mon code actuel:

---

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKeyInfo key;
            //key = Console.ReadKey(true);

            // Creation du tableau
            char[,] tab = new char[15, 30];
            int lig, col;

            // Coordonner du snake
            int[,] snake = new int[5,2];            int snakelig 0, snakecol 0;

            // Initialisation du tableau
            for (int i = 0; i < 15; i++)
                for (int j = 0; j < 30; j++)
                    tab[i, j] = '.';

            // Position initial du snake
            lig = 8;
            col = 15;
           
            // Load le snake
            tab[lig,col] = '*';
            //for (col = 11; col < 16; col++)
            //{
            //    tab[lig, col] = '*';
            //    snake[snakelig, snakecol] = tab[lig, col];
            //}

            for (; ; )
            {
                // Affichage du tableau
                Console.Clear();
                for (int i = 0; i < 15; i++)
                {
                    for (int j = 0; j < 30; j++)
                    {
                        Console.Write(tab[i, j]);
                    }
                    Console.WriteLine();
                }

                key = Console.ReadKey();

                if (key.Key.ToString() == "UpArrow")
                {
                    tab[lig,col] = '.';
                    lig -= 1;
                    tab[lig, col] = '*';
                }

                if (key.Key.ToString() == "LeftArrow")
                {
                    tab[lig, col] = '.';
                    col -= 1;
                    tab[lig, col] = '*';
                }

                if (key.Key.ToString() == "RightArrow")
                {
                    tab[lig, col] = '.';
                    col += 1;
                    tab[lig, col] = '*';

                }

                if (key.Key.ToString() == "DownArrow")
                {
                    tab[lig, col] = '.';
                    lig += 1;
                    tab[lig, col] = '*';

                }

                else if (key.Key.ToString() == "Escape") break;
            }

        }
    }
}

3 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
13 juin 2009 à 08:03
bonjour
oui c'est tout à fait possible:
switch (key.Key)
{
   case
ConsoleKey.UpArrow:
      tab[lig, col] = '.'
;
      lig -= 1;
      tab[lig, col] = '*'
;
      break;

   caseConsoleKey.DownArrow:
      tab[lig, col] = '.'
;
      col -= 1;
      tab[lig, col] = '*'
;

      break;

   ... etc etc ...
   default:
      break
;
}

C# is amazing, enjoy it!
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
13 juin 2009 à 08:15
Merci Robert33 pour la reponse concernant le "Switch...Case".

Aurais tu une idee pour que mon serpent possede 5 parties fait d'asterix qui se suive?

Dans le style de:
Tete se deplace , la 2ieme partie du serpent reprend la position que la tete avais avant le deplacement, la 3ieme partie prend la position que la 2ieme partie avais avant le deplacement, etc...?
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
13 juin 2009 à 12:12
le plus simple serait sans doute d'afficher un '*' à la nouvelle position (la tête) et d'éffacer la deniere, c'est plus simple que de déplacer tous les '*'

C# is amazing, enjoy it!
0
Rejoignez-nous