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

C# Discussion :

Débutant (jeu d'échec) problème d'affichage et de vérification


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut Débutant (jeu d'échec) problème d'affichage et de vérification
    Bonjour,
    Je dois faire un jeu d'échec et je suis quelque peu callé devant 2 problèmes majeurs.
    Premièrement celui de l'affichage, je n'ai jamais compris réellement les tenants et aboutissants des différantes manière d'afficher une image et j'ai utilisé la procédure que vous verrez dans le code. Pour ce qui est de l'explication rapide de mon jeu. J'ai défini une classe pour chaque type de pièce(en la faisant hériter d'une classe pièce), possèdant deux méthodes virtuelles Afficher, Deplacement. La seconde renvoyant un booléen après deux Mousedown pour dire si le déplacement voulu est bel et bien valide. flag gère le mousedown il passe a true si on a cliqué sur une pièce de la couleur qui doit bouger et cflag retenant la dernière couleur ayant effectuer un mouvement. Sahmat n'étant la que pour dire si nous ne sommes pas encore en échec et math.
    Maintenant j'en viens à mes problèmes.
    Lors du déboguage il survient 2 problèmes majeur. Le premier c'est que dès que l'évènement mousedown intervient toutes mes pièces disparaissent. J'utilise la méthode Invalidate pour forcer l'évènement Paint. Ou sont mes erreurs ? Dans l'évènement Paint, ou dans l'appel d'Invalidate. Je précise que chacune de mes pièces possède une pictureBox.
    Le second problème est encore plus désagréable et incompréhensible et c'est pour cela que j'attends avec impatience votre aide ( je vous remercie d'ailleurs de lire mon appel au secours). Lorsque je démarre une nouvelle partie et que je fais un mousedown sur un pion blanc et que je fais un mouvement valide Le programme plante en m'envoyant NullReferenceException à la ligne de code suivante
    Occupmat etant ma matrice de pièce(xx,yy) les coordonnées d'origine et (xxx,yyy) la case de destination.
    if (Occupmat[xx, yy].Deplacement(xx, yy, xxx, yyy,Occupmat) == false)
    Si lors du début de la partie je clique sur un pion noir. La meme NUllReferenceException survient lors de la ligne
    (this.Occupmat[xx,yy].coul != cflag)
    Ou est mon erreur? Merci d'avance à tout ceux qui sont arrivés jusqu'à ce stade de lecture car je dois dire que je suis totalement dans le brouillard
    Bonne journée
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    Je pense que tu devrais séparer les classes logique du des composants graphiques. Pour moi tes classes Piece, Cavalier, fou, pion ressemble plus à des classes logiques. Je pense d'ailleurs que ces classes doivent pouvoir utilisée sans avoir besoin d'une interface graphique pour supprimer toute dépendance à certains composants.

    Tu peux aussi découper ton application en plusieurs fichiers:
    1 classe -> 1 fichier, c'est plus lisible et plus facile à gérer.

    Aussi pense bien à appeler la méthode Dispose sur les objets de type Graphics. Le GC peut le faire mais c'est toujours mieux de l'appeler directement ça lui enlève du travail.

    Pour ton erreur NullReferenceException, il y a un problème d'instanciation tu essaye d'utiliser un objet qui n'a pas encore été créé (dont la valeur est définie à null)

    Pour les PictureBox, D'après ce que j'ai et sauf erreur de ma part, tous tes objets utilisent le même composant l'origine du problème vient peut être de la ?

  3. #3
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut
    Le problème c'est que j'ai quelque (voire beaucoup de)lacune basique en c# je vois plus ou moins ce que tu veux dire pour l'affichage mais je ne vois pas comment le traduire concrètement en code... Comment faire séparer les pièces en différent fichier tout en faisant appel au truc dans le fichier principal(Juste avec le meme namespace?)...Ou taper Dispose? quelle est son utilité? Comment procéder à l'affichage de tt les pièces. Je ne voyais pas d'autre solutions que de tt intégrer dans les classes respectives afin qu'une boucle parcourant tt ma matrice affiche tt les pièces. D'ailleurs au lancement de Nouvelle partie dans le menu strip mon affichage se produit mais il n'y a aucun rafraichissement alors qu'il me semblait que la méthode Invalidate forçait l'évènement Paint. Enfin je suis totalement perdu. Pour ce qui est du NullReferenceException je ne suis aps d'un element null vu qu'il existe normalement un element à l'endroit Occupmat[4,6](pion blanc dans ce cas). Je suis encore débutant en POO pourrais tu être un peu plus comme Jamy dans c'est pas sorcier . Parce que j'ai pas très bien compris ce que tu voulais dire
    MErci beaucoup

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Les classes que tu découpe dans plusieurs fichiers sont accessibles directement dans la classe Form1 si elles sont situées dans le même espace de nom et dans le même assemblage que celle ci.

    La méthode Dispose() va libérer les ressources utilisés par l'objet Graphics, ça évite les fuites de mémoire et ça autorise un autre objet Graphics à utiliser les fonctionnalités de dessin du formulaire.

    Si tu as une exception de type NullReferenceException, c'est qu'un objet est null. Cette exception se déclenche il me semble lorsque l'on essaye d'appeler une propriété ou une méthode sur un objet null.

  5. #5
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut
    tu entends quoi par meme assemblage?

    donc je devrais terminer chacune de mes méthodes Affichage par Dispose();?

    le problème avec ma NullreferenceException c'est que normalement l'objet Occupmat[4,6] existe bel et bien et c'est un pion.

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Par définition, un assemblage est un unité logique définit sur un ou plusieurs fichiers. Un assemblage est représenté par une extension .dll ou .exe

    Par exemple ton application est un assemblage, le fichier System.Windows.Forms.dll que tu utilise pour créer ton formulaire est un autre assemblage.

    Citation Envoyé par Punkfloyd1967 Voir le message
    donc je devrais terminer chacune de mes méthodes Affichage par Dispose();?
    Oui.

Discussions similaires

  1. [SQL] débutante: Problème d'affichage de requete
    Par katie dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 20/09/2006, 22h21
  2. [Débutant] [JTextPane] Problème d'affichage HTML
    Par callisto dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 11/04/2006, 13h40
  3. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  4. Xsl problème d'affichage (code) [débutant]
    Par redsaint dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 01/06/2005, 17h02
  5. [Débutant][JScrollePane] Problème d'affichage
    Par flzox dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 12/12/2004, 16h36

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