|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.12.2010, 16:25 | #11 | |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Цитата:
Если же ТС таки хочет писать игры, то первым делом - читать книжки, учить язык и переходить на среды разработки, поддерживающие стандарт. По хорошему теме - место в Общих вопросах C/C++, т.к. проблемы тут чисто языковые.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
|
08.12.2010, 16:44 | #12 |
Форумчанин
Регистрация: 02.11.2009
Сообщений: 179
|
Фактически это первая проба написания игрушки-лабы, а | пока, действительно, на очень примитивном уровне. Через полчасика кину код в котором есть проблема прохождения человека сквозь ящики (ps если за это время сам не исправлю).
Кстати, не факт, что карьера закончится, просто задание было - написать на процедурном языке, а на нем многого не сделаешь за нехваткой времени. Следующая работа будет на объектно ориентированном языке и глядишь и дальше попрет. И еще, кстати, последний раз на си писал год назад, естественно, многое забылось, стараюсь вспоминать, но не на все хватает времени, так что сильно не ругайте мне и так стыдно. Но, как говорится "студент не знает тему в двух случаях: если он ее еще не проходил, либо уже давно прошел" ))) Поможете с кодом-то ? если что прост времени не очень много но много еще надо доделать в плане интерфейса. Последний раз редактировалось Beermonza; 08.12.2010 в 17:28. |
08.12.2010, 17:25 | #13 |
Форумчанин
Регистрация: 02.11.2009
Сообщений: 179
|
короче вот код при однократном нажатии d(движение вправо) виснет цикл не врублюсь что не так подскажите плиз
Код:
Последний раз редактировалось серг; 08.12.2010 в 17:34. |
08.12.2010, 17:36 | #14 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
серг, если ты так дальше будешь печатать в кучу сливая мысли, то мы помогать не будем, поскольку не желаем тратить свое время еще и на правильное понимание твоих постов, ...ну можно же хоть начать предложение с прописной буквы, поставить запятые, чтобы не путаться в "казнить, нельзя помиловать" и "казнить нельзя, помиловать". Я подправил твои посты и показал как поступать, надеюсь ты прислушаешься, ...не создавай подряд сообщения в 1-2 мин. интервал, есть на то кнопка "Правка", дополняй уже созданные посты, если потребовалось.
С уважением.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
08.12.2010, 17:39 | #15 |
Форумчанин
Регистрация: 02.11.2009
Сообщений: 179
|
Я понял свои недочеты,сори за такое смешение мыслей,буду стараться выражать свои мысли четче
|
08.12.2010, 17:45 | #16 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Молодец, ...и еще, если не отправляет сообщение сразу, не жми многократно, дождись окончания отправки, ...это проблемы сети, у меня тоже бывает, ...я жду, иначе могут быть дублирования, а за них можно схлопотать штраф. Я пишу сюда это все, чтобы все прислушивались к пожеланиям, кто забрел в эту тему.
К сожалению, смутно представляю, что происходит в коде, посему пас помочь кодом, только теоретически.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
08.12.2010, 17:56 | #17 |
Форумчанин
Регистрация: 02.11.2009
Сообщений: 179
|
Согласен и на теоретическую поддержку (кстати, ошибка в функции муврайт, там вроде комменты прописаны И ЦИФРА 2 в матрице - человек, цифра 3- ящик). Может взглянешь еще разок? ...просто я уже зашиваюсь в этом коде, баг на баге, либо чувак бегает скозь ящики как коперфильд, либо виснет. Свежий критический взгляд он же всегда укоряет и заставляет работать точнее. Вообще принцип игры заключается в том, что человек(зеленый кружок) должен сдвигать ящики в ряд и ряд сгорает, набирается какое то количество очков, и человек умирает если на него три раза падает ящик.
Блин народ помогите разобраться, а то уже мозг взрывается!!! Последний раз редактировалось Beermonza; 08.12.2010 в 19:30. |
08.12.2010, 19:54 | #18 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
У тебя DrawField() рисует всю матрицу? ...похоже всю. Т.е. сначала ряд проверок на позицию человечка и ящики, затем в самом конце отрисовка. У тебя в процедуре void MoveRight() отрисовка дважды встречается, ...по-моему лишнее.
Сначала нужно создать список ящиков, и отдельно человечка. У всех есть тип, координата по-X и по-Y. Не должно быть одной матрицы в которой все записано кодами, это же не статические объекты, а динамические. Поэтому сначала проверка списка ящиков и отрисовка их в координатах, которые они хранят. Каждый такт условие проверяет в списке каждый ящик. Если под ним пустота, то изменить положение на y+1, иначе пропустить ящик. После проверки всех ящиков беремся за человечка. Первая проверка так же на "пол" под ногами. Если клетка карты под ним пустая, то падать вниз: y+1. Все. Это первое необходимое. Если положить ящик на карту сверху, то он сам начнет падать, т.к. проверка списка нащупает этот ящик (еще бы, он в списке пока один), проверит координаты и сместит ящик на клетку вниз. Так будет каждый такт, пока под ящиком ничего нет. Теперь представь себе, как будет падать на голову человечку ящик. Это нужна проверка не только на пустоту под ним, но и на координаты человечка. Если клетка (y+1, x) это координаты человечка, то нужно удалить ящик из списка, а человечку отнять жизнь (переменная hp = hp - 1). Тут же проверка на число жизней, если hp <= 0, то все, тушим свет "game over". Значит все, ящики падают, человечек гибнет. Теперь нужно научить человечка ходить. Это на клавишах. При нажатии вправо, проверяем список ящиков, у которого из них координаты равны координатам человечка +1 по-X, если таковой нашелся, проверяем его координаты +1 по-X, если там пусто, то ящик смещается на +1 по-X, а человечек от своих координат +1 по-X, т.е. и человечек и ящик оба они поехали вправо на 1 клетку. Мы помним, что первое условие на падение ящика работает, и как только эта парочка дойдет до провала, ящик сам рухнет вниз. Кстати и человечек тоже если вовремя не остановиться, ...вылезти потом из ямки в 1 клетку не удастся . То же самое делается на левую клавишу. Отрисовка DrawField() один раз в самом конце процедуры, которая повторяется по таймеру.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 08.12.2010 в 20:01. |
08.12.2010, 20:06 | #19 |
Форумчанин
Регистрация: 02.11.2009
Сообщений: 179
|
Такс, вроде все понял, кроме списка ящиков, можно ли поподробнее объяснить?
Как вот из этого сделать список ? Код:
Я просто хотел бы понять принцип работы с этим списком и его функционал получше( как я понял нужно создать динамический список ящиков правильно ? ) Или же можно попробовать справиться статическим списком ? Последний раз редактировалось серг; 08.12.2010 в 20:22. |
08.12.2010, 20:23 | #20 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Список ящиков - одномерный массив собственного типа. Я не в курсе как синтаксис это позволяет делать, но выглядит как создание типа, в котором три записи: Ex, X и Y. Затем одномерному массиву присваиваем этот тип. Можно выйти на конкретную запись так (в общем виде):
Mas[i].X - это x (Byte); Mas[i].Y - это y (Byte); Mas[i].Ex - это индекс, что ящик есть (Boolean). i - это номер ячейки такого списка (массива). Ящик добавляется условием в цикле: если Mas[i].Ex = False (нет ящика), запишем в эту ячейку начальные координаты (Mas[i].X = 4, Mas[i].Y = 0) и Mas[i].Ex = True. Все, ящик есть. Теперь условие в таймере будет щупать массив Mas в таймере по i и искать Mas[i].Ex = True, ...найдет, значит будет обрабатывать его падение. Сама DrawField() тоже будет отрисовывать ящики, проверяя Mas[i].Ex, и для этого ей уже не нужно сканировать всю матрицу карты, только список ящиков и человечка. Нужно будет только прогнать один раз восстановление карты позади и затем новое положение всех объектов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работаю над гонками с гравитацией. | Вадим Буренков | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 255 | 05.09.2011 13:40 |
Проблема при написании компонента на основе TCustomControl | Flip-er | Компоненты Delphi | 4 | 28.03.2010 19:27 |
Возникла проблема при написании чата HelP | mar4elo | Работа с сетью в Delphi | 12 | 29.11.2008 22:16 |
Помогите при написании WebBrowser | kuzmich | Компоненты Delphi | 17 | 15.12.2007 18:58 |
Как и с чего начать при создании 2д игрушки. | fis | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 17 | 14.05.2007 18:14 |