/// <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> /// Initialise l'état de la fenêtre à son menu prncipal. /// Définit ses bordures, sa taille, son titre et son icône. /// Indique que la fenêtre récupère les évènements du clavier, lui donne la fonction de création du backbuffer /// pour dessiner et celle pour l'afficher. /// Enfin, lance le timer avec la fréquence d'image par seconde désirée qui va actualiser l'application. /// </summary> private void InitializeComponents() { _mainMenuState = new MainMenuState(this); _state = _mainMenuState; FormBorderStyle = FormBorderStyle.FixedDialog; Size = new Size(FixedWidth, FixedHeight); MinimizeBox = false; MaximizeBox = false; Text = "Tentacle Slicers"; Icon = new Icon(HudComponent.ImagePath + "windows/icon.ico"); _timer = new Timer { Interval = 1000 / Ips }; _stopwatch = new Stopwatch(); Load += Event_CreateBackBuffer; Paint += Event_Paint; KeyDown += Event_KeyDown; KeyPress += Event_KeyPressed; KeyUp += Event_KeyUp; _timer.Tick += Event_Loop; _timer.Start(); _stopwatch.Start(); }
/// <summary> /// Crée l'état avec un unique bouton menant vers l'état précédent. /// </summary> /// <param name="form"> La fenêtre de l'application </param> /// <param name="state"> L'état précédent </param> public TooMuchSaveState(MainForm form, WindowsState state) : base(form, Screen) { ButtonsHandler = new ButtonsHandler(new Button(new Point(450, 400), "Nombre maximal de sauvegardes atteint", () => { Form.SetState(state); })); }
/// <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 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); }
/// <summary> /// Crée l'état avec le menu en jeu vers lequel retourner et le texte à afficher à la fenêtre. /// </summary> /// <param name="form"> La fenêtre de l'application </param> /// <param name="state"> L'état précédent </param> public CreateSaveState(MainForm form, WindowsState state) : base(form) { _state = state; _name = ""; _nameText = new Text("", 20); }
/// <summary> /// Redirige la fenêtre sur son menu principal. /// </summary> public void SetMainMenuState() { _mainMenuState.Update(); _state = _mainMenuState; }
/// <summary> /// Délègue l'actualisation et les évènements du clavier à l'objet donné. /// </summary> /// <param name="state"> Le nouvel état de la fenêtre </param> public void SetState(WindowsState state) { _state = state; }