/*
* Classe représentant la fenêtre principale du jeu pacman.
* Créer par Charles Lachance
*/
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace Pacman
{
public partial class Form1 : Form
{
//
//Les chemins d'accès des niveaux
private string[] levelsPath = null;
//Le niveau actuel
private int currentLevel = 0;
public Form1( )
{
InitializeComponent( );
levelsPath = new string [0];
currentLevel = 0;
}
///
/// L'instance de la classe PacmanGame.
///
PacmanGame aGame = new PacmanGame();
///
/// Met à jour le jeu
///
private void Update()
{
//Vérifie si le pacman est en mode super pillule
CheckIfSuperPill(aGame.GetPacman());
//Met à jour le jeu et récupère l'état de la partie
EndGameResult result = aGame.Update();
//Si le joueur a gagné...
if (result == EndGameResult.Win)
{
//On crée une fenêtre de fin de partie
EndGameForm endGameForm = new EndGameForm();
//On met à jour le résultat à afficher
endGameForm.SetEndGameResult(result);
//On arrête le jeu
mainTimer.Stop();
//On change de niveau
currentLevel++;
//Si le niveau existe...
if (currentLevel < levelsPath.Length)
{
//On charge le niveau
aGame.LoadGrid(levelsPath[currentLevel]);
//On redimensionne la fenêtre
this.ClientSize = new Size(aGame.GetSize().Width, aGame.GetSize().Height);
//On met à jour la fenêtre de fin de partie pour que ce ne soit pas le dernier niveau
endGameForm.SetIsLastLevel(false);
//On affiche le message disant que le joueur a réussi le niveau
endGameForm.ShowDialog();
//On recommence le jeu
mainTimer.Start();
}
else
{
//On affiche le message disant que le joueur a fini le jeu
endGameForm.ShowDialog();
//On quitte
Application.Exit();
}
}
else if (result == EndGameResult.Loose) //Si le joueur a perdu...
{
//On crée une fenêtre de fin de partie
EndGameForm endGameForm = new EndGameForm();
//On met à jour le résultat à afficher
endGameForm.SetEndGameResult(result);
//On pause le jeu
mainTimer.Stop();
//On affiche le message disant que le joueur a perdu
endGameForm.ShowDialog();
//On quitte
Application.Exit();
}
//
}
private void OnTimer( object sender, EventArgs e )
{
Update();
Invalidate();
}
private void OnDraw( object sender, PaintEventArgs e )
{
aGame.Draw(e.Graphics);
}
///
/// Évènement appelé lors du chargement de la fenêtre
///
///
///
private void PacmanForm_Load( object sender, EventArgs e )
{
//
//On récupère la liste des niveaux
levelsPath = File.ReadAllLines("./PacLevels/LevelList.txt");
//Si on a au moins un niveau...
if (levelsPath.Length != 0)
{
//On charge le premier niveau
aGame.LoadGrid(levelsPath[currentLevel]);
}
else
{
//On affiche un message d'erreur
MessageBox.Show("Aucun niveau n'est présent dans le fichier de configuration", "Erreur de chargement", MessageBoxButtons.OK, MessageBoxIcon.Error);
//On quitte
Application.Exit();
}
// Ajuster automatiquement la taille de la fenêtre selon la taille du labyrithe de jeu
// Optionnel mais peut être intéressant si vous voulez que ça se fasse automatiquement
this.ClientSize = new Size( aGame.GetSize( ).Width, aGame.GetSize( ).Height );
mainTimer.Enabled = true;
//
}
//
///
/// Événnement tick du timer de fantôme peureux: désactive le mode peureux.
///
///
///
private void TimerEnd(object sender, EventArgs e)
{
CowardTimer.Enabled = false;
Ghost.GhostChangeState(false);
}
///
/// Timer du spawn de fantôme.
///
///
///
private void TimerSpawn(object sender, EventArgs e)
{
aGame.SpawnGhosts();
}
///
/// Vérifie si le pacman a pris une super pastille.
///
/// le pacman du jeu
private void CheckIfSuperPill(Pacman pacman)
{
if (pacman.GetHasSuperPill() == true)
{
pacman.SetHasSuperPill(false);
if (CowardTimer.Enabled == true)
{
CowardTimer = new Timer();
CowardTimer.Interval = 5000;
}
CowardTimer.Enabled = true;
Ghost.GhostChangeState(true);
}
}
//
}
}