Einzelnen Beitrag anzeigen

HansDampf43

Registriert seit: 5. Mär 2010
4 Beiträge
 
#1

Programmoptimierung

  Alt 5. Mär 2010, 19:21
Moin Community,

Also, ich arbeite derzeit an einer "Art" Pacman.
Das ganze sieht so aus: Man steuert ein Pacman durch die typische "Pacman" Karte und frisst Geister auf die dort zufällig herumlaufen.
Klappt eigentlich soweit auch alles.

Nun zu meinem Problem: bei etwas erhöhter Zahl von Geister, insbesondere bei Leistungsschwächeren Rechner fängt das Spiel schnell an zu ruckeln.

Dazu muss man sagen: ich war bislang beim programmieren froh WENN es geklappt hat, egal wie schön(ressourcen sparsam) es programmiert war. Meint also: mir ist bewusst dass das ganze ziemlich "hässlich" programmiert ist.

Also es funktioniert so, das die Geister auf einen Timer immer 1 pixel in eine richtung gehen, vor jeder Bewegung wird die procedure "Kollisionsabfrageg" gestartet.


Delphi-Quellcode:
procedure TForm1.KollisionsabfrageG;
var
l,r,i,v:integer;

begin
 if anzahl>0 then //Anzahl=Anzahl der Geister
for i:=1 to anzahl do begin

  if existiert[i]=true then begin


   if geister[i].left<1 then
geister[i].left:=750;

if geister[i].left>750 then
geister[i].left:=-0;

if ((image1.canvas.pixels[Geister[i].left-1,geister[i].top] = RGBtocolor (0,0,255)))or //Image1 ist das "hintergrundbild, also die Karte, die "Wände" sind blau
   ((image1.canvas.pixels[Geister[i].left-1,geister[i].top+29] = RGBtocolor (0,0,255))) // 0,0,255
 then
 l:=1
 else
 l:=0;


if ((image1.canvas.pixels[geister[i].left+29,geister[i].top] = RGBtocolor (0,0,255)))or
   ((image1.canvas.pixels[geister[i].left+29,geister[i].top+29] = RGBtocolor (0,0,255)))
   then
   r:=1
   else
   r:=0;

if (l=0) and (r=0) then
kollisiong[i]:=false
else begin
kollisiong[i]:=true;
end;
if kollisiong[i]=true then begin
 if richtungg[i]=1 then geister[i].left:=geister[i].left-2;
 if richtungg[i]=2 then geister[i].top:=geister[i].top+2;
 if richtungg[i]=3 then geister[i].left:=geister[i].left+2;
 if richtungg[i]=4 then geister[i].top:=geister[i].top-2;
   case richtungg[i] of
 1: case v of 0:richtungg[i]:=1; 1:richtungg[i]:=2; 2:richtungg[i]:=4;end;
 2: richtungg[i]:=random(3)+1;
 3: richtungg[i]:=random(3)+2;
 4: case v of 0:richtungg[i]:=1; 1:richtungg[i]:=3; 2:richtungg[i]:=4;end;
 end;

 end;
 end;
  end;
Gut also was ich gerne wissen möchte:

Habt ein paar tipps um ressourcen schonender zu programmieren ? Was sind wahre CPU Fresser ? Zufallszahlen ? Bilder laden etc ?
Habt ihr vielleicht sogar eine bessere Idee zur Realisierung ?

Wenn ihr noch Fragen habt, oder andere Programmteile sehen wollt, oder ich mich unverständlich ausgedrückt habe, sagt es mir bitte =)


Vielleicht kann ja jemand helfen
DAnke schonmal im vorraus =)

PS: Achja ich arbeite mit Lazarus
  Mit Zitat antworten Zitat