Bonjour à tous,
Voilà, je cherche à développer une espèce de fausse bombe (je précise que c'est pour un jeu).
J'ai déjà réussi à la faire, mais en web, il s'agit d'une page web en local avec beaucoup de javascript.
Dans le but de la faire évoluer, j'essai de la faire en tant que logiciel.
Le problème que se pose est le suivant:
Le compte à rebour doit être affiché et est rafraichi toutes les milisecondes (par exemple). Mais en même temps, l'utilisateur doit pouvoir entrer un code pour stopper le chrono.
Ayant déjà pas mal cherché sur le net, j'en ai appris pas mal sur les thread, car je dois en faire une si je veux pouvoir travailler avec le chrono sans faire planter l'application. Le problème est que je n'y arrive pas...
afin de pouvoir interagir avec le chrono, j'ai créé une classe Countdown qui me sert à faire tout le traitement du temps. Elle sera utilisée dans une thread...
Serait-il possible d'avoir quelques explications sur comment afficher le temps restant (calculé dans la classe Countdown) provenant d'une Thread ?
je place ici mon code, histoire de voir s'il n'y a pas une meilleur solution:
Code principal : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace bombe { public partial class Form1 : Form { Random rndNumber; bool randomed = false; Countdown chrono; Thread t; int nbCode = 0; public Form1() { InitializeComponent(); //mise en fullscreen this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized; //création du chrono et création du Thread chrono = new Countdown(1, 0, 0); t = new Thread(new ThreadStart(chrono.chrono)); t.Start(); //affichage du code de désamorçage tbCodeAEntrer.Text = random(); } //petite fonction générant un nombre aléatoire public String random() { if (randomed == false) { rndNumber = new Random(); randomed = true; } return rndNumber.Next(1, 100).ToString(); } //contrôle du code à entrer et du code entré private void btnValider_Click(object sender, EventArgs e) { //si c'est correct et qu'il n'y a pas eu 3 code entrés if (tbCodeAEntrer.Text == tbCodeEntre.Text && nbCode < 3) { tbCodeAEntrer.Text = random(); tbCodeEntre.Text = ""; nbCode++; } } //affichage du temps private void btnTestChrono_Click(object sender, EventArgs e) { tbTestChrono.Text = chrono.getMin() + " " + chrono.getSec() + " " + chrono.getMili(); Thread.Sleep(1); chrono.chrono(); } } }
Code Countdown : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace bombe { class Countdown { //attributs private int min; private int sec; private int mili; //constructeur public Countdown(int min, int sec, int mili) { this.min = min; this.sec = sec; this.mili = mili; } //setters public void setMin(int min) { this.min = min; } public void setSec(int sec) { this.sec = sec; } public void setMili(int mili) { this.mili = mili; } //getters public int getMin() { return this.min; } public int getSec() { return this.sec; } public int getMili() { return this.mili; } //méthodes public void chrono() { mili--; if (mili < 0) { mili = 9; sec--; } if (sec < 0) { sec = 59; mili = 9; min--; } if (min < 0) { mili = 0; sec = 0; min = 0; } } } }
pour le moment, le rafraichissement du temps se fait à chaque clic sur le bouton btnTestChrono... je n'arrive pas à le faire dans une boucle sant tout faire freezer...
Partager