Page 1 of 1

Hack OS - text RPG

Posted: Wed May 20, 2020 9:21 pm
by bad_Dr3dd0x
Всем привет!
Решил всё-таки кодить, и вдохновение подсказало безбашенную идею -
запилить игру про хакеров.
Причём реально хакерскую: никакого GUI, только командная строка!
Весь этот код был напечатан за несколько дней на Pascal ABC NET (слыхали про такой?).
У меня два вопроса к комьюнитиЖ
1) Идея годная?
2) Как это переписать на Oberon 07?

Ниже код этой задумки

Code: Select all

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.

Re: Hackers World - text RPG

Posted: Mon Jun 22, 2020 2:26 am
by Freeman
С горячей версией SDK получилось скомпилировать исходник с небольшими правками. Процедуры ввода-вывода в CRT пока нестандартные, но игра работает. Новая версия SDK пока задерживается.

Re: Hackers World - text RPG

Posted: Wed Jun 24, 2020 9:07 pm
by bad_Dr3dd0x
Freeman wrote:С горячей версией SDK получилось скомпилировать исходник с небольшими правками. Процедуры ввода-вывода в CRT пока нестандартные, но игра работает. Новая версия SDK пока задерживается.
Слушай, документацией поделишься? Спасибо за порт!

Re: Hackers World - text RPG

Posted: Sun Jun 28, 2020 8:41 pm
by Freeman
Документацией на что? Описаний CRT навалом в Интернете. Мы сделали его максимально приближенным к оригиналу, взяв за образец версию от FreePascal. Все консольные функции Колибри реализованы.

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

Re: Hackers World - text RPG

Posted: Sat Oct 31, 2020 10:58 pm
by bad_Dr3dd0x
Нате! :!:
Решил начать допиливать свою игру.
пока обучаюсь питону, решил допиливать на паскале abc
а вот и исходный код

Code: Select all

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:

Re: Hackers World - text RPG

Posted: Sun Nov 01, 2020 10:32 am
by maxcodehack
Вместо while 2 > 1 можно написать просто while 1
Не знаю есть ли в паскале true, если есть, тоже можно
Также есть конструкция switch - case вместо множества if.
Еще есть функции inc и dec для инкремента и декремента.(вместо e := e-1)

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

Re: Hackers World - text RPG

Posted: Sun Nov 01, 2020 11:47 am
by bad_Dr3dd0x
Хорошо, учту замечания