PC-01 Lviv

It is currently 29 Mar 2024, 18:26

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 21 posts ]  Go to page Previous 1 2
Author Message
PostPosted: 15 Jun 2021, 15:26 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Attachment:
04.7z [16.16 KiB]
Downloaded 716 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;



Top
   
PostPosted: 15 Jun 2021, 16:46 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
НЕ!
Ты знаешь. надо все таки выводить графикой, - поле и текстом - кол-во лис!
соответственно мне её по своему надо переписывать "поглядывая" на твои исходники!

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


Top
   
PostPosted: 17 Jun 2021, 06:50 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
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:
надо все таки выводить графикой, - поле и текстом - кол-во лис!
Можно выводить графикой кол-во лис. Нарисовать десятку.

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


Top
   
PostPosted: 17 Jun 2021, 07:04 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
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"...
Но согласись что для портации, переброски из Дельфи в оберон, это всё такие мелочи....
что и разговаривать не стоит за них!
Ну наверное.

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


Top
   
PostPosted: 17 Jun 2021, 10:54 
Offline

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


Top
   
PostPosted: 19 Mar 2024, 12:31 
Offline
User avatar

Joined: 01 Feb 2021, 15:49
Posts: 5
Понимаю вашу ситуацию. Позвольте мне предложить вам план действий для реализации вашей идеи.

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.

_________________
https://radiowave.com.ua/ 8)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 21 posts ]  Go to page Previous 1 2

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited