Voici un petit jeu de Math sympathique.
J'ai repris l'idée d'un jeu appelé Yakamath sur un des nombreux serveur de jeu gratuit en ligne.
Règles du jeu :
Un calcul est donné, trouvez le résultat pour cela additionnez les chiffres qui sont dans la grille en cliquant dessus. Une fois que vous aurez estimé avoir le bon résultat, cliquez sur OK.
Si le résultat est juste :
les cases deviennent blanches et vous gagnez des points.
Si vous faites une ligne blanche horizontale ou verticale, vous gagnez 100 points de bonus.
Si vous vous trompez ou mettez plus de 30s à répondre
Des cases rouges remplacent les cases cochées, vous empêchant ainsi de les utiliser à nouveau.
Amusez-vous bien ;)
Source / Exemple :
Option Explicit
Dim First As Boolean 'Indique si on vient de lancer le programme
Dim Total, a, b, c, d, Etat, NbParties As Integer 'Variable de calcul
Dim BonusX(8) As Boolean, BonusY(8) As Boolean 'Stock les numéros de lignes qui ont eu un bonus pr ne pas les recompter
Dim TabColorChf(80) As String 'Stockage de la couleur et du chiffre des cases
Private Sub Chiffre_Click(Index As Integer) 'On pass l'image en jaune pr indiquer le click
If ((Left(TabColorChf(Index), 1) <> "O") And (Left(TabColorChf(Index), 1) <> "K")) Then
If Right(TabColorChf(Index), 1) = "J" Then
Chiffre(Index).Picture = LoadPicture(App.Path & "\" & Left(TabColorChf(Index), 1) & "V.bmp") 'On affiche le chiffre dans la case
TabColorChf(Index) = Left(TabColorChf(Index), 1) & "V" 'On stock le chiffre et la couleur de la case
Total = Total - Left(TabColorChf(Index), 1) 'On soustrait les chiffres qui ont été enlevé par le joueur
Else
Chiffre(Index).Picture = LoadPicture(App.Path & "\" & Left(TabColorChf(Index), 1) & "J.bmp")
TabColorChf(Index) = Left(TabColorChf(Index), 1) & "J" 'On stock le chiffre et la couleur de la case
Total = Total + Left(TabColorChf(Index), 1) 'On additionne les chiffres qui ont été cliqué pr donner le total
End If
End If
End Sub
'Démarrage de l'application
Private Sub Form_Load()
NbParties = 13 'On détermine combien de partie il y a (13-1)
First = True
Total = 0 'Initialisation du total donné par le joueur
a = 0: b = 0: c = 0: d = 0
Tps.Text = "30"
Init 'Initialisation des pièces sur le damier
Stade 1 '1er niveau de difficulté de calcul
Points.Text = 0
End Sub
'Nouvelle partie
Private Sub New_Click()
Init 'Répartion des pièces sur le damier
End Sub
'Validation, vérification du résultat, calcul des points
Private Sub OK_Click()
Dim i As Integer, j As Integer, k As Integer, l As Integer, t As Integer
Dim OK As Boolean
OK = False 'Variable indiquant si le résultat est juste ou faux
OK = VerifRes 'on vérifie si l'addition de chiffres sélectionnés donne bien le résultat attendu
k = 0 '1ere case des 81 au total
If (OK = True) Then 'Si la réponse est juste
For j = 0 To 8
For i = 0 To 8
If Right(TabColorChf(k), 1) = "J" Then 'Si la case est jaune (donc qu'elle a été cliquée)
Chiffre(k).Picture = LoadPicture(App.Path & "\" & "OK.bmp") 'On la met en blanc
TabColorChf(k) = "OK" 'On stock l'état de la case
End If
k = k + 1 'case suivante
Next i
VerifBonus j, "H" 'On vérifie si ya un bonus
VerifBonus j, "V" 'On vérifie si ya un bonus
Next j
'On multiplie les points en fonction du temps
If CInt(Tps.Text) < 30 Then t = 3
If CInt(Tps.Text) < 20 Then t = 2
If CInt(Tps.Text) < 10 Then t = 1
Points = CStr(CInt(Points) + (CInt(Total) * 3 * t)) 'Total des points remportés
Else 'si la réponse est fausse
For i = 0 To 80 'On passe toutes les cases cochées en noires
If Right(TabColorChf(i), 1) = "J" Then
Chiffre(i).Picture = LoadPicture(App.Path & "\" & Left(TabColorChf(i), 1) & "R.bmp") 'On affiche le chiffre dans la case
'Chiffre(i).Picture = LoadPicture(App.Path & "\" & "KO.bmp")
TabColorChf(i) = "KO" 'On passe l'état des cases à KO
End If
Next i
End If
Total = 0 'On réinitialise l " " & Totales variables de temps et de calcul
Tps.BackColor = vbGreen: Tps.ForeColor = vbBlack 'La couleur de départ
Tps.Text = "30" 'On remet le temps à 30s
If Etat = NbParties Then MsgBox "Le jeu est terminé" 'Indique la fin de la série de question
End Sub
'Niveau de difficulté des calculs
Private Sub Stade(ByVal Num As Integer)
Select Case Num
Case 1 'Addition : 8 + 14 = 22
Etat = 1
a = CInt(Rnd * 10) + 1
b = CInt(Rnd * 10) + 10
Calcul.Text = CStr(a) & " + " & CStr(b)
Case 2 'Soustraction : 34 - 10 = 24
Etat = 2
a = CInt(Rnd * 10) + 30
b = CInt(Rnd * 10) + 10
Calcul.Text = CStr(a) & " - " & CStr(b)
Case 3 'Multiplication : 4 * 6 = 24
Etat = 3
a = CInt(Rnd * 3) + 3
b = CInt(Rnd * 4) + 2
Calcul.Text = CStr(a) & " x " & CStr(b)
Case 4 ' 18 - 6 + 10 = 22
Etat = 4
a = CInt(Rnd * 10) + 10
b = CInt(Rnd * 10) + 3
c = CInt(Rnd * 10) + 10
Calcul.Text = CStr(a) & " - " & CStr(b) & " + " & CStr(c)
Case 5 '(4 * 4 ) + 3 = 19
Etat = 5
a = CInt(Rnd * 3) + 3
b = CInt(Rnd * 4) + 2
c = CInt(Rnd * 10) + 1
Calcul.Text = "(" & CStr(a) & " x " & CStr(b) & ") + " & CStr(c)
Case 6 '(6 * 4) + 5 = 29
Etat = 6
a = CInt(Rnd * 3) + 3
b = CInt(Rnd * 4) + 2
c = CInt(Rnd * 10) + 1
Calcul.Text = "(" & CStr(a) & " x " & CStr(b) & ") + " & CStr(c)
Case 7 '33-(3*3)= 24
Etat = 7
a = CInt(Rnd * 10) + 25
b = CInt(Rnd * 4) + 2
c = CInt(Rnd * 3) + 1
Calcul.Text = CStr(a) & " - (" & CStr(b) & " x " & CStr(c) & ")"
Case 8 '27-(6*1)= 21
Etat = 8
a = CInt(Rnd * 10) + 25
b = CInt(Rnd * 4) + 2
c = CInt(Rnd * 3) + 1
Calcul.Text = CStr(a) & " - (" & CStr(b) & " x " & CStr(c) & ")"
Case 9 '14 + 26 - 8 - 4 =28
Etat = 9
a = CInt(Rnd * 10) + 10
b = CInt(Rnd * 10) + 20
c = CInt(Rnd * 10) + 5
d = CInt(Rnd * 10) + 1
Calcul.Text = CStr(a) & " + " & CStr(b) & " - " & CStr(c) & " - " & CStr(d)
Case 10 '32-(2*4)+9=33
Etat = 10
a = CInt(Rnd * 10) + 25
b = CInt(Rnd * 4) + 2
c = CInt(Rnd * 3) + 1
d = CInt(Rnd * 10) + 1
Calcul.Text = CStr(a) & " - (" & CStr(b) & " x " & CStr(c) & ") + " & CStr(d)
Case 11 '18+(13-6)-3=22
Etat = 11
a = CInt(Rnd * 10) + 20
b = CInt(Rnd * 10) + 10
c = CInt(Rnd * 9) + 1
d = CInt(Rnd * 9) + 1
Calcul.Text = CStr(a) & " + (" & CStr(b) & " - " & CStr(c) & ") - " & CStr(d)
Case 12 '(4x1)+(6-2)=8
Etat = 12
a = CInt(Rnd * 6) + 2
b = CInt(Rnd * 5) + 1
c = CInt(Rnd * 10) + 5
d = CInt(Rnd * 7) + 2
Calcul.Text = "(" & CStr(a) & " x " & CStr(b) & ") + (" & CStr(c) & " - " & CStr(d) & ")"
End Select
End Sub
'Mélange des pièces du jeu, réinitialisaiton du jeu, nouvelle partie...
Private Sub Init()
Dim i, j, k, ran As Integer
Dim OK As Boolean
Dim TabChf(8) As Integer 'tableau des chiffres qui composent le quadrillage
Randomize 'Activation de la fonction permettant d'avoir des chiffres aléatoire
Tps.Text = "30": Tps.BackColor = vbGreen: Tps.ForeColor = vbBlack
Points.Text = "0": Total = 0
Temps.Interval = 1000 '1000 millisecondes soit 1 seconde
Stade 1 'Au repasse au 1er niveau de difficulté
For i = 0 To 8
TabChf(i) = 0 'Initialisation du tableau
BonusX(i) = False 'Initialisation des lignes de bonus sur les abcisses
BonusY(i) = False 'Initialisation des lignes de bonus sur les ordonnées
Next i
k = 0 '1ere case des 81 au total
'C'est 2 boucles vont servir à répartir aléatoirement les chiffres sur la grille
For j = 0 To 8 'k = 0 1 2 3 4 5 6 7 8
For i = 0 To 8 ' 9 10 11 12 13 14 15 16 17
OK = False ' 18 19 20 21 22 23 24 25 26 ...
If ((i <> 0) Or (j <> 0)) Then 'On passe la 1ere case qui existe par défaut
k = k + 1 'case suivante
If First = True Then 'Si c'est la 1ere fois, on charge les autres boutons
Load Chiffre(k) 'création de chaque bouton de la grille
Chiffre(k).Visible = True 'on les rend visibles et on les place
Chiffre(k).Left = 300 * (i) 'abscisse
Chiffre(k).Top = 300 * (j) 'ordonnée
End If
While OK = False 'Tant qu'on a pas trouvé une image à mettre sur la case
ran = CInt(Rnd * 8) 'choix d'un chiffre entre 0 et 8 (+1)
If TabChf(ran) <> 9 Then 'Si on a pas déjà atteint la limite de 9 pr chaque chiffre
Chiffre(k).Picture = LoadPicture(App.Path & "\" & (ran + 1) & "V.bmp") 'On affiche le chiffre dans la case
OK = True 'On peut passer à la case suivante
TabChf(ran) = TabChf(ran) + 1 'On incrémente le nombre de fois qu'a été utilisé le chiffre
TabColorChf(k) = CStr(ran + 1) & "V" 'On stock le chiffre et la couleur de la case
End If
Wend
Else
ran = CInt(Rnd * 8) 'choix d'un chiffre entre 0 et 8
Chiffre(k).Picture = LoadPicture(App.Path & "\" & (ran + 1) & "V.bmp") 'On affiche le chiffre dans la case
TabChf(ran) = TabChf(ran) + 1 'On incrémente le nombre de fois qu'a été utilisé le chiffre
TabColorChf(k) = CStr(ran) + 1 & "V" 'On stock le chiffre et la couleur de la case
End If
Next i
Next j
First = False 'Indique que ce n'est plus la 1ere fois qu'on utilise cette fonction afin de ne pas recharger les boutons
End Sub
'30s pour trouver la répons eà chaque question
Private Sub Temps_Timer()
Dim i As Integer
Tps.Text = CStr(CInt(Tps.Text) - 1) 'On affiche le décompte des secondes
'On change la couleur du fond et de la police en fonction du temps écoulé
If CInt(Tps) <= 20 Then Tps.BackColor = vbYellow: Tps.ForeColor = vbBlack
If CInt(Tps) <= 10 Then Tps.BackColor = vbRed: Tps.ForeColor = vbWhite
'Lorsque le temps impartie est terminé
If CInt(Tps) = 0 Then
Tps.Text = "30" 'On redonne 30s pr le prochain compte
Tps.BackColor = vbGreen: Tps.ForeColor = vbBlack
For i = 0 To 80 'Toutes les cases cochées deviennent noires
If Right(TabColorChf(i), 1) = "J" Then
Chiffre(i).Picture = LoadPicture(App.Path & "\" & Left(TabColorChf(i), 1) & "R.bmp") 'Cases rouges
'Chiffre(i).Picture = LoadPicture(App.Path & "\" & "KO.bmp") 'cases noires
TabColorChf(i) = "KO"
End If
Next i
If Etat + 1 = NbParties Then 'Si c'était le dernier état
Temps.Interval = 0 'On arrête le timer
MsgBox "Le jeu est terminé"
Else 'On passe au niveau suivant
Etat = Etat + 1
End If
Stade Etat 'On passe au niveau de difficulté suivant
Total = 0
End If
End Sub
'Vérifie si on a une ligne de cases verticalement alignées
Private Sub VerifBonus(ByVal y As Integer, ByVal Sens As String)
Dim i As Integer, j As Integer, k As Integer, Bonus As Integer
'9 cases blanches alignées horizontalement pour avoir un bonus
Bonus = 0 'Initilisation du compteur de cases
For i = 0 To 8
If Sens = "H" Then
k = (y * 9) + i 'calcul de l'index du bouton sur la ligne (voir fonction init)
If BonusX(y) = False Then If Left(TabColorChf(k), 1) = "O" Then Bonus = Bonus + 1 'Si la case est blanche on incrémente le compteur de Bonus
End If
If Sens = "V" Then
k = y + (i * 9) 'calcul de l'index du bouton sur la colonne (voir fonction init)
If BonusY(y) = False Then If Left(TabColorChf(k), 1) = "O" Then Bonus = Bonus + 1 'Si la case est blanche on incrémente le compteur de Bonus
End If
If Right(TabColorChf(k), 1) = "J" Then 'Si la case est jaune (donc qu'elle a été cliquée)
Bonus = Bonus + 1 'On incrémente le compteur de cases alignées vu que la réponse est juste
End If
If Bonus = 9 Then 'Si le joueur a fait une ligne de cases blanches et/ou dorées
Points = Points + 100 'Il gagne 100 points de Bonus
If Sens = "H" Then BonusX(y) = True 'Indique que cette colonne a déjà été comptée dans les points
If Sens = "V" Then BonusY(y) = True
For j = 0 To 8 'On rend les cases, de la colonne bonus, dorées
If Sens = "H" Then k = (y * 9) + j 'calcul de l'index
If Sens = "V" Then k = y + (j * 9) 'calcul de l'index
Chiffre(k).Picture = LoadPicture(App.Path & "\" & "BO.bmp")
TabColorChf(k) = "OK" 'On stock l'état de la case
Next j
End If
Next i
End Sub
'On vérifie si l'addition des chiffrex sélectionnés donne bien le résultat attendu
Private Function VerifRes() As Boolean
VerifRes = False 'Si la réponse est fausse alors VerifRs = false
Select Case Etat
Case 1 '8+14 = 22
If Total = (a + b) Then VerifRes = True 'Le résultat est correct
Stade 2 'On passe au niveau de difficulté suivant
Case 2 '34-10 = 24
If Total = (a - b) Then VerifRes = True
Stade 3
Case 3 '4*6 = 24
If Total = (a * b) Then VerifRes = True
Stade 4
Case 4 '18 - 6 + 10 = 22
If Total = (a - b + c) Then VerifRes = True
Stade 5
Case 5 '(4 * 4 ) + 3 = 19
If Total = ((a * b) + c) Then VerifRes = True
Stade 6
Case 6 '(6 * 4) + 5 = 29
If Total = ((a * b) + c) Then VerifRes = True
Stade 7
Case 7 '33-(3*3)= 24
If Total = (a - (b * c)) Then VerifRes = True
Stade 8
Case 8 '27-(6*1)= 21
If Total = (a - (b * c)) Then VerifRes = True
Stade 9
Case 9 '14 + 26 - 8 - 4 =28
If Total = (a + b - c - d) Then VerifRes = True
Stade 10
Case 10 '32-(2*4)+9=33
If Total = (a - (b * c) + d) Then VerifRes = True
Stade 11
Case 11 '18+(13-6)-3
If Total = (a + (b - c) - d) Then VerifRes = True
Stade 12
Case 12 '(2*4)+(6-2)
If Total = ((a * b) + (c - d)) Then VerifRes = True
'Stade 13 'Futur niveau peut être à vous d'en créer... :)
Etat = NbParties 'Marque la fin du questionnaire (Etat + 1)
Temps.Interval = 0 'On arrête le timer
End Select
End Function
Conclusion :
J'aimerais faire une version réseau de ce jeu, pour jouer à 2.
Avec Winsock, sur le même principe que ma source sur le démineur réseau type msn. Le but, ici, serait de donner les points à celui qui joue le plus vite et de mettre en rouge, les cases sélectionnées par le perdant qui n'a pas eu le temps de valider sa réponse. Et pourquoi pas lui faire perdre 1/3 tu total que l'on a réalisé. Bien sûr, vaudrait mieux jouer à ça sur un réseau local pour éviter de trop pénaliser le client par rapport au serveur niveau rapidité...
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.