/****************************************************************** * 21 days: a game for programmers * Copyright (C) 2014 Maxim Grishin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. *******************************************************************/ #ifndef H_STRINGS #define H_STRINGS /************************************************************************* * Messages from friends *************************************************************************/ const unsigned int levelYesAnswerNumber = 10; const char* levelYesAnswer[levelYesAnswerNumber] = { "Выезжаю!", "Да, сейчас удалённо сделаю.", "Называй адрес.", "Уже еду.", "Кофе и печеньки будут? Уже еду!", "Конечно!", "Для тебя - в любое время", "Я как раз свободен.", "За минут десять сделаю.", "Без проблем." }; const unsigned int levelNoAnswerNumber = 10; const char* levelNoAnswer[levelNoAnswerNumber] = { "Прости, сегодня не смогу.", "Не, я занят.", "Я на работе безвылазно, позвони-ка через месяц.", "Как-нибудь в другой раз.", "Я по средам не эникействую.", "Я такого не умею.", "Вы ошиблись номером :D", "Ты кто вообще?", "Не могу, извини.", "Нет." }; const unsigned int level1TasksNumber = 6; const char* level1Task [level1TasksNumber] = { "Привет! Можешь посмотреть мой компьютер? Кажется, у меня не работает %s.", "Нигде не могу тебя найти. У меня тут %s барахлит, переустановишь винду?", "Катастрофа! Работа встала! Не работает %s. Поможешь?", "Слушай, у моего друга не работает %s, не знаю, что делать. Ты свободен?", "Странно, не запускается %s, всё перепробовал - ничего не помогает.", "Дароф! Я тут кофе на комп пролил, теперь %s не работает. С меня кофе и печеньки." }; const unsigned int level1TaskWordNumber = 11; const char* level1TaskWords[level1TaskWordNumber] = { "аудиокарта", "блок питания", "браузер", "видеокарта", "жесткий диск", "клавиатура", "модем", "монитор", "мышь", "один наушник", "проектор" }; const unsigned short programmingTaskNumber = 5; const char* programmingTasks[programmingTaskNumber] = { "Привет! Мне тут лабораторную надо написать на Pascal, не знаю, к кому обратиться. Умеешь?", "В универе запарили с заданиями на Basic, сделаешь?", "Нужна твоя помощь, завтра сдавать лабораторную на Turbo Pascal, а я впервые слышу, что это. Выручай!", "Дали на работе задание... взял, не посмотрел, а там надо писать на QBASIC, а я не умею. Посоветуешь кого?", "Слышал, ты пишешь на Pascal? У нас тут пара проектов недописанных, я ответственного человека ищу. Работы - на пару часов." }; const unsigned short webProgrammingTaskNumber = 4; const char* webProgrammingTasks[webProgrammingTaskNumber] = { "Привет, ты сайтами-визитками занимаешься? Дело есть.", "Слушай, нашей компании нужен сайт по дешёвке. Просто страница с информацией о компании. Это же просто для тебя, да?", "В нашей соц. сети пару фишек доделать нужно, мне тебя порекомендовали. Напиши, как освободишься.", "Хай, мы тут большой сайт-портал пишем, нам срочно нужен кодер на пару дней. Гоу?", }; const unsigned short systemProgrammingTaskNumber = 3; const char* systemProgrammingTask[systemProgrammingTaskNumber] = { "Слышал об Arduino? Мы тут на асме пишем, пара заданий есть.", "Мне сказали, ты на асме пишешь? Давно фрилансера ищем, работа с микроконтроллерами, думаю, тебе понравится.", "Тут игру для конкурса под KolibriOS надо написать, а я асм не знаю. Напишешь?" }; const unsigned short adminTasksNumber = 4; const char* adminTasks[adminTasksNumber] = { "Сервера новые завезли, настраивать некому. Оплатим вдвойне! Перезвони.", "А ты Apache + nginx сможешь поставить и настроить? Не спрашивай, зачем :).", "Не поверишь, тут машину привезли на Windows Server 2003, что делать с ней, не знаем. Выручай!", "Простите, как мне пропатчить KDE2 под FreeBSD?" }; const unsigned short mobileTaskNumber = 3; const char* mobileTasks[mobileTaskNumber] = { "Мы тут разработку на Swift продвигаем, можешь пару демок написать?", "Хотим написать мобильное приложение на Java, говорят, сейчас это круто. Ты умеешь?", "Тут никто на C++ не хочет нативные приложения под Android делать, ты возьмешься?" }; /************************************************************************* * Courses *************************************************************************/ const unsigned int coursesNumber = 8; const char* courses[coursesNumber] = { "Эникейство", "Азы программирования", "Продвинутое программирование:", "Разработка мобильных приложений", "Основы дизайна", "Создание сайтов", "Системное программирование", "Администрирование серверов", }; bool coursesUnlocked[coursesNumber] = {1, 0, 0, 0, 0, 0, 0, 0}; const unsigned short advancedProgrammingCourses = 5; char* advProgCourses[advancedProgrammingCourses] = { "C++", "Java", "Assembler", "C#", "Delphi" }; bool coursesFinished[coursesNumber] = {1, 0, 0, 0, 0, 0, 0, 0}; bool advProgCoursesFinished[advancedProgrammingCourses] = {0, 0, 0, 0, 0}; unsigned int learningTime[coursesNumber] = {0, 10, 80, 30, 45, 35, 45, 50}; // in days unsigned int advProgLearningTime[advancedProgrammingCourses] = { 10, 10, 15, 10, 10}; // in days int learningCost[coursesNumber] = {0, 100, 125, 100, 125, 120, 130, 120}; int advProgLearningCost[advancedProgrammingCourses] = {125, 120, 150, 123, 100}; unsigned short finishedCoursesCount = 1; /************************************************************************* * Probability of getting a message from friend related to course 0, * 1, 2, etc. (courses). Prob. of getting a simple work is higher * than getting a hard one. *************************************************************************/ double probability[coursesNumber] = { 0.7, 0.5, 0.25, 0.6, 0.25, 0.4, 0.3, 0.4}; int taskReward[coursesNumber] = {2, 5, 10, 13, 19, 25, 30, 35}; int taskCount[coursesNumber] = {level1TasksNumber, programmingTaskNumber, programmingTaskNumber, mobileTaskNumber, mobileTaskNumber, webProgrammingTaskNumber, systemProgrammingTaskNumber, adminTasksNumber}; /************************************************************************* * News *************************************************************************/ const unsigned short newsCount = 4; const char* news[newsCount] = { "Программирование начинает захватывать мир! Скорее начните учиться программированию!\n", "По информации с hh.ru вскоре повысится спрос на Java - программистов\n", "Невероятно! Инди-игра одного французского разработчика Frappy Perd побила все рекорды и принесла ему $50 000 в первый же день! Наверное, все сейчас кинутся писать свои мобильные игры.\n", "Однозначно, сейчас расцвет инди-игр. Очередная успешная игра, на этот раз от Unnamed Studio, на первом месте в топе игр. У игры уже миллионы фанатов и поклонников, люди просто сходят с ума!\n" }; bool newsShowed[newsCount] = {0, 0, 0, 0}; /************************************************************************* * Special letters *************************************************************************/ const unsigned short specialLetterCount = 30; const char* specialLetters[specialLetterCount] = { "Привет. У нас тут мегакрутой проект на C++ и Java, никто не берется, сделаешь?", "Что это такое? Да лучше бы совсем не брался. Это же говнокод! Иди-ка поучи C++, а заодно и Java.", "Я слышал, ты программированием на Assembler занимаешься? Тут суперсложный микроконтроллер есть один, никто не берется. Возьмешься?", "И это ты называешь выполненной работой? Да мой шестилетний сын на Assembler лучше пишет, чем ты! Купи книгу по Asm, не позорься.", "Привет! К нам тут заказ поступил, нужно ядро базы данных на C# написать. Мы сами не можем - очень сложный проект. Умеешь?", "Эээ, да ты совсем, оказывается, программировать не умеешь. Пройди пару курсов что-ли, не позорься.", "Письмо от ООО 'Botsmann'\n Здравствуйте! Нам посоветовали Вас, как специалиста в области программирования. Мы занимаемся разработкой мобильных приложений, и сейчас делим рынок с ООО 'Астра'. Для захвата рынка нам нужны интересные люди и квалифицированные специалисты. Мы предлагаем интересную работу и оклад $800 в месяц. Подумайте, мы свяжемся с Вами позже.", "Письмо от ООО 'Астра'\n Добрый день! Мы - команда разработчиков мобильных приложений, у нас есть гениальные идеи и мы хотим изменить мир! Мы ищем талантливых разработчиков и предлагаем $1000 в месяц. Нам нужен твой срочный ответ, ты с нами?", "Письмо от ООО 'Botsmann'\n К сожалению, вы не оправдали наших надежд. Это наши HR-специалисты отправили вам письмо от имени наших конкурентов. Нам не нужны люди, готовые уйти в другую компанию из-за $200.", "Письмо от ООО 'Botsmann'\n Здравствуйте! Извините, это наши HR-специалисты отправили Вам письмо от имени наших конкурентов в качестве проверки. Мы решили, что вы нам подходите! Если Вы еще не писали под мобильные платформы, мы Вас научим.", "Хэй, привет! Мы - молодая команда под названием Unnamed Studio и мы очень любим играть, а также создавать игры. Мы видели твои работы, они реально крутые! В отличие от крупных компаний у нас меньше контроля и больше возможностей для самореализации. Мы всё рассчитали, и уже скинулись. С тебя пока денег брать не будем, оставим на форс-мажор. Но у нас же всё будет гладко, верно? Больше трат не предвидится. Сообщи, если согласен. ", /*11*/ "Письмо от ООО 'Botsmann'\n Слушай, я терпел всё это время, но всему есть предел. Ты отвлекаешься от основной работы на фриланс и подработку. Ты определись, что тебе больше по душе и бросай этот фриланс. Работу надо делать качественно. \nСкучно на работе? Я подниму оклад до $1200 и пошлю тебя на дополнительные курсы. Ну, продолжаем работать?", "Письмо от ООО 'Botsmann'\n Я тебя предупреждал: концентрируйся на работе! Думал, я не узнаю о твоей подработке?! Ты уволен!", "Мы рады, что ты присоединился к нам, теперь ты член команды Unnamed Studio! Сейчас работа пойдёт раза в три быстрее! Раз ты с нами, надо бы научиться рисовать. ", "Твои работы просто впечатляют! Это не просто мои слова, все ребята в Unnamed Studio так думают! ...знаешь, у нас тут проблема. Наш второй программист пропил часть денег из фонда, до релиза никак не хватит теперь :(. Мы собираем по $%d. Обещаю, это в последний раз! За идею!", "Письмо от Unnamed Studio:\n Катастрофа! Через 40 дней релиз, а у нас сайта до сих пор нет! Мы изначально как-то и не думали об этом, только сейчас узнали, что это - важная часть рекламы. ", "Письмо от Unnamed Studio:\n Что? Переоценил себя? Ты говорил, успеешь сделать сайт вовремя! Из-за тебя всё пошло к чертям, мы могли бы выручить в 1000 раз больше! Вот твои $1000 из общего дохода и убирайся!", "Письмо от Unnamed Studio:\n Чувак, ты смотрел новости? ТЫ ЭТО ВИДЕЛ?! Да нашу игру расхватывают, как горячие пирожки! Это успех! Это слава! Я тут до потолка прыгаю! Перевожу тебе $200 000 - твоя доля. Теперь проект завершён, мы все в отпуска! И тебе надо отдохнуть. Лови кайф.", "Скучно? А ты что думал! На работе сидят и зарабатывают деньги, это тебе не экшен. Если нужны деньги - продолжай работать, но дальше уже ничего интересного не будет. Миллион ты так, конечно, не заработаешь, но подкопить денег на пару прыжков во времени можно.", "Скучно, да? Конечно, от самых интересных предложений о работе ты отказался, а новых уже не будет. Что, нереалистично? В жизни не всем каждый день предлагают работу. Да, будешь перебиваться звонками знакомых и переустанавливать им винду. И курсов новых тоже не будет, зачем они тебе, если всё равно ты только ЭНИКЕЙЩИК. Эх, было бы круто, если бы можно было всё отмотать назад и однажды сделать другой выбор!", "Письмо от ООО 'Botsmann'\n Здравствуй. Совет директоров решил тратить меньше средств на дополнительное обучение новых работников. Также сокращаем расходы на проверку знаний опытных сотрудников. Решили объединить это всё в одно. Ты знаешь, мы сейчас буквально на всём экономим. В общем, решено, что 'старшее' поколение будет передавать опыт 'младшему'. Ты уже успел зарекомендовать себя как опытный сотрудник, так что тебе поручается напутствовать Junior'ов и отвечать на все их глупые вопросы. Не бесплатно, конечно. За каждые 5 правильных ответов мы начисляем премию. А если наберешь 5 неправильных, то считаем, что проверку знаний не прошёл, и тогда место освобождаешь. Я в тебе не сомневаюсь, просто должен был тебе рассказать о новом решении. Я-то знаю, что ты справишься!", "Письмо от ООО 'Botsmann'\n Как и обещал, твоя премия за правильные ответы: $400", "Письмо от ООО 'Botsmann'\n Ты не прошёл проверку знаний. Ну что же ты так, я в тебе не сомневался! А ты, оказывается, просто место на работе просиживаешь. Хоть ты мне и понравился, но уволить я тебя обязан. Без обид.", "Письмо от ООО 'Botsmann'\n Как я и думал, эту странную процедуру проверки знаний отменили: Junior'ы совсем обнаглели, сами ничему учиться не хотят, только спрашивают у старших. Платить опытным сотрудникам за советы оказалось невыгодно. В общем, теперь можешь спокойно работать, никто тебя отвлекать не будет.", "Слушай, да это же просто идеальный код! Не поверил бы, что ты за %d дней научился этому! У тебя сколько часов в сутках? Держи свои $%d, заслужил.", "Письмо от Andrew Johnson \n Хэй, чувак, я из соседнего отдела. Мне босс тоже устраивал проверку и ты правильно делаешь, что не фрилансишь на стороне. Но, поверь, твой телефон на прослушке, а там всё ещё есть непрочитанные письма. Было бы лучше избавиться от них, а то босс может подумать, что ты всё еще поддерживаешь контакт с другими заказчиками.", /*un2 var1*/ "Ты понимаешь, нас мало, все загружены... Денег нет, поэтому помочь можем только советом: было бы неплохо пройти какой-нибудь курс об основах дизайна.", /*un2 var2*/ "Что? Уже умеешь? Как же нам с тобой повезло! Окей, тогда ты знаешь, что делать. Мы не будем ограничивать твою фантазию.", /*un4 var1*/ "Мы решили скинуться по $%d на веб-мастера, ведь все наши прогеры заняты.", /*un4 var2*/ "По тебе сразу видно, что ты толковый специалист. Думаю, создание сайтов для тебя - сущий пустяк." }; bool unnamedStudioLettersSent[3] = {0,0,0,}; bool knowledgeLetterSent = false; short nextKnowledgeLetterIndex = 0; short klowledgeCorrectAnswers = 0; short klowledgeUncorrectAnswers = 0; const unsigned short knowledgeQuestionsCount = 10*3; const char* knowledgeCheck[knowledgeQuestionsCount] = { "Я тут вообще новичок, какой язык программирования лучше, C++ или Delphi?", "Это зависит от поставленной задачи", "Конечно C++, на Delphi уже никто не пишет", "Мне тут один из программистов сказал, что шутка про UDP не дошла...что он имел в виду?", "UDP - это протокол, не гарантирующий доставку пакетов.", "UDP - надёжный протокол, гарантирующий доставку данных, в этом и шутка.", "Мне задание дали, сайт на C++ написать, это вообще возможно или они просто издеваются над новичком?", "В принципе, не важно, на какой языке генерировать HTML-страницы.", "Нет, это прикол. Сайты пишут на PHP, Python, ASP.Net и других", "Мы тут поспорили, я говорю, что с использованием JavaScipt сайты пишутся, а не на Java. Java - для мобильных приложений. Верно?", "Ты проиграл.", "Ну да, почти все приложения для твоего Андроида на Java написаны ведь.", "Коллега на перекуре сказал, что он до работы в нашей компании зарабатывал на opensource-проектах. Это возможно?","Да, он мог заниматься платной поддержкой.", "Ха, повёлся!. Opensource-проекты же бесплатные.", "Разгребаю код одного проекта под iOS. Никак не пойму, в чем разница между #include и #import?", "#import гарантирует, что файл будет включён один раз, в отличие от #include", "Ты путаешь, #include используется в коде на C, а 'import' - в ассемблерных вставках.", "Собираюсь писать проект на Ruby on Rails. Слышал, этот язык интерпретируемый и высокоуровневый, это так?","Хм... Да это и не язык вовсе, а фреймворк.", "Нет, это компилируемый язык, а не интерпретируемый.", "Я теперь буду писать под Linux, можно его поставить на NTFS-раздел? Эмуляцию live cd не предлагать.", "Нет, ядро с него загрузиться не сможет.", "В принципе, да, но нужно патчить ядро, ставить дополнительные утилиты... оно тебе надо?", "Вчера позвонили из компании конкурентов, сказали, что пишут на обрезанном PHP без ООП и eval(). Предлагали работу, я отказал. Правильно сделал? ", "Поздравляю, это была компания 'Вконтакте'.", "Правильно, на этом же невозможно ничего стоящего написать", "Захожу на удалённый сервер, нужно узнать, сколько строк в файле log.txt. А там, как назло, Linux и только консоль...Что вводить?", "wc -l log.txt", "ls -l log.txt" }; /************************************************************************* * Tips for users when waiting for an input *************************************************************************/ const char* ae_advanced_courses = "Что вы вводите? Для того, чтобы выбрать один из 'продвинутых' курсов, нажмите клавиши 'a'-'e'"; const char* bottomLineCourses = "Курсы[C] "; const char* bottomLineMsgAchieves = "Сообщения[M] Достижения[A] Прыжок в прошлое[U] "; const char* bottomLineSpeedAndExit = "Скорость[S] Выйти[Esc]\n"; const char* changeSpeedButtons = "Изменить[+][-] Принять[Y]"; const char* enter = "Нажмите [Enter] для продолжения..."; const char* escToBreakReading = ", прервать чтение [Esc]"; const char* number_or_enter = "Введите номер курса или [Enter] чтобы выйти"; const char* one_or_two = "Варианты ответов: [1] или [2]"; const char* one_two_or_three = "Варианты ответов: [1], [2] или [3]"; const char* pressF = "Нажмите [F] для продолжения..."; const char* pressP = "Нажмите [P] для продолжения..."; const char* yesNoDialog = "Да[Y] Нет[N]"; /************************************************************************* * Windows' title *************************************************************************/ const char* achievementsTitle = "Достижения"; const char* breaking_news = "Мировые новости"; const char* changeSpeedTitle = "Скорость игры"; const char* coursesTitle = "Курсы"; const char* courseAlreadyPassed = "Курс уже пройден!"; const char* finalCard = "КОНЕЦ"; const char* gameOverTitle = "Вы проиграли!"; const char* introTitle = "Вступление"; const char* new_letter = "Новое письмо"; const char* newAchievement = "Новое достижение!"; const char* notEnoughMoney = "У вас недостаточно средств :("; const char* playerStatsTitle = "Статистика игрока\n\n\n"; const char* unread_message = "Непрочитанное сообщение"; /************************************************************************* * Windows' text *************************************************************************/ const char* coursesFinishedText = "\nКурсов пройдено: %d/%d\n \n"; const char* finalCardsUnlockedText = "\nКонцовок открыто: %d/%d\n"; const char* gameName = "21 days"; const char* gameOverText = "\nЭто был единственный способ проиграть, и вы нашли его!\nНа еду денег нет, ваша репутация так низка, что никто не звонит и не предлагает работу.\n\nКонец!\n"; const char* helpDesker = "эникейщик"; const char* mainMenuText = "\n\n1.Новая игра\n\n2.Выход\n"; const char* noCurrentCurses = "\tВы ничему не обучаетесь...\n"; const char* playerStatsEnd = "\n\nНе забудьте поделиться скриншотом статистики с друзьями!\n\nНажмите [Esc] для выхода.\n"; const char* playerStatus = "Ваш статус: "; const char* pseudoEqual = "═"; const char* selectCourseText = "Выберите одну из следующих категорий, которой вы бы хотели научиться:\n"; const char* startupper = "стартапер"; const char* takeCourseCost = ", пройти курс: $%d\n"; const char* takingThisCourse = "\tВы сейчас обучаетесь этому курсу..\n"; const char* worker = "трудоустроенный"; const char* days21 = "\n .oooo. .o .o8 \n" ".dP\"\"Y88b o888 \"888 \n" " ]8P' 888 .oooo888 .oooo. oooo ooo .oooo.o \n" " .d8P' 888 d88' `888 `P )88b `88. .8' d88( \"8 \n" " .dP' 888 888 888 .oP\"888 `88..8' `\"Y88b. \n" ".oP .o 888 888 888 d8( 888 `888' o. )88b \n" "8888888888 o888o `Y8bod88P\" `Y888\"\"8o .8' 8\"\"888P' \n" " .o..P' \n" " `Y8P' \n"; const char* youWin = "\n.___________. __ __ _______ _______ .__ __. _______ \n" "| || | | | | ____| | ____|| \\ | | | \\ \n" "`---| |----`| |__| | | |__ | |__ | \\| | | .--. |\n" " | | | __ | | __| | __| | . ` | | | | |\n" " | | | | | | | |____ | |____ | |\\ | | '--' |\n" " |__| |__| |__| |_______| |_______||__| \\__| |_______/ \n\n\n"; const char* gameOverLogo = " __ _ __ _ _ __ ___ ___ _____ _____ _ __ \n" " / _` |/ _` | '_ ` _ \\ / _ \\ / _ \\ \\ / / _ \\ '__|\n" "| (_| | (_| | | | | | | __/ | (_) \\ V / __/ | \n" " \\__, |\\__,_|_| |_| |_|\\___| \\___/ \\_/ \\___|_| \n" " |___/ \n\n"; const char* playerStats[9] = { "Игра была бы пройдена без прыжков во времени за %d ", "Потрачено настоящих, не игровых минут на прохождение игры: %d\n", "Прочитано сообщений: %d\n", "Помог знакомым разобраться с компьютером: %d ", "Не помог: %d ", "Денег заработано: $%d\n", "Денег потрачено: $%d\n", "Из них на благотворительность: $%d\n", "Совершено прыжков во времени: %d\n"}; /*const char* gameIntro = "\n Урраа! Диплом успешно получен и уже как несколько недель пылится на полке. Голова до сих пор раскалывается от огромной радости... не стоило всё же так бурно отмечать окончание универа. К счастью, этот 'выпускной вечер', длящийся уже недели две, закончился.\n Что там у нас в холодильнике? Пусто. Хм. Ладно, позвоню Валере.\n\n\ <трясущимися пальцами набирает номер>\n-Хэй, Валер, у тебя есть что?\n-Да ладно, неужели ты проспался!\n-Не надо ля-ля, я самым трезвым был.\n-Ну да, конечно, рассказывай тут! Фотографии позже скину, как с работы приду.\n-Откуда?\n-Да, меня дядя быстренько устроил. Программистом.\n-Круто, а он может меня тоже устроить?\n-Ну... вряд ли, тут все места заняты.\n-Но ведь ты как-то устроился!\n-Прости, ничем помочь не могу. Попробуй устроиться куда-нибудь.\n-Да я же ничего не умею!\n-Ахаха, смешно слышать это от выпускника ВУЗа... Хм, хотя я и сам ничего не умею. Придётся самому пробиваться. Я видел в магазине книги с заголовками 'C++ за 21 день', 'Java за две недели' и т.п., попробуй почитать что-нибудь, быстренько выучись и отправляй резюме куда-нибудь. Только не в нашу компанию.\n-Почему?.\n-Ну я-то знаю, какой ты раздолбай. Зачем ты тут, если ты на самом деле ничего не умеешь?\n-Что?! Да я смотрю, ты такой умный сразу стал, как работу нашёл. Не было бы дяди, ты сейчас бы дворником был!\n-Да пошёл ты, не тебе решать!\n\n\ Чёрт! Деньги кончаются, а кушать хочется. Хорошо, что хоть винду умею переустанавливать - знакомых много, как-нибудь продержусь. А этому нахалу я ещё покажу, чему можно выучитья за 21 день! И пусть этот гадёныш работает на своего дядю, пока я строю свою компанию. Интересно, дедушкин квантовый сворачиватель пространства и времени ещё работает? Он мне пригодится. Ахаха, я уже представляю лицо этого придурка, когда он меня увидит! Он же останется таким же тупым болваном!\n\n";*/ /*const char* gameIntroPlan = " Попробую выучиться всему, чему можно, достигнуть всего, о чём можно только подумать, а ещё, а ещё... заработать МИЛЛИАРД! Хм, ладно, это уже слишком. Пусть будет миллион. А потом встречусь с Валерой и посмотрим, кто чего добился.\n\n Итак, цель поставлена, отсчёт времени пошёл!\n Что он там писал? C++ за 21 день? Где-то в шкафу есть такая книга, надо поискать. Я же когда-то начинал её читать... за 21 день её точно не пройти. \nПридётся усердно заниматься и через пару-тройку лет я его выучу. А потом возьму дедушкин квантовый сворачиватель пространства и времени и вернусь в прошлое, до 21-го дня, пусть все думают, что я добился всего за 3 недели. Именно так я и сделаю!";*/ const char* gameIntroPlan = "Цели:\n\nОткрыть все 9 достижений\nПройти 12 курсов обучения\nОткрыть 5 концовок:\n 3 из них связаны с выбором своего пути (эникейство, работа в компании, свой стартап)\n 2 из них связаны с изменением вашего положения в обществе (карма / количество денег)\n\nВаше игровое пространство - время. По сравнению с другими играми, где вы исследуете игровое пространство, здесь необходимо исследовать время.\n\nВыбрав путь, вы можете вернуться в прошлое и выбрать другой: этом вам поможет квантовый сворачиватель пространства и времени.\n\nПосле выполнения всех заданий вернитесь к начальной точке: к 21 дню. Подумайте хорошенько, порой вернуться не так просто: может не хватить средств.\n\nИгра считается законченной, когда вы увидите надпись 'The End'(вы выиграли) либо 'game over'(проиграли, не выполнили задание)."; const char* yourAnswer = "\n\nВаш ответ:\n\t1:%s\n\t2:%s\n"; const char* shitCodeYourAnswer = "\n\nВаш ответ:\n\t1:Да, конечно.\n\t2:Не, я такого не умею.\n"; const char* statusLine = "День: %d, $: %d, карма: %d, сообщения: %d"; const char* statusLineCoursesNotFinished = ", непройденных курсов: %d"; const char* unnamedStudio1Answer = "Смотри, второй раз предлагать не будем.\n\nВаш ответ:\n\t1:Да, ребят, я согласен!\n\t2:Хм..я не такой смелый, чтобы вкладывать последние деньги.\n"; const char* unnamedStudio3Answer = "\n\nВаш ответ:\n\t1:Да, от сердца отрываю!\n\t2:Нет, ну сколько можно клянчить деньги?\n"; const char* unnamedStudio4Answer = "\n\nВаш ответ:\n\t1:Да, давайте наймём веб-мастера.\n\t2:Нет, давайте я лучше сам быстренько выучусь и сделаю нам сайт, м?\n\t3:Что, опять тратить деньги? Да пошли вы!\n"; const char* angryBossAnswer = "\n\nВаш ответ:\n\t1:Да, я больше не буду фрилансить.\n\t2:Нет, всё же это не по мне. Я следую за духом свободы.\n"; /************************************************************************* * Modal windows' text *************************************************************************/ const char* answerLetter = "Ответное письмо"; const char* cantStopDuringKnowledgeCheck= "Нет, вы не можете переместиться в середину проверки знаний. Проходите заново!"; const char* charityTitle = "Благотворительность"; const char* charityQuestion = "Вы действительно хотите пожертвовать половину ваших денег на благотворительность?"; const char* congratsMsg = "Поздравляем!"; const char* courseSuccessfullyFinished = "Курс '%s' успешно завершен! Теперь вы можете выполнять задания по выбранному направлению."; const char* daysPerSecond = "Игровых дней в секунду: %d"; const char* doYouReallyWantToExit = "Вы действительно хотите выйти?"; const char* errorMsg = "Ошибка!"; const char* failMsg = "Неудача!"; const char* need100ForUndo = "Прыжки во времени дороги. Вам необходимо иметь хотя бы $100!"; const char* notEnoughMoneyForCharity = "Вам нечего жертвовать на благотворительность!"; const char* noUnreadMessages = "Нет непрочитанных сообщений!"; const char* prepareForTimeJump = "Сейчас будет произведён прыжок в прошлое, приготовьтесь!"; const char* pressRForCharity = "Теперь, имея достаточно средств, вы можете тратить деньги на благотворительность!"; const char* returnToDay21 = "Вы выучились всему, и добились всего, что хотели. Не забудьте вернуться в прошлое к 21-му дню, чтобы достичь поставленной цели. Подумайте хорошенько, порой это сделать не так просто."; const char* rightAnswer = "Правильный ответ!"; const char* startupFailedTip = "Вы завалили стартап :(. Лучше вернуться в прошлое и всё исправить. Дальше ничего интересного уже не будет, это тупик."; const char* successfullyEnrolled = "Вы успешно записаны на курс '%s'!"; const char* wrongAnswer = "Неверный ответ :("; /************************************************************************* * Achievements *************************************************************************/ const unsigned int achievesNumber = 9; char* achieves[achievesNumber] = { "Гуру программирования: выполнить три супер-сложных проекта.", "Отверженный: ваша карма опустилась ниже нуля!", "Успешный стартапер: запустить прибыльный стартап.", "Миллионер: накопить $1000 000.", "Непоседа: следовать за духом свободы.", "Не твой день: променять престижную работу на стартап и не взлететь.", "Знающий своё дело: успешно пройти проверку знаний.", "Настойчивый и терпеливый: скучной работы не чурается.", "Путешественник во времени: совершать прыжки, не распадаясь на молекулы." }; bool achievesPicked[achievesNumber] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; bool achievesShowed[achievesNumber] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; /************************************************************************* * Final cards *************************************************************************/ const char* defaultFinalCard = "В общем, это всё. Ты, конечно, можешь продолжать и дальше, но никаких особых \ событий не предвидится: ты просто всю жизнь будешь переустанавливать винду и заменять перегоревшие видеокарты. Ха! \ Знаешь, а такой образ жизни кому-то даже нравится: меньше ответственности и работа непыльная. На еду хватает, \ на интернет тоже. Зачем нам эти стартапы и работа в крупных компаниях? Пфф, ты сделал свой выбор. Что ещё нужно? \ Иногда, правда, никто не звонит, приходится трояны ставить некоторым, чтобы почаще звонили, а то так и с голоду \ помереть можно! Только тссс, никому, слышишь?\n"; const char* workFinalCard = "Я смотрю, ты терпеливый. Сидишь, работаешь. Вижу же, что скучаешь. А ты всё равно \ работаешь, на стороне заказов не берёшь. Деньги не нужны? Или боишься, уволят? Да не важно! То, что ты такой - \ это похвально. Вот такие и вырываются вперёд - сидят себе молча, работают, работают, а потом лет через пять РРАЗ -\ и становятся генеральными директорами компании, в которой работают. Вот такая у тебя перспектива, дружище. Кому-то \ больше нравится стабильное место в компании, чем свой стартап, который забирает кучу сил и может не взлететь. \ Что, хочешь свой стартап? Ну, знаешь, надо было раньше делать другой выбор!\n"; const char* startupFinalCard = "Согласись, это было круто! Такие бабки сколотить... хотя знаешь, это не самое главное. \ Главное ведь то, что то время, которое ты потратил на этот стартап, потрачено не зря. Да и не это главное, чёрт возьми! \ Твою игру скачивают миллионы. МИЛЛИОНЫ, СЛЫШИШЬ? Вот это главное - то, что твой продукт нужен людям. То, что тебя ценят. \ Потому ведь ты и ушёл в стартап, что не хочешь быть серой мышью в толпе программистов в какой-то крупной компании, где \ твоё видение никого не интересует. Возможность самореализации и полёт мысли - вот она, СВОБОДА! Конечно, завистники \ скажут, что тебе просто повезло, но мы-то знаем, сколько труда было вложено! Ты прекрасно знал, на что идёшь, иначе \ выбрал бы что-то другое. Но ты сделал правильный выбор. Хотя знаешь, нет неправильного выбора. Есть правильный, просто другой."; const char* zeroKarmaFinalCard = "Вы настолько испортили отношения с людьми, что даже незнакомые люди не хотят иметь с вами дела. Вам никто не звонит. Это конец :(.\n\nНа самом деле нет :D. Постарайтесь любыми способами поднять карму, иначе, когда кончатся деньги, проиграете.\n"; const char* noMoneyFinalCard = "У вас нет денег, чтобы дотянуть до следующего звонка с предложением о работе. Как вариант - начните продавать капусту, может быть, это у вас лучше получится.\n\nНа самом деле это ещё не конец. Постарайтесь как-нибудь заработать денег, иначе, когда карма будет меньше нуля, вы проиграете!\n"; const char* gameOver = "Вы достигли поставленной цели и успешно завершили игру! Все курсы обучения пройдены, все концовки раскрыты, а сколько достижений вы накопили за это время! Добиться такого всего за 21 день! Опыт, который вы приобрели, бесценен, а выбор, который вы делали - правильный. Ведь нет неправильного выбора, есть просто другой. А то, что будет дальше, зависит от нас. А не от НЛО или какой-то машины времени, верно?"; /************************************************************************* * Hints *************************************************************************/ const char* hintOfTheMonth = "Подсказка месяца:\n"; const int hintsCount = 12; const char* hints[hintsCount] = { "'Постоянный источник доходов' - это не только официальная работа или собственная компания, но также и выполнение заказов и просьб знакомых, если вы зарекомендовали себя как специалиста и имеете хорошую репутацию.", "Если отказывать всем знакомым переустановить винду или починить компьютер, то вскоре они перестанут звонить совсем.", "Залезать в долги неприятно, но запоминается надолго.", "Один мой знакомый говорил: чтобы стать миллионером, нужно основать несколько стартапов. Или только один, но несколько раз.", "Другой мой знакомый имел кучу денег, но был несчастлив. Он нигде не работал, и просто тратил деньги, пока они не закончились. Так он и закончил.", "Ходите кругами? Кажется, что здесь вы уже были и других путей нет? Вдумайтесь, вчитайтесь - всегда можно сделать какой-нибудь прорыв или достижение.", "Если ваша жизнь скучна и в ней ничего не происходит, попробуйте скопить побольше денег. Говорят, они дают больше возможностей.", "Если вы видите свой 'Конец'...гм.., то уже ничего не поможет. Это значит, что всё. Эх, если бы у нас была машина времени!", "Не знаете, чему бы новому поучиться? Вспомните, быть может, однажды вам предлагали такую возможность, а вы отказались.", "Благотворительность - хороший способ избавиться от денег, а заодно и заработать людское доверие.", "При прыжках во времени пространственно-временной континуум иногда не выдерживает и прорывается: этим можно объяснить все баги в этой игре.", "После прохождения всех курсов и открытия всех достижений и концовок не забудьте вернуться в прошлое к 21-му дню. Это может быть не так просто, как кажется: денег может банально не хватить." }; const char* getWordEnding(int n, int k) { int ld = n % 10; // Last digit if (ld == 1) return (k == 0)?"день\n":"раз\n"; else if (ld == 2 || ld == 3 || ld == 4) return (k == 0)?"дня\n":"раза\n"; else return (k == 0)?"дней\n":"раз\n"; } /************************************************************************* * Intro *************************************************************************/ const char* developer = "Copyright (C) 2014 Maxim Grishin (igevorse)"; const char* introAllowedKeys = "А снизу - клавиши, которые вы можете нажать. Например, [1] или [Enter]"; const char* introDesktop = "Это - ваш рабочий стол"; const char* introFinished = "Ознакомление с интерфейсом завершено, начинаем игру!"; const char* introLetsBegin = "Начнём!"; const char* introStatusLine = "Сверху отображается важная информация:\n1.Текущий день.\n2.Количество денег (каждый день становится всё меньше, ведь вам нужно питаться).\n3.Карма - отношение людей к вам. \n4.Сообщения - количество непрочитанных сообщений.\n"; const char* gameIntroTextPart1 = "1. Случай\n\n\ - Разве это сервировка? Ты в какой деревне этому учился? Почему у меня ложка лежит не с той стороны, где положено?! Что молчишь? Отвечай!\n- ...\n\ - <дергает меня за край рукава> Ты слышишь? Да чёрт с ней, с этой ложкой, ты наши заказы перепутал! Понимаешь? Ушами хлопал, когда заказ принимал? На жену мою засмотрелся, нет?\n\ <снова дергает за рукав> На меня смотри! Я сюда с дамой пришёл, а ты испортил весь вечер!\n\ Пошёл отсюда!\n\n\ Развернувшись, я быстрым шагом направился к двери подсобки, ворвался внутрь, резко закрыл за собой дверь и прижался спиной к стене.\nТак больше не может продолжаться.\n\ Во рту появилась горечь от обиды. Ну почему всё так?\n\ Ну почему он придрался к этой мелочи, разве нельзя просто сделать вид, что ты её не заметил? Да он же сам испортил вечер! Да, я поставил крем-брюле не ему, а его спутнице, потому что подумал, что он заказывает не себе. Обычно ведь его заказывают дамам! Он мог бы вежливо указать на ошибку, зачем сразу устраивать истерику?\n\ Правила приличия, хорошие манеры? Где это всё?\n\ Они лицемерят и любезничают друг с другом, но как только кто-то ниже их по социальному положению ошибётся, так они стараются излить тонну гнева на бедного официанта!\n\ Я так больше не могу. \n\ Уже третий раз за неделю клиенты устраивают истерики на пустом месте! Ругаются, унижают, указывают мне на моё положение. Да и кто решил, что ЭТО - моё положение? Они? Да у них мозгов хватает только на походы в кафе и безмерные траты денег. Кто же тогда это решает?!\nУже нет сил терпеть всё это!\n\ Шеф узнает, начнётся такая ругань... нужно просто перетерпеть и всё. НО Я НЕ МОГУ.\n\n\ Нужно уходить отсюда. Нет, не потому что шеф уволит, узнав о произошедшем. Нет. Потому что я когда-нибудь кинусь с кулаками на очередного придирающегося клиента... Либо я просто сойду с ума, пытаясь терпеть всё это.\n\n\ Я поднял глаза и увидел себя в зеркале, висевшем напротив: на лице застыла какая-то странная безобразная ухмылка.\n\ Видимо, это нервное. Надо это прекращать, иначе я так долго не проживу в этом постоянном стрессе.\n\ Я с силой сорвал фартук и небрежно кинул на пол.\n\ Всё кончено!"; const char* gameIntroTextPart2 = "2. Цель\n\n\ Легко сжигать мосты, когда тебе есть, на что жить! А что делать, если в холодильнике еды на три дня? Ладно, максимум на неделю, если почти ничего не есть. Я так умею, в общаге и не такое проходили. Но если в университетской общаге можно было ходить 'в гости' к добрым студентам с открытыми сердцами, завтракать у одного, а обедать у другого, то сейчас я могу рассчитывать только на себя. В универе вообще многое было совсем по-другому. Нам говорили, что мы выйдем хорошими специалистами, получим престижную работу! \n\ Тень нервной ухмылки снова пробежала по лицу. Ха! И это они называют престижной работой?\n\ Из всех одногруппников, насколько я знаю, только пятеро смогли устроиться в хорошие компании, потому что действительно учились.\n\ А чем я хуже?\n\ А мне приходилось работать днями и ночами, чтобы хватало на еду и оплату учёбы в универе. Учёбы? Да разве это учёба? С такой работой я и в универе-то редко появлялся.\n\ Мне просто не повезло. Неудивительно, что я ничему и не выучился.\n\ В животе раздался тревожный гул, напоминая, что уже более десяти часов я ничего не ел.\n\ Да я скорее умру с голоду, чем вернусь работать официантом! Мне же гордость просто не позволит сломать себя и вернуться, поджав хвост.\nНужно что-то делать.\n\n\ Мысли мешают думать. Голова просто разрывается от мыслей!\n\ Я же ничего не умею!\n\ Единственное, что у меня неплохо получается - это давать советы. Ха! А ещё мне нравится возиться с компьютерами, когда у друзей что-то не работает. \n\ Нет, нет, это же не может быть работой. Это так, хобби. Надо отогнать эту мысль.\n\ Желудок настойчивее дал понять, что у него есть другое мнение по поводу работы. Я сжался от боли.\n\n\ Прошло.\nО чём я думал? Ах, да, на этом нельзя заработать. \n\ Хотя...\nА, собственно, почему нет? Что я ещё умею?\n...\n\ Вот то-то и оно. Кажется, у меня просто нет другого выхода. Лишь бы не возвращаться в этот ресторан.\n\ Я взял первый попавшийся смятый листок со стола, заваленного всяким хламом, карандаш, и набросал примерные расчёты.\n\ Так, если заниматься только эникейством, то на еду мне будет хватать... а если потом расширять круг знакомых... так, можно попробовать сотрудничать с ТОО... тогда получается...это... и это...\n\ Почему я не думал об этом раньше!\n\ С силой кинув карандаш на стол, я откинулся на спинку стула. Это же проще простого!\n\ Идиот, нужно было пробовать раньше!\n\n\ Теперь я смогу заработать хотя бы на еду. Отличная перспектива! Кстати, о перспективе: надо бы заниматься чем-то ещё кроме эникейства, иначе к зиме будет не на что купить ботинки. В универе нам читали какие-то лекции по программированию. Говорили, это вскоре станет очень востребовано.\n\ Что там у нас есть? Кинув взгляд на полупустую книжную полку, я первым делом замечаю книгу 'C++ за 21 день'. Мне её подарили на первом курсе. Она до сих пор стоит нетронутой. Я тогда целыми днями обслуживал столики, и совершенно не было времени её прочесть.\n\ Да разве это возможно? За 21 день я даже просто прочитать её не успею.\n\ Что там рядом? Книга 'Teach Yourself Perl in 21 days'. Ничего не понятно, но снова говорят о двадцать одном дне. Взял у преподавателя, когда готовился к дипломной, и забыл отдать. Тоже не открывал.\n\ Да это же смешно!\n\ Если бы это было так просто, то все вокруг уже писали на C++ и Perl, ведь нужно потратить всего 21 день на обучение!\n\ В голове снова возникло лицо разъярённого клиента: '...ты наши заказы перепутал! Понимаешь? Ушами хлопал, когда заказ принимал?'.\n\ Нет, таким людям и в голову не придёт чему-либо учиться.\n\n\ У меня же ситуация просто безвыходная, поэтому я просто ОБЯЗАН выучиться за 21 день. Любой ценой.\n\ Нет пути назад."; const char* gameIntroTextPart3 = "3. Находка\n\n\ Лень. Где-то я услышал фразу 'Ты не наладишь свою жизнь, пока не наведёшь порядок в своём доме'. Вот так и я вылизал всю комнату, лишь бы не брать эти книги в руки. Из этой комнаты-свалки я сделал просто конфетку.\n\ Нужно ещё вытащить всё из-под кровати и выкинуть к чёртовой матери. Я даже боюсь разгребать всё это, даже не представляю, что там может быть.\n\n<...>\n\n\ Что это за коробка? Я не помню такой. Да, собственно, что я мог помнить, когда приходил домой усталый после работы и сразу спать? А рано утром в 'любимый' ресторан.\n\ Странно. Металлическая коробка не хочет открываться. Ну-ка, поднажмём...\n\ Крышка отлетела обратно под кровать, из коробки выпала какая-то бумажка с надписью. \n\ Что там написано? 'Это тебе'.\n\ Что это? Какой-то механизм, микросхемы, провода и блестящий красный камень...\n\n\ Внезапно я всё понял. Я плюхнулся на колени перед кроватью и застыл на несколько мгновений.\n\ Он существует. ЭТО ОН!\n\ Ещё в детстве дед мне рассказывал сказки про то, как он якобы во время своих путешествий общался со знаменитостями разных времён, охотился на динозавров и вообще хорошо проводил время на светских балах. Это были увлекательные и интересные сказки на ночь. Именно так мы относились к этим рассказам.\n\ Он был преклонного возраста и, хотя его рассказы были интересными, мы не воспринимали его слова всерьёз. Мало ли, что там бормочет выживший из ума старик?\n\n\ А потом он пропал. Исчез. Совсем.\n\ Его так и не нашли.\n\ А теперь эта коробка. Я не верю своим глазам. Это же невозможно!\n\ Как он там называл это?\n\n\ Ква... квантовый сворачиватель пространства и времени! Да, именно так.\n\n\ Колени стали невыносимо ныть. Очнувшись, я понял, что просидел много времени. Куда там отлетела крышка? А, вот она. Закрыв коробку, я положил её на полку.\n\n\ Надо уже начинать что-то делать!\n\ Как там было... успеть всё за 21 день?\n\ Вызов принят!"; #endif