Calcul mental

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Calcul mental

Message par Ollivier »

Salut à vous,

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)
Anonyme

Message par Anonyme »

je vais le plus vite possible , j'ai 10 ou 11 points... pourtant je ne suis pas mauvais en calcul mental... :roll:

edit 12pts ! :D
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

13 --14--13--12--15
Monsieur le professeur !
Le plus long est de trouver où est la bonne réponse ! :D

Merci de la distraction !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Oui ça rejoint un peu la mémoire eidique évoquée par Kwaï.

Enfin, vous me rassurez... Ma moyenne est dans les 15 points. Je ne dépasse pas mon plafond de 20 points. ça me rend hystéro ce truc.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Ollivier a écrit :Je ne dépasse pas mon plafond de 20 points
Pas étonnant s'il n'y a que 20 questions à un point... Qu'est-ce que je suis une burne...
Anonyme

Message par Anonyme »

le plus chiant c'est de trouver la bonne réponse , il me gave ton code :twisted:

Allez , j'arrête pour ce soir :D
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

80 points xD sa bug a la question 20 on peut sélectionner la réponse en continue.
Anonyme

Message par Anonyme »

:D 131 points !!!
Répondre