|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Записки начинающего Игродела
Доброго времени суток все кто читает мой текст. Я зарегистрировался совсем недавно, хотя давно уже пользуюсь ресурсами вашего форума для самообучения, однако, как оказалось, учусь я слишком медленно. Дело в том, что мне надо в течение двух недель закончить курсовую по программированию и это без учета, что другие предметы сдавать надо. Но ладно, это моя проблема и не буду грузить ею )
Итак, суть. Я создаю игру. 2D слэшер. Как я понимаю это достаточно простая игрушка, ибо все что я хочу, это небольшая локация 800 пикс шириной и 300 высотой. Есть анимированный герой, который сражается с толпами мобов прибывающих с двух сторон экрана. Детали игры таковы: - у Героя есть шкала жизни и ярости. Жизнь имеет пассивную регенерацию. Ярость заполняется при нанесении урона мобам и в три раза быстрее заполняется при получении урона от мобов. - Герой может бегать, прыгать, а кнопкой down еще и защищаться мечом. - Герой получает опыт за убийство мобов и за определенное количество опыта он получает уровни. За уровни получает бонусы, что дают ему преимущество (например, если кто-то играл - Crimsonlands. Там тоже есть за уровни бонусы, которые дают увеличенные жизни, регенерацию и т.д.) - у Героя по мимо обычной атаки есть одна единственная спец. атака, которой можно воспользоваться при полном заполнении шкалы злости. - с повышением уровня героя, я хочу попытаться сделать увеличение силы приходящих монстров, а так же их количество. В принципе, это всё. Единственное, я еще хотел повставлять звук, - фоновая музыка, реплика героя, когда у него мало жизни, реплика героя когда он делает спец.атаку реплика когда умирает, реплика когда получает уровень. Так же сделать главное меню и таблицу рекодров, - сколько продержался и убил, а так же заработанный лвл игроков. Вот... У меня есть основа, но я все еще разбираюсь с движением героя и происходит это... Весьма туго. Я бы не обращался и сделал бы всё сам, но у меня поджимают сроки и потому, я прошу вашего времени и помощи в моем проекте. Единственное что я из всего этого сделал, это фон и способность героя бегать по форме, что, конечно, вас может не впечатлить. Исходный код или проще, - сам исходник я могу скинуть если согласитесь мне помочь, - не хочу тему загружать. Заранее благодарю за любую подсказку. |
#2
|
||||
|
||||
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||
|
||||
Цитата:
Благодарю. |
#4
|
||||
|
||||
Цитата:
- Как вывести изображение на форму? - Как сделать перемещение изображения на форме в зависимости от нажатых клавиш? - Как сделать анимацию (изменяющуюся картинку)? ... Все конкретные вопросы предварительно задаются гуглу, и только если ответа там нет - пишутся здесь. Вопросы, ответ на которые вряд ли удастся получить (не конкретные): - Как сделать, чтобы герой мог бить монстров? - Как сделать, чтобы герой прокачивался? ... Пока что я не вижу ни одного вопроса в теме. Как следствие, и ответить ничего не могу. Задавай вопросы, будем обсуждать. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 13.05.2013 в 18:24. |
#5
|
||||
|
||||
Да, Баргест, прошу прощения, Вы правы.
Я буду задавать вопросы по мере продвижения, так, я думаю, будет удобней. На данном этапе у меня проблема с прыжками. Я гуглил ответ на вопрос, как разработать гравитацию (обычное равноускоренное движение) и сделать её глобальной процедурой, дабы, если герой находится в воздухе, он всегда возвращался на исходную координату Y. Я сделал подобие гравитации, однако у меня оно нагло зависло. А при попытке сделать самостоятельное, плавное падение с ускорением, - действие происходит моментально. Так же я все еще не могу разобраться как сделать "карточку" персонажа и монстра. То есть количество жизни, сила атаки. Позвольте я покажу исходник, может Вы сможете что-то подсказать? тык - у форума почему-то загрузчик ошибает. Примечание:Ссылку обновил. Последний раз редактировалось Царь, 13.05.2013 в 19:23. |
#6
|
||||
|
||||
Цитата:
Разумеется, нужно сделать проверку столкновений, но в данном случае все объекты можно считать круглыми, тогда столкновения считаются просто. Столкновение с землей - расстояние от центра окружности до прямой меньше радиуса, с другими предметами - расстояние между двумя центрами окружностей меньше суммы их радиусов. Цитата:
Такие вопросы надо по-хорошему решать на этапе проектирования. И ответ на них можно найти, если правильно сам вопрос поставить. А для этого нужно описать, что должно происходить, в виде структур данных и методов их обработки. Делать такие вещи после начала написания кода - получить кучу проблем при дальнейшей доработке. Но уже, собственно, поздно. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 13.05.2013 в 19:29. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Царь (14.05.2013)
|
#7
|
||||
|
||||
Понял. Сейчас попробую инициализировать
Последний раз редактировалось Царь, 13.05.2013 в 19:29. |
#8
|
|||
|
|||
Добрый день.
Честно говоря впечатлен вашей статьей, не могли бы вы мне помочь Сразу говорю, я относительно недавно начал изучать язык, поэтому попрошу сильно не ругаться, за некоторые возможно глупые вопросы). Сейчас сам пытаюсь реализовать небольшую игру. И у меня возникла проблемка в самом начале, не могли бы подсказать как вы реализовали создание объектов Player (игрок) и Enemy(враги). Вот, например, (начну с самого начала): у меня есть модуль main и модуль objects: Код:
TBase=class private x: Integer; y: Integer; public constructor Create(x0, y0: Integer); procedure setX (x0: Integer); //назначают координаты procedure setY (y0: Integer); function getX: Integer; //возвращают координаты function getY: Integer; end; { TStatic } TStatic=class(TBase) private bitmap: TBitmap; public constructor Create(x0, y0: Integer; bitmap0: TBitmap); procedure setBitmap (bitmap0: TBitmap); // меняет изображ. внутри объекта function getBitmap: TBitmap; // возвращает изображение end; { TAnimate } TAnimate=class(TBase) private bitmap: array[0..100] of TBitmap; curFrame: Integer; //текущий кадр maxFrame: Integer; //максим.кадр public constructor Create(x0, y0: Integer; bitmap0: array of TBitmap; maxFrame0: Integer); procedure nextFrame; //меняет кадры procedure setBitmap(bitmap0: array of TBitmap); function getBitmap:TBitmap; end; { TEnemy } TEnemy=class(TAnimate) public procedure move; end; { TPlayer } TPlayer=class(TAnimate) private health: Integer; public constructor Create(x0, y0: Integer; bitmap0: array of TBitmap; maxFrame0: Integer); procedure moveLeft; procedure moveRight; function getHealth: Integer; end; implementation { TEnemy } procedure TEnemy.move; begin y:= y+3; end; { TPlayer } constructor TPlayer.Create(x0, y0: Integer; bitmap0: array of TBitmap; maxFrame0: Integer); begin inherited; health:= 100; end; procedure TPlayer.moveLeft; begin x:= x-5; end; procedure TPlayer.moveRight; begin x:= x+5; end; { TAnimate } constructor TAnimate.Create(x0, y0: Integer; bitmap0: array of TBitmap; maxFrame0: Integer); begin x:=x0; y:=y0; bitmap:=bitmap0; curFrame:= 0; maxFRame:= maxFrame0; end; procedure TAnimate.nextFrame; begin if curFrame < maxFrame then curFrame:=curFrame+1 else curFrame:=0; end; procedure TAnimate.setBitmap(bitmap0: array of TBitmap); begin bitmap:=bitmap0; end; function TAnimate.getBitmap: TBitmap; begin result:=bitmap[curFrame]; end; { TStatic } constructor TStatic.Create(x0, y0: Integer; bitmap0: TBitmap); begin x:=x0; y:=y0; bitmap:=bitmap0; end; procedure TStatic.setBitmap(bitmap0: TBitmap); begin bitmap:=bitmap0; end; function TStatic.getBitmap: TBitmap; begin result:=bitmap; end; { TBase } constructor TBase.Create(x0, y0: Integer); begin x:=x0; y:=y0; end; procedure TBase.setX(x0: Integer); begin x:=x0; end; procedure TBase.setY(y0: Integer); begin y:=y0; end; function TBase.getX: Integer; begin result:=x; end; function TBase.getY: Integer; begin result:=y; end; end. В модуле main у меня след.образом объявлены переменные: Код:
Form1: TForm1; //graphics plPic: array [0..2] of TBitmap; grPic: array [0..2] of TBitmap; enPic: array [0..2] of TBitmap; seaPic: TBitmap; bulPic: TBitmap; //objects Player: TPlayer; Sea: array [0..1] of Tsea ; Ground: array [0..2] of TGround; Bullet: array [0..100] of TBullet; Enemy: array [0..100] of TEnemy; //booleans MoveL, MoveR: boolean; Shoot: boolean; //Integers delay:Integer; score: Integer; И подгружается графика: //load graphics //player for i:=0 to 2 do begin plPic[i]:= TBitmap.Create; plPic[i].LoadFromFile('img/player'+IntToStr(i)+'.bmp'); plPic[i].Transparent:= True; end; //enemies (графика для enemy) for i:=0 to 2 do begin enPic[i]:= TBitmap.Create; enPic[i].LoadFromFile('img/enemy'+IntToStr(i)+'.bmp'); enPic[i].Transparent:= True; end; Далее идет реализация процедур. Проблема в том, что в модуле objects выдает ошибку incompetible types (bitmap и bitmap0).........прошу вас посмотреть, что можно исправить. А также подскажите, пож-та, как вы реализовали создание объектов. Последний раз редактировалось M.A.D.M.A.N., 24.03.2014 в 15:07. |
#9
|
||||
|
||||
Цитата:
Код:
{ TAnimate } TAnimate=class(TBase) private bitmap: array of TBitmap; Код:
procedure TAnimate.setBitmap(bitmap0: array of TBitmap); var i: Integer; begin SetLength(bitmap, Length(bitmap0)); for i := 0 to High(bitmap) do bitmap[i] := bitmap0[i]; end; |