Code Bouton pour faire un nouveau Form1_Paint [Résolu]

Messages postés
1724
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 décembre 2018
- - Dernière réponse : Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
- 12 juil. 2018 à 19:12
Bonjour

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;

namespace Rubikcube
{
    public partial class Game : Form
    {
        ClassRubikCube rubikCube = new ClassRubikCube();
        ClassPoint3D cameraPosition = new ClassPoint3D(-1, 90, 90, 140);
        ClassAngles angles = new ClassAngles(0, 0, 0);
        ClassPoint3D viewer = new ClassPoint3D(-1, 0, 0, 500);
        int xcoor = 400;
        int ycoor = 100;

        public Game()
        {
            InitializeComponent();
           
        }
               
        private void Game_Paint(object sender, PaintEventArgs e)
        {
            PointF pt = new PointF(323,323);
            e.Graphics.TranslateTransform(xcoor, ycoor);
            rubikCube.DrawRubicube(e.Graphics, cameraPosition, angles, viewer);
            e.Graphics.ResetTransform();
        }


Ce code fonctionne très bien pour afficher sur ma Form un rubix's cube à son état initial .
C'est l'évènement Game_Paint qui se charge de l'afficher au démarrage du projet sur la Form elle-même

Maintenant je cherche à programmer un Bouton Reset qui remettrait le Rubix's Cube dans son état initial une fois que les manipulations ou un mélange ont été fait si on veut revenir au début du jeu ( ces manipulations sont fonctionnelles pour faire tourner les faces et le mélange me donne un Rubix's Cube mélangé )
Mais comment revenir à l'état initial du Rubix's cube ?
Je suis conscient qu'il faut réinitialiser les 4 objets rubiCube, cameraPosition, angles et viewer mais comment faire pour que ce même bouton Reset déclenche l'évènement Game_Paint pour afficher le Rubix's Cube initial

Merci pour vos réponses

Afficher la suite 

Votre réponse

1 réponse

Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
0
Merci
Bonjour

dans la méthode abonnée à l’événement Click de ton bouton, tu peux faire un truc comme ça
Game_Paint(this, new PaintEventArgs ());


Tu envoies le form en cours comme sender et un argument "neuf".
Comme tu ne te sers ni de l'un ni de l'autre dans Game_Paint() c'est pas important.

Tu pourrais même te contenter de
Game_Paint(null, nulll);

mais je trouve ça moche
vb95
Messages postés
1724
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
bonjour Whis

 private void Game_Paint(object sender, PaintEventArgs e)
        {
            PointF pt = new PointF(323,323);
            g = e.Graphics;
            g.TranslateTransform(xcoor, ycoor);
            rubikCube.DrawRubicube(g, cameraPosition, angles, viewer);
            g.ResetTransform();
        }

        private void RESET_Click(object sender, EventArgs e)
        {
            Game_Paint(this, new PaintEventArgs());
        }


Cela me souligne en rouge PaintEventArgs()
Il faut un paramètre de type Graphics ( je peux mettre le g de 'évènement Game_Paint )mais je mets quoi pour le paramètre Rectangle : le paramètre Rectangle doit être le rectangle de la form Game je suppose

Merci

Là je vais faire des courses : je m'y remettrais plus tard
Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
Au temps pour moi tu te sers de e.....

Faut que j'essaye
Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
J'ai pas essayé mais à priori
this.Refresh();
force le formulaire à se redessiner
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.refresh(v=vs.110).aspx
vb95
Messages postés
1724
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 décembre 2018
> Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
bonsoir Whis
Je suis partie sur une autre voie en mettant le dessin du rubix's cube dans une PictureBox et en gérant un Bitmap de celle-ci .
Cela me permet de gérer les mouvements ainsi que le mélange et la réinitialisation du Rubix's cube .
Voici le code
public partial class Game : Form
    {
        ClassRubikCube rubikCube;
        ClassPoint3D cameraPosition;
        ClassAngles angles;
        ClassPoint3D viewer;
        Bitmap MyBitmap;
        Graphics g;
        int xcoor = -180;
        int ycoor = -180;

        public Game()
        {
            InitializeComponent();
           
        }
        
        private void Game_Load(object sender, EventArgs e)
        {
            InitialiseRubicube();
           
        }

        // On remet le rubix's cube dans son état initial
        private void RESET_Click(object sender, EventArgs e)
        {
            InitialiseRubicube();
        }

        private void InitialiseRubicube()
        {
            rubikCube = new ClassRubikCube();
            cameraPosition = new ClassPoint3D(-1, 90, 90, 140);
            angles = new ClassAngles(0, 0, 0);
            viewer = new ClassPoint3D(-1, 0, 0, 500);
            MyBitmap = new Bitmap(GameRubicube.Width, GameRubicube.Height);
            g = Graphics.FromImage(MyBitmap);
            PointF pt = new PointF(GameRubicube.Width / 2, GameRubicube.Height / 2);
            g.TranslateTransform(xcoor, ycoor);
            rubikCube.DrawRubicube(g, cameraPosition, angles, viewer);
            g.ResetTransform();
            GameRubicube.Image = MyBitmap; 
        }
}



Je n'ai pas mis le code permettant le mélange ainsi que les différents mouvements car cela serait trop long .
Tout marche à la perfection là !

C'est ton This.Refresh() qui m'a donné l'idée car j'avais déjà utilisé ce principe pour les cases du Scrabble que j'ai fait en VB Net

Merci pour tout Whis !
Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
de rien
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.