Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Проекты на MidletPascal

Ответ
 
Опции темы
Старый 27.10.2010, 01:09   #61
_Nox_
ПроЭктировщик
 
Регистрация: 21.06.2009
Адрес: Беларусь, Столбцы
Сообщений: 148
Написано 32 полезных сообщений
(для 57 пользователей)
Ответ: La Nuit Tombe (изометрический движок)

program heapsort;
const 
	max_Heap = 10000;
type 
	THeap = record 
	  h:array [1..max_heap] of integer;
	  E:integer;	  
         end;   

var
	Heap: theap;
	i,p:integer;
	
procedure create_heap;
begin

heap.E:=0;
 
end;

procedure in_heap (A:integer);
var 
	cc:integer;
	cur:integer;
begin
inc (heap.e);
heap.h [heap.e]:=a;
cur:=heap.e;
while (heap.h [cur]<heap.h [cur div 2]) do
 begin
  cc:=heap.h [cur];
  heap.h [cur]:=heap.h [cur div 2];
  heap.h [cur div 2]:=cc;
  cur := cur div 2;
  if cur = 1 then break;
 end; 
end;

PROCEDURE OUT_HEAP (var A:integer); 
var 
	cc,cur,next:integer;
begin
a:=heap.h[1];
heap.h [1]:=heap.h[heap.e];
dec (heap.E);
cur:=1;
while true do
 begin
  if heap.h [cur*2]<heap.h [cur*2+1] then next:=cur*2 else next:=cur*2+1;
  if heap.h [cur]>heap.h [next] then
   begin
    cc:=heap.h [cur];
    heap.h [cur]:=heap.h [next];
    heap.h [next]:=cc;
    cur := next;
    if cur * 2> heap.e then break;
   end else break;
 end;
end;


begin
create_heap;
for i:=1 to 1000 do
 IN_heap (random (10000));
for i:=1 to 1000 do
 begin
  Out_heap (P);
  write (p, ' ');
 end; 
end.
Вот, только что написал, слегка протестировал, вроди работает, адаптируй код под себя, мне просто спать уже пора, нет времени, кстати, я бы тебе посоветовал, посчитать сразу один массив с суммами, чтобы сократить количество вычислений. И не забудь указать кто код писал
(Offline)
 
Ответить с цитированием
Старый 27.10.2010, 12:01   #62
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: La Nuit Tombe (изометрический движок)

я так понял Е - число заполненных элементов массива?
тогда у меня выходит вот чего:


и вот:

(слева твоя, справа пузырьковая)

Судя по тому что в игре стены отрисованы правильно, то при первом пробеге массив отсортировался правильно, но когда значения меняются - он их не сортирует((

Вообще есть мысль сделать массив boolean'ов и туда загонять индексы изменившихся элементов. Тогда, надеюсь выйдет ускорить сортировку)
(Offline)
 
Ответить с цитированием
Старый 27.10.2010, 16:39   #63
_Nox_
ПроЭктировщик
 
Регистрация: 21.06.2009
Адрес: Беларусь, Столбцы
Сообщений: 148
Написано 32 полезных сообщений
(для 57 пользователей)
Ответ: La Nuit Tombe (изометрический движок)

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

Кстати, что-то на первой картинке, мужыки как-то не правильно стоят, то от сортировки зависит?
(Offline)
 
Ответить с цитированием
Старый 27.10.2010, 19:49   #64
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: La Nuit Tombe (изометрический движок)

У меня и стены и враги в одном массиве.
Враги уже перешли на новое место, а в массиве их положение не изменилось.

Просто на реальном телефоне пузырьковая тратит ~30мс, а не 1 как эмулятор. А это уже не очень-то хорошо(
(Offline)
 
Ответить с цитированием
Старый 27.10.2010, 22:08   #65
psih1
Знающий
 
Аватар для psih1
 
Регистрация: 20.03.2010
Сообщений: 271
Написано 16 полезных сообщений
(для 32 пользователей)
Ответ: La Nuit Tombe (изометрический движок)

а можеш дать свою формулу формиравания тайлов на карте
__________________
¯¯¯¯\——-/¯¯¯¯ респект любителям BMX
(Offline)
 
Ответить с цитированием
Старый 28.10.2010, 20:06   #66
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: La Nuit Tombe (изометрический движок)

Как-то так, но вообще зависит от реализации всего остального:

drawimage(tile,tile_x*21-tile_y*21-hero_x*21-hero_x2*2+hero_y*21+hero_y2*2+100,i*10+j*10-hero_x*10-hero_x2-hero_y*10-hero_y2+160+r);
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 05:40.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com