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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2008, 09:59   #11
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

посмотри описания функций ord() b chr()
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.05.2008, 10:48   #12
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
посмотри описания функций ord() b chr()
Негде смотреть, в интернете через GPRS искать не хочется...но что то мне подсказывает что к счетчику ето никакого отношения не имеет.
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 01.05.2008, 16:05   #13
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Делимся опытом...

[Smarik], я так понимаю, таймер вам нужен для изменения ситуации на экране, т.е. грубо говоря, это таймер построения кадра (в терминологии движка)?, ...поправите, если что. Может быть следующее вам поможет в написании игры.

Изначально следует разделить всю систему игры на четко разграниченные подсистемы, со своими свойствами и организовать их взаимодействие.

1 Система хранения информации.
Все объекты игры должны делиться по типам и обладать набором характеристик, ...это - текущее положение в пространстве, тип анимации (номер кадра), тип действия, всевозможные вспомогательные флаги переходов, статические наборы характеристик (броня, оружие) и многое многое другое. Хранить это все следует в массивах или записях, создав как отдельный тип. Тогда в нужный момент вы будете четко знать где ваш объект, что он делает, какой набор стат. характеристик имеет. Никогда не стоит полагаться на набор условий, которые записывают в некоторые переменные текущие данные и перезаписываются в следующий такт или изменяют положение объектов непосредственно.

2 Система сетевой поддержки.
Она должна содержать алгоритмы приема/передачи (шифрования/расшифровки) данных и запись в массивы системы хранения данных. Никакого непосредственного изменения объектов в ней не должно быть. Сдесь организуется стыковка с модулем опроса клавиатуры (в данном случае OnKeyDown). Нужна разработанная самостоятельно структура команд, и система деления по типам.

3 Движок.
Ядро. Он должен выполнять построение кадра, используя статические ресурсы, динамически выбирая нужные из них для построения кадра в текущий момент игры. Т.е. движок связан с общими ресурсами и с динамической системой хранения данных, которая выступает в роли шаблона выборки. По сути, нужная Вам часть движка представляет из себя один большой цикл, повторяющийся через определенный интервал (таймер). В таймере нужно применить набор условий, которые связаны с системой динамического хранения данных, и в зависимости от них отображают объекты с нужными параметрами.

Пример.
Система сетевой поддержки приняла пакет, определила тип команды, считала данные, обновила данные для конкретного объекта (система хранения информации), движок в очередной проход цикла считал данные для конкретного объекта и нарисовал объект в нужном месте с нужными характеристиками.

Цитата:
Сообщение от Smarik
почему то в OnKeyDown не получается использовать оператор CASE выдает ошибки на типы данных...
Если вопрос не отпал, то покажите код или его часть на OnKeyDown
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 01.05.2008, 20:54   #14
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Smarik, смотри этот пост (мультиопрос клавиатуры) http://www.programmersforum.ru/showthread.php?p=72509#post72509
После меня там еще несколько вариантов привели.
Так вот, условия if там легко заменяются на case таким образом:
Код:
case key of
37: ;
38: ;
//и т.д.
end;
Насчет стрельбы из танка, сделай для начала объекты танк, цель, снаряд. Каждый со своими свойствами. У снаряда задай скорость полета, дальность если надо, и в таймере прибавляй к его координатам скорость и проверяй на столкновение. Как только снаряд попал в цель или вышел за экран, или превысил дальность, дизактивируй его, для этого у него должно быть свойство типа Enabled, и в зависимости от причины производи либо взрыв, либо еще чего, либо совсем ничего =)
Обработку полета и отрисовку снаряда производить только если он активен.
Активировать снаряд по нажатию кнопки FIRE =)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 01.05.2008 в 20:56.
mutabor вне форума Ответить с цитированием
Старый 02.05.2008, 11:02   #15
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Smarik, смотри этот пост (мультиопрос клавиатуры) http://www.programmersforum.ru/showthread.php?p=72509#post72509
После меня там еще несколько вариантов привели.
Так вот, условия if там легко заменяются на case таким образом:
Код:
case key of
37: ;
38: ;
//и т.д.
end;
Насчет стрельбы из танка, сделай для начала объекты танк, цель, снаряд. Каждый со своими свойствами. У снаряда задай скорость полета, дальность если надо, и в таймере прибавляй к его координатам скорость и проверяй на столкновение. Как только снаряд попал в цель или вышел за экран, или превысил дальность, дизактивируй его, для этого у него должно быть свойство типа Enabled, и в зависимости от причины производи либо взрыв, либо еще чего, либо совсем ничего =)
Обработку полета и отрисовку снаряда производить только если он активен.
Активировать снаряд по нажатию кнопки FIRE =)
я писал
case key of
VK_UP:
и.т.д он выдавал ошибку на key, но изучая движок впритнципе понял что не во всех событиях можно использовать какие то клавиши или они обозначаются иначе, насчет танка ето все сделано и работает, я понимаю как должен работать таймер и чего я хочу, я просто не умею работать с таймером =) незнаю как присваивать, устанавливать время и прочее.
оффтоп: Пытаюсь поднять человеку репутацию, пишут что все ок, но репутация не поднимается, почему?
Я ваш новый друг, смиритесь!

Последний раз редактировалось [Smarik]; 02.05.2008 в 11:05.
[Smarik] вне форума Ответить с цитированием
Старый 02.05.2008, 22:03   #16
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

VK_... это константы, VK_UP = 38 и т.д.

Какое время? Ставишь интервал таймеру и все, в событии OnTimer пишешь что надо. Задача таймера тикать, все остальное в твоих руках =)

оффтоп: вес отзыва зависит от твоей репутации
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 03.05.2008, 11:40   #17
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

У меня есть вечная проблема, сегодня столкнулся с ней особенно плотно, сидя на практире решил сделать игру танчики (аналог танчиков на денди) на движке omega и все время получаются не рациональные методы решения куча условий, циклов все ето можно сократить через массивы или еще более простые методы, может есть в арсенале специальная литература "методы решения" или что то подобное, чтобы привыкнуть к более коротким алгоритмам. Для наглядности подскажите как можно сократить следующий код
Код:
SSprite_Draw( BG, 0, 0, 800, 600, 255, 0, FX_DEFAULT ); 
SSprite_Draw( tu, X, Y, 58, 74, B, 0, FX_DEFAULT );
SSprite_Draw( td, X, Y, 58, 74, C, 0, FX_DEFAULT );
SSprite_Draw( tr, X, Y, 74, 58, D, 0, FX_DEFAULT );
SSprite_Draw( tl, X, Y, 74, 58, E, 0, FX_DEFAULT );
SSprite_Draw( S, Z, W, 12, 12, I, 0, FX_DEFAULT );
if Key_Down( K_RIGHT ) Then BEGIN
Z:=X+90;
W:=Y+25;
B:=0;
C:=0;
I:=0;
D:=255;
E:=0;
X := X + 1;
END;
if Key_Down( K_LEFT  ) Then BEGIN
Z:=X-30;
W:=Y+25;
I:=0;
B:=0;
C:=0;
D:=0;
E:=255;
X := X - 1;
END;
if Key_Down( K_UP    ) Then BEGIN
Z:=X+25;
W:=Y-25;
I:=0;
B:=255;
C:=0;
D:=0;
E:=0;
Y := Y - 1;
END;
if Key_Down( K_DOWN  ) Then BEGIN
Z:=X+25;
W:=Y+90;
I:=0;
B:=0;
C:=255;
D:=0;
E:=0;
Y := Y + 1;
END;
IF KEY_DOWN(13) THEN BEGIN
I:=255;
IF D=255 THEN BEGIN
Z:=X+200;
W:=Y+25
END ELSE
IF E=255 THEN BEGIN
Z:=X-200;
W:=Y+25
END ELSE
IF B=255 THEN BEGIN
W:=Y-200;
Z:=X+25
END ELSE
IF C=255 THEN BEGIN
W:=Y+200;
Z:=X+25; END;
END;
На первый взгяд кода не так уж и много, но ведь надо по такому же принципу сделать искуственный интелект, да и такие кучи условий явно не хороший стиль программирования. Еще вопросик насчет етого самого интелекта, не подскажите принцип действия, как AI должен двигаться к вам, отслеживать место положение и стрелять когда примерно должен попасть. Может быть кто то работал с омегой? Не нашел там обработку событий, поетому решил сделать реакцию AI на ваше действие, тоесть если вы стоите, то и он стоит!
Код:
IF KEY_DOWN(13) THEN BEGIN
I:=255;
IF D=255 THEN BEGIN
Z:=X+200;
W:=Y+25
END ELSE
IF E=255 THEN BEGIN
Z:=X-200;
W:=Y+25
END ELSE
IF B=255 THEN BEGIN
W:=Y-200;
Z:=X+25
END ELSE
IF C=255 THEN BEGIN
W:=Y+200;
Z:=X+25; END;
END;
Данное условие учит танк стрелять, но стельба выглядит не красиво, тоесть за долю секунды снаярд появляется на екране и пролитает +200 пикселей относительно танка, как через счетчик сделать ето помедленнее?
Я ваш новый друг, смиритесь!

Последний раз редактировалось [Smarik]; 03.05.2008 в 11:46.
[Smarik] вне форума Ответить с цитированием
Старый 03.05.2008, 13:18   #18
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Может быть кто то работал с омегой? Не нашел там обработку событий
Каких событий? Омега это графический движок, что ты к ней прицепился. Таймер, спрайты, вывод графики - вот ее основная задача.

Таймер тикает - ты пишешь обработку и генеришь "события" какие тебе надо, исходя из определенных данных. События в кавычках потому что это обычные функции, к-рые ты будешь вызывать из обработчика таймера.

Пример:
Код:
//твое событие
procedure MyEvent;
begin

end;

//тик таймера
begin
if (выполнилось какое-то там условие) then MyEvent;
end
Насчет оптимизации, почитай какую нибуь общую статью про это. Общий принцип такой: не допускать лишних проверок, повторяющийся код выносить в общие функции и т.д.
Кода будет в любом случае много, то что ты привел это еще не много.
Часто придется работать не с простыми условиями, а с обработкой массивов в циклах. Допустим у тебя есть N вражеских танков, чтобы определить находишься ли ты у кого нибудь из них под прицелом, нужно будет пройтись по ним в цикле for i:=0 to N-1 do...
Применим это все к примеру события:
Код:
//событие - выстрел из танка
procedure Shoot(i: integer);
begin
//стреляет танк[i]
end;

//тик таймера
begin
for i:=0 to N-1 do
  if (можно стрельнуть танку[i]) then Shoot(i);
end
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 03.05.2008, 13:55   #19
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Данное условие учит танк стрелять, но стельба выглядит не красиво, тоесть за долю секунды снаярд появляется на екране и пролитает +200 пикселей относительно танка, как через счетчик сделать ето помедленнее?
Я уже говорил насчет снаряда, задай ему скорость, но не 200 конечно, а где-то 10-20, в зависимости от интервала таймера. Продолжим все на том же примере:
Код:
//обработка полета снаряда
procedure ProcessShoot;
begin
//прибавляем к координатам снаряда скорость, это можно
//реализовать по разному, но как минимум четыре основных направления 
//стрельбы должно быть, например так
if (направление вправо) then снаряд.х:=снаряд.х+скорость;
if (направление влево) then снаряд.х:=снаряд.х-скорость; //и т.д.

//затем проверка попал ли снаряд или промах
if (попал) then 
  begin
  IsFire:=False; //отключаем обработку полета
  Explosion; //взрываем
  end;
if (улетел за экран) then IsFire:=False;
end;

//событие - выстрел из танка
procedure Shoot(i: integer);
begin
//стреляет танк[i]
IsFire:=True;
end;

//тик таймера
begin
for i:=0 to N-1 do
  if (можно стрельнуть танку[i]) then Shoot(i);
if IsFire then ProcessShoot;
end
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 05.05.2008, 17:24   #20
Misterio
 
Регистрация: 28.04.2008
Сообщений: 3
По умолчанию

Возможно ли в синем компиляторе работать с сетью? Если да,то как?
Misterio вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать игру LINES в паскале Настёна Фриланс 7 23.06.2008 23:40
Кто может написать игру для мобильного? Иван Викторович Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 14.03.2008 21:07
Нужно написать игру! Juice Фриланс 8 21.10.2007 20:15