/tags/Soutenance_finale/eradiKor/General/GameOver.cs
C# | 237 lines | 188 code | 32 blank | 17 comment | 34 complexity | f1fed5060642ae8ec60f6750b1cf935c MD5 | raw file
Possible License(s): GPL-3.0
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
-
- namespace eradiKor.General
- {
- public class GameOver
- {
- #region Attribut
- private Dictionary<string, string> datas;
- private bool scoreSend;
- private string strErreur;
- private bool gagne;
-
- private int min = 0;
- private int sec = 0;
- #endregion
-
- #region Constructeur
- /// <summary>
- /// Constructeur d'un écran de GameOver/GameWin
- /// </summary>
- /// <param name="gagne">Le joueur a-t-il gagné ?</param>
- /// <param name="multi">La partie a-t-elle eu lieu en multijoueur ?</param>
- public GameOver(Structures.GameData datas, bool gagne, bool multi)
- {
- datas.Notifies.Clear();
-
- this.gagne = gagne;
-
- string titre;
- if (gagne)
- titre = "Vous avez gagné !";
- else
- titre = "Vous avez perdu :-(";
-
- //On écoute les événements web
- Kore.Datas.OnQueryDone += new Kore.Datas.WebEventHandler(Datas_OnQueryDone);
-
- if (multi)
- {
- this.scoreSend = true;
- this.strErreur = "Pas de publication de sKors en mode multijoueurs !";
- }
- else if (Kore.Datas.offline)
- {
- this.scoreSend = true;
- this.strErreur = "Mode hors ligne, publication de sKors impossible !";
- }
- else if (datas.Stats.Cheats)
- {
- this.scoreSend = true;
- this.strErreur = "Vous avez triché, votre sKor n'est pas pris en compte !";
- }
- else
- {
- datas.Notifies.Add(new eradiKor.Graphics.Notify(eradiKor.Graphics.NotifyType.InputBox, this.Dialog_ValidName, ushort.MaxValue, titre, "Indiquez votre pseudo pour figurer dans le classement en ligne :", new Point(datas.Window.Width / 2, datas.Window.Height * 5 / 6), datas));
-
- this.scoreSend = false;
- this.strErreur = " ";
- }
-
- //Calcul du temps de jeu
- int min = datas.Stats.TpsDeJeu / 60;
-
- //On ajoute au score final une partie de l'argent restant
- datas.Player.Score += datas.Player.Money / 20;
-
- //Création du dictionnaire contenant les statistiques
- this.datas = new Dictionary<string, string> {
- { "Votre sKor :", datas.Player.Score.ToString() },
- { "Nombre de vagues envoyées :", (datas.Vagues.actuelle + 1).ToString() },
- { "Temps de jeu :", min + " minute" + (min > 1 ? "s " : " ") + (datas.Stats.TpsDeJeu % 60) },
- { "Nombre de monstres tués :", datas.Stats.MonstersKilled.ToString() },
- { "Nombre de monstres écrasés :", datas.Stats.HammerKill.ToString() },
- { "Nombre de monstres non tués :", (datas.Stats.MonstersStarted - datas.Stats.MonstersKilled).ToString() },
- { "Nombre de tours construites :", datas.Stats.TowerBuilded.ToString() },
- { "Nombre de tours vendues :", datas.Stats.TowerSpended.ToString() },
- { "Codes triche activés ?", (datas.Stats.Cheats ? "Oui" : "Non") }
- };
-
-
-
- //On met ŕ jour le profil du joueur
- datas.Stats.exportToProfile(datas.Player.Score, gagne, multi, (datas.Map.Hash == "38F6B60B6352DE86DB3322F4BDB1B0D154EA90737E40003A5655C49E12D90C6B0AE5F1039E52D18F9DEDF4D4AD5F0059" ||
- datas.Map.Hash == "6EB7D6AB1667EDC6733C16F9C452D91024F6BC85D22EBDC18E08C79895CD4A4076FCAFF66CBB67ED416BBCBB95386CA5" ||
- datas.Map.Hash == "F49EB3C478A81E321C658279B06E54A4280BE3C3D04022828A048B27243846339E57B816FC72E774375A25D0AACD3CCC" ||
- datas.Map.Hash == "12051EE7DC73E8F581EF239AB2E5176A0CFB71186193EEC05689BE750C5314F641C5D97DBABBECA25BDD6E300F8B90D3" ||
- datas.Map.Hash == "98B3EA37FA52434B1D7E11CFB6A405CB9089016E455D9C377389C6384C15E52F513ADC7A53E4C3F6FFEC81E6EF885CC9" ||
- datas.Map.Hash == "45AE495A7BFCD1108A3F473559BB4BD5A0418603895381FA44737605AF63ACEF77391A5431006F39C480D6413A253AB7" ||
- datas.Map.Hash == "F9A7B5C0F8A799FDA69B8171F90225B594DDBA82466E3DA82EB2181312451517EADDAFE49CCB85AB73160B80EF9223B4" ||
- datas.Map.Hash == "53D2ED7C3A015B36204482541A50671E47E3211456F32022151AFDA10F39CB373E372D548BF2D382CCD389253553027A" ||
- datas.Map.Hash == "2A2872B4675897BA1E97F48FC432FA1D3D2359BEE56218E00D3F934FD083FC77BACCD4030F91F2290D0347EAA0BA14C0" ||
- datas.Map.Hash == "FF29A8ECD806EC545159EAECFFF81EF3A1FC4C3EECDD461D4FD2B0DE07CAF5D4C2AA240BAC6E55F591AE775E6167AA29" ||
- datas.Map.Hash == "85DC2B795C3D0D583264FAD106ACD9CA503943F85BB7CB75ED74C8790D9A0B7C6ECD48BD559ADD9BC72FC2FDF75DE3E2"));
- }
- #endregion
-
- #region Méthodes
- public void update(Structures.GameData datas, KeyboardState kb, double sec)
- {
- if (kb.IsKeyDown(Keys.Escape))
- {
- datas.Notifies.Clear();
- datas.Transition = new Fade(eradiKor.Structures.GameType.Menu, Screen.Main);
- }
-
- if (datas.Stats.TpsDeJeu == 0)
- datas.Stats.TpsDeJeu = (int)sec;
- }
-
- public void draw(Structures.GameData datas, Structures.Window window, MouseState mouse, SpriteBatch spritebatch, GameTime gametime, SpriteFont[,] fonts, Dictionary<string, Graphics.Texture> textures)
- {
- string tits = "Statistiques et sKor";
- //Affichage du fond
- if (gagne)
- { //FIXME PLACER ICI L'ÉCRAN GAGNÉ
- int w = window.Height * textures["gamewin"].Tex.Width / textures["gamewin"].Tex.Height;
- spritebatch.Draw(textures["gamewin"].Tex, new Rectangle(window.Width / 2 - w / 2, 0, w, window.Height), Color.White);
- tits = "Gagné ! Statistiques :";
- }
- else
- {
- int w = window.Height * textures["gameover"].Tex.Width / textures["gameover"].Tex.Height;
- spritebatch.Draw(textures["gameover"].Tex, new Rectangle(window.Width / 2 - w / 2, 0, w, window.Height), Color.White);
- tits = "Perdu... Statistiques :";
- }
-
- Vector2 tmp = fonts[1, 3].MeasureString(tits);
- tmp.X = datas.Window.Width / 2 - tmp.X / 2;
- tmp.Y = 10;
- spritebatch.DrawString(fonts[1, 3], tits, tmp, Color.LavenderBlush);
-
- //Coeffs de placement
- int w3 = window.Width / 3;
- int w4 = window.Width / 4;
- int h4 = window.Height / 5;
-
- //Affichage du résumé
- Rectangle resume = new Rectangle(w4, 70, w4 * 2, 3 * h4);
- spritebatch.Draw(textures["pixel"].Tex, resume, new Color(128, 128, 178, 128));
- int r23 = resume.Width * 3 / 4;
-
- int pxpInfo = resume.Height / (this.datas.Count + 1);
-
- tmp = fonts[0, 2].MeasureString(strErreur);
- tmp.X = resume.Center.X - tmp.X / 2;
- tmp.Y = resume.Y + pxpInfo / 2 - tmp.Y / 2;
- spritebatch.DrawString(fonts[0, 2], strErreur + " ", tmp, Color.Azure);
-
- Color colorfond;
- Rectangle fond = new Rectangle(resume.X + 25, resume.Y + 35, resume.Width * 7 / 8, pxpInfo - 2);
- Vector2 col1 = new Vector2(fond.X + 20, fond.Y + pxpInfo - tmp.Y / 3);
- Vector2 col2 = new Vector2(resume.X + r23, fond.Y + pxpInfo - tmp.Y / 3);
- int i = 1;
- foreach (KeyValuePair<string, string> stat in this.datas)
- {
- //On affiche la ligne de fond
- if (fond.Intersects(new Rectangle(mouse.X, mouse.Y, 1, 1)))
- colorfond = new Color(Color.LawnGreen, 140);
- else if (i % 2 == 1)
- colorfond = new Color(Color.LightCyan, 140);
- else
- colorfond = new Color(Color.LightBlue, 140);
- spritebatch.Draw(textures["pixel"].Tex, fond, colorfond);
- spritebatch.Draw(textures["degradeL"].Tex, new Rectangle(fond.X - 10, fond.Y, 10, fond.Height), colorfond);
- spritebatch.Draw(textures["degradeR"].Tex, new Rectangle(fond.Right, fond.Y, 10, fond.Height), colorfond);
-
- spritebatch.DrawString(fonts[0, 2], stat.Key, col1, Color.Cornsilk);
- spritebatch.DrawString(fonts[0, 2], stat.Value, col2, Color.Cornsilk);
-
- //On incrémente les variables
- fond.Y += pxpInfo;
- col1.Y += pxpInfo;
- col2.Y += pxpInfo;
- i++;
- }
- }
- #endregion
-
- #region Méthodes événementielle
- private void Datas_OnQueryDone(object sender, Kore.Events.WebEventArgs e)
- {
- this.strErreur = e.Details;
- }
-
- public PlayerWill GameOver_OnClick(object sender, eradiKor.Events.MouseEventArgs e)
- {
- //On revient au menu si les stats sont affichées
- if (scoreSend)
- return PlayerWill.Menu;
- else
- return PlayerWill.None;
- }
-
- public void GameOver_OnResize(object sender, eradiKor.Events.WindowEventArgs e)
- { }
-
- public bool Dialog_ValidName(Graphics.Notify notify, int button, object more)
- {
- if (notify.Type == eradiKor.Graphics.NotifyType.InputBox && button == 0)
- {
- //On commence par vérifier le nom indiqué
- Regex format_nom = new Regex("^[a-zA-Z0-9_@]{4,32}$");
- if (format_nom.IsMatch(notify.textbox.CurrentText))
- {
- this.strErreur = "";
- this.scoreSend = true;
-
- HTTP.Requetes skor = new HTTP.Requetes(Kore.Events.RequeteType.pubSkor, System.Reflection.Assembly.GetExecutingAssembly().FullName.Split(',')[1].Replace("Version=", "").Trim());
- skor.pubSkor("LEPASSICI", notify.textbox.CurrentText, ((Structures.GameData)more).Player.Score, ((Structures.GameData)more).Map.Hash, ((Structures.GameData)more).Vagues.actuelle, 1, ((Structures.GameData)more).Stats);
- notify.goToEnd();
-
- this.strErreur = "Publication de vos sKors en ligne ...";
- }
- else if (notify.textbox.CurrentText == "")
- {
- this.scoreSend = true;
- this.strErreur = "Vos sKors n'ont pas étés envoyés.";
- notify.goToEnd();
- }
- else
- {
- this.strErreur = "Votre pseudo ne correspond pas au format attendu !";
- }
- }
-
- return true;
- }
- #endregion
- }
- }