Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Nov 26, 2020 10:22 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 7 posts ] 
Author Message
 Post subject: Hack OS - text RPG
PostPosted: Wed May 20, 2020 9:21 pm 
Offline
User avatar

Joined: Wed Mar 18, 2015 8:22 am
Posts: 318
Всем привет!
Решил всё-таки кодить, и вдохновение подсказало безбашенную идею -
запилить игру про хакеров.
Причём реально хакерскую: никакого GUI, только командная строка!
Весь этот код был напечатан за несколько дней на Pascal ABC NET (слыхали про такой?).
У меня два вопроса к комьюнитиЖ
1) Идея годная?
2) Как это переписать на Oberon 07?

Ниже код этой задумки
Code:
program Hack_OS_prealpha02;

uses CRT;

procedure help(var k: string);
begin
  writeln(' ');
  writeln('Это своеобразный порт HackerWars! Вот, держи, это команды, которые помогут тебе соориентироваться:');
  writeln('clearscr - если вы дезориентированы в гуще строк попробуйте эту команду!');
  writeln('profile - общая информация о тебе');
  writeln('web - интернет, где можно найти как удачу, так и беду');
  writeln(' ');
  write('>user: '); 
end;

procedure clearscr(var k: string);
begin
  ClrScr;
  write('>user: ');
end;

procedure web(var k: string);
begin
  writeln('this is NET');
  writeln(' ');
  write('>user: ');
end;

procedure profile(var k: string);
begin
  writeln('Ник (клан)');
  writeln('Уровень: xxxxx');
  writeln('Опыт: xxxx of xxxx');
  Writeln('Деньги: xxxx');
  Writeln('CryptoMoney: xxxx');
  Writeln('Action: xxxx');
  Writeln('Мотивация: xxxx');
  writeln('----------------');
  Writeln('Скилы');
  writeln('');
  writeln('Практика: хххх');
  writeln('Теория: АА+ВВ');
  writeln('Хитрость: xxxxx');
  writeln('Мудрость: xxxxx');
  writeln('Выносливость: 100%');
  writeln('----------------');
  writeln('Занятие');
  writeln('');
  writeln('Дела: работаешь, осталось х минут');
  writeln('Ты собираешься атаковать ххххх');
  writeln('До сна осталось хх часов хх минут');
  writeln('');
  write('>user: ');
end;

var
  k, user: string;

begin
  writeln('electron games presents...');
  writeln('');
  writeln('#####  #####');
  writeln('#      #');
  writeln('#####  #  ##');
  writeln('#      #   #');
  writeln('#####  #####');
  Delay(3000);
  ClrScr;
  write('Hack OS booting...');
  Delay(1000);
  ClrScr;
  writeln('Welcome to HackOS 0.1.0!');
  writeln('Вы в первый раз вошли! Настоятельно рекомендуем вам зарегистрироваться в системе');
  write('>user: ');
  read(user);
  Writeln('Спасибо за регистрацию в системе!');
  writeln('Для получения справки введите help');
  writeln('');
  write('>user: ');
 
  readln(k);
 
  while 2 > 1 do
  begin
    if k = 'help' then
      help(k);   
   
    if k = 'profile' then
      profile(k);
   
    if k = 'web' then
      web(k);
   
    if k = 'clearscr' then
      clearscr(k);   
   
    readln(k);
  end;
 
 
end.


Attachments:
File comment: Вирусов нет, скомпилировано мной лично
HWport console.rar [12.84 KiB]
Downloaded 47 times

_________________
Гордон Фримен - я из прошлого :D


Last edited by Alex2003 on Sun Nov 01, 2020 11:53 am, edited 1 time in total.
Top
   
PostPosted: Mon Jun 22, 2020 2:26 am 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 353
С горячей версией SDK получилось скомпилировать исходник с небольшими правками. Процедуры ввода-вывода в CRT пока нестандартные, но игра работает. Новая версия SDK пока задерживается.


Attachments:
HackersWorld.7z [3.21 KiB]
Downloaded 36 times
Top
   
PostPosted: Wed Jun 24, 2020 9:07 pm 
Offline
User avatar

Joined: Wed Mar 18, 2015 8:22 am
Posts: 318
Freeman wrote:
С горячей версией SDK получилось скомпилировать исходник с небольшими правками. Процедуры ввода-вывода в CRT пока нестандартные, но игра работает. Новая версия SDK пока задерживается.

Слушай, документацией поделишься? Спасибо за порт!

_________________
Гордон Фримен - я из прошлого :D


Top
   
PostPosted: Sun Jun 28, 2020 8:41 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 353
Документацией на что? Описаний CRT навалом в Интернете. Мы сделали его максимально приближенным к оригиналу, взяв за образец версию от FreePascal. Все консольные функции Колибри реализованы.

Как пользоваться SDK — в Readme, стоит только руку протянуть.


Top
   
PostPosted: Sat Oct 31, 2020 10:58 pm 
Offline
User avatar

Joined: Wed Mar 18, 2015 8:22 am
Posts: 318
Нате! :!:
Решил начать допиливать свою игру.
пока обучаюсь питону, решил допиливать на паскале abc
а вот и исходный код
Code:
program Hack_OS_prealpha06;

uses CRT;
uses Utils;

var
  t: integer; //time - время
  m, f, e: integer; // e - параметр для времени выхода
  k, user, usr: string; // k - команды от пользователя, user - считывание логина/пароля с клавиатуры, usr - считывание логина/пароля с файла
  log: text;// log - файл логина/пароля

//Раздел: процедуры

procedure help(var k: string);//Помощь
begin
  writeln(' ');
  writeln('Команды, которые помогут тебе соориентироваться:');
  writeln('clearscr - если вы дезориентированы в гуще строк, наберите эту команду');
  writeln('profile - общая информация о тебе');
  writeln('web - интернет, где можно найти как удачу, так и беду');
  writeln('help - путеводитель');
  writeln('hacktool - с помощью этой штуки можно взломать всё, что угодно - от компьютера офисного работника до сервера NetKings! Внимание! Знание E-Script обязательно!');
  writeln('task - если вы устали сидеть просто так, займитесь делами!');
  writeln('Удачи!');
  writeln(' ');
  write('>user: '); 
end;

procedure clearscr(var k: string);//Стереть экран
begin
  ClrScr;
  write('>user: ');
end;

procedure web(var k: string);//Просмотр интернета
begin
  writeln('');
  writeln('ezine - электронный магазин, где можно заказать от ультратонкого ноутбука до топового компьютера!');
  writeln('stocks - электронные акции некоторых компаний. Если вам нужно больше денег или же уверенность, что они останутся целыми, этот вариант для вас.');
  writeln('re - рынок - место, где за небольшие деньги можно купить уценёнку, а за запчасти, найденые на работе или прогулке, редкое железо, которого больше нигде не достать.');
  writeln('azino777 - азартное казино, где можно как выиграть, так и проиграть!');
  writeln('arena - простенькие соревнования между хакерами. Вход только для людей, укротивших командную строку!');
  writeln('torbwr - Даркнет - поистине уникальный ресурс! Будьте осторожны!');
  writeln('');
  write('>user: ');
end;

procedure profile(var k: string);//Просмотр профиля
begin
  writeln('');
  writeln('Ник ');
  writeln('Уровень: xxxxx');
  writeln('Опыт: xxxx of xxxx');
  Writeln('Деньги: xxxx');
  Writeln('E-Coin: xxxx');
  Writeln('Action: xxxx');
  Writeln('Мотивация: xxxx');
  writeln('----------------');
  Writeln('Скилы');
  writeln('');
  writeln('Практика: хххх');
  writeln('Теория: АА+ВВ');
  writeln('Хитрость: xxxxx');
  writeln('Мудрость: xxxxx');
  writeln('Выносливость: 100%');
  writeln('----------------');
  writeln('Занятие');
  writeln('');
  writeln('Дела: работаешь, осталось х минут');
  writeln('Ты собираешься атаковать ххххх');
  writeln('До сна осталось хх часов хх минут');
  writeln('');
  write('>user: ');
end;///

procedure hack(var k: string);//Утилита для взлома
begin
  writeln('');
  writeln('>hos: loading iaicracker.exf');
  writeln('>hos: load complete');
  Delay(500);
  writeln('>crck: target search...');
  Delay(f);
  writeln('');
  writeln('Aegis servers (3)');
  writeln('Phantoms servers (4)');
  writeln('NHS servers (5)');
  writeln('Встать на защиту своего сервера (6)');
  writeln('Интернет (6)');
  writeln('');
  writeln('Введите цифру, соответствующую пункту, который вы выбрали');
  write('>user: ');
  readln(k);
end;

procedure task(var k: string);//Просмотр раздела "Работа"
begin
  writeln('');
  writeln('Дела, дела, дела... Чем собираетесь заниматься сегодня?');
  writeln('sleep - даже самый заядлый хакер и геймер должен спать, иначе будет плохо - красными глазами тут не обойтись.');
  writeln('work - работа бывает разной - от приключений эникейщика до протухания офисного планктона. Во всяком случае, и там, и там неплохо платят.');
  writeln('run - каждый человек должен так или иначе поддерживать себя в тонусе. Можно немного подкачать мышцы, сходить за хлебом, и, если повезёт, кого-нибудь взломать.');
  writeln('eat - давно ли вы кушали? Ну не врите, я уже вижу, как у вас текут слюнки! Прошу к столу!');
  writeln('');
  writeln('Итак, чем же мы займёмся сегодня?');
  writeln('Для выхода из меню напишите exit.');
  write('>user: ');
  writeln('');
  readln(k);
 
  if k = 'work' then
  begin
    t := 300;
    writeln('Уже работаешь!');
    while t > 0 do
    begin
      ClrScr;
      writeln('Уже работаешь!');
      t := t - 1;
      sleep(1000);
      m := t div 60;
      writeln('осталось ', m, 'минут (ы)');
      Delay(1000);
    end;
    if t = 0 then
    begin
     
      writeln('Вы закончили работу');
      t := 300
    end;
  end
  else
  begin
    exit
  end;
end;

procedure ex(var k: string);// Выход из игры
begin
  write('Shutdown of Hack OS in progress ');
  e := 5;
  while e > 0 do
  begin
    write('.');
    Delay(750);
    e := e - 1;
  end;
  Delay(500);
  halt;
end;

procedure screcho(var k: string);// вывод пользовательского текста, пока не доведена до ума
begin
  writeln('');
  writeln(k);
  write('>user: ');
end;

begin
  //эмблема
 
  Randomize;
  f := Random(10000);
  textColor(Lightgreen);
  writeln('electron games, 2020');
  writeln('BIOS Inspire 2.0');
  Delay(500);
  writeln('---------------------------------------------------------------------');
  writeln('Create virtual PC environment...');
  Delay(750);
  writeln('CPU prepared for work.');
  Delay(750);
  writeln('RAM prepared for work.');
  Delay(750);
  writeln('GPU prepared for work.');
  Delay(750);
  writeln('Storage prepared for work.');
  Delay(750);
  writeln('All devices preparing, startup code o99.');
  Delay(1500);
  ClrScr;
 
  writeln('Hack OS booting...');
  loop 50 do
  begin
    write('|');
    Delay(100);
  end;
  Delay(1000);
  ClrScr; 
  writeln('Welcome to HackOS 0.1.4!');
  writeln('');
 
  //проверка входа
  if not (FileExists('c:/hos/log.txt')) then //если файла с логином паролём нет
  begin
    writeln('Вы в первый раз вошли в систему! Введите логин и пароль, разделённые пробелом.');
    writeln('Внимание! Запишите свой логин/пароль и спрячьте их в безопасное место!');
    write('>user: ');
    CreateDir('C:/hos');
    assign(log, 'c:/hos/log.txt'); //Путь к файлу
    read(user);
    rewrite(log);
    writeln(log, user);
    writeln('Спасибо за регистрацию в системе!');
    writeln('Для получения справки введите help');
    close(log);
    writeln('');
  end
 
  else //Если пользователь уже зарегистрировался
  begin;
    writeln('Введите логин и пароль, разделённые пробелом.');
    write('>user: ');
    read(usr);
    assign(log, 'c:/hos/log.txt'); //Путь к файлу
    reset(log); //Открыть файл для чтения
    read(log, user);
   
    if user = usr then // если введены правильные логин/пароль
    begin
      writeln('Вы успешно вошли в систему!');
      close(log);
      writeln('');
    end
   
    else // если введён неправильный логин/пароль
    begin
      writeln('Значения не совпадают! Перезапустите Hack OS и введите логин и пароль заново.');
      Delay(1000);
      close(log);
      write('Automatic shutdown of Hack OS in progress ');
      e := 5;
      while e > 0 do
      begin
        write('.');
        Delay(750);
        e := e - 1;
      end;
      Delay(500);
      exit// завершение програмы
    end
  end; 
 
  // считывание команд с клавиатуры
  ClrScr;
  while 2 > 1 do
  begin
    if k = 'help' then
      help(k)
   
    else if k = 'profile' then
      profile(k)
   
    else if k = 'web' then
      web(k)
   
    else if k = 'exit' then
      ex(k)
   
    else if k = 'clearscr' then
      clearscr(k)   
   
    else if k = 'hacktool' then
      hack(k)   
   
    else if k = 'task' then     
      task(k)   
   
    else     
      write('>user: ');
    readln(k);
  end;
 
 
end.

Есть надоедливый баг с двумя >user: в начале
пытаюсь его пофиксить
но если я что-то меняю в коде, так или иначе связанное с ним, всё падает.
Обычные будни программиста :mrgreen:


Attachments:
HW.zip [156.57 KiB]
Downloaded 8 times

_________________
Гордон Фримен - я из прошлого :D
Top
   
PostPosted: Sun Nov 01, 2020 10:32 am 
Online

Joined: Mon Sep 07, 2020 7:09 pm
Posts: 248
Вместо while 2 > 1 можно написать просто while 1
Не знаю есть ли в паскале true, если есть, тоже можно
Также есть конструкция switch - case вместо множества if.
Еще есть функции inc и dec для инкремента и декремента.(вместо e := e-1)

Просто что бросилось в глаза

_________________
How to use different compilers in KolibriOS
Old doc
http://diamond.kolibrios.org/hll/hll.htm
New doc
https://maxcodehack.github.io/hll-kos/


Top
   
PostPosted: Sun Nov 01, 2020 11:47 am 
Offline
User avatar

Joined: Wed Mar 18, 2015 8:22 am
Posts: 318
Хорошо, учту замечания

_________________
Гордон Фримен - я из прошлого :D


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 7 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


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:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited