(Текстовые) игры для практики С++
В настоящее время я изучаю С++, и поэтому я подумал, что было бы неплохо попытаться (пере) программировать некоторые "общие" текстовые игры. (Мысль о охоте на Wumpus, Угадайте (псевдо) случайное число, сгенерированное компьютером,...)
Однако я не могу найти хороших источников для таких задач.
- Какие текстовые игры могут быть "воспитывать" для меня для программирования?
- Помните ли вы специальную игру, которую вы запрограммировали (желательно на языке С++), которая вас многому научила?
- Было бы неплохо, если бы вы могли включить:
- Общая концепция игры
- Какие аспекты программирования на языке С++ для этой игры потребуются/включают
Ответы
Ответ 1
Я пытаюсь вспомнить некоторые из забавных вещей, которые я делал, когда учился в классе CS в средней школе. Они не все игры, но вот оно:
Анимация на основе текста (ASCII). В основном я анимировал дракон ASCII, пришедший в терминал, что-то сказал и ушел. После "рисования" каждого кадра он был очищен, так что в основном это был кадровый генератор анимации ASCII.
Лабиринт. Используются символы Юникода в виде одной и той же концепции. Я получил ввод с клавиатуры со стрелками и перерисовал ваш блок, проходящий через лабиринт, на основе вашего ввода. Снова очистите экран после каждого кадра и снова распечатайте текст.
Snake - аналогичная концепция, как указано выше, но это была игра змеи.
Простой чат - этот опрос обменивался текстовым файлом на центральном сервере в нашей школе (кто-то случайно chmoded 0777) и облегчал в основном действительно простой чат.
Beeper - эта программа стала печально известной в моей школе. До XP, по-видимому, звуковой буфер на компьютерах Windows мог легко перегружать текст. Запуск этого заставил компьютер подавать звуковой сигнал, пока вы его не отключили (и в большинстве случаев также заставляли его увязнуть так сильно, что вам пришлось выполнить жесткую перезагрузку). Определенно обозленный администрация нашей средней школы. Плюс это всего лишь 2-футовый.
char o = 7;
while(1) cout << o;
В любом случае, не уверен, что это помогло вам получить какие-то идеи, а просто использовать свое воображение. Вы можете много веселиться, не зная о программировании. Просто проявляйте творческий подход.
Ответ 2
Самообучающаяся версия "20 вопросов" может быть довольно забавной (если вы не знакомы с этим, есть довольно забавная реализация этого в Guess the Dictator/Sit-Com Персонаж).
Пример сеанса (на основе вопросов с этого веб-сайта):
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, я должен был сказать, о ком я думаю, выберите вопрос, который отличает моего выбранного диктатора/сит-кома от Чандлера от друзей, а затем скажите, отвечает ли ответ на мой вопрос вопрос "да" или "нет". Затем этот вопрос запоминается, и программа постепенно становится все более осведомленной о персонажах сик-комов и диктаторах.
В зависимости от того, как вы это сделали, это может помочь вам узнать:
- Консольный ввод-вывод (чтобы задать пользователю вопросы)
- Двоичные деревья (каждый вопрос представляет собой node в двоичном дереве, а дочерние узлы - задаваемые вами вопросы в зависимости от ответа "да/нет" ).
- File I/O (если вы сохраните дерево на диск)
Ответ 3
Zork, конечно!
Ответ 4
В Facebook есть интересные крутые инженерные загадки, которые мне нравятся, но они могут быть немного продвинуты для начала. Я - так программист на С++, поэтому решил головоломки сначала на Python, затем на С++.
Отъезд: Facebook Engineering Puzzles
Кажется, у них есть все, от легкого (Hors d'oeuvre) до довольно сложного (Buffet).
Я считаю, что эти головоломки были созданы для вербовки, но они веселились сами по себе. (Может быть, я отвратителен?)
Кроме того, они имеют дополнительное преимущество: никогда не знаете, когда вам может понадобиться работа.
Ответ 5
Несколько основных настольных игр, которые вы играли в детстве.
Линкоры! (В некоторых странах, известных как subs) → Это учит вас возиться с массивами, передавая буферы. Может также (если вы кодируете AI) заставляете вас играть с этим.
Шашки/Шахматы → Внедрение ИИ выходит за рамки изучения основ, но довольно легко закодировать текстовое представление игры.
Стратегические или основные wargames → Структуры данных и ООП.
Ответ 6
Хорошим источником классических игр является
http://www.atariarchives.org/basicgames/
Игры находятся в старой школе, но научиться переводить и писать на любом языке, безусловно, будет полезно для получения навыков.
Например, если вы хотите заняться несколькими играми с картами, было бы неплохо создать заголовки, функции, классы и поместить код в библиотеки, которые можно было бы повторно использовать между двумя или более играми.
Это не столько то, что вы делаете, сколько растягивает свои навыки и переходит от тривиального к чему-то менее...
Найдите наставника, чтобы просмотреть свой код и внести предложения о том, что делать или делать другим.
Ответ 7
Как насчет Nim? Есть два варианта: один с несколькими сваями, где вам разрешено брать столько жетонов в одной куче, сколько пожелаете, и одну с одной стопкой, где вам разрешено принимать 1-я токены сразу (N обычно около 3), Человек, который возьмет последний токен, побеждает или проигрывает.
Вернемся назад, когда я внедрил версию второй игры, которая позволит вам указать все параметры игры, затем спокойно решит идти первым или нет, чтобы гарантировать победу. Ах, хорошие времена.
Ответ 8
Вы должны пойти в самую крутую текстовую игру, Elite.
Вы можете получить исходный код в очень читаемом и очень интересном C-коде. Источник доступен по адресу сайт Иана Белла.
Элита славилась своей "бесконечной" вселенной. Это довольно умный дизайн.
Ответ 9
Охота на Wumpus была бы фантастической. Это относительно простая игра, но большинство примеров - старый процедурный код в BASIC. Вы можете начать с нуля и написать OO-версию на С++.
Conway Game of Life - еще один хороший, так как он не требует какого-либо взаимодействия с пользователем. В начале моей карьеры я написал 3D-версию и нашел ее полезной. И это увлекательно смотреть: -)
< кроме >
Я на самом деле скучаю по старым временам, когда в компьютерных журналах были списки программ в спину, которые вы могли набрать сами. У них были игры, утилиты, что угодно. Я так многому научился, просто копируя то, что писали другие.
& Л; /& в сторону GT;
Ответ 10
В тот же день я сделал многопользовательскую рулетку с горячим местом, которая научила меня некоторым основам, все на основе текста. В принципе, игроки будут по очереди делать ставки на разных уровнях на разных уровнях ставок, будет ничья (с анимацией и звуками), двойная или ничтожная для победителя. Было очень весело.
Ответ 11
Легендарный NetHack кажется отличным выбором и первоначально был в графическом пользовательском интерфейсе ASCII . Однако он реализован на C, а не на С++, хотя может быть хорошим учебным материалом. Здесь вы найдете все подробности:
http://en.wikipedia.org/wiki/NetHack
http://www.nethack.org/
Ответ 12
шашек. Мне очень понравилось писать это в смеси cobol и fortran давным-давно
есть настоящие острые ощущения, когда ваше творение действует умно
конечно, вы проходите много итераций, где он действует глупо, прежде чем вы дойдете до этой точки.
Ответ 13
Jotto - отличная игра, которая практически подходит для того, чтобы кто-то учился. Вам нужно много думать о нескольких хороших структурах данных, но вы можете легко собрать забавную игру менее чем в 1000 строк на С++.
Ответ 14
Вы должны проверить сайт для интерактивной художественной литературы на английском языке:
http://www.intfiction.org/forum/
Здесь собираются новые разработчики текстовых игр, чтобы обсудить их. Однако реализация больше не выполняется на С++ - вместо этого используются несколько специализированных языков программирования, называемых Inform, TADS и Hugo.
Вы найдете много текстовых игр (в том числе Zork, руководство Hithhiker для галактики, Wumpus...) в ifarchive:
http://ifarchive.org/
Здесь вы можете найти реализацию одной из моих игр на С++:
http://www.caad.es/baltasarq/if/csa/csa-cpp.zip
Это может быть полезно, если вы можете читать по-испански. Во всяком случае, я сам перешел к Inform 6.
Ответ 15
Настольные игры, такие как шашки и Отелло. Еще в 90-х годах у меня были конкуренты Othello-AI с моими коллегами. Я думаю, что я начал с tic-tac-toe перед этим.
Etudes for Programmers имеет несколько интересных проектов, если вы можете найти копию.
Ответ 16
когда-то был приключенческий (на английском языке) язык записи под названием ALPS, и я помню, как кодировал версию этого, плюс tcp и рудиментарный многопользовательский обработчик, как мой первый проект C/С++ (сначала первый, последний). Проект был аккуратно укушенными "модулями" с окончательным критерием и приятным конечным результатом: я использовал его, чтобы создать странную MUD с моим могучим 32K BBC Micro. Кодирование C/С++ ALPS в конечном итоге обучило мне лингви буквально неделю - к достойному рабочему стандарту (далекому от эксперта).