Hack OS - text RPG

Entertainment for 5 minutes, hours, days
  • С горячей версией SDK получилось скомпилировать исходник с небольшими правками. Процедуры ввода-вывода в CRT пока нестандартные, но игра работает. Новая версия SDK пока задерживается.
    Attachments
    HackersWorld.7z (3.21 KiB)
    Downloaded 244 times
  • Freeman wrote:С горячей версией SDK получилось скомпилировать исходник с небольшими правками. Процедуры ввода-вывода в CRT пока нестандартные, но игра работает. Новая версия SDK пока задерживается.
    Слушай, документацией поделишься? Спасибо за порт!
    If there were no God, he would have to be invented.
    Voltaire

    Code: Select all

    program God
    begin
    
  • Документацией на что? Описаний CRT навалом в Интернете. Мы сделали его максимально приближенным к оригиналу, взяв за образец версию от FreePascal. Все консольные функции Колибри реализованы.

    Как пользоваться SDK — в Readme, стоит только руку протянуть.
  • Нате! :!:
    Решил начать допиливать свою игру.
    пока обучаюсь питону, решил допиливать на паскале 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:
    Attachments
    HW.zip (156.57 KiB)
    Downloaded 216 times
    If there were no God, he would have to be invented.
    Voltaire

    Code: Select all

    program God
    begin
    
  • Вместо while 2 > 1 можно написать просто while 1
    Не знаю есть ли в паскале true, если есть, тоже можно
    Также есть конструкция switch - case вместо множества if.
    Еще есть функции inc и dec для инкремента и декремента.(вместо e := e-1)

    Просто что бросилось в глаза
  • Хорошо, учту замечания
    If there were no God, he would have to be invented.
    Voltaire

    Code: Select all

    program God
    begin
    
  • Who is online

    Users browsing this forum: No registered users and 1 guest