/// <summary> /// Initialisateur appelé par le constructeur et la fenêtre lors de l'actualisation du menu. /// Permet notamment de recréer le menu des sauvegardes, au cas où elles ont changé, et d'actualiser le /// highscore. /// </summary> public void Update() { // Charge les sorts et les sauvegardes GameSave.Load(); _highScore = new Text("High Score : " + GameSave.HighScore, 18); var savesMenu = new ChooseSaveState(Form, this); var b1 = new Button(new Point(300, 700), "Nouvelle partie", () => { Form.SetState(new NewGameState(Form, this)); }); var b2 = new Button(new Point(600, 700), "Charger partie", () => { Form.SetState(savesMenu); }); var b3 = new Button(new Point(900, 700), "Quitter", () => { Form.Close(); }); b1.RightButton = b2; b2.RightButton = b3; b3.LeftButton = b2; b2.LeftButton = b1; ButtonsHandler = new ButtonsHandler(b1); ButtonsHandler.Add(b2); ButtonsHandler.Add(b3); ButtonsHandler.LinkToEchap(b3); }
/// <summary> /// Crée le menu en jeu avec la possibilité de créer une nouvelle sauvegarde, de revenir en jeu ou de retourner /// au menu principal. /// </summary> /// <param name="form"> La fenêtre de l'application </param> /// <param name="state"> L'état de la partie </param> public GameMenuState(MainForm form, WindowsState state) : base(form, Screen) { var tooMuchSave = new TooMuchSaveState(Form, this); var bSave = new Button(new Point(600, 250), "Sauvegarder", () => { if (GameSave.Saves.Count >= GameSave.NbMax) { Form.SetState(tooMuchSave); } else { Form.SetState(new CreateSaveState(Form, this)); } }); var bRetour = new Button(new Point(600, 400), "Retour", () => { Form.SetState(state); ButtonsHandler.Reset(); }); var bMenu = new Button(new Point(600, 550), "Menu principal", () => { Form.SetMainMenuState(); }); bSave.BottomButton = bRetour; bRetour.TopButton = bSave; bRetour.BottomButton = bMenu; bMenu.TopButton = bRetour; ButtonsHandler = new ButtonsHandler(bSave); ButtonsHandler.Add(bRetour); ButtonsHandler.Add(bMenu); ButtonsHandler.LinkToEchap(bRetour); }
/// <summary> /// Crée l'état avec une paire de boutons par map pour créer la nouvelle partie avec la map et le nombre de /// joueurs souhaité. /// </summary> /// <param name="form"> La fenêtre de l'application </param> /// <param name="state"> L'état précédent de l'application </param> public NewGameState(MainForm form, WindowsState state) : base(form, Screen) { var maps = Map.MapNames(); var b = new Button[2, maps.Count]; // Création des boutons var bRetour = new Button(new Point(600, 700), "Retour", () => { Form.SetState(state); }); for (var j = 0; j < maps.Count; ++j) { var numMap = j; b[0, j] = new Button(new Point(450, 200 + 150 * j), maps[j] + "\n(Duo)", () => { Form.SetState(new GameState(Form, numMap, 2)); }); b[1, j] = new Button(new Point(750, 200 + 150 * j), maps[j] + "\n(Solo)", () => { Form.SetState(new GameState(Form, numMap, 1)); }); } // Liaison des boutons entre eux for (var j = 0; j < maps.Count; ++j) { if (j < maps.Count - 1) { b[0, j].BottomButton = b[0, j + 1]; b[1, j].BottomButton = b[1, j + 1]; } else { b[0, j].BottomButton = bRetour; b[1, j].BottomButton = bRetour; } if (j > 0) { b[0, j].TopButton = b[0, j - 1]; b[1, j].TopButton = b[1, j - 1]; } b[0, j].RightButton = b[1, j]; b[1, j].LeftButton = b[0, j]; } bRetour.TopButton = b[0, 0]; // Création du ButtonHandler ButtonsHandler = new ButtonsHandler(bRetour); foreach (var button in b) { ButtonsHandler.Add(button); } ButtonsHandler.LinkToEchap(bRetour); }
/// <summary> /// Crée l'état corerspondant au game over avec la possibilité de revenir au menu principal ou de quitter /// l'application. Affiche le score atteint par les joueurs. /// </summary> /// <param name="form"> La fenêtre de l'application </param> /// <param name="score"> Le score final </param> public GameOverState(MainForm form, int score) : base(form, Screen) { _score = new Text("Score : " + score, 18); if (score > GameSave.HighScore) { GameSave.HighScore = score; } var bMenu = new Button(new Point(450, 700), "Menu principal", () => { Form.SetMainMenuState(); }); var bClose = new Button(new Point(750, 700), "Quitter", () => { Form.Close(); }); bMenu.RightButton = bClose; bClose.LeftButton = bMenu; ButtonsHandler = new ButtonsHandler(bMenu); ButtonsHandler.Add(bClose); }
/// <summary> /// Crée l'état avec le bouton retour permettant de retourner au menu principal. /// Une grille de boutons est crée, chaque bouton correpondant à une sauvegarde qui peut être chargée pour /// entrer en jeu. /// </summary> /// <param name="form"> La fenêtre de l'application </param> /// <param name="mainMenu"> Le menu principal </param> public ChooseSaveState(MainForm form, WindowsState mainMenu) : base(form, Screen) { var bRetour = new Button(new Point(600, 700), "Retour", () => { Form.SetState(mainMenu); }); // Remplit de gauche à droite et de haut en bas la grille de 3x3 sauvegardes var bSaves = new Button[3, 3]; for (var num = 0; num < GameSave.Saves.Count; ++num) { var i = num / 3; var j = num % 3; var save = GameSave.Saves[num]; var playerStr = save.NumberOfPlayers == 1 ? "Solo" : "Duo"; bSaves[i, j] = new Button(new Point(300 + j * 300, 200 + i * 150), save.Name + '\n' + playerStr + ", niveau " + save.Level, () => { Form.SetState(new GameState(form, save)); }); } // Relie les boutons de la grille entre eux for (var i = 0; i < 3; ++i) { for (var j = 0; j < 3; ++j) { var save = bSaves[i, j]; if (save == null) { continue; } if (i + 1 >= 3 || bSaves[i + 1, j] == null) { save.BottomButton = bRetour; } else { save.BottomButton = bSaves[i + 1, j]; } if (i > 0) { save.TopButton = bSaves[i - 1, j]; } if (j > 0) { save.LeftButton = bSaves[i, j - 1]; } if (j < 2 && bSaves[i, j + 1] != null) { save.RightButton = bSaves[i, j + 1]; } } } if (bSaves[0, 1] != null) { bRetour.TopButton = bSaves[0, 1]; } else if (bSaves[0, 0] != null) { bRetour.TopButton = bSaves[0, 0]; } ButtonsHandler = new ButtonsHandler(bRetour); foreach (var b in bSaves) { if (b != null) { ButtonsHandler.Add(b); } } ButtonsHandler.LinkToEchap(bRetour); }