Faites-en sorte de pouvoir déplacer ce rectangle dans la grille via les flèches de votre clavier.
Correction partielle
Exemple pour la flèche du haut :
privatevoid Window_KeyDown(object sender, KeyEventArgs e)
{
int rowRec = Grid.GetRow(snake);
int colRec = Grid.GetColumn(snake);
switch (e.Key.ToString())
{
case"Up":
if (rowRec > 0)
{
rowRec = rowRec - 1;
Grid.SetRow(snake, rowRec);//déplace le rectangle sur ces nouvelles coordonnées
}
break;
}
}
Question 5
Ajoutez 3 textBlocks (un avec le mot Coordonnées, les deux autres affichant les coordonnées du rectangle sur la grille nommés respectivement coordX et coordY)
Créez une fonction Actual_Coord qui va mettre à jour les textBlocks coordX et coordY en fonction des coordonnées du snake. Puis utilisez là au bon endroit dans votre programme.
Lorsque vous appuyez sur une flèche, la flèche représentée sur l’écran doit changer de couleur et revenir à sa couleur initiale lorsque la flèche de votre clavier est relâchée.
Comme ci-dessous, (flèche gauche appuyée puis relâchée)
Correction partielle
privatevoid Window_KeyDown(object sender, KeyEventArgs e)
{
int rowRec = Grid.GetRow(snake);
int colRec = Grid.GetColumn(snake);
switch (e.Key.ToString())
{
case"Up":
top.Background = Brushes.Red;
if (rowRec > 0)
{
rowRec = rowRec - 1;
Grid.SetRow(snake, rowRec);//déplace le rectangle sur ces nouvelles coordonnées
}
break;
}
Actual_Coord();
}
privatevoid Window_KeyUp(object sender, KeyEventArgs e)
{
switch (e.Key.ToString())
{
case"Up":
top.Background = Brushes.Gray;
Break;
}
}
Deuxième Partie
Question 9
Ajoutez un DispatchTimer permettant au rectangle de se déplacer automatiquement dans la direction que l’utilisateur aura choisie.
Ici, la fonction timer_Tick va être appelée toutes les 150 millisecondes. Cela correspond à la vitesse de déplacement de notre snake.
Il faut tout d’abord détecter la direction. On crée donc une vrariable _direction que l’on initialise à zéro.
Correction partielle
Nous allons reprendre l’événement Window_KeyDown de la première partie et le modifier afin de savoir dans quelle direction l’utilisateur veut déplacer le snake.
Puis il faut déplacer le snake en fonction de cette direction.
void timer_Tick(object sender, EventArgs e)
{
int rowRec = Grid.GetRow(pionRectangle);
int colRec = Grid.GetColumn(pionRectangle);
switch (_direction)
{
case1://up
if (rowRec > 0)
{
rowRec = rowRec - 1;
Grid.SetRow(pionRectangle, rowRec);//déplace le rectangle sur ces nouvelles coordonnées
}
break;
}
Actual_Coord();
}
Vous remarquerez que le fonction Actual_Coord n’est plus appelée dans l’événement KeyDown mais dans la fonction timer_Tick car c’est dans cette dernier que le snake se déplace.
Question 10
Insérez un rectangle “nourriture” dynamiquement sur la grille. Ce rectangle apparait aléatoirement sur la grille et correspond à la nourriture de votre Snake. Lorsque ce dernier passe dessus, la nourriture disparait et réapparait à un autre endroit.
Dans un premier temps, on crée la variable nourriture aux cotés de la variable direction. Nous utiliserons également un Random afin de placer cette nourriture aléatoirement.
Correction partielle
Changement dans la fonction timer_Tick :
void timer_Tick(object sender, EventArgs e)
{
int rowRec = Grid.GetRow(snake);
int colRec = Grid.GetColumn(snake);
int xFood = random.Next(0, snakeGrid.RowDefinitions.Count);
int yFood = random.Next(0, snakeGrid.ColumnDefinitions.Count);
if (!snakeGrid.Children.Contains(nourriture) && _direction!=0)
{
nourriture.Width = snake.Width;
nourriture.Height = snake.Height;
nourriture.Fill = Brushes.Green;
snakeGrid.Children.Add(nourriture);
Grid.SetColumn(nourriture, yFood);
Grid.SetRow(nourriture, xFood);
}
switch (_direction)
{
case1://up
if (rowRec > 0)
{
rowRec = rowRec - 1;
Grid.SetRow(snake, rowRec);//déplace le rectangle sur ces nouvelles coordonnées
}
break;
}
Actual_Coord();
if(Grid.GetRow(snake)== Grid.GetRow(nourriture) && Grid.GetColumn(snake)== Grid.GetColumn(nourriture))
{
snakeGrid.Children.Remove(nourriture);
}
}
Voilà ce que vous devez obtenir :
Question 11
Créez la fonction GameOver(). Cette fonction est appelée lorsque les coordonnées du snake sorte de la grille de jeu. Elle affiche un message de défaite, retire la nourriture de la grille si il y en a, replace le snake aux coordonnées (2,2) et réinitialise le choix de direction à 0.