Renz
Осваивающий
- Сообщения
- 63
- Репутация
- 37
AutoIt: v3.3.6.1
Версия: 0.1
Категория: Математика
Описание: Генератор примеров по математике для детей 1-2 класс.
Есть настройки макс. 1-2 чисел, время на решение примера,количество примеров,
выбор знака. Ответ можно подтверждать кнопкой {SPACE}.
(Цель написания скрипта - сын пошел в 2 класс. Проверял остаточные знания после лета.)
Код:
Файл: EXE
Снимок:
Источник: http://autoit-script.ru
Автор(ы): Renz
Версия: 0.1
Категория: Математика
Описание: Генератор примеров по математике для детей 1-2 класс.
Есть настройки макс. 1-2 чисел, время на решение примера,количество примеров,
выбор знака. Ответ можно подтверждать кнопкой {SPACE}.
(Цель написания скрипта - сын пошел в 2 класс. Проверял остаточные знания после лета.)
Код:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Const $sIniSetup = @ScriptDir &"\"& "setup.ini"
;~ Const $sIniSetup = "c:" &"\"& "setup.ini"
If FileExists ( $sIniSetup ) = 0 Then
$sData = "fi=9" & @LF & "si=9" & @LF & "time=15" & @LF & "num=20" & @LF & "sign=1"
IniWriteSection($sIniSetup, "Setup", $sData)
EndIf
$Form1 = GUICreate("Сложение\Вычитание", 288, 180, 475, 271)
$MenuItem2 = GUICtrlCreateMenu("Настройки")
$MenuItem1 = GUICtrlCreateMenuItem("Настройки", $MenuItem2)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$Label1 = GUICtrlCreateLabel("", 24, 24, 40, 41) ; f int
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("", 88, 24, 40, 41) ;s int
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("", 64, 24, 23, 41) ;zn
GUICtrlSetFont(-1, 22, 400, 0, "MS Sans Serif")
$Group1 = GUICtrlCreateGroup("Пример:", 8, 8, 161, 65)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label4 = GUICtrlCreateLabel("", 136, 24, 23, 41) ;=
GUICtrlSetFont(-1, 22, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 176, 24, 89, 45)
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Старт", 56, 128, 75, 25)
$Button2 = GUICtrlCreateButton("Стоп", 144, 128, 75, 25)
$Label5 = GUICtrlCreateLabel("", 56, 80, 196, 41)
GUICtrlSetFont(-1, 22, 800, 0, "MS Sans Serif")
$Button3 = GUICtrlCreateButton("Ответ", 176, 0, 75, 17)
;присваеваем кнопке ответ аксел {спейс} и скрываем её
Dim $Form1_AccelTable[1][2] = [["{SPACE}", $Button3]]
GUISetAccelerators($Form1_AccelTable)
GUICtrlSetState($Button3,$GUI_HIDE)
GUISwitch($Form1)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg(1)
If $nMsg[0] = $GUI_EVENT_CLOSE Then
Exit
ElseIf $nMsg[0] = $MenuItem1 Then
OpenSetup()
ElseIf $nMsg[0] = $Button1 Then
GUICtrlSetState ($Input1,$GUI_FOCUS)
; primer
$iMaxFI = IniRead($sIniSetup,"Setup","fi","9") ; max f i
$iMaxSI = IniRead($sIniSetup,"Setup","si","9"); max s i
$iTime = IniRead($sIniSetup,"Setup","time","15")*1000; time
$iNum = IniRead($sIniSetup,"Setup","num","20"); kol
$iSign = IniRead($sIniSetup,"Setup","sign","1"); znak
$iNeusp =0
$iReshil =0
$iNepravReshil =0
For $i =1 To $iNum
If $iSign = 1 Then ;+
$iRez = Primer($Label1,$Label2,$Label3,$Label4,$iMaxSI,$iMaxFI,$iSign)
ElseIf $iSign = 2 Then ;-
$iRez = Primer($Label1,$Label2,$Label3,$Label4,$iMaxSI,$iMaxFI,$iSign)
Else ;+\-
$iSignGen = Random(1,2,1)
If $iSignGen = 1 Then ;+
$iRez = Primer($Label1,$Label2,$Label3,$Label4,$iMaxSI,$iMaxFI,$iSignGen)
ElseIf $iSignGen = 2 Then ;-
$iRez = Primer($Label1,$Label2,$Label3,$Label4,$iMaxSI,$iMaxFI,$iSignGen)
Else
MsgBox(0,"Error","Ошибка в генераторе +\- !!!!")
EndIf
EndIf
$begin = TimerInit()
While 1
$nMsg = GUIGetMsg(1)
;проверяем прошло ли время отведен на пример
If TimerDiff($begin) > $iTime Then
;проверяем ответ по завершению времени
$iOtvet = GUICtrlRead($Input1)
If $iOtvet = $iRez Then
$iReshil +=1
GUICtrlSetData($Label5,"Правильно")
GUICtrlSetColor($Label5,0x5da130)
GUICtrlSetState ( $Label5, $GUI_SHOW )
Sleep(3000)
ElseIf String($iOtvet) ="" Then
GUICtrlSetData($Label5,"Неуспели")
GUICtrlSetColor($Label5,0xff0000)
GUICtrlSetState ( $Label5, $GUI_SHOW )
Sleep(3000)
$iNeusp +=1
ElseIf $iOtvet <> $iRez Then
GUICtrlSetData($Label5,"Неправильно")
GUICtrlSetColor($Label5,0xff0000)
GUICtrlSetState ( $Label5, $GUI_SHOW )
Sleep(3000)
$iNepravReshil +=1
EndIf
GUICtrlSetData ( $Input1, "")
GUICtrlSetState ( $Input1, $GUI_SHOW )
ExitLoop
ElseIf $nMsg[0] = $Button2 Then
ExitLoop 2
;проверяем ответ по кнопке спейс
ElseIf $nMsg[0] = $Button3 Then
$iOtvet = GUICtrlRead($Input1)
If $iOtvet = $iRez Then
$iReshil +=1
GUICtrlSetData($Label5,"Правильно")
GUICtrlSetColor($Label5,0x5da130)
GUICtrlSetState ( $Label5, $GUI_SHOW )
Sleep(3000)
Else
GUICtrlSetData($Label5,"Неправильно")
GUICtrlSetColor($Label5,0xff0000)
GUICtrlSetState ( $Label5, $GUI_SHOW )
Sleep(3000)
$iNepravReshil +=1
EndIf
GUICtrlSetData ( $Input1, "")
GUICtrlSetState ( $Input1, $GUI_SHOW )
ExitLoop
EndIf
WEnd
GUICtrlSetData($Label5,"")
GUICtrlSetState ( $Label5, $GUI_SHOW )
;~ $i +=1
Next
;выводим результат
MsgBox(0,"Результат","Всего примеров: " & $i-1 & @CRLF & "Решено: "& $iReshil & @CRLF & "Неправильно: "& $iNepravReshil & @CRLF & "Неуспели: "& $iNeusp)
EndIf
WEnd
Func OpenSetup()
$Form2 = GUICreate("Настройки", 212, 185, 192, 114)
$Label21 = GUICtrlCreateLabel("Максимум первое число:", 24, 12, 132, 17)
$Label22 = GUICtrlCreateLabel("Максимум второе число:", 23, 41, 131, 17)
$Label23 = GUICtrlCreateLabel("Время на один пример , сек:", 0, 68, 150, 17)
$Label24 = GUICtrlCreateLabel("Количество примеров:", 29, 98, 119, 17)
$Input21 = GUICtrlCreateInput(IniRead($sIniSetup,"Setup","fi","9"), 160, 8, 33, 21) ; max f i
$Input22 = GUICtrlCreateInput(IniRead($sIniSetup,"Setup","si","9"), 160, 37, 33, 21); max s i
$Input23 = GUICtrlCreateInput(IniRead($sIniSetup,"Setup","time","15"), 160, 64, 33, 21); time
$Input24 = GUICtrlCreateInput(IniRead($sIniSetup,"Setup","num","20"), 160, 94, 33, 21); kol
$Button21 = GUICtrlCreateButton("Применить", 24, 152, 75, 25)
$Button22 = GUICtrlCreateButton("Отмена", 105, 152, 75, 25)
$Radio21 = GUICtrlCreateRadio("+", 8, 128, 33, 17)
$Radio22 = GUICtrlCreateRadio("-", 54, 128, 33, 17)
$Radio23 = GUICtrlCreateRadio("+\-", 95, 128, 33, 17)
;устанавливаем значение радио из настроек
$iSign = IniRead($sIniSetup,"Setup","sign","1")
If $iSign = 1 Then
GUICtrlSetState ( $Radio21, $GUI_CHECKED )
ElseIf $iSign = 2 Then
GUICtrlSetState ( $Radio22, $GUI_CHECKED )
Else
GUICtrlSetState ( $Radio23, $GUI_CHECKED )
EndIf
GUISwitch($Form2)
GUISetState(@SW_SHOW,$Form2)
While 1
$nMsg = GUIGetMsg(1)
If $nMsg[0] = $Button21 Then
If GUICtrlRead ( $Input21 ) < GUICtrlRead ( $Input22 ) Then
MsgBox(48,"Ошибка","Первое число должно быть равно\больше второго!")
Else
IniWrite ( $sIniSetup, "Setup", "fi", GUICtrlRead ( $Input21 ) )
IniWrite ( $sIniSetup, "Setup", "si", GUICtrlRead ( $Input22 ) )
IniWrite ( $sIniSetup, "Setup", "time", GUICtrlRead ( $Input23 ) )
IniWrite ( $sIniSetup, "Setup", "num", GUICtrlRead ( $Input24 ) )
;записываем изм из радио в настройки
If BitAnd(GUICtrlRead($Radio21),$GUI_CHECKED) = $GUI_CHECKED Then
IniWrite ( $sIniSetup, "Setup", "sign", "1" )
ElseIf BitAnd(GUICtrlRead($Radio22),$GUI_CHECKED) = $GUI_CHECKED Then
IniWrite ( $sIniSetup, "Setup", "sign", "2" )
Else
IniWrite ( $sIniSetup, "Setup", "sign", "3" )
EndIf
ExitLoop
EndIf
ElseIf $nMsg[0] = $Button22 Then
ExitLoop
EndIf
WEnd
GUIDelete ()
EndFunc
Func Primer($Label1,$Label2,$Label3,$Label4,$iMaxSI,$iMaxFI,$iSign)
If $iSign =1 Then
$iSI = Random(1,$iMaxSI,1)
$iFI = Random(1,$iMaxFI,1)
$iRez = $iFI+$iSI
;отображаем пример сложение
GUICtrlSetData($Label1,$iFI)
GUICtrlSetData($Label2,$iSI)
GUICtrlSetData($Label3,"+")
GUICtrlSetData($Label4,"=")
GUICtrlSetState ( $Label1, $GUI_SHOW )
GUICtrlSetState ( $Label2, $GUI_SHOW )
GUICtrlSetState ( $Label3, $GUI_SHOW )
GUICtrlSetState ( $Label4, $GUI_SHOW )
Return $iRez
ElseIf $iSign =2 Then
$iFI = Random(1,$iMaxFI,1) + Random(1,$iMaxFI,1)
$j =0
While 1
$iSI = Random(1,$iMaxSI,1)
If $iSI < $iFI Then
ExitLoop
EndIf
$j+=1
If $j =20 Then ; от возможного зациклив
$iFI = $iSI + Random(1,5,1)
ExitLoop
EndIf
WEnd
$iRez = $iFI-$iSI
;отображаем пример вычитание
GUICtrlSetData($Label1,$iFI)
GUICtrlSetData($Label2,$iSI)
GUICtrlSetData($Label3,"-")
GUICtrlSetData($Label4,"=")
GUICtrlSetState ( $Label1, $GUI_SHOW )
GUICtrlSetState ( $Label2, $GUI_SHOW )
GUICtrlSetState ( $Label3, $GUI_SHOW )
GUICtrlSetState ( $Label4, $GUI_SHOW )
Return $iRez
EndIf
MsgBox(0,"Error","Выход из фукции Primer() без результата!!!!")
EndFunc
Файл: EXE
Снимок:
Источник: http://autoit-script.ru
Автор(ы): Renz