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

vb95 1604 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juillet 2018 Dernière intervention - 12 juil. 2018 à 12:47 - Dernière réponse : Whismeril 11818 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 juillet 2018 Dernière intervention
- 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

6 réponses

Whismeril 11818 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 juillet 2018 Dernière intervention - 12 juil. 2018 à 13:33
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 1604 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juillet 2018 Dernière intervention - 12 juil. 2018 à 14:12
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 11818 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 juillet 2018 Dernière intervention - 12 juil. 2018 à 15:33
Au temps pour moi tu te sers de e.....

Faut que j'essaye
Whismeril 11818 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 juillet 2018 Dernière intervention - 12 juil. 2018 à 17:16
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 1604 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juillet 2018 Dernière intervention > Whismeril 11818 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 juillet 2018 Dernière intervention - 12 juil. 2018 à 18:52
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 11818 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 juillet 2018 Dernière intervention - 12 juil. 2018 à 19:12
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.