Commit 792ce969 authored by Zéfling's avatar Zéfling 🎨
Browse files

Avec niveau suivant

Il y a le fin de niveau avec le score. Je me pancherais demain sur la sauvegarde des infos : joueurs et scores.

25/03/2008
parent 18357e49
No preview for this file type
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Sokoban.Jeu;
using Sokoban.Jeu.Affichage;
namespace Sokoban.Jeu.Action
{
class Clavier
{
private JeuSokoban jeuSokoban;
/// <summary>
///
/// </summary>
/// <param name="jeuSokoban"></param>
public Clavier (JeuSokoban jeuSokoban)
{
this.jeuSokoban = jeuSokoban;
}
/// <summary>
/// Gestion du clavier dans un niveau du jeu
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/*public static void act_Niveau(ecran_Niveau niveau, KeyPressEventArgs e)
{
if (e.KeyChar.Equals(Keys.Right))
{
niveau.deplacement(0, 1);
}
if (e.KeyChar.Equals(Keys.Left))
{
niveau.deplacement(0, -1);
}
if (e.KeyChar.Equals(Keys.Up))
{
niveau.deplacement(-1, 0);
}
if (e.KeyChar.Equals(Keys.Down))
{
niveau.deplacement(1, 0);
}
}*/
}
}
......@@ -21,21 +21,21 @@ namespace Sokoban.Jeu.Affichage
private void bt_lv1_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.activerNiveau(1, 1);
jeuSokoban.activerNiveau("defaut", 1, 1);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
private void bt_lv2_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.activerNiveau(3, 1);
jeuSokoban.activerNiveau("defaut", 3, 1);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
private void bt_lvl3_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.activerNiveau(5, 1);
jeuSokoban.activerNiveau("defaut", 5, 1);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
......
......@@ -36,15 +36,17 @@ namespace Sokoban.Jeu.Affichage
private ecran_Niveau eNiv;
public ecran_Jeu(ecran_Niveau eNiv, int nivLevel, int nivId)
public ecran_Jeu(ecran_Niveau eNiv, NivInfos nivInfo)
{
this.eNiv = eNiv;
this.Focus();
InitializeComponent();
Fichier niveauCharger = new Fichier("defaut", nivLevel, nivId);
Fichier niveauCharger = nivInfo.terrain;
niveau = niveauCharger.getNiveau();
niveauElements = niveauCharger.getNiveauElements();
int[] joueur = niveauCharger.getJoueur();
_xpos = joueur[1];
_ypos = joueur[0];
......@@ -177,7 +179,6 @@ namespace Sokoban.Jeu.Affichage
caisses[id].ImageLocation = (@"Images\caisse_placee.png");
etatCaisse[id-1] = 1;
testFin();
}
else
{
......@@ -187,7 +188,8 @@ namespace Sokoban.Jeu.Affichage
niveauElements[_ypos + 2 * y, _xpos + 2 * x] = niveauElements[_ypos + y, _xpos + x];
niveauElements[_ypos + y, _xpos + x] = 0;
testFin();
}
undoAdd(_xpos, _ypos);
......@@ -198,13 +200,8 @@ namespace Sokoban.Jeu.Affichage
mouvements++;
eNiv.mouvementChange(mouvements);
personnage.Location = new System.Drawing.Point(_x, _y);
}
if (fin)
{
System.Console.WriteLine("fin");
}
}
private void undoAdd(int x, int y)
......@@ -220,6 +217,10 @@ namespace Sokoban.Jeu.Affichage
compteur += etatCaisse[i];
}
fin = (compteur == nombreCaisse) ? true : false;
if (fin)
{
eNiv.fin(mouvements);
}
}
public bool testDeplacement(int x, int y)
......
......@@ -20,8 +20,8 @@ namespace Sokoban.Jeu.Affichage
this.jeuSokoban = jeuSokoban;
InitializeComponent();
jeu_Niveau.Controls.Clear();
jeu_Niveau.Controls.Add(new ecran_Jeu(this, 1, 1));
lbl_Nom.Text = "Niveau " + 1 + "-" + 1;
jeu_Niveau.Controls.Add(new ecran_Jeu(this, niveau));
lbl_Nom.Text = niveau.Nom;
}
public void mouvementChange(int value)
......@@ -56,16 +56,8 @@ namespace Sokoban.Jeu.Affichage
public string getTime()
{
string TimeInString;
int minute = DateTime.Now.Minute;
if (startMinute > minute)
{
minute += 60;
}
int start = startMinute*60000+startSeconde*1000+startMilli;
int courant = minute*60000+DateTime.Now.Second*1000+DateTime.Now.Millisecond;
courant -= start;
int courant = duree();
courantMinute = courant / 60000;
courantSeconde = (courant % 60000) / 1000;
......@@ -76,12 +68,33 @@ namespace Sokoban.Jeu.Affichage
return TimeInString;
}
public void Timer_Tick(object sender,EventArgs eArgs)
public void Timer_Tick(object sender, EventArgs eArgs)
{
if(sender == Clock)
if (sender == Clock)
{
lbl_Temps.Text = getTime();
}
}
private int duree () {
int start = startMinute*60000+startSeconde*1000+startMilli;
int minute = DateTime.Now.Minute;
if (startMinute > minute)
{
lbl_Temps.Text = getTime();
minute += 60;
}
int courant = minute*60000+DateTime.Now.Second*1000+DateTime.Now.Millisecond;
courant -= start;
return courant;
}
public void fin(int mouvement)
{
jeuSokoban.NiveauInfos.setScore(duree(), mouvement);
jeuSokoban.ecran(JeuSokoban.NIVEAUFINI);
}
......
namespace Sokoban.Jeu.Affichage
{
partial class ecran_NiveauFini
{
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
/// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Code généré par le Concepteur de composants
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.lb_Titre = new System.Windows.Forms.Label();
this.gbx_Actu = new System.Windows.Forms.GroupBox();
this.lb_Mouvement = new System.Windows.Forms.Label();
this.lb_MouvementTitre = new System.Windows.Forms.Label();
this.lb_Temps = new System.Windows.Forms.Label();
this.lb_TempsTitre = new System.Windows.Forms.Label();
this.bt_MenuPrincipal = new System.Windows.Forms.Button();
this.bt_Recommencer = new System.Windows.Forms.Button();
this.bt_NivSuiv = new System.Windows.Forms.Button();
this.bt_NivPrec = new System.Windows.Forms.Button();
this.gbx_Actu.SuspendLayout();
this.SuspendLayout();
//
// lb_Titre
//
this.lb_Titre.AutoSize = true;
this.lb_Titre.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lb_Titre.Location = new System.Drawing.Point(256, 62);
this.lb_Titre.Name = "lb_Titre";
this.lb_Titre.Size = new System.Drawing.Size(116, 25);
this.lb_Titre.TabIndex = 0;
this.lb_Titre.Text = "Félicitation";
//
// gbx_Actu
//
this.gbx_Actu.Controls.Add(this.lb_Mouvement);
this.gbx_Actu.Controls.Add(this.lb_MouvementTitre);
this.gbx_Actu.Controls.Add(this.lb_Temps);
this.gbx_Actu.Controls.Add(this.lb_TempsTitre);
this.gbx_Actu.Location = new System.Drawing.Point(229, 117);
this.gbx_Actu.Name = "gbx_Actu";
this.gbx_Actu.Size = new System.Drawing.Size(168, 70);
this.gbx_Actu.TabIndex = 1;
this.gbx_Actu.TabStop = false;
this.gbx_Actu.Text = "Score";
//
// lb_Mouvement
//
this.lb_Mouvement.AutoSize = true;
this.lb_Mouvement.Location = new System.Drawing.Point(86, 41);
this.lb_Mouvement.Name = "lb_Mouvement";
this.lb_Mouvement.Size = new System.Drawing.Size(34, 13);
this.lb_Mouvement.TabIndex = 0;
this.lb_Mouvement.Text = "00:00";
//
// lb_MouvementTitre
//
this.lb_MouvementTitre.AutoSize = true;
this.lb_MouvementTitre.Location = new System.Drawing.Point(6, 41);
this.lb_MouvementTitre.Name = "lb_MouvementTitre";
this.lb_MouvementTitre.Size = new System.Drawing.Size(68, 13);
this.lb_MouvementTitre.TabIndex = 0;
this.lb_MouvementTitre.Text = "Mouvements";
//
// lb_Temps
//
this.lb_Temps.AutoSize = true;
this.lb_Temps.Location = new System.Drawing.Point(86, 16);
this.lb_Temps.Name = "lb_Temps";
this.lb_Temps.Size = new System.Drawing.Size(31, 13);
this.lb_Temps.TabIndex = 0;
this.lb_Temps.Text = "0000";
//
// lb_TempsTitre
//
this.lb_TempsTitre.AutoSize = true;
this.lb_TempsTitre.Location = new System.Drawing.Point(6, 16);
this.lb_TempsTitre.Name = "lb_TempsTitre";
this.lb_TempsTitre.Size = new System.Drawing.Size(39, 13);
this.lb_TempsTitre.TabIndex = 0;
this.lb_TempsTitre.Text = "Temps";
//
// bt_MenuPrincipal
//
this.bt_MenuPrincipal.Location = new System.Drawing.Point(258, 256);
this.bt_MenuPrincipal.Name = "bt_MenuPrincipal";
this.bt_MenuPrincipal.Size = new System.Drawing.Size(119, 23);
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_Recommencer
//
this.bt_Recommencer.Location = new System.Drawing.Point(274, 208);
this.bt_Recommencer.Name = "bt_Recommencer";
this.bt_Recommencer.Size = new System.Drawing.Size(87, 23);
this.bt_Recommencer.TabIndex = 3;
this.bt_Recommencer.Text = "Recommencer";
this.bt_Recommencer.UseVisualStyleBackColor = true;
this.bt_Recommencer.Click += new System.EventHandler(this.bt_Recommencer_Click);
//
// bt_NivSuiv
//
this.bt_NivSuiv.Location = new System.Drawing.Point(398, 208);
this.bt_NivSuiv.Name = "bt_NivSuiv";
this.bt_NivSuiv.Size = new System.Drawing.Size(128, 23);
this.bt_NivSuiv.TabIndex = 2;
this.bt_NivSuiv.Text = "Niveau suivant →";
this.bt_NivSuiv.UseVisualStyleBackColor = true;
this.bt_NivSuiv.Click += new System.EventHandler(this.bt_NivSuiv_Click);
//
// bt_NivPrec
//
this.bt_NivPrec.Location = new System.Drawing.Point(101, 208);
this.bt_NivPrec.Name = "bt_NivPrec";
this.bt_NivPrec.Size = new System.Drawing.Size(129, 23);
this.bt_NivPrec.TabIndex = 2;
this.bt_NivPrec.Text = "← Niveau précédent";
this.bt_NivPrec.UseVisualStyleBackColor = true;
this.bt_NivPrec.Click += new System.EventHandler(this.bt_NivPrec_Click);
//
// ecran_NiveauFini
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.bt_Recommencer);
this.Controls.Add(this.bt_NivPrec);
this.Controls.Add(this.bt_NivSuiv);
this.Controls.Add(this.bt_MenuPrincipal);
this.Controls.Add(this.gbx_Actu);
this.Controls.Add(this.lb_Titre);
this.Name = "ecran_NiveauFini";
this.Size = new System.Drawing.Size(650, 404);
this.gbx_Actu.ResumeLayout(false);
this.gbx_Actu.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lb_Titre;
private System.Windows.Forms.GroupBox gbx_Actu;
private System.Windows.Forms.Label lb_Mouvement;
private System.Windows.Forms.Label lb_MouvementTitre;
private System.Windows.Forms.Label lb_Temps;
private System.Windows.Forms.Label lb_TempsTitre;
private System.Windows.Forms.Button bt_MenuPrincipal;
private System.Windows.Forms.Button bt_Recommencer;
private System.Windows.Forms.Button bt_NivSuiv;
private System.Windows.Forms.Button bt_NivPrec;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
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_NiveauFini : UserControl
{
public JeuSokoban jeuSokoban;
public ecran_NiveauFini(JeuSokoban jeuSokoban)
{
this.jeuSokoban = jeuSokoban;
NivInfos nivInfo = jeuSokoban.NiveauInfos;
InitializeComponent();
int courant = nivInfo.Temps;
String TimeInString;
int courantMinute = courant / 60000;
int courantSeconde = (courant % 60000) / 1000;
TimeInString = String.Format("{0:D2}", courantMinute);
TimeInString += ":" + String.Format("{0:D2}", courantSeconde);
lb_Temps.Text = TimeInString;
lb_Mouvement.Text = String.Format("{0:D4}", nivInfo.Deplacements);
bt_NivPrec.Enabled = false;
}
private void bt_NivPrec_Click(object sender, EventArgs e)
{
}
private void bt_Recommencer_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
jeuSokoban.activerNiveau(jeuSokoban.NiveauInfos.jeuNom, jeuSokoban.NiveauInfos.jeuNiveau, jeuSokoban.NiveauInfos.jeuNiveau);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
private void bt_NivSuiv_Click(object sender, EventArgs e)
{
jeuSokoban.EcranSuivant = JeuSokoban.VIDE;
int ligne = jeuSokoban.NiveauInfos.jeuLigne + ((jeuSokoban.NiveauInfos.jeuNiveau + 1 % 10 == 0) ? 1 : 0);
jeuSokoban.activerNiveau(jeuSokoban.NiveauInfos.jeuNom, ligne, jeuSokoban.NiveauInfos.jeuNiveau + 1 % 10);
jeuSokoban.ecran(JeuSokoban.NIVEAU);
}
private void bt_MenuPrincipal_Click(object sender, EventArgs e)
{
jeuSokoban.ecran(JeuSokoban.MENU_PRINCIPAL);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
......@@ -123,6 +123,7 @@ namespace Sokoban.Jeu
public const int CARTE_NIVEAUX = 2;
public const int IDENTIFICATION = 3;
public const int NIVEAU = 4;
public const int NIVEAUFINI = 5;
public const int DIFFICULTE = 10;
public const int CONFIGURATION = 20;
public const int QUITTER = 999;
......@@ -207,6 +208,9 @@ namespace Sokoban.Jeu
case NIVEAU :
App.Controls.Add(new ecran_Niveau(this, NiveauInfos));
break;
case NIVEAUFINI:
App.Controls.Add(new ecran_NiveauFini(this));
break;
case CONFIGURATION :
App.Controls.Add(new ecran_PanneauConfiguration(this));
break;
......@@ -219,7 +223,7 @@ namespace Sokoban.Jeu
/// <summary>
/// Quitter le programme
/// </summary>