![]() |
Змейка. Написание игры
Передомной появилась такая проблемма. Нада написать игру "Змейка" на Borland C++ 3.11 с использованием ООП и в графическом режиме. Помогите пожалуста разобратся с такими вопросами:
1. Как правильно спроэктировать самц игру, классы и тп? 2. Как реализовать движение змеи и изменение направлений при нажатии клавиш. Вообщем помогите хто чем может, кодом, советами, теорией, буду благодарен за любую помощь. |
DaRiYs,
Цитата:
В противном случае это будет чужое решение, а не собственное. |
Бы ло бы еще о чем рассуждать, я незнаю с какой стороны приступить... Хоть теорию реализации игры для начала скажите.
|
DaRiYs, теория реализации игры - это следующий шаг. А сейчас рассуждай о том, чего ты хочешь видеть на экране. Реализаций разновидностей много, а цель должна быть одна.
Начни рассказ со слов "Я хочу чтобы ...". Чтобы змейка двигалась так-то и так-то. Для управления использовались кнопки такие-то и такие-то. Змейка характеризуется так-то и так-то. Нямки появляются так-то. Вопрос будет в том, в каком виде у тебя будет хранится поле и в каком виде будет представлена змейка. Но я этого не говорил! :) Когда этап "Я хочу" будет пройден, будем думать над реализацией. Не торопись, запрограммировать плевое дело, было бы что. :) Т.ч. рассуждай, рисуй схемки, а о программировании пока не думай. (Рассуждения терминами С/С++ сейчас не нужны) |
Я когда-то решал аналогичную задачку "траектория черепахи", но если честно, до конца не дорешал. Парочка мыслей:
1. Нужно поле по которому змейка будет двигаться - двухмерный массив Код:
const int x = 10; Код:
const int step = 2; 4. переменная хода - currentStep = 0; Код:
... |
Это у тебя лабораторная работа/курсовая/диплом или ты просто ради фана хочешь разобраться в игростроении? Если учёба тогда какие сроки, если ради фана то, можешь начать примерно со следующего.
Какие ключевые понятия в игре Змейка (да и вообще в любой игре)? Есть карта или просто поле по которому ползает червяк в области ограниченного пространства. На этом поле он собирает объекты (бонусы) которые по разному влияют на червяка. Исходя из этого у нас будет один общий базовый класс для объектов. К объекту можно также отнести и самого червяка, а что он разве не объект? Ещё какой объект только со своим набором атрибутов, поэтому для начало возьмём базовый объект, некий Код:
СBaseObject 1. координаты на сетке (x,y) 2. скорость (velocity) 3. тип объекта (type) (мы же должны как-то узнавать в игре что это или кто это, бонус или враг или просто камень в который нужно врезаться и отнять пару поинтов жизни у червяка) 4. Угол (angle) - в ту сторону будет идти червяк меняется угол меняется и направления червяка. 5. ширина и высота объекта (width and height) а теперь имеем Код:
CBaseObject Код:
СDecreaseBody : public CBaseObject Код:
СDecreaseBody : public CBaseObject Код:
render(); Теперь тебе есть от чего оталкиваться. Цитата:
|
Цитата:
|
Цитата:
|
|
Спсиб всем за помощь и идеи, разобрался наконец то, написал
|
ну тогда выкладывай исходники на все общее обозрение и критику, нам же интересно узнать как ты разобрался :)
|
Всем доброго времени суток!
Мне вот тоже стало интересно написать земйку. Я начал делать все по мануалу: придумал что я хочу и вроде составил 2 класса. Червяк должен ползать сам. Пользователь лишь выбирает направление червя с помощью клавиатуры. Яблоки будут появлятся в случайных кооодинатах и через некоторое время исчезать. Съев одно яблоко червяк становится длинее на еденицу. Скорость червя увеличивается по мере увеличения его длины. Камни так же будут появляться в случайных местах. Если червь врежется в камень - игра закончена. Если червяк врежется в границы поля - игра закончена. За всю игру появляется N яблок. Игра считается успешно законченной, если длина червяк собрал M яблок (M<N). Поле - массив[40][40] Характеристики червя: Х координата, У координата, длина червя, скорость червя, количество собранных яблок. Характеристики объекта: Х коррдината, У координата, время жизни, тип объекта(яблоко или камень). Код:
class Worm Подскажите, пожалуйста. |
Вот червяк:
Код:
......... |
Я не знаю, про какую игру ты подумал. Я имею ввиду обычную змейку, как на старых моделях телефона nokia. Я хочу использовать не псевдографику, а какие-нибудь стандартные графические функции с++.
Перед тем как узнать координаты их надо установить... |
Btf если проект под Win32, то в событии WM_CHAR оконной функции обрабатывать нажатия клавиш. В той же функции, но в другом событии (WM_PAINT), реализовать вывод на экран.
Для данной задачи, если требуется что было задействовано наследование, можно наследовать яблоко и камень от одного класса (того же Obj), или же все классы (включая Worm) наследовать от одного интерфейсного класса. Второй вариант упрощает менеджмент объектов. Если идти по пути ООП далее, то для решения данной задачи стоит создать ещё один класс, который будет управлять всеми игровыми процессами. Он же будет хранить все объекты, характеристики игрового поля, условия игры в своих полях. В стандарте С++ не заложено графических функций. Графический вывод осуществляют дополнительные библиотеки. Под Win32 такие как GDI, GdiPlus, Direct3D, OpenGL и прочие. |
Блин, как-то трудно. А если делать с помощью псевдографики? Как это реализовать?
|
Цитата:
|
а можите дать исходник, интересно)
|
Время: 17:18. |
Время: 17:18.
© OSzone.net 2001-