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

Signaler
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
-
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
-
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

1 réponse

Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
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
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
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
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
Au temps pour moi tu te sers de e.....

Faut que j'essaye
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
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
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137 >
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021

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 !
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
de rien