Commit 744f11d8 authored by Zéfling's avatar Zéfling 🎨
Browse files

avec config et lecteur de niveau

23/03/2008
parent 17fd1da3
No preview for this file type
......@@ -10,7 +10,18 @@ namespace Sokoban.Jeu.Action
[Serializable]
public class Config
{
private String dernierJoueur;
public String DernierJoueur
{
get
{
return dernierJoueur;
}
set
{
dernierJoueur = value;
}
}
private int pos_x;
public int Pos_x
{
......@@ -59,14 +70,24 @@ namespace Sokoban.Jeu.Action
taille_y = value;
}
}
public bool saveDimensions;
public bool saveDernierJoueur;
private JeuSokoban sokoban;
/// <summary>
/// Configuration par défaut
/// </summary>
public Config(JeuSokoban sokoban)
{
this.sokoban = sokoban;
}
public Config()
{
}
/// <summary>
/// Profil par défaut
/// </summary>
......@@ -76,6 +97,7 @@ namespace Sokoban.Jeu.Action
Pos_y = 50;
Taille_x = 300;
Taille_y = 500;
DernierJoueur = "";
}
/// <summary>
......@@ -108,6 +130,9 @@ namespace Sokoban.Jeu.Action
Pos_y = config.Pos_y;
Taille_x = config.Taille_x;
Taille_y = config.Taille_y;
DernierJoueur = config.DernierJoueur;
saveDernierJoueur = config.saveDernierJoueur;
saveDimensions = config.saveDimensions;
}
/// <summary>
......@@ -115,6 +140,17 @@ namespace Sokoban.Jeu.Action
/// </summary>
public void sauverInfos()
{
if (saveDimensions)
{
Pos_x = sokoban.Right;
Pos_y = sokoban.Top;
Taille_x = sokoban.Width;
Taille_y = sokoban.Height;
}
if (!saveDernierJoueur) {
DernierJoueur = "";
}
try
{
StreamWriter stream = new StreamWriter(@"config.xml");
......
......@@ -5,36 +5,22 @@ using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Sokoban.Jeu.Niveau;
namespace Sokoban.Jeu.Affichage
{
public partial class ecran_Jeu : UserControl
{
public int[,] niveau = new int[,] {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,1,0},
{0,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,1,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
public int[,] niveauElements = new int[,] {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
public static int MUR = 0;
public static int SOL = 1;
public static int ARRIVEE = 2;
public static int RIEN = 0;
public static int CAISSE = 1;
public int[,] niveau ;
public int[,] niveauElements ;
public int _xpas = 25;
public int _ypas = 25;
public int _x = 25;
......@@ -51,9 +37,16 @@ namespace Sokoban.Jeu.Affichage
public ecran_Jeu()
{
InitializeComponent();
Fichier niveauCharger = new Fichier("defaut", 1, 1);
niveau = niveauCharger.getNiveau();
niveauElements = niveauCharger.getNiveauElements();
int[] joueur = niveauCharger.getJoueur();
_xpos = joueur[1];
_ypos = joueur[0];
_x = _xpos * _xpas;
_y = _ypos * _ypas;
personnage.ImageLocation = (appPath + @"\..\..\Images\perso_gauche.png");
personnage.ImageLocation = (appPath + @"\Images\perso_gauche.png");
personnage.Location = new System.Drawing.Point(_x, _y);
personnage.BackColor = Color.FromArgb(0, 0, 0, 0);
personnage.Size = new System.Drawing.Size(_xpas, _ypas);
......@@ -68,7 +61,7 @@ namespace Sokoban.Jeu.Affichage
for (int j = 0; j < nombreCaseX; j++)
{
nombreCaisse += niveauElements[i, j];
if (niveauElements[i, j] > 0)
if (niveauElements[i, j] > RIEN)
{
niveauElements[i, j] = nombreCaisse; // on place un identifateur la place
}
......@@ -82,11 +75,19 @@ namespace Sokoban.Jeu.Affichage
{
for (int j = 0; j < nombreCaseX; j++)
{
if (niveauElements[i, j] > 0)
if (niveauElements[i, j] > RIEN)
{
caisses[k] = new System.Windows.Forms.PictureBox();
caisses[k].Size = new System.Drawing.Size(25, 25);
caisses[k].ImageLocation = (appPath + @"\..\..\Images\caisse.png");
if (niveau[i, j] == ARRIVEE)
{
caisses[k].ImageLocation = (appPath + @"\Images\caisse_placee.png");
etatCaisse[k - 1] = 1;
}
else
{
caisses[k].ImageLocation = (appPath + @"\Images\caisse.png");
}
caisses[k].Location = new System.Drawing.Point(j * _ypas, i * _xpas);
Controls.Add(caisses[k]);
k++;
......@@ -104,17 +105,17 @@ namespace Sokoban.Jeu.Affichage
{
for (int j = 0; j < nombreCaseX; j++)
{
if (niveau[i,j] >= 1 )
if (niveau[i,j] > MUR )
{
sol[i,j] = new System.Windows.Forms.PictureBox();
sol[i,j].Size = new System.Drawing.Size(25, 25);
if (niveau[i, j] == 1)
if (niveau[i, j] == SOL)
{
sol[i, j].ImageLocation = (appPath + @"\..\..\Images\sol.png");
sol[i, j].ImageLocation = (appPath + @"\Images\sol.png");
}
else
{
sol[i, j].ImageLocation = (appPath + @"\..\..\Images\zone.png");
sol[i, j].ImageLocation = (appPath + @"\Images\zone.png");
}
sol[i,j].Location = new System.Drawing.Point(j*_ypas,i*_xpas);
Controls.Add(sol[i,j]);
......@@ -123,25 +124,30 @@ namespace Sokoban.Jeu.Affichage
}
}
private Fichier Fichier(char p,int p_2,int p_3)
{
throw new Exception("The method or operation is not implemented.");
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Right:
deplacement(1, 0);
personnage.ImageLocation = (appPath + @"\..\..\Images\perso_droite.png");
personnage.ImageLocation = (appPath + @"\Images\perso_droite.png");
return true;
case Keys.Left:
deplacement(-1, 0);
personnage.ImageLocation = (appPath + @"\..\..\Images\perso_gauche.png");
personnage.ImageLocation = (appPath + @"\Images\perso_gauche.png");
return true;
case Keys.Up:
deplacement(0, -1);
personnage.ImageLocation = (appPath + @"\..\..\Images\perso_haut.png");
personnage.ImageLocation = (appPath + @"\Images\perso_haut.png");
return true;
case Keys.Down:
deplacement(0, 1);
personnage.ImageLocation = (appPath + @"\..\..\Images\perso_bas.png");
personnage.ImageLocation = (appPath + @"\Images\perso_bas.png");
return true;
default: return base.ProcessCmdKey(ref msg, keyData);
}
......@@ -162,14 +168,14 @@ namespace Sokoban.Jeu.Affichage
caisses[id].Location = new System.Drawing.Point((x*2 + _xpos) * _xpas, (y*2 + _ypos) * _ypas);
if (testCaissePlacee(x*2, y*2))
{
caisses[id].ImageLocation = (appPath + @"\..\..\Images\caisse_placee.png");
caisses[id].ImageLocation = (appPath + @"\Images\caisse_placee.png");
etatCaisse[id-1] = 1;
testFin();
}
else
{
caisses[id].ImageLocation = (appPath + @"\..\..\Images\caisse.png");
caisses[id].ImageLocation = (appPath + @"\Images\caisse.png");
etatCaisse[id-1] = 0;
}
......@@ -213,7 +219,7 @@ namespace Sokoban.Jeu.Affichage
* 2 = arrives
*/
if (niveau[ _ypos + y, _xpos + x] >= 1)
if (niveau[ _ypos + y, _xpos + x] > MUR)
{
// test si il a une caisse
......@@ -234,11 +240,11 @@ namespace Sokoban.Jeu.Affichage
public bool testCaisse(int x, int y)
{
/* 0 = mur
/* 0 = pas caisse
* 1 = caisse
*/
if (niveauElements[_ypos + y, _xpos + x] >= 1)
if (niveauElements[_ypos + y, _xpos + x] > RIEN)
{
return true;
}
......@@ -250,7 +256,7 @@ namespace Sokoban.Jeu.Affichage
public bool testCaissePlacee(int x, int y)
{
if (niveau[_ypos + y, _xpos + x] == 2)
if (niveau[_ypos + y, _xpos + x] == ARRIVEE)
{
return true;
}
......
......@@ -29,18 +29,61 @@
/// </summary>
private void InitializeComponent()
{
this.cb_Fenetre = new System.Windows.Forms.CheckBox();
this.cb_Joueur = new System.Windows.Forms.CheckBox();
this.lb_titre = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// PanneauConfiguration
// cb_Fenetre
//
this.cb_Fenetre.AutoSize = true;
this.cb_Fenetre.Location = new System.Drawing.Point(24, 61);
this.cb_Fenetre.Name = "cb_Fenetre";
this.cb_Fenetre.Size = new System.Drawing.Size(278, 17);
this.cb_Fenetre.TabIndex = 0;
this.cb_Fenetre.Text = "Position de la fenêtre (Position absolue et dimensions)";
this.cb_Fenetre.UseVisualStyleBackColor = true;
this.cb_Fenetre.CheckedChanged += new System.EventHandler(this.cb_Fenetre_CheckedChanged);
//
// cb_Joueur
//
this.cb_Joueur.AutoSize = true;
this.cb_Joueur.Location = new System.Drawing.Point(24, 100);
this.cb_Joueur.Name = "cb_Joueur";
this.cb_Joueur.Size = new System.Drawing.Size(318, 17);
this.cb_Joueur.TabIndex = 1;
this.cb_Joueur.Text = "Lancer automatiquement le dernier joueur au démarage du jeu";
this.cb_Joueur.UseVisualStyleBackColor = true;
this.cb_Joueur.CheckedChanged += new System.EventHandler(this.cb_Joueur_CheckedChanged);
//
// lb_titre
//
this.lb_titre.AutoSize = true;
this.lb_titre.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lb_titre.Location = new System.Drawing.Point(21, 19);
this.lb_titre.Name = "lb_titre";
this.lb_titre.Size = new System.Drawing.Size(199, 17);
this.lb_titre.TabIndex = 2;
this.lb_titre.Text = "Options de Configuration :";
//
// ecran_PanneauConfiguration
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Name = "PanneauConfiguration";
this.Load += new System.EventHandler(this.PanneauConfiguration_Load);
this.Controls.Add(this.lb_titre);
this.Controls.Add(this.cb_Joueur);
this.Controls.Add(this.cb_Fenetre);
this.Name = "ecran_PanneauConfiguration";
this.Size = new System.Drawing.Size(397, 167);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.CheckBox cb_Fenetre;
private System.Windows.Forms.CheckBox cb_Joueur;
private System.Windows.Forms.Label lb_titre;
}
}
......@@ -10,14 +10,24 @@ namespace Sokoban.Jeu.Affichage
{
public partial class ecran_PanneauConfiguration : UserControl
{
public ecran_PanneauConfiguration()
JeuSokoban jeuSokoban;
public ecran_PanneauConfiguration(JeuSokoban jeuSokoban)
{
this.jeuSokoban = jeuSokoban;
InitializeComponent();
cb_Fenetre.Checked = jeuSokoban.Configuration.saveDimensions;
cb_Joueur.Checked = jeuSokoban.Configuration.saveDernierJoueur;
}
private void PanneauConfiguration_Load(object sender, EventArgs e)
private void cb_Fenetre_CheckedChanged(object sender, EventArgs e)
{
jeuSokoban.Configuration.saveDimensions = cb_Fenetre.Checked;
}
private void cb_Joueur_CheckedChanged(object sender, EventArgs e)
{
jeuSokoban.Configuration.saveDernierJoueur = cb_Joueur.Checked;
}
}
}
......@@ -113,6 +113,7 @@
this.configurationToolStripMenuItem.Name = "configurationToolStripMenuItem";
this.configurationToolStripMenuItem.Size = new System.Drawing.Size(92, 20);
this.configurationToolStripMenuItem.Text = "Configuration";
this.configurationToolStripMenuItem.Click += new System.EventHandler(this.configurationToolStripMenuItem_Click);
//
// toolStripMenuItem1
//
......
......@@ -45,9 +45,14 @@ namespace Sokoban.Jeu
KeyPreview = true;
// recupération des information de lancement
Configuration = new Config();
Configuration = new Config(this);
Configuration.chargerInfos();
if (Configuration.saveDernierJoueur)
{
activerJoueur(Configuration.DernierJoueur);
}
// Récupérer les profils joureurs
//
......@@ -92,6 +97,7 @@ namespace Sokoban.Jeu
Joueur joueur = new Joueur();
joueur.activer(nomJoueur);
JoueurActif = joueur;
configuration.DernierJoueur = nomJoueur;
}
/// <summary>
......@@ -118,6 +124,7 @@ namespace Sokoban.Jeu
public const int IDENTIFICATION = 3;
public const int NIVEAU = 4;
public const int DIFFICULTE = 10;
public const int CONFIGURATION = 20;
public const int QUITTER = 999;
/// <summary>
......@@ -200,6 +207,9 @@ namespace Sokoban.Jeu
case NIVEAU :
App.Controls.Add(new ecran_Niveau(this, NiveauInfos));
break;
case CONFIGURATION :
App.Controls.Add(new ecran_PanneauConfiguration(this));
break;
case QUITTER :
Dispose();
break;
......@@ -298,6 +308,11 @@ namespace Sokoban.Jeu
}
private void configurationToolStripMenuItem_Click(object sender, EventArgs e)
{
ecran(CONFIGURATION);
}
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
namespace Sokoban.Jeu.Niveau
{
......@@ -11,35 +12,104 @@ namespace Sokoban.Jeu.Niveau
/// <summary>
/// Lit le ficher contenant les informations sur le niveau dterminer par les paramtres.
/// </summary>
/// <param name="nom">nom de la liste</param>
/// <param name="ligne">numero de ligne</param>
/// <param name="niveau">numero de niveau dans la ligne</param>
/// <returns></returns>
public static Terrain lecture(int ligne, int niveau)
{
/*XmlTextReader fichierXML = new XmlTextReader(JeuSokoban.PATH_TERRAINS+@"\"+ligne+"-"+niveau+".xml");
fichierXML.WhitespaceHandling = WhitespaceHandling.None;
private int[,] niveau;
private int[,] niveauElements;
private int[] joueur = new int[2];
Terrain terrain = new Terrain();
public Fichier (String nom, int numLigne, int numNiveau)
{
while (fichierXML.Read())
TextReader xsb = new StreamReader(@"Niveaux\" + nom + @"\" + (numLigne - 1) + "-" + (numNiveau - 1) + ".xsb");
// recherche la taille du niveau
int largeur = 0;
int lignes = 0;
String ligne = "";
List<String> nivLigne = new List<string>();
while ((ligne = xsb.ReadLine()) != null)
{
if (fichierXML.LocalName.Equals("ligne"))
if (largeur < ligne.Length)
{
largeur = ligne.Length;
}
lignes++;
nivLigne.Add(ligne);
}
xsb.Close();
niveau = new int[lignes,largeur];
niveauElements = new int[lignes,largeur];
int j = 0;
foreach(String l in nivLigne) {
int i = 0;
IEnumerator<char> lEnum = l.GetEnumerator();
while (lEnum.MoveNext())
{
List<int> liste = new List<int>();
while (fichierXML.LocalName.Equals("finLigne"))
char ch = lEnum.Current;
if (ch.Equals(' '))
{
niveau[j, i] = 1;
niveauElements[j, i] = 0;
}
if (ch.Equals('#'))
{
niveau[j, i] = 0;
niveauElements[j, i] = 0;
}
if (ch.Equals('$'))
{
niveau[j, i] = 1;
niveauElements[j, i] = 1;
}
if (ch.Equals('.'))
{
liste.Add(Int32.Parse(ReadString()));
fichierXML.Read();
niveau[j, i] = 2;
niveauElements[j, i] = 0;
}
terrain.addLigne(liste);
if (ch.Equals('*'))
{
niveau[j, i] = 2;
niveauElements[j, i] = 1;
}
if (ch.Equals('@'))
{
joueur[0] = j;
joueur[1] = i;
niveau[j, i] = 1;
niveauElements[j, i] = 0;
}
if (ch.Equals('+'))
{
joueur[0] = j;
joueur[1] = i;
niveau[j, i] = 2;
niveauElements[j, i] = 0;
}
i++;
}
j++;
}
}
fichierXML.Close();*/
return null;
public int[,] getNiveau()
{
return niveau;
}
public int[,] getNiveauElements()
{
return niveauElements;
}
public int[] getJoueur()
{
return joueur;
}
}
......
......@@ -8,8 +8,8 @@ namespace Sokoban.Jeu.Niveau
{
private int ligne;
private int niveau;
private Terrain terrain;
private int nbrBlock;
// private Terrain terrain;
// private int nbrBlock;
public NivInfos(int ligne, int niveau)
{
......@@ -17,7 +17,7 @@ namespace Sokoban.Jeu.Niveau
this.niveau = niveau;
terrain = Fichier.lecture(ligne, niveau);
//terrain = Fichier.lecture(ligne, niveau);
}
......