PC-01 Lviv
http://pc01.lviv.ua/forum/

FoxHunt на P_EMUL2021
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=402
Page 2 of 2

Author:  als [ 15 Jun 2021, 15:26 ]
Post subject:  Re: FoxHunt на P_EMUL2021

Attachment:
04.7z [16.16 KiB]
Downloaded 722 times
PROCEDURE Menu;
Ну как-то приблизительно так
Code:
PROCEDURE Menu;
  VAR key: byte;
BEGIN
  REPEAT
    m.CLS;//    m.PUTCHAR(m.ClrScr); (* Clear screen *)
    m.CURSOR(7, 9); m.PUTSTR('F O X H U N T !'+#0);
    m.CURSOR(5, 11); m.PUTSTR('1. ИГРАТЬ'+#0);
    m.CURSOR(5, 12); m.PUTSTR('2. ПОМОЩЬ'+#0);
    m.CURSOR(5, 13); m.PUTSTR('3. НАСТРОЙКИ'+#0);

    m.CURSOR(0, 19); m.PUTSTR('АВТОР ИДЕИ: А. НЕСЧЕТНЫЙ, 1985'+#0);
    m.CURSOR(0, 20); m.PUTSTR('ZX - РЕАЛИЗАЦИЯ BY YPRIT , 2020'+#0);
    m.CURSOR(0, 21); m.PUTSTR('РК86 - ПОРТ BY OLEG N.CHER, 2021'+#0);
    m.CURSOR(0, 22); m.PUTSTR('ПК-01"Львов" - ПОРТ BY ALS, 2021'+#0);
    REPEAT
//      m.RANDOMIZE(seed); INC(seed);
      key := m.GETKEY;
    UNTIL (key >=$31 {'1'}) and (key <=$33 {'3'});
    Beep;
//    m.CURSOR(22, SHORT(ORD(key) - 38));
//    m.PUTSTR(7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX
//      +7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX+7FX);
//    m.WAIT(1000); (* Delay *)
    CASE key OF
      {'2'}$32:Help;
      {'3'}$33:Settings;
    ELSE
    END;
  UNTIL key = $31;
END;/// Menu;


Author:  als [ 15 Jun 2021, 16:46 ]
Post subject:  Re: FoxHunt на P_EMUL2021

НЕ!
Ты знаешь. надо все таки выводить графикой, - поле и текстом - кол-во лис!
соответственно мне её по своему надо переписывать "поглядывая" на твои исходники!

да и если поле 11х11 (странно почему не 10х10 или то ты максимально возможное )
то колво лис должно быть не более 9! чтобы одним числом указывать!
Ну пока пока пауза и сосредоточусь по другому это всё делать!
Буду делать пробы графики... с текстом... кубики... и т.д.

Author:  Zorko [ 17 Jun 2021, 06:50 ]
Post subject:  Re: FoxHunt на P_EMUL2021

Quote:
procedure CURSOR(x,y:Byte);
вместо Byte то надо INT8 ?
или INT8 тоже вроде "минусовый"...
слушай, что-то я запутался...
ты конечно объяснял это где-то, но то уже найти где это, очень сложно!
Объясни пожалуйста еще раз да я пропишу (и буду прописывать) в модуль(модули) раз и навсегда!
SYSTEM.BYTE - тип нестандартный для Оберона-3, беззнаковый и системный, вмещает {0..255}

Соответственно, для его использования надо импортировать модуль SYSTEM. Так сделано, чтобы его не юзали где попало и почём зря. Ну да это долгий разговор.

INT8 тип несистемный, вмещает {-128..127}. Прямое использование и смешивание этих типов в выражениях неявно вычисляется в пределах типа INT16 (со знаком). Это стандартный подход Си, чтобы не терять разрядов при вычислениях (например: (255+1)*3 не приведёт к 0*3, т.к. переполнение не случится. Так сделано по многим причинам. Но это же и проблема для слабых процов.

Я к тому, что смешивать в выражении типы SYSTEM.BYTE и INT8 ты конечно можешь, но результат надо вмещать в тип INT16, а если его надо присвоить типу SYSTEM.BYTE, то возможны потери разрядов (логично). То же самое с INT8, поэтому в Обероне традиционно применяется встроенная операция усечения SHORT, пример: int8 := SHORT(int16 + int16 + byte);

Здесь SHORT даёт понять, что вероятна потеря разрядов. Кстати, в Ofront'е+ есть возможность внедрить в код проверки на выход за пределы разрядности. Притом этот код не обязательно отладочный, он может остаться и в рабочей программе. Для надёжности. Но это конечно не про восьмибитки.

Ты юзай SYSTEM.BYTE там, где допускаются беззнаковые байты, особенно для системных нужд. Я его активно юзаю в качестве параметров для системных функций. Здесь явный SHORT не нужен, поэтому код не смотрится загромождённым. А тип INT8 нужен там, где нужно хранить числа со знаком.

Но все вычисления всё равно происходят в рамках INT16, даже сдвиги. Если бы я даже захотел сделать на Обероне иначе, то нижний уровень (Си) мне бы этого просто не позволил.
Quote:
is_only1 := ~is_only1;
понимать как
is_only1 := not is_only1;
Ну да.
Quote:
Не--е-е-е-е
текст тут надо сплошным выводить! Без всяких понтов типа рамочек!
Да пожалуйста.

Разобрался с кодировками русских букв в XDev? (директива (*$866*) )
Quote:
надо все таки выводить графикой, - поле и текстом - кол-во лис!
Можно выводить графикой кол-во лис. Нарисовать десятку.

Видишь, я игру не создавал, а портировал. Могу перенаправить твой вопрос автору оригинала - Савелию Иванкову, зачем он так сделал.

Author:  Zorko [ 17 Jun 2021, 07:04 ]
Post subject:  Re: FoxHunt на P_EMUL2021

Quote:
Типы
char ? Byte ? string255 ?
в процедурах
procedure PUTCHAR(ch:char);
procedure CURSOR(x,y:Byte);
procedure PUTSTR(s:string255);

С таким проблем в Обероне не будет ? Можна такие типы в входящими в процедуры применять ? и т.д.
Типа strings255 в Обероне нет. Можно определить:
Code:
IMPORT SYSTEM;

TYPE
  string255ptr = POINTER TO ARRAY 256 OF CHAR; (* это указатель! *)
  string255 = ARRAY 256 OF CHAR; (* это строка! *)
Вах, сейчас опять скажешь, что я пытаюсь тебя запутать. Ты, в общем, учитывай, что если в PUTSTR будет параметр-чисто строка, то будет и операция копирования строки, т.е. переброса её из одного куска памяти в другой. А если указатель - то такой операции не будет. Так что юзай тут указатель. У нас есть такой системный тип, я тебе показал как он описывается выше. Он совместим по передаче параметров с любой строкой.

CHAR и BYTE - да, такие же, как в Дельфи.
Code:
  Type
     INT8=Byte; (* Неа. INT8 = -128..127; или Shortint, раз он -128..127 signed 8-bit *)
     INT16=Word; (* Неа. INT16 = -32768..32767; или Smallint, раз он -32768..32767 signed 16-bit *)
Quote:
А тогда к какому типу у обероне приравнивать дельфийский Word ?
В Обероне такого типа нет.
Quote:
...что можна прописать аналогами и как из того что может очень пригодится ?
Ну есть ещё INT32 и INT64, но зачем они. Смысла нет.
Quote:
"repeat .... until" - в Обероне без проблем ? В таком виде как написано в FoxHunt.dpr
в процедуре PrintField; ?
Да.
Quote:
А что это за....
Flag = 1CX; (* 9X, 0BX, 1EX *)
Fox = 1DX; (* 9X, 0EX, 1EX *)
Это равносильно
Flag = $1C;
Fox = $1D;
Да.
Quote:
вот еще дельфя не понимает
field, number: ARRAY Xm, Ym OF INT8;
opened, marked: ARRAY Xm, Ym OF BOOLEAN;

т.е. в дельфе надо указывать как-то так:
field, number: ARRAY[1..Xm,1..Ym]OF INT8;
opened, marked: ARRAY[1..Xm,1..Ym] OF BOOLEAN;
Это верно ?
Нет. Индексы в Обероне всегда от 0. Надо так:
Code:
  field, number: ARRAY[0..Xm-1,0..Ym-1]OF INT8;
  opened, marked: ARRAY[0..Xm-1,0..Ym-1] OF BOOLEAN;
Quote:
Понятное дело всё равно будут разные "приколы" типа
в IF .... THEN .... ELSE ... END;
что если в дельфи несколько команд после "THEN" и/или "ELSE" то надо в "BEGIN... END;",
а Обероне это вроде как по другому.... с одним "END;" без всяких "THEN BEGIN" и "ELSE BEGIN"...
Но согласись что для портации, переброски из Дельфи в оберон, это всё такие мелочи....
что и разговаривать не стоит за них!
Ну наверное.

Возможно, стоит потом написать препроцессор, переводящий одно в другое.

Author:  als [ 17 Jun 2021, 10:54 ]
Post subject:  Re: FoxHunt на P_EMUL2021

Попытки FoxHunt писать с расчётом "переброски" (компиляции в ЛВТ) на XDev прекращены!
Далее, коль уже начал FoxHunt, буду писать её с расчётом "переброски" (компиляции в ЛВТ) на МАДЛ01!

Author:  DenVW [ 19 Mar 2024, 12:31 ]
Post subject:  Re: FoxHunt на P_EMUL2021

Понимаю вашу ситуацию. Позвольте мне предложить вам план действий для реализации вашей идеи.

1. **Понимание FoxHunt для РК86:**
Вам нужно изучить игру FoxHunt для РК86, чтобы понять её основные механизмы, функциональность и структуру программы.

2. **Понимание P_EMUL2021:**
Изучите возможности и ограничения P_EMUL2021, а также его совместимость с программами, написанными для РК86. Проведите тестирование на простых программах, чтобы понять, как он взаимодействует с кодом и какие функции поддерживает.

3. **Адаптация FoxHunt для P_EMUL2021:**
Попробуйте запустить игру FoxHunt в P_EMUL2021. Возможно, вам придется внести некоторые изменения в код, чтобы он корректно работал в среде эмулятора. Это может включать в себя исправление синтаксических ошибок, обновление вызовов API и т. д.

4. **Тестирование и отладка:**
После адаптации кода FoxHunt для P_EMUL2021, тщательно протестируйте его, чтобы убедиться, что игра работает правильно и не возникает непредвиденных ошибок. Проведите отладку, если необходимо.

5. **Перенос в XDev:**
Когда игра успешно работает в P_EMUL2021, вы можете попытаться скомпилировать её в XDev для ПК-01. Проведите тестирование в XDev, чтобы убедиться, что игра работает корректно и стабильно.

6. **Окончательная компиляция:**
После успешного тестирования в XDev вы можете провести окончательную компиляцию игры и получить готовый к запуску ЛВТ-файл.

7. **Обратная связь:**
Поделитесь своими результатами и опытом с сообществом. Это поможет другим пользователям лучше понять, как использовать P_EMUL2021 для разработки программ для ПК-01.

Page 2 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/