IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> 2d танчики в паскале, Вопрос по реализации многозадачности
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Олег

Репутация: -  0  +


Доброго времени суток.
Пишу вот(пока еще на TP 7.1 ) игрушку танчики. Возникла проблема с реализацией многозадачности, чтоб всё двигалось одновременно и т.п. Сделал через пошаговое выполнение. Получилось нечто дико тормозное и совершенно неиграбельное.(следовало ожидать, но всё же)
Мне нужно отрисовывать одновременно 5 танков и до 8 снарядов(возможен какой-то процент из них взрывов).
Была дикая мысль сделать систему флагов и отрисовывать всё одновременно на одной странице..но в конце-концов мне , видимо, придётся перейти на FPC, а там есть потоки.
Но пока не могу даже отдалённо представить, как пошагово будет выглядеть алгоритм отрисовки и обработки событий(клавиши управления, летящий снаряд, AI противников и пр), не говоря уже, как это будет на языке операторов((
Надеюсь на помощь уважаемых форумчан.
Спасибо.
P.S. почитал темы, но ответов на свои вопросы не нашёл. Если я слепой- ткните, плиз.

Сообщение отредактировано: lrx2 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


А какие игры у вас уже были?
Игра в спички? Лабиринтики?
Сразу не надо браться за то, что вы не понимаете. А то потоки вам понадобились зачем-то. Они вам ну никак не помогут, кстати говоря.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






lrx2, ты случайно с пользователем LRx2 с параллельного форума не знаком? Если имеется в виду твой проект, который ты выкладывал на Сурсах, то естественно, что оно тормозит. Тебе надо переделывать его. Я вот о чем: у тебя там неэффективная реализация: ты произвел выстрел одним из танков, и переходишь в процедуру контроля полета снаряда? Не надо этого делать. У тебя танк твой, танки вражеские и снаряды - это все объекты. Сделай объект Наблюдатель (ну, или как ты его там назовешь), который будет отслеживать местоположение всех вышеперечисленных объектов, а каждый из объектов (танки/снаряды) перепиши так, чтобы они меняли свое положение в зависимости от текущего времени. То есть, будет что-то типа:
tsupervisor =
object
currentTime: longint;
lstOfObjects: array[0 .. maxObjectsAllowed] of TMyObject;
// Все танки и снаряды - наследники от TMyObject

// ...
procedure Run;
end;

procedure tsupervisor.Run;
var t: longint;
begin
repeat
t := currentTime;
currentTime := getCurrentTime; // как-то получаешь текущее время, типа gettickcount
for i := 0 to currentlyObjects do begin

// UpdatePos - метод из TMyObject, возможно - переопределенный
lstOfObjects[i].UpdatePos(currentTime - t);

end;
// Здесь же - проверка на то, попал ли снаряд в цель, или может, танки столкнулись
// или все вражеские танки уничтожены и пора заканчивать игру ...
until false;
end;

Метод UpdatePos в каждом объекте будет получать разность времени между предыдущим и последним обновлением, скорость объекта внутри него же известна, направление движения - тоже, то есть, можно вычислить новое положение, и перерисоваться... Ну, вот такой набросок... Подобным методом я когда-то делал отображение снежинок в своей новогодней программе, можешь посмотреть на форуме, до 3000 штук рисуется вполне сносно, без задержек... Но решать, конечно, тебе...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Олег

Репутация: -  0  +


Случайно я.)
Ок{ "интересная конструкция"-просплюсь, потом разберёмся..)}
Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Олег

Репутация: -  0  +


Здравствуйте.
Написал подобие наблюдателя, но, видимо, испортил идею, потому результат сносный, но не фонтан.
Прошу оказать помощь в оптимизации)
Он находится в модуле U_PLAY, процедуре play.
Остальные баги(типо простреливания непреодолимой и неразрушимой преграды, странно затирающегося снаряда и т.п.) надеюсь найти сам. Найдёте еще какие- буду рад услышать.
Спасибо.


Прикрепленные файлы
Прикрепленный файл  Tank6may.rar ( 93.92 килобайт ) Кол-во скачиваний: 528
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Олег

Репутация: -  0  +


Доделал игрушку.
Если будут какие-то замечания, буду рад услышать.
(примечание: возможно будут проблемы с первой менюшкой- там полёт снаряда сделан через delay, который работает нестабильно..пробовал сделать через досовскую процедуру взятия времени, но рассчёты занимают изрядное количество времени, потому пришлось оставить. Есть еще баг неотловленный- иногда появляется серый прямоугольник 5х5 или закрашивается 50-100% поля(только на одной странице)..возможно, не все снаряды удаляются, хотя не раз проверял..баг плавучий походу.
Больше никаких нестабильностей обнаружено не было)


Прикрепленные файлы
Прикрепленный файл  GAME.rar ( 133.85 килобайт ) Кол-во скачиваний: 836
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Адская игрушка! Я никак не могу компьютер обыграть. Скорость движения танка игрока вообще никакая. Пока я сдвинусь с места, танк компьютера уже всю карту проедет ( !yessir.gif ) и меня пристрелит. ( adm.gif )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


В эмуляторе dosemu управление подтормаживает но кое-как по противнику попасть можно. Надо протестить в реальном досе smile.gif Лучше сразу писать на FPC чтобы не было проблемы на чём запускать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 18:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name