Le jeu Snake en c#
Le jeu Snake en c#
-
Description
- Le jeu consiste à diriger un serpent afin de lui faire manger les différentes proies qui apparaissent de façon aléatoire sur le plateau de jeu tout en évitant les divers obstacles qui seront sur sa route.
- Chaque proie rapporte des points et le but du jeu est d’avoir le plus de point possible.
- Manger des proies fait grandir le serpent alors qu’entrer en contact avec des obstacles comme des murs, les bords du plateau de jeu ou encore le corps du serpent termine la partie.
- En plus des proies et des murs le jeu comprend aussi des bonus et malus qui agissent sur le serpent, il en existe de deux types, les bonus et malus dit de taille et ceux dit de vitesse.
- Les bonus et malus de vitesse réduisent et augmentent respectivement la vitesse du serpent de façon temporaire alors que les bonus et malus de taille réduisent et augmentent respectivement la taille du serpent de façon permanente.
- Les bonus et malus apparaissent de façon aléatoire sur le plateau de jeu et pendant un temps limité, néanmoins il n’y a toujours qu’un seul malus ou bonus sur le plateau du jeu. Les malus rapportent des points au joueur.
- Le jeu comprend plusieurs niveaux, la différence entre les niveaux se tient dans le nombre de proies à manger, le nombre de mur présent ainsi que les points que chaque proie rapporte. Il est possible de commencer à un niveau donné à condition d’avoir débloqué au préalable ce niveau. Pour débloquer ce niveau il suffit d’avoir joué une fois dans ce niveau.
-
Proposition d’une solution
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Le_Snake
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Point proie = new Point(20, 20);
laPieceSerpent laTete = new laPieceSerpent()
{ coordonnees = new Point(10, 10) };
int nx = 1, ny = 0, score = 1;
private void leTemps_Tick(object sender, EventArgs e)
{
laPieceSerpent.leGraphique.Clear(Color.White);
this.Text = score.ToString();
laPieceSerpent.leGraphique.FillRectangle(
new SolidBrush(Color.Red),
proie.X * laPieceSerpent.tailleX,
proie.Y * laPieceSerpent.tailleY,
laPieceSerpent.tailleX,
laPieceSerpent.tailleY);
laTete = new laPieceSerpent() { coordonnees =
new Point((laTete.coordonnees.X + nx +
laPieceSerpent.tailleDuJeu) % laPieceSerpent.tailleDuJeu,
(laTete.coordonnees.Y + ny +
laPieceSerpent.tailleDuJeu) % laPieceSerpent.tailleDuJeu),
PiecePrecedente = laTete };
if (laTete.coordonnees.Equals(proie))
{
score++;
proie = new Point(new System.Random().Next(laPieceSerpent.tailleDuJeu),
new System.Random().Next(laPieceSerpent.tailleDuJeu));
}
laTete.diminution(score);
laTete.PiecePrecedente.BitItSelf(laTete.coordonnees);
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
nx = nx + (nx - 1) * (nx + 1); ny = 0;
break;
case Keys.Right:
nx = nx - (nx - 1) * (nx + 1); ny = 0;
break;
case Keys.Up:
nx = 0; ny = ny + (ny - 1) * (ny + 1);
break;
case Keys.Down:
nx = 0; ny = ny - (ny - 1) * (ny + 1);
break;
}
}
private void Form1_Load(object sender, EventArgs e)
{
laPieceSerpent.leGraphique = lblTerrain.CreateGraphics();
laPieceSerpent.tailleX = this.Width / laPieceSerpent.tailleDuJeu;
laPieceSerpent.tailleY = this.Height / laPieceSerpent.tailleDuJeu;
leTemps.Enabled = true;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Windows.Forms;
namespace Le_Snake
{
class laPieceSerpent
{
public Point coordonnees;
public static Graphics leGraphique;
public laPieceSerpent PiecePrecedente;
public static int tailleX, tailleY, tailleDuJeu = 40;
public void diminution(int length)
{
if (length-- <= 0) { PiecePrecedente = null; return; }
PiecePrecedente.diminution(length);
leGraphique.FillRectangle(new SolidBrush(Color.Blue),
coordonnees.X * tailleX, coordonnees.Y * tailleY, tailleX, tailleY);
}
public void BitItSelf(Point laTete)
{
if (coordonnees.Equals(laTete))
{ Application.Exit(); }
else if (PiecePrecedente != null)
{ PiecePrecedente.BitItSelf(laTete); }
}
}
}