J'ai fait ce petit programme pour m'apercevoir que je me fais très vite vieux (20 points).
J'aimerais le continuer quand j'aurai un peu de temps.
Donc, le but : cliquer sur le maximum de bons résultats à chaque opération (au centre de l'écran) en moins de 30 secondes.
CalculMental.exe
Code : Tout sélectionner
#EntierRelatifTest1 = 1
Global MousX.L
Global MousY.L
Global DeskW.L
Global DeskH.L
Global DeskMiW.L
Global DeskMiH.L
Global DeskQrW.L
Global DeskQrH.L
Global WantedResultFont.L
Global PropositionFont.L
Global Zoom.F
Global BoutonGauche.L
Global ClicGauche.L
Global Ope.S
Global Dim Propo.S(5)
Global Question.L
Global TestMode.L
Global Soluce.L
Global Genere.L
Global EndDelay.L
Global Seconds.L
Global Score.L
Global Choice.L
Global AppelNo.L
Global Dim *Appel(19)
ExamineDesktops()
DeskW = DesktopWidth(0)
DeskH = DesktopHeight(0)
DeskMiW = DeskW >> 1
DeskMiH = DeskH >> 1
DeskQrW = DeskMiW / 3 * 2
DeskQrH = DeskMiH >> 1
WantedResultFont = FontID(LoadFont(-1, "Verdana", 48) )
PropositionFont = FontID(LoadFont(-1, "Verdana", 24) )
Procedure DispMouseCursor()
Line(MousX - 8, MousY, 17, 0, #White)
Line(MousX, MousY - 8, 0, 17, #White)
EndProcedure
Procedure DrawCText(cx.L, cy.L, String.S, CharClr.L)
Protected x.L
Protected y.L
x = cx - (TextWidth(String) / 2)
y = cy - (TextHeight(String) / 2)
DrawText(x, y, String, CharClr)
EndProcedure
Procedure Generation()
Protected Ok.L
Protected i.L
Protected j.L
If TestMode = #EntierRelatifTest1
If Question < 20
If Genere = 1
If Question = 0
EndDelay = ElapsedMilliseconds() + 30000
Score = 0
EndIf
; Niveau de difficulté
Niveau = 9
; Définit l'écart d'affichage
Zoom = 1.0
; Génère les deux termes de la soustraction
a = Random(Niveau)
b = Random(Niveau)
; Prépare l'opération
Ope = Str(a) + " - " + Str(b)
; Détermine quel leurre contient le résultat exact
Soluce = Random(5)
; Charge le résultat exact
Propo(Soluce) = Str(a - b)
; Vérifie si un leurre n'est pas un doublon
For i = 0 To 5
If i <> Soluce
Repeat
Repeat
Propo(i) = Str(Random(Niveau) - Random(Niveau) )
Until Propo(i) <> Propo(Soluce)
Ok = 1
For j = 0 To 5
If Propo(i) = Propo(j)
If i <> j
Ok = 0
EndIf
EndIf
Next j
Until Ok
EndIf
Next i
; Indique qu'il n'y a plus besoin de générer une question
Genere = 0
Question + 1
EndIf
EndIf
EndIf
EndProcedure
Procedure.L Dist(x1.L, y1.L, x2.L, y2.L)
Protected Result.L
Protected dx.L
Protected dy.L
dx = x2 - x1
dy = y2 - y1
Result = Sqr(dx * dx + dy * dy)
ProcedureReturn Result.L
EndProcedure
Procedure DispScore()
StartDrawing(ScreenOutput() )
DispMouseCursor()
DrawingMode(1)
DrawingFont(PropositionFont)
DrawText(0, 0, "Total : " + Str(Score) + "points", #Yellow)
If ClicGauche = 1
AppelNo = 1
EndIf
StopDrawing()
EndProcedure
*Appel(3) = @DispScore()
Procedure ProcessA()
Protected a.L
Protected b.L
Protected i.L
Protected Angle.F
Protected Niveau.L
Protected ResultColor.L
Protected ResultX.L
Protected ResultY.L
If ClicGauche = 1
Genere = 1
EndIf
Generation()
StartDrawing(ScreenOutput() )
DispMouseCursor()
DrawingMode(1)
DrawingFont(PropositionFont)
Seconds = (EndDelay - ElapsedMilliseconds() ) / 1000
ChronoColor = #White
If Seconds <= 3
ChronoColor = #Red
EndIf
DrawText(0, 0, Str(Seconds) + "s", ChronoColor)
If Seconds < 0: AppelNo = 3: EndIf
DrawText(200, 0, "Q.N°" + Str(Question), #White)
DrawText(400, 0, Str(Score) + "Pts", #White)
For i = 0 To 5
Angle = i * #PI / 3.0
ResultX = DeskW / 2 + Cos(Angle) * DeskQrW * Zoom
ResultY = DeskH / 2 - Sin(Angle) * DeskQrH * Zoom
If Dist(ResultX, ResultY, MousX, MousY) < 50
Choice = i
ResultColor = #Cyan
Else
ResultColor = #Blue
EndIf
DrawCText(ResultX, ResultY, Propo(i), ResultColor)
Next
;DrawText(0, 100, Str(Soluce) + " " + Str(Choice), #White)
DrawingFont(WantedResultFont)
DrawCText(DeskW / 2, DeskH / 2, Ope, #White)
StopDrawing()
EndProcedure
*Appel(0) = @ProcessA()
Procedure ProcessMenu()
Protected Menu.S
Protected ItemColor.L
StartDrawing(ScreenOutput() )
DispMouseCursor()
DrawingMode(1)
DrawingFont(PropositionFont)
Menu = "Quitter§2;Test entiers relatifs niveau 1§0"
For i = 1 To CountString(Menu, ";") + 1
ItemColor = #Blue
If (MousY / 40) = i - 1
ItemColor = #Cyan
If ClicGauche = 1
AppelNo = Val(StringField(StringField(Menu, i, ";"), 2, "§"))
EndIf
EndIf
DrawText(0, (i - 1) * 40, "-» " + StringField(StringField(Menu, i, ";"), 1, "§"), ItemColor)
Next i
DrawingFont(WantedResultFont)
StopDrawing()
EndProcedure
*Appel(1) = @ProcessMenu()
Procedure ProcessQuit()
End
EndProcedure
*Appel(2) = @ProcessQuit()
AppelNo = 1
InitSprite()
InitMouse()
hWnd = OpenWindow(-1, 0, 0, DeskW, DeskH, "Test", $80000000)
ww = WindowWidth(hWnd)
wh = WindowHeight(hWnd)
OpenWindowedScreen(WindowID(hWnd), 0, 0, ww, wh, 0, 0, 0)
Genere = 1
TestMode = #EntierRelatifTest1
Repeat
ClicGauche = 0
ExamineMouse()
MousX = MouseX()
MousY = MouseY()
If MouseButton(2): Break: EndIf
If MouseButton(1)
If BoutonGauche = 0
ClicGauche = 1
BoutonGauche = 1
EndIf
Else
BoutonGauche = 0
EndIf
ClearScreen(0)
If (ClicGauche = 1)
If (Choice = Soluce)
Score + 1
EndIf
EndIf
CallFunctionFast(*Appel(AppelNo) )
FlipBuffers()
Delay(15)
Until WindowEvent() = 16
CloseWindow(hWnd)