Учебный Проект. Релиз 1: различия между версиями
м |
м |
||
(не показано 16 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{ | {{PolylineTemplateRu | ||
|goal= | |||
Демонстрация простейших приемов программирования на языке системы программирования Visual Prolog. | |||
|goalContent= | |||
|code= | |||
Демонстрация простейших приемов программирования на языке Visual Prolog. | |||
*Автор: Елена Ефимова | *Автор: Елена Ефимова | ||
*Источник: [http://www.progz.ru/forum/index.php?showtopic=34097&pid=153443&st=0&#entry153443#2 http://www.progz.ru/forum/index.php?showtopic=34097&pid=153443&st=0&#entry153443#2] | *Источник: [http://www.progz.ru/forum/index.php?showtopic=34097&pid=153443&st=0&#entry153443#2 http://www.progz.ru/forum/index.php?showtopic=34097&pid=153443&st=0&#entry153443#2] | ||
*В данной версии размер поля | *Тип пользовательского приложения – консоль (console). | ||
*В данной версии размер поля установлен 5х6 точек. | |||
*В силу неэффективного алгоритма игры компьютера не рекомендуется устанавливать размер поля более 36 клеток (6x6, например). | *В силу неэффективного алгоритма игры компьютера не рекомендуется устанавливать размер поля более 36 клеток (6x6, например). | ||
|functionality= | |||
Следуйте инструкциям на экране приложения. | |||
|install={{PolylineInstall}} | |||
== | |open= | ||
{{Polyline1_10Open|project='''Examples\Polyline\Polyline1\Polyline1.prj'''}} | |||
{{Polyline1-06Copy_Paste}} | |||
|run=Запуск приложения из среды по '''E''' или запустить исполняемое приложение из директории EXE. | |||
<vip> | <vip> | ||
/***************************************************************************** | /***************************************************************************** | ||
Copyright (c) Elena Efimova | |||
( | |||
Translated by Victor Yukhtenko | |||
******************************************************************************/ | ******************************************************************************/ | ||
goal | goal | ||
mainExe::run(main::run). | mainExe::run(main::run). | ||
implement main | implement main | ||
open core, console | open core, console | ||
Строка 152: | Строка 147: | ||
end implement main | end implement main | ||
</vip> | </vip> | ||
|enver= | |||
[http://www.progz.ru/forum/index.php?showtopic=34097&pid=153443&st=0&#entry153443#2 Первая публикация текста] | |||
}} | |||
Текущая версия на 13:41, 28 марта 2011
Автор: Виктор Юхтенко. Email victor@pdc.spb.su
Очередная версия Учебного проекта, функциональной идеей которого является простая игра.
Цель
Демонстрация простейших приемов программирования на языке системы программирования Visual Prolog.
Функции
Следуйте инструкциям на экране приложения.
Код
- Проверено на версии Visual Prolog 7.3 build 7302.
- Автор: Елена Ефимова
- Источник: http://www.progz.ru/forum/index.php?showtopic=34097&pid=153443&st=0&#entry153443#2
- Тип пользовательского приложения – консоль (console).
- В данной версии размер поля установлен 5х6 точек.
- В силу неэффективного алгоритма игры компьютера не рекомендуется устанавливать размер поля более 36 клеток (6x6, например).
Установка
Если Вам нужен полный набор проектов серии Polyline (персональная версия), сгрузите и разархивируйте файлы архивов, пользуясь ссылками на форуме PDC ЗДЕСЬ
- VipSpbSDK_PE_73_Examples_Polyline_1_14.zip
- VipSpbSDK_PE_73_Tools_Polyline_1_14.zip]
в удобную для Вас директорию.
Коммерческая версия представлена в виде одного архива и может быть получена Здесь.
Оплата в любой из указанных валют. При оплате с рублевой кредитной карты валюта оплаты конвертируется в рубли по курсу банка-эмитента карты.
Директория с именем VipSpbSDK будет создана автоматически.
Если у Вас установлен VipSpbSDK, то следует открыть проект Examples\Polyline\Polyline1\Polyline1.prj
Если у Вас нет полного набора примеров из VipSpbSDK, то для помещения игры в проект необходимо:
- Создать проект с пользовательским интерфейсом типа console
- Построить проект
- В построенном проекте заменить полностью код файла "main.pro" кодом, предложенным ниже.
- Запустить вновь построение проекта. При построении проекта ответить на предложение о включении дополнительных пакетов в проект "Add All".
Запуск
Запуск приложения из среды по E или запустить исполняемое приложение из директории EXE.
/***************************************************************************** Copyright (c) Elena Efimova Translated by Victor Yukhtenko ******************************************************************************/ goal mainExe::run(main::run). implement main open core, console constants className = "PolyLine". classVersion = "1.0". clauses classInfo(className, classVersion). domains cell = c(unsigned16, unsigned16). cells = cell*. class predicates wins: (positive, positive, cells, cells) nondeterm (i,i,i,o). clauses wins(_Player1, _Player2, PolyLine, PolyLine1):- step(PolyLine, PolyLine1, Cell), list::isMember(Cell, PolyLine). wins(Player1, Player2, PolyLine, PolyLine1):- step(PolyLine, PolyLine1, _), not(wins(Player2, Player1, PolyLine1, _)). class predicates move: (positive, cells). clauses move(2, PolyLine):- step(PolyLine, PolyLine1, Cell), list::isMember(Cell, PolyLine), !, show(PolyLine1), setLocation(console_native::coord(0, 14)), write("Computer Won!\n\n", PolyLine1). move(2, PolyLine):- wins(2, 1, PolyLine, PolyLine1), !, move(1, PolyLine1). move(2, PolyLine):- step(PolyLine, PolyLine1, _), !, move(1, PolyLine1). move(1, PolyLine):- show(PolyLine), setLocation(console_native::coord(0, 14)), write(PolyLine), std::repeat(), write( "\n\nIt is your turn.\nEnter the new cell as c(2,3): "), hasDomain(cell, К), К = read(), clearInput(), step(PolyLine, PolyLine1, К), !, if list::isMember(К, PolyLine) then write("\nCongratulations! You have won!") else move(2, PolyLine1) end if. move(_, _). class predicates step: (cells, cells, cell) nondeterm (i,o,o) (i,o,i). clauses step([A, B | PolyLine], [X, A, B | PolyLine], X):- candidate(A, X), not(X = B). step(PolyLine, PolyLine1, X):- PolyLine2 = list::reverse(PolyLine), PolyLine2 = [A, B | _], candidate(A, X), not(X = B), PolyLine1 = list::append(PolyLine, [X]). class predicates candidate: (cell, cell) nondeterm (i,o) (i,i). clauses candidate(c(X, Y), c(X - 1, Y)):- X > 1. candidate(c(X, Y), c(X + 1, Y)):- X < 6. candidate(c(X, Y), c(X, Y - 1)):- Y > 1. candidate(c(X, Y), c(X, Y + 1)):- Y < 5. class predicates show: (cells). clauses show(PolyLine):- clearOutput(), foreach I = std::fromTo(1, 6) do setLocation(console_native::coord(3*I, 0)), write(I) end foreach, foreach J = std::fromTo(1, 5) do setLocation(console_native::coord(0, 2*J)), write(J) end foreach, foreach c(X, Y) = list::getMember_nd(PolyLine) do setLocation(console_native::coord(3*X, 2*Y)), write("*") end foreach. clauses run():- init(), write("Wich player moves first? (1 - human, 2 - computer): "), Player = read(), clearInput(), if Player = 1 then write("Enter the start of the line as c(3,3): "), hasDomain(cell, К1), К1 = read(), clearInput(), write("Enter the end of the line: "), hasDomain(cell, К2), К2 = read(), clearInput(), move(2, [К1, К2]) else move(1, [c(3, 3), c(4, 3)]) end if, _ = readLine(). end implement main