2010-02-05 2 views
24

В настоящее время я изучаю C++, и поэтому я подумал, что было бы неплохо попытаться (пере) программировать некоторые «общие» текстовые игры. (Мысль о охоте на Wumpus, Угадайте (псевдо) случайное число, сгенерированное компьютером, ...)(на основе текста) Игры для практики на C++

Однако я не могу найти никаких хороших источников для таких задач.

  • Какие текстовые игры могут быть «воспитывать» для меня в программе?
  • Вы помните специальную игру, которую вы запрограммировали (желательно на языке C++), что вас многому научило?
  • Было бы неплохо, если бы вы могли бы включать в себя:
    • Общая концепция игры
    • Какие аспекты языка программирования C++ эта игра потребует/включать
+2

Отличный вопрос! –

ответ

5

Я пытаюсь вспомнить некоторые из забавных вещей, которые я делал еще в моем классе средней школы CS. Они не все игры, но вот оно:

Анимация на основе текста (ASCII) - В основном я анимировал дракон ASCII, пришедший в терминал, что-то сказал и ушел. После «рисования» каждого кадра он был очищен, так что в основном это был кадровый генератор анимации ASCII.

Maze - Используются символы Юникода в виде той же концепции. Я получил ввод с клавиатуры со стрелками и перерисовал ваш блок, проходящий через лабиринт, на основе вашего ввода. Опять же, очистка экрана после каждого кадра и распечатка текста снова.

Snake - аналогичная концепция, как указано выше, но это была игра змеи.

Простой чат - этот опрос обменивался текстовым файлом на центральном сервере в нашей школе (что-то случайно chmoded 0777) и облегчил в основном действительно простой чат-комнату.

Beeper - эта программа стала печально известной в моей школе. До XP, по-видимому, звуковой буфер на компьютерах Windows мог легко перегружать текст. Запуск этого заставил компьютер подавать звуковой сигнал, пока вы его не отключили (и в большинстве случаев также заставляли его увязнуть так сильно, что вам пришлось выполнить жесткую перезагрузку). Определенно обозленный администрация нашей средней школы. Плюс это всего лишь 2-лайнер.

char o = 7; 
while(1) cout << o; 

В любом случае, не уверен, что это помогло вам получить какие-либо идеи, а просто использовать свое воображение. Вы можете много веселиться, не зная о программировании. Просто будь изобретательным.

+4

Для бипера, C++ умышленно даже предоставляет вам побег, чтобы помочь вашей работе: try * for (;;) cout << '\ a'; *: P –

+0

Из любопытства в отношении бипера вы не могли бы просто прекратить это программа с '[Ctrl] + [C]' вместо перезагрузки машины? – stakx

+0

С '[Ctrl] + [C]' в Windows :)? В более общем плане, это боль в окнах, чтобы убить программу, которая идет безумие, потому что вызов диспетчера задач может быть не тривиальным и требует большого количества ресурсов. У вас есть [Alt] + [F4] ', но еще раз, если машина увязла ... иногда это не работает. –

5

Zork из курс!

+3

Похоже, что вопросник - начинающий C++; повторная реализация текстовой приключенческой игры с продвинутым парсером, вероятно, будет немного сложной задачей. –

+2

Бонусные баллы, если вы реализуете его как культовый классик. –

+1

Я действительно делал что-то очень похожее на это, когда я изучал C++ и нашел его полезным. Конечно, я бы написал это в 1000000 раз лучше, но я многому научился. Начните просто. –

11

Самообучающаяся версия «20 вопросов» может быть довольно забавной (если вы не знакомы с этим, это довольно забавная реализация этого на Guess the Dictator/Sit-Com Character).

Пример сеанса (на основе вопросов от этого веб-сайта):

 
Are you female? 
> N 
Are you overweight? 
> N 
Do you live in an apartment building? 
> Y 
Do you travel for your job? 
> N 
Do you have strange schemes to make money? 
> N 
Do you live in California? 
> N 
Are you a new doctor? 
> N 
Is your father gay? 
> Y 
Are you gay? 
> N 
Are you an actor? 
> N 
Are both your parents gay? 
> N 
Are you black? 
> N 
I guess you are Chandler from Friends, am I right? 
> Y 

В этот момент, если бы я ответил N, я должен был бы сказать, кто я думал, выбрать вопрос, который отличает мой избранный диктатор/сит-ком персонаж из Чандлера из друзей, а затем сказать, является ли ответ на мой вопрос «да» или «нет». Затем этот вопрос запоминается, и программа постепенно становится все более осведомленной о персонажах сик-комов и диктаторах.

В зависимости от того, как вы сделали это, это может помочь вам узнать:

  • консольного ввода/вывода (задавать пользователю вопросы)
  • Бинарные деревья (каждый вопрос является узел в бинарном дереве и дочерние узлы являются вопросами, вы спросите в зависимости от да/нет ответа)
  • File I/O (если вы сохраните дерево на диск)
+0

С небольшим количеством исследований это сравнивается с программой «Элиза» или программой психолога. –

0

вы должны пойти в прохладном тексте игру когда-либо, Elite.

Вы можете получить исходный код в очень читаемом и очень интересном C-коде. Источник доступен по адресу Ian Bell's site.

Elite славилась своей «бесконечной» вселенной. Это довольно продуманный дизайн.

1

Ряд основных настольных игр, которые вы играли в детстве. Броненосец! (В некоторых странах, известных как subs) -> Это учит вас возиться с массивами, передавая буферы. Может также (если вы кодируете AI) заставляете вас играть с этим.

Шашки/Шахматы -> Внедрение ИИ выходит за рамки изучения основ, но довольно легко закодировать текстовое представление игры.

Стратегические или основные wargames -> Структуры данных и ООП.

0

Охота на Wumpus была бы фантастической. Это относительно простая игра, но большинство примеров - старый процедурный код в BASIC. Вы можете начать с нуля и написать OO-версию на C++.

Conway's Game of Life является еще одним хорошим, поскольку он не требует какого-либо взаимодействия с пользователем. В начале моей карьеры я написал 3D-версию и нашел ее полезной. И это интересно смотреть :-)

< в сторону >
Я действительно скучаю старые времена, когда компьютерные журналы были программные списки в спине, которые вы могли бы напечатать в себе. У них были игры, утилиты, что угодно. Я так много узнал, просто копируя то, что писали другие.
</в сторону >

3

Facebook имеет некоторые интересные инженерные головоломки, которые мне нравятся, но они могут быть немного передовые для только начинал. Я такой программист на C++, поэтому я решил головоломки сначала на Python, затем на C++.

Отъезд: Facebook Engineering Puzzles

Они, кажется, есть все, начиная от простой (закуска) к довольно сложным (шведский стол).

Я считаю, что эти головоломки были созданы для вербовки, но они сами по себе забавны. (Может быть, я изворотливый?)

Плюс, они имеют дополнительное преимущество: никогда не знаете, когда вам может понадобиться работа.

1

Хороший источник классических игр

http://www.atariarchives.org/basicgames/

Игры в старой школе основной, но научиться переводить и писать их на любом языке, несомненно, будет полезен для приобретения навыков.

Например, если вы хотите заняться несколькими играми с картами, было бы полезно создать заголовки, функции, классы и поместить код в библиотеки, которые можно было бы повторно использовать между двумя или более играми.

Это не так много, что вы делаете, как долго она тянется свои навыки и движется от тривиального к чему-то меньше так ...

Найти наставника, чтобы проверить ваш код и внести предложения о том, чтобы попробовать или сделать другой.

0

В тот же день я сделал многопользовательскую рулетку с горячими местами, которая научила меня некоторым основам, все на основе текста. В принципе, игроки будут по очереди делать ставки на разные номера на разных уровнях ставок, будет ничья (с анимацией & звуков), двойным или ничем для победителя. Было очень весело.

1

Как насчет Nim? Есть два варианта: один с несколькими сваями, где вам разрешено брать столько жетонов в одной куче, сколько пожелаете, и одну с одной стопкой, где вам разрешено принимать 1-я токены сразу (N обычно около 3) , Человек, который возьмет последний токен, побеждает или проигрывает.

Возвращение назад, когда я внедрил версию второй игры, которая позволяет вам указать все параметры игры, затем спокойно решит идти первым или нет, чтобы гарантировать победу. Ах, хорошие времена.

+0

Забавно, мне потребовалось некоторое время, чтобы понять, что с некоторой базовой математикой вы можете выиграть каждый раз (вторая версия), пока вы решаете, кто начинает, зная общее количество штук ... тогда моя младшая сестра ненавидела меня: p –

0

шашки. У меня было большое удовольствие писать это в смеси COBOL и Fortran время давно назад

есть настоящий кайф в том, чтобы ваш поступок создания бойко

вы, конечно, пройти через множество итераций, где она действует немым до того вы добираетесь до этого момента

0

Jotto - отличная игра, которая практически подходит для того, чтобы кто-то учился. Вам нужно много думать о нескольких хороших структурах данных, но вы можете легко собрать забавную игру менее чем за 1000 строк C++.

0

Вы должны проверить сайт для интерактивной литературы на английском языке:

http://www.intfiction.org/forum/

Здесь новые разработчики текстовых игр собираются, чтобы обсудить их. Однако реализация больше не выполняется на C++ - вместо этого используются несколько специализированных языков программирования, называемых Inform, TADS и Hugo.

Вы найдете много текстовых игр (в том числе Zork, руководство Hithhiker к галактике, Wumpus ...) в ifarchive:

http://ifarchive.org/

Вы можете найти реализацию одного из моих один игры в C++ здесь:

http://www.caad.es/baltasarq/if/csa/csa-cpp.zip

Это может быть полезно, при условии, что вы можете прочитать на испанском языке. Во всяком случае, я перешел в «Информ 6».

0

Настольные игры, такие как шашки и Отелло. Еще в 90-х годах у меня были конкуренты Othello-AI с моими коллегами. Я думаю, что я начал с tic-tac-toe перед этим.

Etudes for Programmers имеет несколько интересных проектов, если вы можете найти копию.

0

Когда-то был приключенческий (на английском языке) язык записи под названием ALPS, и я помню, как кодировал версию этого, плюс tcp и рудиментарный многопользовательский обработчик, как мой первый проект C/C++ (сначала первый, в конечном счете последний). Проект был аккуратно укушенными «модулями» с окончательным критерием и приятным конечным результатом: я использовал его, чтобы создать странную MUD с моим могучим 32K BBC Micro. Кодирование C/C++ ALPS закончилось тем, что я преподавал мне лингво буквально за неделю - к достойному рабочему стандарту (далекому от эксперта).

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). –

+0

Я не согласен. Он отвечает на вопросы, но я не хотел приводить имена, поскольку это было бы потенциально корыстолюбивым. Поэтому я назвал язык приключений, модульный формат которого стал идеальным инструментом обучения, оставив его допрашивать, чтобы посмотреть дальше, если это любопытно. Как это менее привлекательно, чем глава со ссылкой на Elite в виде текстовой игры (знаете ли вы, что в то время ничто не могло быть меньше текстовой игры!) - так как я одобряю, что Иэн Белл заслуживает заслуженного упоминания ... – yms

Смежные вопросы