Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2010, 20:43   #21
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

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

Последний раз редактировалось серг; 08.12.2010 в 20:46.
серг вне форума Ответить с цитированием
Старый 08.12.2010, 20:51   #22
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

блин я затупил откуда собственный массив заполнять получается из рандом стека ?
Кто тут в си шарит,помогите разобрать написание алгоритма? Я с ходу никак не соображу как получше реализовать алгоритм Бирмонзы

Последний раз редактировалось серг; 08.12.2010 в 20:57.
серг вне форума Ответить с цитированием
Старый 08.12.2010, 21:29   #23
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

У тебя есть хоть какая-нибудь книжечка по Си? ...ну, на подобии справочника что ли, где можно просмотреть синтаксис создания нескольких записей для одной ячейки массива.
Понимаешь в чем дело, ...если сканировать карту на код, где что записано, то в один нехороший момент какой-то объект может помешать условиям корректно определить что на карте. Из-за этого куча проблем, множество условий, которые сами себя проверяют, перепроверяют, ...а пользователь не дремлет и тоже двигает человечка, возникают непонятности с кодом в клетке. Если изначально создать модель уровня и модель объекта (в виде записей), то все упрощается, и гарантия корректной работы 100%, ведь один из ящиков или человек просто не может "затереть" на карте любой из себе подобных объектов (они разграничены в списке).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.12.2010, 21:38   #24
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

Понимаю, блин, вот щас справочник читаю, пока путного мало нашел.
серг вне форума Ответить с цитированием
Старый 08.12.2010, 22:00   #25
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

По ходу нашел идейку, но ее не так то просто прописать ( придется каждому элементу массива присвоить указатель на структуру из 3х элементов,которые ты предложил)
серг вне форума Ответить с цитированием
Старый 08.12.2010, 22:09   #26
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ищи создание типов, классов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.12.2010, 22:10   #27
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

Язык то процедурный, в нем по идее нет объектов,
хотя {ой!} щас правда класс забабахаю.
сори за правку
код такой
Код:
class yashik
{
public:
	int h;
	int w;
	bool ex;
	int randomstack();
}
int yashik::randomstack{
	int w=0;
	srand (time(NULL));
	int h=rand()%14+1;
	Cell[w][h]=3;
	}
функцию сделал функцией класса
Теперь вопрос, как сюда запихнуть падение ящиков ? Или так и оставить в мейне только рандомстек будет вызываться как функция класса а цикл тот же останется

Последний раз редактировалось серг; 08.12.2010 в 22:26.
серг вне форума Ответить с цитированием
Старый 08.12.2010, 22:34   #28
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ну я не знаю, ...если не заработает система с записями, попробуй создать список массив как двумерный: int Mas[n][3], n - тут задай сколько максимум может быть ящиков, ну а далее из 3-х вариантов второй ячейки будут твои переменные:

Mas[i][1] - это X;
Mas[i][2] - это Y;
Mas[i][3] - это Ex (0 - пусто, 1 - ящик);

...я сегодня более не появлюсь. Разгребай, этот метод самый простой и рабочий.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 09.12.2010, 17:00   #29
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

Код:
int w=0;
int h;
int n=200;
int Mas[200][3];

while(i<n)
  {
    randomstack();
    h=randomstack();
    Mas[i][1]=h;
    Mas[i][2]=w;
    ex=0;

    if(Mas[i][1]!=0)
      {
        ex=1;
      }

    Mas[i][3]=ex;
    if(Mas[i][3]==1)
      {
        while(Cell[w+1][h]==0)
          {
            time2 = time(NULL);
            if ((time2-time1)>0,5)
              {
                Cell[w][h]=0;
                Cell[w+1][h]=3;
                w=w+1;
                DrawField();
                time1=time2;
              }
          }
      }
  }
Типа так? Или я не совсем понял ?
И еще подскажи теорию по прыжкам вправо влево на ящики( если ящик в воздухе справа или слева на 1 клетку выше человека,то ящик при прыжке человека тоже сдвигается(вправо или влево))

Последний раз редактировалось Beermonza; 09.12.2010 в 19:46.
серг вне форума Ответить с цитированием
Старый 09.12.2010, 20:09   #30
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ты слегка погорячился с максимумом:

Код:
int n=200;
int Mas[200][3];
...хватит 10 для начала. Теперь случайное появление ящиков. По идее должно быть в роде тетриса, начало падения всегда с потока и вниз. Поэтому, давай ка как положено обзови координаты x и y, ...а то w и h - это обозначение совсем не координат а ширины и высоты чего-то (Width, Height). Значит переменные такие:

Код:
int x;
int y;
int r;
int n=10;
int Mas[10][3];
Идем дальше. Для проверки просто создадим один ящик с помощью процедуры "создать ящик" - createbox. Я не знаю как правильно задается процедура, но в ней должно быть вот это:

Код:
цикл i от 0 до n
  {
    если Mas[i][3] = 0 то
      {
        r = 1 + randomstack(13);   // не знаю как в r поместить случайное число от 1 до 14
        Mas[i][1] = r;     // это X
        Mas[i][2] = 0;    // это Y, он 0 - под потолком
        Mas[i][3] = 1;    // это Ex, объект существует

        // тут нужно как-то сбросить цикл, больше не нужно искать свободную ячейку
      }
  }
Теперь эта процедура CreateBox будет в любой момент добавлять ящик в список. Этот момент должен быть связан с таймером. Заведи переменную, которая в основном таймере игры будет брать случайное число от 0 до 100 - это 100%, и путь попадает в 50%, т.е. если число меньше 50, то создать ящик, вызвать CreateBox. Нужно 25%, то условие будет: если случайное число от 0 до 100 меньше 25, то CreateBox.

Выполни все это и наблюдай как ящики падают вниз с потолка.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работаю над гонками с гравитацией. Вадим Буренков 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