Forth http://fforum.winglion.ru/ |
|
Игра с фишками/карточками http://fforum.winglion.ru/viewtopic.php?f=2&t=3173 |
Страница 1 из 3 |
Автор: | Hishnik [ Пт май 11, 2018 16:09 ] |
Заголовок сообщения: | Игра с фишками/карточками |
Идея практического теста для опробования Форта - игра с фишками или карточками. Это может быть и простой имитатор ходилки с кубиками, и простой wargame, и игра на уровне расстановки своих фишек на территории, выбивания оттуда чужих фишек и получения различных бонусов. Что тут облегчает задачу: 1. Изображения в основном статические, нет ни сложной трехмерной, ни скоростной графики. 2. Нет realtime и сложного взаимодействия с мышью и клавиатурой. 3. Изображения могут быть достаточно условными (например, "вот этот красный квадратик пусть будет драконом с атакой 10 и жизнями 20"). Зачем тут Форт: 1. Интересно, насколько просто будет на Форте реализовывать особые правила, да и вообще автоматический отыгрыш правил. 2. Игровой процесс хорошо соответствует идее интерпретации некоторых команд, возможно, с параметрами. 3. В целом за счет описания дополнительных игровых механик на Форте и введении "слотов" для программируемых специальных действий можно будет попробовать отойти от разнообразных генераторов игровых программ. Конечно, это все делается не для получения чего-то игрового для продажи через Steam Идея в том, что раз Форт хорош, то ведь на нем должно быть удобно решать практические задачи. А игра - это такое дело, которое не страшно и провалить, пусть даже и за неимением свободного времени. Правда, если уж даже простую игру не получается написать, то о чем мы, собственно?... |
Автор: | diver [ Пт май 11, 2018 20:14 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
наша местная легенда: одиозная компания студентов, более известная, как " люди Х (икс)" в рамках квеста пятёрка на халяву без лаб" на форте писала преферанс....но из-ха сбоя винта всё было утеряно и восстановлено (с улучшениями в коде и движке) за двое бессонных суток, но увы без графики.... (злые товарищи пострадавших настояли на том, что квест не был выполнен в полной мере, и "люди Х" отделались только оценкой "хорошо" ) |
Автор: | Victor__v [ Пт май 11, 2018 20:55 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Писал когда-то на Сях игру Талеи (Велеи) в консоли. Может, на форте попробовать? Вот только как с АИ быть или как его там. Там правила у каждой стороны свои. |
Автор: | _KROL [ Пт май 11, 2018 21:18 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Может "память"? Не помню как точно называется, но смысл в том, что надо за меньшее количество ходов найти все совпадающие карточки. А ещё мне нравится в Колибри floodit, но она не карточная и алгоритм чуть посложнее. |
Автор: | _KROL [ Пт май 11, 2018 22:33 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
_KROL писал(а): Может "память"? Не помню как точно называется, но смысл в том, что надо за меньшее количество ходов найти все совпадающие карточки. А ещё мне нравится в Колибри floodit, но она не карточная и алгоритм чуть посложнее. Я уже начал делать "Память". Пока разбираюсь с прорисовкой. Нашёл нормальную библиотеку "devel\~pi\lib\console.f". Но я люблю, чтобы аттрибуты цвета были вместе, поэтому добавил у себя Код: : SetAttribue ( attr -> ) N->Color SetBackground SetColor ; Итог на сегодня (пишу на SP-FORTH): Код: \ 11.05.2018 _KROL (coding win-1251) Запустите "reDraw" чтобы увидеть результат.\ Игра "Память" \ Copyright [C] 2018 _KROL krolmail@list.ru \ todo: игровой процесс и управление S" devel\~pi\lib\console.f" INCLUDED HEX \ Временно, для отладки : ??? ( -- ) DEPTH .SN KEY DROP ; \ Цветовая гамма 07 CONSTANT COLOR:STD 1F CONSTANT COLOR:FLD 9F CONSTANT COLOR:SEL \ Устанавливает соответствующие аттрибуты цвета консоли : SetAttribue ( attr -> ) N->Color SetBackground SetColor ; \ "Текстуры" карт CREATE cardTex BL C, BL C, BL C, BL C, CHAR / C, CHAR \ C, CHAR \ C, CHAR / C, CHAR \ C, CHAR / C, CHAR / C, CHAR \ C, CHAR = C, CHAR = C, CHAR = C, CHAR = C, CHAR - C, CHAR - C, CHAR - C, CHAR - C, CHAR + C, CHAR + C, CHAR + C, CHAR + C, CHAR | C, CHAR | C, CHAR | C, CHAR | C, C9 C, BB C, C8 C, BC C, BC C, C8 C, BB C, C9 C, CHAR 4 C, BL C, CHAR t C, CHAR H C, CHAR ? C, CHAR ? C, CHAR ? C, CHAR ? C, \ Количество типов текстур (без нулевой пустой) 10 CONSTANT cardNum \ Размер и само Поле 5 CONSTANT fieldSzX 4 CONSTANT fieldSzY fieldSzX fieldSzY * CONSTANT fieldSz CREATE Field fieldSz ALLOT \ Текущие координаты 0 VALUE curX 0 VALUE curY \ Возвращает адрес текстуры карты : Card ( x y -- addr ) fieldSzX * + Field + ; \ Возвратится на позицию ниже поля : ReturnXY ( -- ) 0 fieldSzY 4 * SetLocate COLOR:STD SetAttribue ; \ Прорисовывает данную карту : drawCard ( n sel -- ) IF COLOR:SEL SetAttribue ELSE DUP 0= IF COLOR:STD SetAttribue ELSE COLOR:FLD SetAttribue THEN THEN GetX SWAP 4 * cardTex + DUP C@ EMIT 1+ DUP C@ EMIT SWAP GetY 1+ SetLocate 1+ DUP C@ EMIT 1+ C@ EMIT ; \ Прорисовывает карты на поле : drawCards ( -- ) fieldSzY 0 DO fieldSzX 0 DO I J 2DUP 4 * 1+ SWAP 4 * 1+ SWAP SetLocate 2DUP Card C@ ROT curY = SWAP curX = AND drawCard LOOP CR LOOP ReturnXY ; \ Прорисовка "поля" без карт : drawField ( -- ) 0 0 SetLocate COLOR:FLD SetAttribue fieldSzY 4 * 0 DO fieldSzX 4 * 0 DO [CHAR] * EMIT LOOP CR LOOP ReturnXY ; \ Перепрорисовка всего : reDraw ( -- ) drawField drawCards ; Console S" Game 'Memory'" SetTitle COLOR:STD SetAttribue Cls P.s. Поправил свою алголо-дурь :) + Подправил, добавил комментарии для ясности. Но почему-то он выводит несколько выделенных и неизвестно откуда взявшихся фишек 8) |
Автор: | _KROL [ Пт май 11, 2018 23:22 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Н, больше сегодня обновлять не буду |
Автор: | Hishnik [ Пт май 11, 2018 23:38 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
А как вообще планируется управлять этим? |
Автор: | Hishnik [ Сб май 12, 2018 02:40 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Эх, я самое вкусное слопаю сам! Вот вам memory. Код: 50 CONSTANT X0 100 CONSTANT Y0 50 CONSTANT WIDTH 100 CONSTANT HEIGHT 20 CONSTANT SPACING 4 CONSTANT ROWS 5 CONSTANT COLUMNS ROWS COLUMNS * CONSTANT CARDS : PLACE->XY // PLACE# -- X, Y // 4 ðÿäà ïî 5 êàðò, èíäåêñ íà÷èíàåòñÿ ñ 0 DUP ROWS MOD WIDTH SPACING + * X0 + OVER ROWS / HEIGHT SPACING + * Y0 + ; : XY->PLACE // X, Y -- PLACE# Y0 - HEIGHT SPACING + / ROWS * SWAP X0 - WIDTH SPACING + / + ; : CARDBOX // X, Y -- 2DUP WIDTH 0xFFFFFF HLINE 2DUP HEIGHT + WIDTH 0xFFFFFF HLINE 2DUP HEIGHT 0xFFFFFF VLINE SWAP WIDTH + SWAP HEIGHT 0xFFFFFF VLINE ; 0 VALUE ST -1 VALUE CARD1 -1 VALUE CARD2 CREATE CARD[] CARDS CELLS ALLOT VECT <FORWARD-REF> : MOUSE-SECONDCARD MOUSE-X @ MOUSE-Y @ XY->PLACE DUP 0 CARDS 1- WITHIN IF TO CARD2 USE <FORWARD-REF> AS <MOUSE_LEFT> CARD[] CARD1 -TH @ CARD[] CARD2 -TH @ = IF -1 CARD[] CARD1 -TH ! -1 CARD[] CARD2 -TH ! THEN 2 TO ST ELSE DROP THEN ; : MOUSE-FIRSTCARD MOUSE-X @ MOUSE-Y @ XY->PLACE DUP 0 CARDS 1- WITHIN IF TO CARD1 USE MOUSE-SECONDCARD TO <MOUSE_LEFT> 1 TO ST ELSE DROP THEN ; USE MOUSE-FIRSTCARD AS <FORWARD-REF> : DRAWCARDS CLS CARDS 0 DO CARD[] I -TH @ -1 > IF I PLACE->XY CARDBOX I CARD1 = I CARD2 = OR IF I PLACE->XY HEIGHT 2 / + SWAP WIDTH 2 / + SWAP TEXTXY CARD[] I -TH @ . THEN THEN LOOP 0 CARDS 0 DO CARD[] I -TH @ -1 > IF 1 + THEN LOOP 0 1 GOTOXY "Cards left: " PRINT DUP . 0 = IF 30 10 GOTOXY " You are win!" PRINT THEN ; : GAME DRAWCARDS ST CASE 0 OF USE MOUSE-FIRSTCARD AS <MOUSE_LEFT> BREAK 1 OF BREAK 2 20 <OF> 1 +TO ST BREAK 21 OF -1 TO CARD1 -1 TO CARD2 0 TO ST BREAK ENDCASE ; CREATE SAMPLE[] 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , SAMPLE[] CARD[] CARDS CELLS CMOVE 50 TIMER_INTERVAL ! USE GAME AS <TIMER> |
Автор: | _KROL [ Сб май 12, 2018 11:13 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Мы конечно "молодцы" (я, в частности)... Не подскажешь, какие ты библиотеки используешь? У тебя наверное там всё настроено Или это не SPF? |
Автор: | Hishnik [ Сб май 12, 2018 14:03 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Разумеется, это не SPF Собственно, пересмотрел еще раз код на предмет отличий и теперь можно попробовать описать пункты, из-за которых в кварке гораздо проще делать некоторые вещи. 1. HLINE VLINE. Это следствие прямого доступа к поверхности экрана в графике. Нет никакой консоли и никакого wm_paint (точнее, wm_paint уже реализован внутри). Рамку можно сделать, просто указав на стеке для каждой линии x, y, длина, цвет. В этом же разделе GOTOXY. 2. С мышью тоже совсем просто. <MOSE_LEFT> это вектор, вызываемый при нажатии левой кнопки мыши. При этом MOUSE-X и MOUSE-Y содержат координаты нажатия. Делать какой-то специальный цикл обработки сообщений не нужно - как и в случае с wm_paint все уже настроено в движке. Ведь практически каждая программа выводит что-то на экран и работает с мышью и клавиатурой? 3. USE MOUSE-FIRSTCARD AS <MOUSE_LEFT> - это просто синтаксические декорации. USE это ['], а AS это TO. Аналогично -TH, которое определено как CELLS + (но в ассемблере). 4. 50 TIMER_INTERVAL ! - интервал таймера в мс. USE GAME AS <TIMER> - собственно запуск игры. Как таковое слово не запускается, просто настраивается вектор, вызываемый по таймеру (в процессе игры можно что-то набирать в консоли и запускать на исполнение). Теперь мне действительно интересно посмотреть на аналогичный код для SPF. Без реализации цикла обработки сообщений тут не обойтись, если только не ограничиваться консолью, в которой придется игровое поле делать символами, и каждый раз его перерисовывать с уползанием предыдущего текста вверх. Куда как современно. Прямо реинкарнация Unity |
Автор: | KPG [ Сб май 12, 2018 14:56 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Hishnik писал(а): Теперь мне действительно интересно посмотреть на аналогичный код для SPF. Без реализации цикла обработки сообщений тут не обойтись, если только не ограничиваться консолью, в которой придется игровое поле делать символами, и каждый раз его перерисовывать с уползанием предыдущего текста вверх. Куда как современно. Прямо реинкарнация Unity Что за предрассудки Были же раньше на местном форуме Game марафон тема и в частности там показано решение на базе библиотек от ~yz Игра крестики нолики Да и без особенных обёрток работать с WinAPI напрямую не так уж сложно. P.S. Да и другие проекты с задействованием графики на SPF4 и других Форт системах особых заморочек не вызывают, если не рассматривать вопрос кроссплатформенности. Прямая работа с экраном, возможна, например в KolibriOS, а учитывая что эмулятор данной ОС появился и под Linux (не только под Win) то программирование приложений для неё достаточно тривиально. При этом готовое приложение можно запускать в рамках автономной Kолибри ОС. Выбор платформы для запуска приложения и каки образом никто же не уcтанавливает. |
Автор: | Hishnik [ Сб май 12, 2018 15:34 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
KPG писал(а): Да и без особенных обёрток работать с WinAPI напрямую не так уж сложно. А почему одинаковые для каждого проекта действия с WinAPI надо обязательно в каждом проекте и повторять? Это ли не предрассудок? KPG писал(а): Прямая работа с экраном, возможна, например в KolibriOS, а учитывая что эмулятор данной ОС появился и под Linux (не только под Win) то программирование приложений для неё достаточно тривиально. При этом готовое приложение можно запускать в рамках автономной Kолибри ОС. Выбор платформы для запуска приложения и каки образом никто же не уcтанавливает. Эээ... для работы с экраном надо ставить KolibriOS??? Она что, заведомо мощнее и функциональнее Windows/Linux? Я не вполне понимаю, зачем надо так старательно обходить напрашивающиеся решения, если они вдруг мнятся "нестандартными". Ну вот кварк использует для экрана вполне кроссплатформенную библиотеку OpenGL. В Kolibri это возможно? Замечу, что драйверы OpenGL для основных ОС пишутся производителями графических чипов, и обеспечить хотя бы сопоставимый с ними уровень довольно-таки сложно. Но самое главное - чего ради??? Чтобы оставаться на позиции "ANS - это стандарт, а SPF - стандарт де-факто"? Ну я не могу запретить возиться с полфабрикатами, и упираться в пародии, подобные упомянутым крестикам-ноликам. Делать ходы цифрами на клавиатуре - это просто ностальгия времен ДОС и отсутствия мышек как класса устройств. Еще бы в консоли ходы вводить словами Форта и получать ответные номера клеток. Результат говорит сам за себя - как говорится, упирайтесь дальше и продолжайте сидеть, ограниченные технологиями 20-летней давности. |
Автор: | mOleg [ Сб май 12, 2018 15:35 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Hishnik писал(а): Без реализации цикла обработки сообщений тут не обойтись, если только не ограничиваться консолью, в которой придется игровое поле делать символами, и каждый раз его перерисовывать с уползанием предыдущего текста вверх кстати нет 8) в консоли винды можно рисовать. Ограничения есть, но графики строятся запросто 8) возни меньше, чем через mssage loop, хотя последнее не сложно реализуется так же. пример для messageloop могу из форка привести. source file: win.fts тут просто отрисовка символа ¤ в положении мышиного указателя. По нажатии пкм цвет символа меняется. |
Автор: | Hishnik [ Сб май 12, 2018 15:41 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
mOleg писал(а): пример для messageloop могу из форка привести. И что, в этот пример надо часто вводить существенные изменения? Такие, чтобы использование переменных в нужных местах не помогало. Раз нет, то предполагаю, что каждая программа, использующая окно, будет содержать такой код. И каждая программа, рисующая на экране, будет содержать обработчик wm_paint. А раз так, какие практические соображения не дают добавить такие вещи непосредственно в движок форт-системы и получать готовое окно с настроенными обработчиками и векторами в нужных местах? Вот эти все CreateWindowExA и Get/Translate/DispatchMessage были еще в книгах 90-х годов. В чем тут достижение? |
Автор: | mOleg [ Сб май 12, 2018 15:47 ] |
Заголовок сообщения: | Re: Игра с фишками/карточками |
Hishnik писал(а): И что, в этот пример надо часто вводить существенные изменения? Нет, не часто, но есть тонкости. Hishnik писал(а): ? Такие, чтобы использование переменных в нужных местах не помогало. Раз нет, то предполагаю, что каждая программа, использующая окно, будет содержать такой код. неправильно построено утверждение. Бывает надо. Можно, конечно, везде поставить вектора, но не обязательно. Думаю, что то, что утверждается выше было бы запросто реализовано мелкософтовцами, но, почему-то они сделали именно так 8) Hishnik писал(а): В чем тут достижение? Не знаю, а нужно достижение? Или научная новизна обязательна? |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |