purebasic.info

PureBasic forum
Текущее время: Пн июн 18, 2018 1:25 am

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




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

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте!
Я начал изучать язык эсперанто (язык международного общения, не программирования). И для лучшего запоминания слов решил сделать тренажер в виде игры. Но на первом же шаге остановился.
Код:
1
2
3
4
5
6
7
8
If OpenWindow(0, 100, 100,250, 250,"TradukoLudo", #PB_Window_ScreenCentered)
  Repeat
    A= WaitWindowEvent()
    If A=#PB_Event_CloseWindow
      Q=1
    EndIf
  Until Q=1
EndIf


Открывается окно, но вверху только название TradukoLudo. Нет ни значка слева, ни кнопки закрытия окна справа. Версия PureBasic 5.42 LTS (Windows - x86). Система - 7 Винда 64. Они что, несовместимы? Или моя Винда уже развалилась (давно стоит) и пора ее переустановить?


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

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 410
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Сталекс, Прочитай справку(вызывается F1), прочти про OpenWindow, в нем найди Flags (optional) и читай, плюс переводчик в помощь.
Если нужно выбрать, несколько значений, используй "|". Пример: "#PB_Window_Maximize | #PB_Window_Minimize)".


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

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спасибо. Прочитал. Добавил флаг
Код:
1
If OpenWindow(0, 100, 100,250, 250,"TradukoLudo",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)


Заработало как надо. Но странно, этот флаг ведь по умолчанию должен был стоять?
Еще русификатор не работает. Кириллицы нет. Вместо надписи "русский" (как в инструкции сказано) кракозябры (снимок экрана прилагается). Можно и без него, но все же...


Вложения:
2016-06-13_143222.png [36.36 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Языковый тренажер
СообщениеДобавлено: Пн июн 13, 2016 2:09 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2273
Откуда: Russia — Belarus
Благодарил (а): 5 раз.
Поблагодарили: 71 раз.
Пункты репутации: 11
Цитата:
Но странно, этот флаг ведь по умолчанию должен был стоять?

Не должен. Ты сам решаешь, какое окно создавать.

Русификатор вообще не рекомендую использовать.

_________________
EnableExplicit User


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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6304
Благодарил (а): 19 раз.
Поблагодарили: 187 раз.
Пункты репутации: 48
Сталекс писал(а):
Еще русификатор не работает. Кириллицы нет. Вместо надписи "русский" (как в инструкции сказано) кракозябры (снимок экрана прилагается). Можно и без него, но все же...

Версия русификатора не совпадает с версией PB
А именно проблема с кодировкой - с старых версиях русификатора по умолчанию был ASCII, а в новых версиях UTF8

_________________
read-only


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

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 620
Благодарил (а): 66 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
qpAHToMAS писал(а):
Русификатор вообще не рекомендую использовать

Это почему?


Сталекс
У меня таже версия русифицирована, Пётр пальцем тыкал в нужную версию русификатора, он где то на форуме есть.


kvitaliy писал(а):
А именно проблема с кодировкой - с старых версиях русификатора по умолчанию был ASCII, а в новых версиях UTF8

Всё ещё хуже, глянул специально, часть файлов 1251, другая utf8, и должно быть именно так, иначе не будет работать, федя чёй то перемудрил. Я тогда долго мучился пока заработало.
Может в последующих он и перешёл полностью на utf8.


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

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

На форуме много чего есть, только фиг найдешь :D
Обойдусь без русика, это не столь важно. Новый вопрос:
Код:
1
2
3
4
5
s.s=ReadString(#FILE)
    i=FindString(s," ")
    AddElement(Ludistoj())
    Ludistoj()\Nomo =Mid(s,1,i)
    Ludistoj()\Mono = Val(Mid(s,i))


Информация о именах игроков и их баллах будет храниться в файле. Считывать ее удобнее в структуированный связанный список. Можно ли как нибудь попроще считать ее. Я ничего, кроме как найти разделитель (пробел и что-то другое можно использовать), а потом разрезать считанную строку на части, не придумал. А может есть способ проще?
Вот полный код:
Structure HOMO; имя игрока и его баллы
Nomo.s
Mono.l
EndStructure

If OpenWindow(0, 100, 100,250, 250,"TradukoLudo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
#FILE = 1
NewList Ludistoj.HOMO()
If ReadFile(#FILE, "Res\Text\Ludistoj.txt",#PB_Unicode); Список всех игроков и их баллы в виде "Антон 120"
While Eof(#FILE) = #False
s.s=ReadString(#FILE)
i=FindString(s," ")
AddElement(Ludistoj())
Ludistoj()\Nomo =Mid(s,1,i)
Ludistoj()\Mono = Val(Mid(s,i))
Wend
CloseFile(#FILE)
EndIf
SortStructuredList(Ludistoj(), 1, OffsetOf(HOMO\Mono), #PB_Integer )
ForEach Ludistoj()
Debug Ludistoj()\Nomo
Debug Ludistoj()\Mono
Next

Repeat
WEvent= WaitWindowEvent()
Until WEvent=#PB_Event_CloseWindow
EndIf
End


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

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 144
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пункты репутации: 5
OpenPreferences(), не катит?


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11178
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
Сталекс писал(а):
На форуме много чего есть, только фиг найдешь
Серьезно? viewtopic.php?f=5&t=135&p=82028&hilit=%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80#p82028

Сталекс писал(а):
Считывать ее удобнее в структуированный связанный список. Можно ли как нибудь попроще считать ее.
https://www.purebasic.com/documentation ... nlist.html
https://www.purebasic.com/documentation ... nlist.html

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


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

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

Спасибо всем, кто кинул мне ссылки. Буду теперь разбираться с ними.


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

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Сталекс писал(а):
но не проводить же два-три дня на перебор разных форм своего вопроса и просматривать десятки тем

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


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

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

Начал рассматривать советы в порядке поступления. Полдня разбирался, но, кажется, это то, что надо. Спасибо, КЭС!

Тест программы:
Код:
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
Structure HOMO; имя игрока и его баллы
  Nomo.s
  Mono.l
EndStructure
 
If OpenWindow(0, 100, 100,250, 250,"TradukoLudo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
NewList Ludistoj.HOMO()
OpenPreferences("Res\Text\Ludistoj.txt")
  ExaminePreferenceGroups()
  While NextPreferenceGroup()
    ExaminePreferenceKeys()
    While  NextPreferenceKey()    
      AddElement(Ludistoj())
      Ludistoj()\Nomo =PreferenceKeyName()
      Ludistoj()\Mono = Val(PreferenceKeyValue())
    Wend
  Wend
ClosePreferences()    
 
SortStructuredList(Ludistoj(), 1, OffsetOf(HOMO\Mono), #PB_Integer )
ForEach Ludistoj()
  Debug Ludistoj()\Nomo
  Debug Ludistoj()\Mono
Next
 
;В конце игры будем переписываем новую таблицу рекордов
If CreatePreferences("Res\Text\Ludistoj.txt", #PB_Preference_GroupSeparator)
  PreferenceGroup("Ludistoj")
  ForEach Ludistoj()
    WritePreferenceInteger (Ludistoj()\Nomo,Ludistoj()\Mono)
  Next
EndIf
 
Repeat
WEvent= WaitWindowEvent()  
Until WEvent=#PB_Event_CloseWindow
EndIf
End



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

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

Продолжил эксперименты с этим оператором. Английским владею не очень, поэтому приходится действовать методом проб. Поскольку мои данные не имеют группировок, то решил выбросить те части, которые по-моему мнению нужны не будут.
Было:
Код:
1
2
3
4
5
6
7
8
9
10
11
OpenPreferences("Res\Text\Ludistoj.txt")
  ExaminePreferenceGroups()
  While NextPreferenceGroup()
    ExaminePreferenceKeys()
    While  NextPreferenceKey()    
      AddElement(Ludistoj())
      Ludistoj()\Nomo =PreferenceKeyName()
      Ludistoj()\Mono = Val(PreferenceKeyValue())
    Wend
  Wend
ClosePreferences()  


Вот что осталось:
Код:
1
2
3
4
5
6
7
OpenPreferences("Res\Text\Ludistoj.txt")
  While  NextPreferenceKey()    
    AddElement(Ludistoj())
    Ludistoj()\Nomo =PreferenceKeyName()
    Ludistoj()\Mono = Val(PreferenceKeyValue())
  Wend
ClosePreferences()  


Сомневаюсь насчет оператора типа ExaminePreferenceKeys(). Судя по названию, он что-то там экзаменует. Но с ним или без него разницы не заметил. Подсовывал и файлы с мусором, и с пустым/отсутствующим текстовым файлом - срабатывает одинаково.


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

Зарегистрирован: Пн июн 13, 2016 11:46 am
Сообщений: 30
Откуда: Самарская обл
Благодарил (а): 10 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
https://www.purebasic.com/documentation/json/insertjsonlist.html
https://www.purebasic.com/documentation ... nlist.html

А вот с этим разобраться не смог. У extractjsonlist входная строка уж очень сложный вид имеет. Пытался сделать по приведенному образцу, но так и не смог прочитать таблицу рекордов.


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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6304
Благодарил (а): 19 раз.
Поблагодарили: 187 раз.
Пункты репутации: 48
Сталекс писал(а):
Пётр писал(а):
https://www.purebasic.com/documentation/json/insertjsonlist.html
https://www.purebasic.com/documentation ... nlist.html

А вот с этим разобраться не смог. У extractjsonlist входная строка уж очень сложный вид имеет. Пытался сделать по приведенному образцу, но так и не смог прочитать таблицу рекордов.

Я бы на твоем месте особо не извращался, а делал всё как можно проще.
Если чуть изменить твой код, то получается довольно не плохо
Код:
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
 
Structure HOMO; имя игрока и его баллы
Nomo.s
Mono.l
EndStructure
 
If OpenWindow(0, 100, 100,250, 250,"TradukoLudo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
#FILE = 1
NewList Ludistoj.HOMO()
If ReadFile(#FILE, "Ludistoj.txt",#PB_Unicode); Список всех игроков и их баллы в виде "Антон=120"
While Eof(#FILE) = #False
  s.s=ReadString(#FILE)
 
AddElement(Ludistoj())
Ludistoj()\Nomo =StringField(s, 1,"=")
Ludistoj()\Mono =Val(StringField(s,2,"="))
Wend
CloseFile(#FILE)
EndIf
SortStructuredList(Ludistoj(), 1, OffsetOf(HOMO\Mono), #PB_Integer )
ForEach Ludistoj()
Debug Ludistoj()\Nomo
Debug Ludistoj()\Mono
Next
 
Repeat
WEvent= WaitWindowEvent()
Until WEvent=#PB_Event_CloseWindow
EndIf
End



Для разделения лучше использовать знак "=" или что то экзотическое, что не может встретится в обычном имени, а имена могут быть разными
Цитата:
Антон=120
Игорь=150
Василий Иванович=140
Григорий-Аппалонов Рыжий=25

_________________
read-only


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

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


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

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


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

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