0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83

Перенос программы с Visual Prolog 7.1 в Visual Prolog 7.5

08.06.2016, 19:53. Показов 3695. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема переноса. Взяла пример с книги Visual Prolog 7.1 для начинающих. Это игра червь. Вроде всё, что не компилировалось я исправила, но червь к сожалению не движется.
Вот листинг всех файлов:
click.cl
Prolog
1
2
3
4
5
6
7
8
9
class click
 
open core
 
predicates
    bip:(window).
    kill:().
 
end class click
click.pro
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
implement click
 
open core
 
class facts
    tm:vpiDomains::timerId:= erroneous.
 
clauses
    bip(W) :- tm := vpi::timerSet(W:getVpiWindow(), 500).
    kill() :- vpi::timerKill(tm).
 
end implement click
draw.cl
Prolog
1
2
3
4
5
6
7
8
class draw
 
open core, vpiDomains
 
predicates
    snapshot:(windowGDI Win, objstate).
 
end class draw
draw.pro
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
implement draw
 
open core, vpiDomains, vpi
 
class predicates
    draw:(windowHandle, objstate) procedure.
 
clauses
    draw(W, S) :-
        S:segm(Rectangle),
        vpi::drawEllipse(W, Rectangle),
        fail.
    draw(_W, _S).
    snapshot(Win, S) :-
        S:mov(), !,
        Rectangle= rct(0, 0, 200, 200),
        W= pictOpen(Rectangle),
        draw(W, S), Pict= pictClose(W),
        Win:pictDraw(Pict, pnt(10, 10), rop_SrcCopy).
 
end implement draw
objstate.i
Prolog
1
2
3
4
5
6
7
8
9
10
11
interface objstate
 
open core, vpiDomains
 
predicates
    init:().
    turn:(integer, integer).
    mov:().
    segm:(rct) nondeterm (o).
 
end interface objstate
objstate.pro
Prolog
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
implement objstate
 
open core, vpiDomains
 
facts
    w:(integer, pnt) nondeterm. % worm
    d:(integer, integer) single. % direction
 
clauses
    init() :-
        assert(w(1, pnt(110, 100))),
        assert(w(2, pnt(120, 100))),
        assert(w(3, pnt(130, 100))),
        assert(w(4, pnt(140, 100))),
        assert(w(5, pnt(140, 100))).
    d(10, 0).
    mov() :-
        retract(w(1, P)),
        P= pnt(X1, Y1),
        d(DX, DY),
        P1= pnt(X1+DX, Y1+DY),
        assert(w(1, P1)),
        retract(w(2, P2)),
        assert(w(2, P)),
        retract(w(3, P3)),
        assert(w(3, P2)),
        retract(w(4, P4)),
        assert(w(4, P3)),
        retract(w(5, _)),
        assert(w(5, P4)), !.
    mov().
    segm(rct(X, Y, X+10, Y+10)) :-
        w(_, pnt(X, Y)).
    turn(DX, DY) :-
        assert(d(DX, DY)).
 
end implement objstate
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.06.2016, 19:53
Ответы с готовыми решениями:

Пожалуйста, помоите переделать программу с Turbo Prolog на Visual Prolog
DOMAINS l_i=integer* l_s=string* i=integer s=string c=char structura=str(i,s) %Структура Порода-Параметры и его список ...

Из Turbo Prolog в Visual Prolog - где будут отличия в коде?
ребята ,помогите. есть прога на турбо прологе,а нужно отредактировать под visual prolog 7.5. Что изменится? Где отличия?.. ниже...

Перевести код из turbo prolog в visual prolog
не подскажите плиз как будет выглядеть код turbo prolog в Visual Prologe 5.2 turbo prolog: domains int=integer intl=int* ...

12
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
09.06.2016, 00:27
Выложите проект целиком - посмотрю
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
09.06.2016, 21:24  [ТС]
Black Fregat, вот, прикрепляю.
Вложения
Тип файла: 7z game1.7z (3.46 Мб, 17 просмотров)
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.06.2016, 04:47
Проблема в том, что таймера у Вас в проекте нет. Обработчик прерываний от таймера есть, а самого таймера - нет.
1
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
10.06.2016, 06:52  [ТС]
Black Fregat, если не сложно, помогите реализовать... пожалуйста
просто я новичок в этой теме, а времени мало...
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.06.2016, 08:51
Вы же откуда-то этот проект взяли? Странно, что нигде не создаётся таймер..

Добавьте куда-нибудь на lawn строчку
Prolog
1
        _ = timerSet(500).
Например, в lawn::onShow
Или сделайте для этой строчки отдельную кнопку "Старт"

Добавлено через 1 минуту
Только Ваша змейка очень быстро убегает с экрана, надо помнить, в какую сторону она убежала, и какими кнопками её назад возвращать
1
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
10.06.2016, 10:01  [ТС]
Black Fregat, спасибо большое, буду дома попробую. А вообще там в файле click. pro есть что-то подобное или нет?

я кажется поняла, это вы говорили - обработчик прерывания.

Брала проект с книги, делала всё точно по пунктам.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.06.2016, 16:14
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
в файле click. pro есть что-то подобное
Вот туда заглянуть я не догадался. Действительно, подобное. Но не совсем.
На текущий момент это несколько устаревший вариант, и почему-то он не работает.. То есть таймер в результате не запускается.

Достаточно запустить таймер, и проект заработает.
Если нужно побыстрее, проще не разбираться, в чем там прблемы с vpi::timerSet, а делать, как я написал
1
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
10.06.2016, 17:19  [ТС]
Black Fregat, т. е. по сути класс click вообще тогда не нужен? правильно я понимаю?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.06.2016, 19:10
Да, правильно. Или можно переписать этот класс под новый API, но это будет больше возни..
1
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
10.06.2016, 20:46  [ТС]
Black Fregat, спасибо вам большое) теперь она ползает) такой вопрос: а можно теперь как там было по нажатию на кнопку обновить змейку или лучше паузу поставить?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.06.2016, 23:26
Лучший ответ Сообщение было отмечено Lenchik_19 как решение

Решение

Чтобы "обновить", достаточно перезаписать базу w в objstate.
Это мог бы сделать init, но для этого в него надо добавить предварительную очистку базы:
Prolog
1
retractall(w(_, _))
Чтобы делать паузу, нужно запоминать id таймера и убивать его, это сразу обрастает необходимостью следить за кнопками:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
facts
    tm: timerHandle := erroneous.
 
predicates
    onСтартClick : button::clickResponder.
clauses
    onСтартClick(_Source) = button::defaultAction :-
        tm := timerSet(500),
        старт_ctl:setEnabled(false),
        стоп_ctl:setEnabled(true).
 
predicates
    onСтопClick : button::clickResponder.
clauses
    onСтопClick(_Source) = button::defaultAction :-
        timerKill(tm),
        старт_ctl:setEnabled(true),
        стоп_ctl:setEnabled(false).
1
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
11.06.2016, 12:45  [ТС]
Black Fregat, спасибо вам за помощь, всё получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2016, 12:45
Помогаю со студенческими работами здесь

[Turbo Prolog] [Visual Prolog] Задача на рекурсию
Здравствуйте, помогите, пожалуйста, с такой задачей... Имеется горсть из N Монет C1,C2,....,Cn различного достоинства. Определить,...

Перевести код из turbo prolog в visual prolog
не подскажите плиз как будет выглядеть код turbo prolog в Visual Prologe 7.3 turbo prolog: predicates for(integer,integer) ...

Код Turbo Prolog переделать в Visual Prolog 5.2
Помогите пожалуйста переделать код Turbo Prolog в Visual Prolog 5.2 domains st=st(string,real,real,real,real) st1=st1(string,real) ...

Компиляция программы в Visual Prolog 5.2
Здравствуйте. Возник вопрос по компиляции проекта в Visual Prolog 5.2. При компиляции исходного кода domains str=string. int=integer....

PDC Prolog -> Visual Prolog 9
Помогите, пожалуйста, перевести код из PDC в Visual задача о "проблеме пяти домов" Предикат candidate путем перестановок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru