158 lines
4.3 KiB
C#
158 lines
4.3 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace SpaceInvaders
|
|
{
|
|
public class jeu
|
|
{
|
|
// Déclaration des variables pour les éléments du jeu : ennemi, vaisseau et tir
|
|
private ennemi _ennemi;
|
|
private vaisseau _vaisseau;
|
|
private tir _tir;
|
|
public int score = 0;
|
|
|
|
// Constructeur qui initialise le vaisseau et l'ennemi
|
|
public jeu(ennemi ennemi, vaisseau vaisseau)
|
|
{
|
|
_ennemi = ennemi;
|
|
_vaisseau = vaisseau;
|
|
|
|
}
|
|
// Fonction principale pour démarrer le jeu
|
|
public void Start()
|
|
{
|
|
|
|
Console.CursorVisible = false;
|
|
while (true)
|
|
{
|
|
Update();
|
|
Draw();
|
|
Thread.Sleep(90);
|
|
}
|
|
}
|
|
|
|
|
|
private void Update()
|
|
{
|
|
|
|
GérerEntrée(); // Gère les entrées de l'utilisateur
|
|
_ennemi.positionNouvelle();// Met à jour la position de l'ennemi
|
|
MettreAJouerTir(); // Met à jour la position du tir et vérifie les collisions
|
|
|
|
|
|
}
|
|
/// <summary>
|
|
/// Gère les entrées de l'utilisateur
|
|
/// </summary>
|
|
private void GérerEntrée()
|
|
{
|
|
|
|
|
|
while (Console.KeyAvailable)
|
|
{
|
|
ConsoleKeyInfo key = Console.ReadKey(true);
|
|
switch (key.Key)
|
|
{
|
|
case ConsoleKey.LeftArrow:
|
|
_vaisseau.MoveGauche();
|
|
break;
|
|
case ConsoleKey.RightArrow:
|
|
_vaisseau.MoveDroite();
|
|
break;
|
|
case ConsoleKey.Spacebar:
|
|
InitiateProjectile();
|
|
break;
|
|
case ConsoleKey.Escape:
|
|
Menu menu = new Menu();
|
|
menu.Start();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
// Initialise un nouveau tir si aucun tir n'est actuellement actif
|
|
private void InitiateProjectile()
|
|
{
|
|
if (_tir == null || !_tir.tirActivé)
|
|
{
|
|
_tir = new tir(_vaisseau.X + 1, _vaisseau.Y - 1);
|
|
_tir.tirActivé = true;
|
|
}
|
|
|
|
}
|
|
// Met à jour la position du tir et vérifie s'il y a collision
|
|
private void MettreAJouerTir()
|
|
{
|
|
if (_tir != null && _tir.tirActivé)
|
|
{
|
|
_tir.Y--; // Mueve el proyectil hacia arriba
|
|
|
|
// Comprueba si el proyectil ha salido de la pantalla
|
|
if (_tir.Y < 0)
|
|
{
|
|
_tir.tirActivé = false;
|
|
}
|
|
if(_tir.Y == _ennemi.Y && _tir.X >= _ennemi.X && _tir.X <= _ennemi.X + 6)
|
|
{
|
|
score += 1;
|
|
_tir.tirActivé = false;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// // Dessine tous les éléments du jeu sur la console
|
|
/// </summary>
|
|
private void Draw()
|
|
{
|
|
Console.Clear();
|
|
Console.CursorVisible = false;
|
|
for (int y = 0; y < 16; y++)
|
|
{
|
|
for (int x = 0; x < Console.WindowWidth; x++)
|
|
{
|
|
if (y == _vaisseau.Y && x == _vaisseau.X)
|
|
{
|
|
Console.ForegroundColor = ConsoleColor.DarkMagenta;
|
|
Console.Write("▲");
|
|
|
|
}
|
|
|
|
|
|
else if (x == _ennemi.X && y == _ennemi.Y)
|
|
{
|
|
Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
Console.Write(" ■ ■ ■");
|
|
x += 4;
|
|
|
|
}
|
|
|
|
else
|
|
{
|
|
Console.Write(" ");
|
|
}
|
|
|
|
}
|
|
}
|
|
if (_tir != null && _tir.tirActivé)
|
|
{
|
|
Console.SetCursorPosition(_tir.X, _tir.Y);
|
|
Console.Write("|");
|
|
}
|
|
|
|
//Afficher le score
|
|
Console.SetCursorPosition(50, 0);
|
|
Console.Write($"Score: {score}");
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|