IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[.NET 2.0] Jeu de plateau style démineur


Sujet :

Windows Forms

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut [.NET 2.0] Jeu de plateau style démineur
    Bonjours all,

    Je voudrais créér un jeu de plateau :

    - Le plateau possède 256 cases donc un carré de 16x16.
    - On part de la case A1 (celle en haut à gauche) et on fini en A3.
    - le But est donc de sortir du labyrinthe avec des cases piegées (style démineur). Pour cela il y aura une séries d'intructions...
    - un code couleur : Rouge pour les cases piégées, Vert pour les cases normales (celles ou le joueur avance), Vert foncé pour les cases significatives (celle qui vont former une figure à la fin du jeu) et bleu pour les cases piégées mais significatives. (Voir la piece jointe pour le plateau complet !)

    Maintenant ce que je voudrais c'est lorsque le joueur passe la souris sur une case, elle change de couleur.

    Le plus dur est le codage du jeu. En effet, je vais devoir créer 256 PictureBox et je peut utiliser l'événement "MouseEnter" pour changer la couleur. Mais manuellement c'est impossible. Donc il faut faire une boucle mais je ne sais pas comment m"y prendre.

    Je pense faie un tableau qui répertorie les différentes cases et leur couleur. Ensuite je crée donc le plateau avec 256 PictureBox avec leur evenment "MouseEnter" et en fonction du code de la case (A1, ou C8 commme à la bataille navale) je compare avec les case des tableaux et j'agis en conséquence.

    Je sais pas si l'idée est bonne mais je n'ai aucune idée de comment créer deja 256 pictureBox avec le code (pas avec l'interface) et crée leur événement respectif et surtout comment reconnaitre chaque case...

    J'espère que vous avez compris ce que je raconte et j'attends votre aide !

    PS: Sur l'image, les cases avec une croix verte correspondent à celle en vert foncé dans le jeu (donc les cases significatives).
    PS2 : La figure formée est un Tesseract (hypercube) vu de face !


    Merci beaucoup...

  2. #2
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Salut,

    A ta place, je crée une enum, du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public enum TypeCase
    {
    Rouge,
    Vert,
    VertFonce,
    Bleu
    }
    Ensuite, je crée une classe qui derive d'un picturebox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    public class MaClasse : PictureBox
    {
    TypeCase type;
     
    public MaClasse()
    {
    //Creation d'un type de case aléatoire
    Random rand = new Random();
    switch(rand.Next(4))
    {
    case 0:
    type = TypeCase.Rouge;
    break;
    case 1:
    type = TypeCase.Vert;
    break;
    case 2:
    type = TypeCase.VertFonce;
    break;
    case 3:
    type = TypeCase.Bleu;
    break;
    }
     
    //Crée un nouveau délégué
    this.MouseEnter += new EventHandler(pictureBox1_MouseEnter);
    }
    //Méthode appelée lorsque la souris passe au dessus de ton objet
    void pictureBox1_MouseEnter(object sender, EventArgs e)
    {
    switch(type)
    {
    case TypeCase.Rouge:
    this.BackColor = Color.Red;
    break;
    case TypeCase.Vert:
    [...]
    }
    }
    }

    Ensuite pour placer tes objets issus de ta nouvelle classe:

    Dans ton formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    MaClasse[,] tab = new tab[16][16];
     
    for(int i = 0; i < 16; i++)
    {
    for(int J = 0; J < 16; J++)
    {
    tab[i,j] = new MaClasse();
    this.Controls.Add(tab[i,j]); //Ajout de ton objet sur le formulaire
    //Ensuite à toi de gérer le positionnement de tes objets dans le formulaire(Location)
    }
    }
    [...]


    Je ne pense pas cette reponse soit exactement se que tu souhaite mais j'espere qu'elle t'aidera un peu ...

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Merci pour ta réponse

    J'ai en fait créer une boucle comme toi sans classe pour créer les 256 pictureBox mais le plus relou etait de programmer la couleur de chaque case individuellement en fonction du plateau. Ca à l'air de bien marché mais je pense que c'est du mauvais codage !

    Une partie de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
      Private Sub LoadGame()
            Dim p As PictureBox
            Dim x, y As Integer 'coordonées de la pictureBox pour la location
            Dim couleur As Color 'couleur de la case
     
            For chiffre As Integer = 1 To 16
                For LettreChiffre As Integer = 1 To 16
                    Dim Lettre As String = ConvertirChiffre(LettreChiffre) 'bidouille car les boucles avec des strings sont imposibles
                    Dim name As String = Lettre & chiffre
     
                    x = SuiteX(LettreChiffre - 1)
                    y = SuiteY(chiffre - 1)
                    couleur = CouleurCase(name) 'procédure qui détermine la couleur de la case
     
                    p = New PictureBox
     
                    With p
                        .Name = name
                        .Size = New System.Drawing.Size(43, 35)
                        .Location = New System.Drawing.Point(x, y)
                    End With
     
                    Me.Controls.Add(p)
                    Tab.Add(name, couleur)
     
                    If p.Name = "A1" Then p.BackColor = Color.Gray 'case de départ qui doit etre grisé des le départ 
     
                    AddHandler p.MouseEnter, AddressOf EnterS
                Next
            Next
        End Sub
    et c'est naturelement la procédure CouleurCase qui est chiante ^^

    Enfin tans que ca marche c'est mieux mais je pense qu'on peut améliorer le code !

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 95
    Points : 350
    Points
    350
    Par défaut
    Salut,

    si tu utilise 256 pictureBox ça va ramer un max. Les usercontrols c'est bien mais ça gère plein de trucs et donc c'est pas trés rapide.

    La meilleur solution serait de te faire 1 usercontrol ou tu gère tes propres affichages via le GDI+.

    Sinon, si tu veux pas te gonfler avec l'affichage tu peux utiliser ma grille qui est assez flexible pour faire ce que tu veux:

    http://kikos31.developpez.com/lamegrid/

    en particulier l'utilisation des styles qui permet de simplifier l'affichage de masse :

    http://kikos31.developpez.com/lamegrid/Beta/

    La dernière version qui gère correctement les images est là :

    ftp://ftp-developpez.com/kikos31/lam...ameGrid1.5.zip

    A+

  5. #5
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Salut,

    sympa ton controle par contre je vois pas comment ca pourrait me servir car moi c'est un plateau de jeu que je veux faire ! En tout cas ca pourra me servir pour autre chose sans doute ta dll ^^

    Merci encore

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 95
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par Aspic
    Salut,

    sympa ton controle par contre je vois pas comment ca pourrait me servir car moi c'est un plateau de jeu que je veux faire ! En tout cas ca pourra me servir pour autre chose sans doute ta dll ^^

    Merci encore
    peut-être ai je mal compris ce que tu veux faire...

    Je pensais que tu avais besoin d'une matrice de carrés de couleur pour ton jeu (comme dans ton dessin).

    Si c'est le cas :

    -tu prends ma grille
    -tu initialise 16 lignes * 16 colonnes.
    -tu créé autant de style que tu veux (rouge,vert...ca peut être des images aussi)
    - Et tu les affecte dans les cases de la grille dynamiquement pour gérer ton affichage

    Tu ne te sert ni de la propriété text, ni de la saisie par contre :

    - Tu as directement une matrice ou tu peux changer la couleur de n'importe quelle case avec une seule instruction

    - Tu as directement un évènement qui te dit sur quelle case tu as cliqué

    Mais bon, j'ai pu louper quelque chose...

    Bon dev !!

  7. #7
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    J'arrive pas à ajouter une ligne ni une colonne !
    marche pas
    Comment je crée mon carée de 16x16 ? et comment je crée l'evenement spécifique de chaque cellule ?

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 95
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par Aspic
    Comment je crée mon carée de 16x16 ? et comment je crée l'evenement spécifique de chaque cellule ?
    En regardant le projet d'exemple ?

    Allez je suis sympa :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            With Grid1
                .RowsCount = 16
                .ColsCount = 16
                For i As Integer = 0 To 15
                    .Col(i).Width = 20
                    .Row(i).Height = 20
                Next
                .SelectionMode = LameGrid.SelectionModeType.None
                .Cell(2, 2).BackColor = Color.Red
                .Cell(4, 4).BackColor = Color.Green
            End With

    L'évènement c'est celui ci :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Grid1_CellClick(ByVal Row As Integer, ByVal Col As Integer...

  9. #9
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Salut merci de ton aide, mais j'obtient avec ton code que 16 colonnes et y'a pazs de lignes !?

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 95
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par Aspic
    Salut merci de ton aide, mais j'obtient avec ton code que 16 colonnes et y'a pazs de lignes !?
    C'est bizarre, Je garanti à 100% que ça marche !!

    refait la manip :

    Prends un nouveau projet
    Ajoute le composant dans la boite à outil
    Met le controle sur la feuille
    colle le code dans le form load

    A+

  11. #11
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    lol oui now ca marche ^^ nickel

    Sinon y'a pas l'evenement MouseEnter pour chaque cellule donc pour mon jeu c'est pas possible par contre pour d'autre jeu où il faut cliquer sur les cases c'est très bien

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Projet jeu de plateau, demande d'aide
    Par Fullmetal82 dans le forum Projets
    Réponses: 1
    Dernier message: 24/06/2007, 00h58
  2. Réponses: 20
    Dernier message: 31/08/2006, 20h31
  3. Réponses: 1
    Dernier message: 28/04/2006, 13h57
  4. [GUI]jeu de plateau
    Par le Daoud dans le forum Interfaces Graphiques en Java
    Réponses: 11
    Dernier message: 31/08/2005, 13h38
  5. Un jeu de stratégie style Civilization/Colonization
    Par Franck.H dans le forum Projets
    Réponses: 5
    Dernier message: 29/08/2005, 20h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo