William Trelles a0b7d4acdc commit2
2023-10-06 16:13:05 +02:00

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}");
}
}
}