AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmoptimierung

Offene Frage von "HansDampf43"
Ein Thema von HansDampf43 · begonnen am 5. Mär 2010 · letzter Beitrag vom 8. Mär 2010
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz