PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » OpenSource » Примитивный экзаменатор знаний клавиатуры


Примитивный экзаменатор знаний клавиатуры

Сообщений 1 страница 29 из 29

1

Код:
UsePNGImageDecoder()
Enumeration
   #Window_0
EndEnumeration

Enumeration
   #Text_0
   #Font_Text_0
   #image_0
EndEnumeration

Global x, Rand, speed=1

For e=1 To 4
   LoadImage(e, Str(e)+".png")
Next
ExamineDesktops()
x=600
Procedure OpenWindow_Window_0()
   If OpenWindow(#Window_0, 391, 371, 315, 200, "Тестируем знания клавиатуры", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_ScreenCentered)
      TextGadget(#Text_0, 600, 130, 25, 25, "", #PB_Text_Center | #SS_CENTERIMAGE)
      SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Arial", 18, 272))
      PureCOLOR_SetGadgetColor(#Text_0, $aa, #PureCOLOR_DontSetBackColor)
      ImageGadget(#image_0, 0, 0, 330, 210, ImageID(4))
   EndIf
EndProcedure

Procedure LowResTimer(num, time)
   SetTimer_(WindowID(#Window_0), num, time, 0)
EndProcedure
Procedure.s ran()
   rand=Random(25)+65
   REZ.s=Chr(rand)
   Static y
   y=y+1
   If y=20
      speed=speed+1
      y=0
   EndIf
   If speed=5
      MessageRequester("", "Поздравляю,вы хорошо знаете клавиатуру, до свидания!")
      End
   EndIf
   
   ProcedureReturn REZ
   
EndProcedure
Procedure Proverka(x)
   Static t
   If x<=145
      SetGadgetText(#Text_0, ran())
      SetGadgetState(#image_0, ImageID(1))
      t+1
      If t=5
         Select speed
            Case 1
               MessageRequester("", "Очень плохо, советую вам получше изучить клавиатуру!")
               End
            Case 2
               MessageRequester("", "Неважно, советую вам получше изучить клавиатуру!")
               End
            Case 3
               MessageRequester("", "Нормально, вы неплохо знаете клавиатуру!")
               End
         EndSelect
      EndIf
      ProcedureReturn 600
   Else
      ProcedureReturn x
   EndIf
   
EndProcedure
Procedure Proverka2(x)
   If x<=250 And x>190
      SetGadgetState(#image_0, ImageID(2))
   ElseIf x<=190
      SetGadgetState(#image_0, ImageID(3))
   EndIf
   
EndProcedure

OpenWindow_Window_0()
LowResTimer(1, 3000)
LowResTimer(0, 10)
ran()
SetGadgetText(#Text_0, ran())
For e=65 To 90
   AddKeyboardShortcut(#Window_0, e, e)
Next
Repeat
   Event=WaitWindowEvent()
   Select Event
      Case #WM_TIMER
         Select EventwParam()
            Case 1
               If GO=0
                  KillTimer_(WindowID(#Window_0), 1)
                  ResizeGadget(#image_0, 1, 1, 198, 198)
                  SetGadgetState(#image_0, ImageID(1))
                  ResizeWindow(#Window_0,(DesktopWidth(k)-600)/2,#PB_Ignore,600,200)
                  GO=1
               EndIf
            Case 0
               If GO=1
                  ResizeGadget(#Text_0, x, #PB_Ignore, #PB_Ignore, #PB_Ignore)
                  x=x-speed
                  x=Proverka(x)
                  proverka2(x)
               EndIf
         EndSelect
      Case #PB_Event_Menu
         m=EventMenu()
         Select m
            Case 65 To 90
               If m=Rand
                  x=600
                  SetGadgetText(#Text_0, ran())
               EndIf
         EndSelect
         
   EndSelect
Until Event=16

Скачать

Отредактировано haav (07.04.2010 20:22:51)

0

2

У меня вот что получается. Библиотеки стоят
http://s42.radikal.ru/i098/1004/f2/a53fbcbd4c90.gif

0

3

Установи библиотеку Purecolor.

Скачать

Отредактировано haav (07.04.2010 15:58:48)

0

4

После установки данной библиотеки:
http://s58.radikal.ru/i160/1004/90/25b4b55d9704.gif

0

5

В PB 4.41 всё ОК.
Судя по скрину, версия пурика ниже 4.40

0

6

У меня окно с клоуном и ничего не происходит ...
Что должно быть ?
Windows 7

Отредактировано mirashic (07.04.2010 16:53:07)

0

7

У меня XP SP 2. PB 4,31

0

8

mirashic написал(а):

У меня окно с клоуном и ничего не происходит ...Что должно быть ?Windows 7

У меня XP, поэтому не могу сказать как будет работать в семерке. Должны лететь буквы и если не успеешь нажать пока она не подойдет к клоуну, он ее съест. 5 раз съедает и высвечивает результат вашего познания клавиатуры. То есть в тренажере 4 скорости, идущих одна за другой,  как только пользователь не успеет нажать  5 раз программа в зависимости от скорости высвечивает результат.

daiomik написал(а):

У меня XP SP 2. PB 4,31

У меня такие же данные. Писал именно в этой среде

0

9

Кодек не подбирал, да и на скорую руку, поэтому смазанно на видео:

ВИДЕО

0

10

Перешёл на XP - тот же результат ?

0

11

В 4.40 и 4.41 не работает
А в 4.30   запустилась и всё в порядке...

0

12

Код:
Перешёл на XP - тот же результат ?

Олег! Если не сложно запиши на видео, что у тебя получается. ПРОГРАММА ДЛЯ ЗАПИСИ, ЕСЛИ НЕТ

0

13

mirashic написал(а):

В 4.40 и 4.41 не работаетА в 4.30   запустилась и всё в порядке...

Все дело по ходу в PURECOLOR. Надо наверно всегда лучше встроенные средства пурика для цвета использовать

0

14

Я же говорю в 4.30 всё в порядке и в XP и в 7

0

15

Чего странно в 4.40 событие таймера не обрабатывается  o.O   Заставка как будто зациклена. Вот наверно почему я до сих пор и не лезу на новые версии. Глюков меньше.

0

16

Кстати без библиотеки Purecolor, текст намного лучше отражается:

Код:
UsePNGImageDecoder()
Enumeration
   #Window_0
EndEnumeration

Enumeration
   #Text_0
   #Font_Text_0
   #image_0
EndEnumeration

Global FontID1
FontID1 = LoadFont(1, "Arial", 18, #PB_Font_Bold)

Global x, Rand, speed=1

For e=1 To 4
   LoadImage(e, Str(e)+".png")
Next
ExamineDesktops()
x=600
Procedure OpenWindow_Window_0()
   If OpenWindow(#Window_0, 391, 371, 315, 200, "Тестируем знания клавиатуры", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_ScreenCentered)
      TextGadget(#Text_0, 600, 130, 25, 25, "", #PB_Text_Center | #SS_CENTERIMAGE)
       SetGadgetFont(#Text_0, FontID1)
       SetGadgetColor(#Text_0, #PB_Gadget_FrontColor, RGB(186, 29, 69))
      ImageGadget(#image_0, 0, 0, 330, 210, ImageID(4))
   EndIf
EndProcedure

Procedure LowResTimer(num, time)
   SetTimer_(WindowID(#Window_0), num, time, 0)
EndProcedure
Procedure.s ran()
   rand=Random(25)+65
   REZ.s=Chr(rand)
   Static y
   y=y+1
   If y=20
      speed=speed+1
      y=0
   EndIf
   If speed=5
      MessageRequester("", "Поздравляю,вы хорошо знаете клавиатуру, до свидания!")
      End
   EndIf
   
   ProcedureReturn REZ
   
EndProcedure
Procedure Proverka(x)
   Static t
   If x<=145
      SetGadgetText(#Text_0, ran())
      SetGadgetState(#image_0, ImageID(1))
      t+1
      If t=5
         Select speed
            Case 1
               MessageRequester("", "Очень плохо, советую вам получше изучить клавиатуру!")
               End
            Case 2
               MessageRequester("", "Неважно, советую вам получше изучить клавиатуру!")
               End
            Case 3
               MessageRequester("", "Нормально, вы неплохо знаете клавиатуру!")
               End
         EndSelect
      EndIf
      ProcedureReturn 600
   Else
      ProcedureReturn x
   EndIf
   
EndProcedure
Procedure Proverka2(x)
   If x<=250 And x>190
      SetGadgetState(#image_0, ImageID(2))
   ElseIf x<=190
      SetGadgetState(#image_0, ImageID(3))
   EndIf
   
EndProcedure

OpenWindow_Window_0()
LowResTimer(1, 3000)
LowResTimer(0, 10)
ran()
SetGadgetText(#Text_0, ran())
For e=65 To 90
   AddKeyboardShortcut(#Window_0, e, e)
Next
Repeat
   Event=WaitWindowEvent()
   Select Event
      Case #WM_TIMER
         Select EventwParam()
            Case 1
               If GO=0
                  KillTimer_(WindowID(#Window_0), 1)
                  ResizeGadget(#image_0, 1, 1, 198, 198)
                  SetGadgetState(#image_0, ImageID(1))
                  ResizeWindow(#Window_0,(DesktopWidth(k)-600)/2,#PB_Ignore,600,200)
                  GO=1
               EndIf
            Case 0
               If GO=1
                  ResizeGadget(#Text_0, x, #PB_Ignore, #PB_Ignore, #PB_Ignore)
                  x=x-speed
                  x=Proverka(x)
                  proverka2(x)
               EndIf
         EndSelect
      Case #PB_Event_Menu
         m=EventMenu()
         Select m
            Case 65 To 90
               If m=Rand
                  x=600
                  SetGadgetText(#Text_0, ran())
               EndIf
         EndSelect
         
   EndSelect
Until Event=16

0

17

Всё не тестировал, но вроде во всех версиях работает

Код:
UsePNGImageDecoder()
Enumeration
   #Window_0
EndEnumeration

Enumeration
   #Text_0
   #Font_Text_0
   #image_0
EndEnumeration

Global FontID1
FontID1 = LoadFont(1, "Arial", 18, #PB_Font_Bold)

Global x, Rand, speed=1

For e=1 To 4
   LoadImage(e, Str(e)+".png")
Next
ExamineDesktops()
x=600
Procedure OpenWindow_Window_0()
   If OpenWindow(#Window_0, 391, 371, 315, 200, "Тестируем знания клавиатуры", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_ScreenCentered)
      TextGadget(#Text_0, 600, 130, 25, 25, "", #PB_Text_Center | #SS_CENTERIMAGE)
       SetGadgetFont(#Text_0, FontID1)
       SetGadgetColor(#Text_0, #PB_Gadget_FrontColor, RGB(186, 29, 69))
      ImageGadget(#image_0, 0, 0, 330, 210, ImageID(4))
   EndIf
EndProcedure

Procedure LowResTimer()


   ResizeGadget(#Text_0, x, #PB_Ignore, #PB_Ignore, #PB_Ignore)
   x=x-speed
EndProcedure


Procedure.s ran()
   rand=Random(25)+65
   REZ.s=Chr(rand)
   Static y
   y=y+1
   If y=20
      speed=speed+1
      y=0
   EndIf
   If speed=5
      MessageRequester("", "Поздравляю,вы хорошо знаете клавиатуру, до свидания!")
      End
   EndIf
   
   ProcedureReturn REZ
   
EndProcedure
Procedure Proverka(x)
   Static t
   If x<=145
      SetGadgetText(#Text_0, ran())
      SetGadgetState(#image_0, ImageID(1))
      t+1
      If t=5
         Select speed
            Case 1
               MessageRequester("", "Очень плохо, советую вам получше изучить клавиатуру!")
               End
            Case 2
               MessageRequester("", "Неважно, советую вам получше изучить клавиатуру!")
               End
            Case 3
               MessageRequester("", "Нормально, вы неплохо знаете клавиатуру!")
               End
         EndSelect
      EndIf
      ProcedureReturn 600
   Else
      ProcedureReturn x
   EndIf
   
EndProcedure
Procedure Proverka2(x)
   If x<=250 And x>190
      SetGadgetState(#image_0, ImageID(2))
   ElseIf x<=190
      SetGadgetState(#image_0, ImageID(3))
   EndIf
   
EndProcedure

OpenWindow_Window_0()
SetTimer_(WindowID(#Window_0),Event,2,@LowResTimer())
ran()
SetGadgetText(#Text_0, ran())
For e=65 To 90
   AddKeyboardShortcut(#Window_0, e, e)
Next
Repeat
   Event=WaitWindowEvent()
   Select Event
      Case #WM_TIMER
         Select EventwParam()
            Case 1
               If GO=0
                  KillTimer_(WindowID(#Window_0), 1)
                  ResizeGadget(#image_0, 1, 1, 198, 198)
                  SetGadgetState(#image_0, ImageID(1))
                  ResizeWindow(#Window_0,(DesktopWidth(k)-600)/2,#PB_Ignore,600,200)
                  GO=1
               EndIf
            Case 0
               If GO=1

                  x=Proverka(x)
                  proverka2(x)
               EndIf
         EndSelect
      Case #PB_Event_Menu
         m=EventMenu()
         Select m
            Case 65 To 90
               If m=Rand
                  x=600
                  SetGadgetText(#Text_0, ran())
               EndIf
         EndSelect
         
   EndSelect
Until Event=16

0

18

В 4.30  теперь прямо в заставке буква летает.  :D  Или это у меня такие глюки с компиляторами

0

19

У меня в 4.30 вроде всё правильно...

0

20

А у меня и в 4.40 тот же результат.....  Хотя Петр написал, что самый верхний код в 4.41 работает правильно

0

21

haav написал(а):

Петр написал, что самый верхний код в 4.41 работает правильно

Я имел в виду что компилируется без ошибок, но "летающих" букв я не видел. Даже не подозревал о них.

0

22

То есть получается, что только в версиях 4.30 или 4.31 работает. Не знаешь почему SetTimer так глючит в новых версиях, ведь это из-за него вся бодяга

0

23

На всякий случай, чтобы было понятно, тот же архив, но с готовым EXE в первом посте перезалито

Отредактировано haav (07.04.2010 20:24:12)

0

24

haav написал(а):

знаешь почему SetTimer так глючит в новых версиях, ведь это из-за него вся бодяга

Наверное потому, что в новых версиях появилась встроенная поддержка таймера.

Код:
UsePNGImageDecoder()
Enumeration
   #Window_0
EndEnumeration

Enumeration
   #Text_0
   #Font_Text_0
   #image_0
EndEnumeration

Global x, Rand, speed=1

For e=1 To 4
   LoadImage(e, Str(e)+".png")
Next
ExamineDesktops()
x=600
Procedure OpenWindow_Window_0()
   If OpenWindow(#Window_0, 391, 371, 315, 200, "Тестируем знания клавиатуры", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_ScreenCentered)
      TextGadget(#Text_0, 600, 130, 25, 25, "3232", #PB_Text_Center | #SS_CENTERIMAGE)
      SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Arial", 18, 272))
      PureCOLOR_SetGadgetColor(#Text_0, $aa, #PureCOLOR_DontSetBackColor)
      ImageGadget(#image_0, 0, 0, 330, 210, ImageID(4))
   EndIf
EndProcedure

Procedure LowResTimer(num, time)
   ;SetTimer_(WindowID(#Window_0), num, time, 0)
   AddWindowTimer(0,num, time)
EndProcedure
Procedure.s ran()
   rand=Random(25)+65
   REZ.s=Chr(rand)
   Static y
   y=y+1
   If y=20
      speed=speed+1
      y=0
   EndIf
   If speed=5
      MessageRequester("", "Поздравляю,вы хорошо знаете клавиатуру, до свидания!")
      End
   EndIf
   
   ProcedureReturn REZ
   
EndProcedure
Procedure Proverka(x)
   Static t
   If x<=145
      SetGadgetText(#Text_0, ran())
      SetGadgetState(#image_0, ImageID(1))
      t+1
      If t=5
         Select speed
            Case 1
               MessageRequester("", "Очень плохо, советую вам получше изучить клавиатуру!")
               End
            Case 2
               MessageRequester("", "Неважно, советую вам получше изучить клавиатуру!")
               End
            Case 3
               MessageRequester("", "Нормально, вы неплохо знаете клавиатуру!")
               End
         EndSelect
      EndIf
      ProcedureReturn 600
   Else
      ProcedureReturn x
   EndIf
   
EndProcedure
Procedure Proverka2(x)
   If x<=250 And x>190
      SetGadgetState(#image_0, ImageID(2))
   ElseIf x<=190
      SetGadgetState(#image_0, ImageID(3))
   EndIf
   
EndProcedure

OpenWindow_Window_0()
LowResTimer(1, 3000)
LowResTimer(0, 10)
ran()
SetGadgetText(#Text_0, ran())
For e=65 To 90
   AddKeyboardShortcut(#Window_0, e, e)
Next
Repeat
   Event=WaitWindowEvent()
   Select Event
      Case #PB_Event_Timer;#WM_TIMER
         Select EventTimer();EventwParam()
            Case 1
               If GO=0
                  ;KillTimer_(WindowID(#Window_0), 1)
                  RemoveWindowTimer(#Window_0,1)
                  ResizeGadget(#image_0, 1, 1, 198, 198)
                  SetGadgetState(#image_0, ImageID(1))
                  ResizeWindow(#Window_0,(DesktopWidth(k)-600)/2,#PB_Ignore,600,200)
                  GO=1
               EndIf
            Case 0
               If GO=1
                  ResizeGadget(#Text_0, x, #PB_Ignore, #PB_Ignore, #PB_Ignore)
                  x=x-speed
                  x=Proverka(x)
                  proverka2(x)
               EndIf
         EndSelect
      Case #PB_Event_Menu
         m=EventMenu()
         Select m
            Case 65 To 90
               If m=Rand
                  x=600
                  SetGadgetText(#Text_0, ran())
               EndIf
         EndSelect
         
   EndSelect
Until Event=16

А зачем вообще настроил таймер на работу с системным обработчиком событий?
Обычно для этого используется процедура. Тогда таких глюков нет.

0

25

А зачем вообще настроил таймер на работу с системным обработчиком событий?
Обычно для этого используется процедура. Тогда таких глюков нет.

Первый таймер для задержки заставки. Второй определяет скорость Без него ничего лучше не придумал притормозить движение букв.

0

26

А почему для таймеров не создал отдельные процедуры, а направил обработку таймеров в сиситемный обработчик событий?
Глюки из-за этого!

0

27

Пётр написал(а):

А почему для таймеров не создал отдельные процедуры, а направил обработку таймеров в сиситемный обработчик событий? Глюки из-за этого!

Как не создал? Смотри первый код

0

28

haav написал(а):

Как не создал?

А вот так, не создал!
Вот смотри как сделанно здесь

Код:
Procedure AlertThread() 
    Debug "Alert !" 
EndProcedure 

OpenWindow(0,0,0,0,0,"",#PB_Window_Invisible) 
SetTimer_(WindowID(0),1,1000,@AlertThread() ) 

MessageRequester("Info", "It will display an alert every 3 seconds."+#LF$+"Click To finish the program", 0)
Код:
; Эта процедура вызывается по таймеру два раза в секунду.
Procedure DateStatusBar() 
  Time.s = FormatDate("%hh:%ii:%ss", Date() ) ; Узнаём текущее время
  StatusBarText(0, 0,Time) ; Выводим его на строку состояния
EndProcedure 
; Открываем окно
If OpenWindow(0,0,0,230,100,"Строка состояния",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
 If CreateGadgetList(WindowID(0))
   ; Создаём строку состояния
   CreateStatusBar(0, WindowID(0))
   ; Делим её на области
   AddStatusBarField(80)
   AddStatusBarField(120)
  StatusBarText(0, 1, " Текущее время") ; Выводим строку в область с идентификатором 1.
  
  SetTimer_(WindowID(0), 1, 500, @DateStatusBar() )
    
  Repeat
   Event=WaitWindowEvent()
  Until Event=#PB_Event_CloseWindow
 EndIf
EndIf
End

Работает без глюков в любой версии пурика, а всё потому, что непосредственно заданна процедура, вызываемая по таймеру.

0

29

Понял спасибо, с этим проетом уже ничего делать не буду, а на будующее неплохо знать такое.

0


Вы здесь » PureBasic - форум » OpenSource » Примитивный экзаменатор знаний клавиатуры