Commit 8a3f50f9 authored by Zéfling's avatar Zéfling 🎨
Browse files

dernière version

Il y a enfin la sauvegarde des comptes -_-'

28/03/2008
parent 2d3c1725
No preview for this file type
using System;
using System.Collections.Generic;
using System.Text;
using Sokoban.Jeu.Niveau;
using System.IO;
//using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Windows.Forms;
namespace Sokoban.Jeu.Action
{
public class Joueur
[Serializable]
public class Joueur //: ISerializable
{
/*
* ------------------------------------------------------------------------------
......@@ -40,6 +47,42 @@ namespace Sokoban.Jeu.Action
return nomsjoueurs;
}
public static void charger()
{
String[] reps = Directory.GetFiles(@"Sauvegardes");
//XmlSerializer deserisaliser = new XmlSerializer(typeof(Joueur));
foreach (String fichier in reps) {
try
{
Stream oReadBinStream = File.Open(fichier, FileMode.Open);
BinaryFormatter oReadFormatter = new BinaryFormatter();
//Joueur joueur = new Joueur();
AddJoueur(fichier.Substring(12, fichier.Length-4-12), (Joueur)oReadFormatter.Deserialize(oReadBinStream));
oReadBinStream.Close ();
/*StreamReader steam = new StreamReader(@"Sauvegardes\" + fichier);
Joueur joueur = (Joueur)deserisaliser.Deserialize(steam);
AddJoueur(fichier.Substring(0,-4), joueur) ;
steam.Close();*/
}
catch (Exception e){
System.Console.WriteLine(e.Message);
}
}
}
public static Joueur getJoueur(String nom)
{
Joueur joueur;
if (joueurs.TryGetValue(nom, out joueur))
{
return joueur;
} else {
return null;
}
}
/*
* ------------------------------------------------------------------------------
* --------- GESTION D'UN JOUEUR ------------------------------------------------
......@@ -65,13 +108,52 @@ namespace Sokoban.Jeu.Action
}
}
private String nomCourant;
public String NomCourant
{
get
{
return nomCourant;
}
set
{
nomCourant = value;
}
}
private int ligneCourant;
public int LigneCourant
{
get
{
return ligneCourant;
}
set
{
ligneCourant = value;
}
}
private int nivCourant;
public int NivCourant
{
get
{
return nivCourant;
}
set
{
nivCourant = value;
}
}
/// <summary>
/// tableau de niveau
/// null : niveau non effectué
/// points : informations sur le niveau
/// </summary>
private JoueurNiveauStatuts[] niveaux;
private Dictionary<String, JoueurNiveauStatuts> niveaux = new Dictionary<String, JoueurNiveauStatuts>();
/// <summary>
/// Créer un joueur sans aucun paramètre
/// </summary>
......@@ -84,20 +166,69 @@ namespace Sokoban.Jeu.Action
public Joueur(String nomJoueur)
{
NomJoueur = nomJoueur;
nouveauJoueur();
}
public void Sauver()
{
try
{
Stream oWriteBinStream = File.Open(@"sauvegardes\" + NomJoueur + ".sav", FileMode.Create);
BinaryFormatter oWriteFormatter = new BinaryFormatter ();
oWriteFormatter.Serialize (oWriteBinStream, this);
oWriteBinStream.Close ();
/*StreamWriter stream = new StreamWriter(@"sauvegardes\" + NomJoueur + ".xml");
XmlSerializer serisaliser = new XmlSerializer(typeof(Joueur));
serisaliser.Serialize(stream, this);
stream.Close();*/
}
catch
{
System.Console.WriteLine("Sauvegarde Impossible.");
}
}
public void AddScore(NivInfos nivInfo) {
// niveau courant
nomCourant = nivInfo.jeuNom;
ligneCourant = nivInfo.jeuLigne;
nivCourant = nivInfo.jeuNiveau;
int deplacement = nivInfo.Deplacements;
int temps = nivInfo.Temps;
String nom = nivInfo.jeuNom + "_" + nivInfo.jeuLigne + "-" + nivInfo.jeuNiveau;
JoueurNiveauStatuts niveauRecords;
if(niveaux.TryGetValue(nom, out niveauRecords)) {
if (niveauRecords.MeilleurDeplacementEffectue[0] > temps)
{
niveauRecords.MeilleurDeplacementEffectue = new int[] { temps, deplacement };
}
if (niveauRecords.MeilleurTempsEffectue[1] > deplacement)
{
niveauRecords.MeilleurTempsEffectue = new int[] { temps, deplacement };
}
} else {
niveaux.Add(nom, new JoueurNiveauStatuts(new int[] { temps, deplacement }));
}
Sauver();
}
/// <summary>
/// Créer un tableau avec le nombre de niveaux possibles, mais vide.
/// </summary>
private void nouveauJoueur()
{
// le niveau sont null (sans information)
niveaux = new JoueurNiveauStatuts[100];
}
public void activer(string nomJoueur)
{
NomJoueur = nomJoueur;
}
}
}
......@@ -4,18 +4,46 @@ using System.Text;
namespace Sokoban.Jeu.Action
{
[Serializable]
class JoueurNiveauStatuts
{
private int tempsEffectue = 0;
private int deplacementEffectue = 0;
private int[] meilleurTempsEffectue = new int[2];
public int[] MeilleurTempsEffectue
{
get
{
return meilleurTempsEffectue;
}
set
{
meilleurTempsEffectue = value;
}
}
public JoueurNiveauStatuts(int tempsEffectue, int deplacementEffectue)
private int[] meilleurDeplacementEffectue = new int[2];
public int[] MeilleurDeplacementEffectue
{
this.tempsEffectue = tempsEffectue;
this.deplacementEffectue = deplacementEffectue;
get
{
return meilleurDeplacementEffectue;
}
set
{
meilleurDeplacementEffectue = value;
}
}
public JoueurNiveauStatuts() { }
public JoueurNiveauStatuts(int[] effectue)
{
MeilleurTempsEffectue = effectue;
MeilleurDeplacementEffectue = effectue;
}
}
}
......@@ -32,6 +32,7 @@
this.bt_lv2 = new System.Windows.Forms.Button();
this.bt_Retour = new System.Windows.Forms.Button();
this.bt_lvl3 = new System.Windows.Forms.Button();
this.bt_Reprendre = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// bt_lv1
......@@ -74,6 +75,16 @@
this.bt_lvl3.UseVisualStyleBackColor = true;
this.bt_lvl3.Click += new System.EventHandler(this.bt_lvl3_Click);
//
// bt_Reprendre
//
this.bt_Reprendre.Location = new System.Drawing.Point(145, 62);
this.bt_Reprendre.Name = "bt_Reprendre";
this.bt_Reprendre.Size = new System.Drawing.Size(111, 23);
this.bt_Reprendre.TabIndex = 0;
this.bt_Reprendre.Text = "Reprendre";
this.bt_Reprendre.UseVisualStyleBackColor = true;
this.bt_Reprendre.Click += new System.EventHandler(this.bt_Reprendre_Click);
//
// ecran_Difficulte
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
......@@ -81,6 +92,7 @@
this.Controls.Add(this.bt_Retour);
this.Controls.Add(this.bt_lvl3);
this.Controls.Add(this.bt_lv2);
this.Controls.Add(this.bt_Reprendre);
this.Controls.Add(this.bt_lv1);
this.Name = "ecran_Difficulte";
this.Size = new System.Drawing.Size(425, 337);
......@@ -94,5 +106,6 @@
private System.Windows.Forms.Button bt_lv2;
private System.Windows.Forms.Button bt_Retour;
private System.Windows.Forms.Button bt_lvl3;
private System.Windows.Forms.Button bt_Reprendre;
}
}
......@@ -16,6 +16,11 @@ namespace Sokoban.Jeu.Affichage
{
this.jeuSokoban = jeuSokoban;
InitializeComponent();
if (jeuSokoban.JoueurActif.NomCourant == null)
{
bt_Reprendre.Visible = false;
}
}
private void bt_lv1_Click(object sender, EventArgs e)
......@@ -45,6 +50,19 @@ namespace Sokoban.Jeu.Affichage
jeuSokoban.ecran(JeuSokoban.MENU_PRINCIPAL);
}
private void bt_Reprendre_Click(object sender, EventArgs e)
{
int ligne = jeuSokoban.JoueurActif.LigneCourant;
int niveau = (jeuSokoban.JoueurActif.NivCourant + 1) % 10;
niveau = (niveau == 0) ? 10 : niveau;
ligne += ((jeuSokoban.JoueurActif.LigneCourant + 1 % 10 == 0) ? 1 : 0);
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.activerNiveau(jeuSokoban.JoueurActif.NomCourant, ligne, niveau);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
}
}
......@@ -28,11 +28,13 @@ namespace Sokoban.Jeu.Affichage
foreach(String j in joueurs) {
Lsb_Comptes.Items.AddRange(new object[] { j });
}
// Affichage du joueur en cours
if (jeuSokoban.JoueurActif != null)
{
lbl_Actif_NomJoueur.Text = jeuSokoban.JoueurActif .NomJoueur;
lbl_Actif_NomJoueur.Text = jeuSokoban.JoueurActif.NomJoueur;
//bt_Activer.Enabled = true;
//bt_Supprimer.Enabled = true;
}
// Modification d'affichage d'lement en fonction de la page suivante
......@@ -77,7 +79,6 @@ namespace Sokoban.Jeu.Affichage
{
if (!txb_Creer.Text.Equals(""))
{
try
{
// Demande de cration de joueur
......@@ -91,9 +92,8 @@ namespace Sokoban.Jeu.Affichage
}
catch
{
MessageBox.Show("Vrifiez que ce nom n'existe pas.");
}
}
}
......@@ -106,7 +106,7 @@ namespace Sokoban.Jeu.Affichage
private void Lsb_Comptes_SelectedIndexChanged(object sender, EventArgs e)
{
bt_Activer.Enabled = true;
bt_Supprimer.Enabled = true;
//bt_Supprimer.Enabled = true;
}
private void bt_Activer_Click(object sender, EventArgs e)
......
......@@ -173,26 +173,31 @@ namespace Sokoban.Jeu.Affichage
if (testCaisse(x, y))
{
int id = niveauElements[_ypos + y, _xpos + x];
caisses[id].Location = new System.Drawing.Point((x*2 + _xpos) * _xpas, (y*2 + _ypos) * _ypas);
if (testCaissePlacee(x*2, y*2))
caisses[id].Location = new System.Drawing.Point((x * 2 + _xpos) * _xpas, (y * 2 + _ypos) * _ypas);
if (testCaissePlacee(x * 2, y * 2))
{
caisses[id].ImageLocation = (@"Images\caisse_placee.png");
etatCaisse[id-1] = 1;
etatCaisse[id - 1] = 1;
}
else
}
else
{
caisses[id].ImageLocation = (@"Images\caisse.png");
etatCaisse[id-1] = 0;
etatCaisse[id - 1] = 0;
}
niveauElements[_ypos + 2 * y, _xpos + 2 * x] = niveauElements[_ypos + y, _xpos + x];
niveauElements[_ypos + y, _xpos + x] = 0;
undoAdd(_xpos, _ypos, x, y, id);
testFin();
}
else
{
undoAdd(_xpos, _ypos, x, y);
}
undoAdd(_xpos, _ypos);
_xpos += x;
_ypos += y;
_x += x * _xpas;
......@@ -204,11 +209,79 @@ namespace Sokoban.Jeu.Affichage
}
}
private void undoAdd(int x, int y)
private List<int[]> undoListe = new List<int[]>();
private void undoAdd(int xpos, int ypos, int x, int y)
{
int[] l = {xpos, ypos, x, y, 0};
undoListe.Add(l);
}
private void undoAdd(int xpos, int ypos, int x, int y, int id)
{
int[] l = {xpos, ypos, x, y, id};
undoListe.Add(l);
}
public void undo()
{
if (mouvements > 0)
{
int[] l = undoListe[undoListe.Count - 1];
undoListe.Remove(l);
if (l[2] == 1 && l[3] == 0)
{
personnage.ImageLocation = (@"Images\perso_droite.gif");
}
if (l[2] == -1 && l[3] == 0)
{
personnage.ImageLocation = (@"Images\perso_gauche.gif");
}
if (l[2] == 0 && l[3] == -1)
{
personnage.ImageLocation = (@"Images\perso_haut.gif");
}
if (l[2] == 0 && l[3] == 1)
{
personnage.ImageLocation = (@"Images\perso_bas.gif");
}
if (l[4] > 0)
{
caisses[l[4]].Location = new System.Drawing.Point(_xpos * _xpas, _ypos * _ypas);
if (testCaissePlacee(l[2], l[3]))
{
caisses[l[4]].ImageLocation = (@"Images\caisse_placee.png");
etatCaisse[l[4] - 1] = 1;
}
else
{
caisses[l[4]].ImageLocation = (@"Images\caisse.png");
etatCaisse[l[4] - 1] = 0;
}
niveauElements[_ypos, _xpos] = niveauElements[l[0], l[1]];
niveauElements[l[0], l[1]] = 0;
}
_xpos = l[0];
_ypos = l[1];
_x = l[0] * _xpas;
_y = l[1] * _ypas;
mouvements--;
eNiv.mouvementChange(mouvements);
personnage.Location = new System.Drawing.Point(_x, _y);
}
}
public void testFin()
{
int compteur = 0;
......
......@@ -100,6 +100,7 @@
this.bt_MenuPrincipal.TabIndex = 2;
this.bt_MenuPrincipal.Text = "Menu Principal";
this.bt_MenuPrincipal.UseVisualStyleBackColor = true;
this.bt_MenuPrincipal.Click += new System.EventHandler(this.bt_MenuPrincipal_Click);
//
// bt_Undo
//
......@@ -109,6 +110,7 @@
this.bt_Undo.TabIndex = 2;
this.bt_Undo.Text = "Undo";
this.bt_Undo.UseVisualStyleBackColor = true;
this.bt_Undo.Click += new System.EventHandler(this.bt_Undo_Click);
//
// bt_Recommencer
//
......@@ -118,6 +120,7 @@
this.bt_Recommencer.TabIndex = 2;
this.bt_Recommencer.Text = "Recommencer";
this.bt_Recommencer.UseVisualStyleBackColor = true;
this.bt_Recommencer.Click += new System.EventHandler(this.bt_Recommencer_Click);
//
// ecran_Niveau
//
......
......@@ -14,13 +14,15 @@ namespace Sokoban.Jeu.Affichage
{
private JeuSokoban jeuSokoban;
private ecran_Jeu niv;
public ecran_Niveau(JeuSokoban jeuSokoban, NivInfos niveau)
{
this.jeuSokoban = jeuSokoban;
InitializeComponent();
jeu_Niveau.Controls.Clear();
jeu_Niveau.Controls.Add(new ecran_Jeu(this, niveau));
niv = new ecran_Jeu(this, niveau);
jeu_Niveau.Controls.Add(niv);
lbl_Nom.Text = niveau.Nom;
}
......@@ -97,6 +99,24 @@ namespace Sokoban.Jeu.Affichage
jeuSokoban.ecran(JeuSokoban.NIVEAUFINI);
}
private void bt_Recommencer_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.activerNiveau(jeuSokoban.NiveauInfos.jeuNom, jeuSokoban.NiveauInfos.jeuLigne, jeuSokoban.NiveauInfos.jeuNiveau);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
private void bt_Undo_Click(object sender, EventArgs e)
{
niv.undo();
}
private void bt_MenuPrincipal_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.ecran(JeuSokoban.MENU_PRINCIPAL);
}
}
}
......@@ -39,6 +39,8 @@ namespace Sokoban.Jeu.Affichage
lb_Temps.Text = TimeInString;
lb_Mouvement.Text = String.Format("{0:D4}", nivInfo.Deplacements);
jeuSokoban.JoueurActif.AddScore(nivInfo);
// dsactivation de bouton
testNiveau(-1, bt_NivPrec, lb_TextPrec);
......
......@@ -48,18 +48,13 @@ namespace Sokoban.Jeu
Configuration = new Config(this);
Configuration.chargerInfos();
// Récupérer les profils joureurs
Joueur.charger();
if (Configuration.saveDernierJoueur)
{
activerJoueur(Configuration.DernierJoueur);
}
// Récupérer les profils joureurs
//
//
//
//
// initalisation des éléments principaux : Barre de Menu et Panel
InitializeComponent();
// chargement de menu principal
......@@ -94,8 +89,7 @@ namespace Sokoban.Jeu
/// <param name="nomJoueur">Nom du joueur</param>
public void activerJoueur(String nomJoueur)
{
Joueur joueur = new Joueur();
joueur.activer(nomJoueur);
Joueur joueur = Joueur.getJoueur(nomJoueur);
JoueurActif = joueur;
configuration.DernierJoueur = nomJoueur;
}
......