purebasic.info

PureBasic forum
Текущее время: Вс июл 22, 2018 11:35 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 68 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Ср июн 15, 2016 9:11 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Загрузка из файла в список.
Код:
1
2
3
4
If LoadJSON(0, "File.json")
  ExtractJSONList(JSONValue(0), Ludistoj())
  FreeJSON(0)
EndIf

Сохранение из списка в файл.
Код:
1
2
3
4
5
If CreateJSON(0)
  InsertJSONList(JSONValue(0), Ludistoj())
  SaveJSON(0, "File.json")
  FreeJSON(0)
EndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Ср июн 15, 2016 9:32 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
Если чуть изменить твой код, то получается довольно не плохо

Да это не просто неплохо, а восхитительно! Самое лучшее решение. Оказывается, какая есть замечательная функция StringField. Теперь буду знать. Огромное спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Ср июн 15, 2016 10:39 pm 
Не в сети
студент

Зарегистрирован: Ср июн 15, 2016 9:03 pm
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сталекс, я когда-то делал такой тренажер, вот один из вариантов для языка эсперанто (текстовой файл должен находиться в каталоге с исходным кодом тренажера)


Вложения:
esp_4423.TXT [673.94 KiB]
Скачиваний: 47
esp_4423.pb [5.7 KiB]
Скачиваний: 51
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Чт июн 16, 2016 9:25 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр, как все просто, когда показывают на пальцах :D Большое спасибо!
А я пытался входную строку Input$ формировать самостоятельно, на чем и застрял.

gramaz, и тебе большое спасибо, amiko! Правда, не сразу разобрался, как работает твое творение, ты бы хоть описание сделал. Может, что-нибудь из твоего кода и использую. Но я хотел бы создать что-то более занимательное. Надеюсь, доведу дело до конца.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Чт июн 16, 2016 3:41 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Можно ли размещать кнопку на изображении?
Создаю изображение, на нем строю кнопку. Она видна (правда, выглядит чуть-чуть не так), но не нажимается. Если изображение не выводить, то работает нормально.
Код:
1
2
ImageGadget(#IMAGE_DISPLAY_1, 0, 0, 800, 600, ImageID(#Image)) 
     ButtonGadget(#BUTTON, 10, 170, 100, 20, "Starto")


Весь код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
UseJPEGImageDecoder()
UsePNGImageDecoder()
 
Enumeration
  #WIN_MAIN
  #FILE
  #Esteranta
  #Fanca
  #Angla
  #Germana
  #Rusa
  #Pola
  #Image
  #IMAGE_DISPLAY_1
  #IMAGE_DISPLAY_2
  #BUTTON
EndEnumeration
 
Structure HOMO; имя игрока и его баллы
  Nomo.s
  Mono.l
EndStructure
 
If LoadJSON(0, "Res\Text\Ludistoj.json")
NewList Ludistoj.HOMO()
  ExtractJSONList(JSONValue(0), Ludistoj())
  FreeJSON(0)
EndIf
 
Procedure Komenco1(List ParameterList.HOMO())
     ForEach ParameterList()
     Debug ParameterList()\Nomo
     Debug ParameterList()\Mono
    Next
EndProcedure
 
If OpenWindow(#WIN_MAIN, 0, 0,800, 600,"TradukoLudo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CatchImage(#Image, ?Image)
    ResizeImage(#Image,800,600)
    ImageGadget(#IMAGE_DISPLAY_1, 0, 0, 800, 600, ImageID(#Image))
     ButtonGadget(#BUTTON, 10, 170, 100, 20, "Starto")
 
  Repeat
    WEvent= WaitWindowEvent()  
        Select WEvent
          Case #PB_Event_Gadget
            Select EventGadget()
              Case #BUTTON
              Komenco1(Ludistoj())  
           EndSelect
       EndSelect
  Until WEvent=#PB_Event_CloseWindow
 
EndIf
End
 
DataSection
  Image:
 IncludeBinary "Res\Bildoj\img1.jpg"
EndDataSection



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Чт июн 16, 2016 3:49 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
Сталекс писал(а):
Можно ли размещать кнопку на изображении?

DisableGadget(#IMAGE_DISPLAY_1,1)

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Сб июн 18, 2016 11:21 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Закончил делать вступительный ролик. Выкладываю на случай, вдруг кто какие-нибудь замечания, дополнения захочет сделать, совет дать.
Код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
UseJPEGImageDecoder()
UsePNGImageDecoder()
 
Enumeration
  #WIN_MAIN
  #FILE
  #Esteranta
  #Fanca
  #Angla
  #Germana
  #Rusa
  #Pola
  #Audio
  #Image1
  #Image2
  #BUTTON
  #BUTTON1
  #BUTTON2
EndEnumeration
 
Global n.b  ;число игроков
 
Structure HOMO; имя игрока и его баллы
  Nomo.s
  Mono.l
EndStructure
 
Procedure Sonoro(n) ;дверной звонок
  If n=1
    CatchSound(#Audio, ?Sonoro1)
  Else
    CatchSound(#Audio, ?Sonoro2)
  EndIf
  PlaySound(#Audio)
  EndProcedure
 
 
Procedure Komenco1(List ParameterList.HOMO()); движение к воротам, выбор числа игроков
  InitSound()
  CatchSound(#Audio, ?Paso)
  PlaySound(#Audio) ;звук шагов
  Delay(300)
  HideGadget(#BUTTON,1) ;убираем кнопку "Старт"
  For i=1 To 230 Step 2
    ZoomSprite(#Image1,950*(1+i*0.01),600*(1+i*0.01)) ; фон
    DisplaySprite(#Image1,0-i*8,0-i*4.5)
    ZoomSprite(#Image2,270*(1+i*0.01),540*(1+i*0.01))
    DisplayTransparentSprite(#Image2,250-i*7.5, 70-i*3) ; памятник
    FlipBuffers()
    Delay(50)
  Next
  StopSound(#Audio)
  Delay(500)
  CatchImage(#Image1,?Image3) ; дверная табличка
  CatchSprite(#Image1, ?Image3)
  DisplaySprite(#Image1,320,125)
  ButtonGadget(#BUTTON1, 396, 324, 85, 17, "1 LUDISTO")
  ButtonGadget(#BUTTON2, 396, 352, 85, 17, "2 LUDISTOJ")
  EndProcedure
 
;===========================================================================================================
  If LoadJSON(0, "Res\Text\Ludistoj.json");загрузка таблицы рекордов
    NewList Ludistoj.HOMO()
      ExtractJSONList(JSONValue(0), Ludistoj())
      FreeJSON(0)
    EndIf
 
; SortStructuredList(Ludistoj(), 1, OffsetOf(HOMO\Mono), #PB_Integer )
; ForEach Ludistoj()
;      Debug Ludistoj()\Nomo
;      Debug Ludistoj()\Mono
;    Next
   
  InitSprite()
  If OpenWindow(#WIN_MAIN,  0, 0,800, 600,"TradukoLudo",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    OpenWindowedScreen(WindowID(#WIN_MAIN), 0, 0,800, 600,1, 0, 0,#PB_Screen_WaitSynchronization)
    SetFrameRate(60)
    CatchSprite(#Image1, ?Image1)
    ZoomSprite(#Image1,950,600)
    DisplaySprite(#Image1,0,0)
    CatchSprite(#Image2, ?Image2,#PB_Sprite_AlphaBlending)
    ZoomSprite(#Image2,270,540)
    DisplayTransparentSprite(#Image2,250, 70)
    ButtonGadget(#BUTTON, 340, 550, 100, 20, "Starto")
;   If CreateJSON(0); запись новой таблицы игроков
;     InsertJSONList(JSONValue(0), Ludistoj())
;     SaveJSON(0, "Res\Text\Ludistoj.json")
;     FreeJSON(0)
   EndIf
 
  Repeat
    WEvent= WaitWindowEvent()  
        Select WEvent
          Case #PB_Event_Gadget
            Select EventGadget()
              Case #BUTTON
                Komenco1(Ludistoj())   ; движение к воротам, выбор числа игроков
              Case #BUTTON1
                Sonoro(1)
              Case #BUTTON2
                Sonoro(2)  
            EndSelect
       EndSelect
  Until WEvent=#PB_Event_CloseWindow
End
 
DataSection
  Image1:
 IncludeBinary "Res\Bildoj\img1.jpg"
  Image2:
 IncludeBinary "Res\Bildoj\z.png"
  Image3:
 IncludeBinary "Res\Bildoj\Tablo.jpg"
  Paso:
 IncludeBinary "Res\Audio\Pas.wav"
  Sonoro1:
 IncludeBinary "Res\Audio\Son1.wav"
  Sonoro2:
 IncludeBinary "Res\Audio\Son2.wav"
EndDataSection


Откомпилированный файл: https://yadi.sk/d/4XUiotJksbJek


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Сб июн 18, 2016 1:40 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
Сталекс писал(а):
Закончил делать вступительный ролик.

С шагами прикольно получилось :D

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Вс июн 19, 2016 6:28 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Если я вывожу текст командой TextGadget, то все символы выводятся верно, а если пользуюсь командой DrawText, то основные символы печатаются верно, а вот экзотические символы (например, ĉ, ĝ) выводятся кракозяброй. Пробовал загружать шрифт LoadFont, но он меняет шрифт только в TextGadget, а в DrawText ничего не меняется. Можно ли что-нибудь сделать?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Вс июн 19, 2016 7:07 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
https://www.purebasic.com/documentation ... gfont.html

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Пн июн 20, 2016 7:04 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 630
Благодарил (а): 66 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
где то раньше нужно шрифт загрузить LoadFont, один раз!!!
Код:
1
2
3
4
5
6
If StartDrawing(CanvasOutput(can1)); канвас или рисунок, это не важно
DrawingFont(FontID(fnt2)) ; а это каждый раз!!!!
DrawingMode(#PB_2DDrawing_Transparent); прозрачность текста
DrawText(x, y, s2, fC); рисуем текст
StopDrawing()
EndIf



если шрифт экзотический, его нужно в прогу грузить, совсем недавно вопрос был, как шрифт в прогу засунуть, сам ищи тему, может ещё чего интересного по пути прочтёшь.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Пн июн 20, 2016 1:43 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спасибо, со шрифтом разобрался. Особый шрифт мне не нужен, но тот, который по умолчанию стоит, не все символы Юникода правильно отображает в DrawText, поэтому пришлось подгружать другой шрифт. Загрузил "Areal" (уж он на всех компах должен быть), с ним работает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Сб июн 25, 2016 12:22 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Дело движется, но медлено. Сегодня весь день пытался понять, почему код работает не так, как задумывалось. Наконец, нашел камень преткновения. Оказалось, в функции Delay. Вот такой код
Код:
1
2
3
4
5
OpenWindow(0,  0, 0,800, 600,"",  #PB_Window_SystemMenu | #PB_Window_SystemMenu)
CanvasGadget(1,20,30,100,200)
Delay(5000)
Repeat
  Until WaitWindowEvent()= #PB_Event_CloseWindow


И вот такой
Код:
1
2
3
4
5
OpenWindow(0,  0, 0,800, 600,"",  #PB_Window_SystemMenu | #PB_Window_SystemMenu)
Delay(5000)
CanvasGadget(1,20,30,100,200)
Repeat
  Until WaitWindowEvent()= #PB_Event_CloseWindow


выполняются совершенно одинаково: создается окно, через 5с создается Канвас. Но ведь в первом случае Канвас должен же создаваться сразу же, без паузы? Непонятно как то.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Сб июн 25, 2016 7:20 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
Сталекс писал(а):
выполняются совершенно одинаково: создается окно, через 5с создается Канвас. Но ведь в первом случае Канвас должен же создаваться сразу же, без паузы? Непонятно как то.

Отчасти верно, что Delay работает немного не так. В первом случае канвас создается сразу же. Но т.к. включается Delay, блокируются events, то мы не видим перерисовку окна, и нам кажется, что канваса нет. В идеале нам надо сделать так, что бы события перерисовки окна работали во время паузы. Но Фред это не предусмотрел.
Выход есть, надо самому написать процедуру задержки и предусмотреть внутри её возможность обрабатывать события окна.
В VB6 есть для этого хорошая функция DoEvents, можно её написать и для Пурика.
В общем случае это будет так выглядеть:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
Procedure DoEvents()
  msg.MSG
  If PeekMessage_(msg,0,0,0,1)
    TranslateMessage_(msg)
    DispatchMessage_(msg)
  Else
    Sleep_(1)
  EndIf
EndProcedure
 
dl=1000
 
OpenWindow(0,  0, 0,800, 600,"",  #PB_Window_SystemMenu | #PB_Window_SystemMenu)
CanvasGadget(1,20,30,100,200)   ; так появится сразу
 
 
 
For j=0 To 5 ; 5 секунд задержки
 
        stTime=ElapsedMilliseconds()
        While res<dl
          DoEvents() ; обработка событий окна
          newTime=ElapsedMilliseconds()
          res=newTime-stTime
          Delay(1)
        Wend
        res =0
        Debug j
 Next
 
CanvasGadget(2,200,30,100,200)   ; так появится через 5 сек
 
Repeat
Until WaitWindowEvent()= #PB_Event_CloseWindow


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Сб июн 25, 2016 8:08 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 630
Благодарил (а): 66 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
А мне Пётр так подсказал когда то, принудительно заставляет выполнить предыдущие действие.
Хотя сам Пётр сможет лучше обьяснить почему это работает.
Код:
1
2
Repeat:Until WindowEvent()=#W
Delay(3000)



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 68 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB