AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Berechnungszeit zu lang. Optimierung??
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnungszeit zu lang. Optimierung??

Ein Thema von rotte · begonnen am 4. Jul 2009 · letzter Beitrag vom 4. Jul 2009
Antwort Antwort
rotte

Registriert seit: 21. Mai 2009
9 Beiträge
 
#1

Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:26
Hi,

ich arbeite gerade an einem Programm, dass dem alten Spiel "Snake" ähneln soll. Klick
Es läuft soweit eig alles, bis auf eine Sache. Ich hoffe ihr könnt mir dabei helfen.

Während des Spiels werden immer wieder 'Essens-Objekte' erstellt,
durch welche die Schlange eben wachsen kann. Für die positionierung dieser Elemente
müssen bestimmte Kriterien erfüllt sein: Erstens darf die Position nicht x > 20 und y > 20 betragen,
da das Essen sonst außerhalb des Spielfeldes liegt. Zweitens muss jede Positionsangabe
durch 10 teilbar sein, da sich die Schlange in 10er px Schritten auf der Form bewegt.
(Anderst habe ich es nicht hinbekommen.)

Hier mal meine Funktion:
Delphi-Quellcode:
function throwFood():boolean;
var x,y:integer;
begin
  repeat
   randomize;
   x:=0; y:=0;
   x := random(200);
   y := random(200);
  until (x > 20) and (y > 20) and (x mod 10 = 0) and (y mod 10 = 0);

 Form1.ShapeFood.Left := x;
 Form1.ShapeFood.Top := y;
 foodposx := x;
 foodposy := y;
end;
Die Berechnung von diesen Koordinaten dauert einfach viel zu lange,
sodass das Spiel nicht wirklich dynamisch wirkt.

Gibt es eine Möglichkeit die Berechnungszeit zu verkürzen?

mfg. rotte
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:36
Naja, du lässt den computer x mal zahlen würfeln, bis deine zahl endlich den bedinungen entspricht... mach es doch so, dass die zahlen direkt so angepasst werden, dass sie auf alle fälle deinen bedinungen entsprechen!

z.B. so:


//edit: Denkfehler-> Post von Phantom1 enthält den korrekten Code
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:37
Das "randomize" in deiner Schleife ist bestimmt nicht mit absicht gewesen oder? "randomize" sollte man nur einmal beim programmstart aufrufen, am besten im formcreate.

mein vorschlag um dein problem zu lösen:
Delphi-Quellcode:
function throwFood():boolean;
begin
  foodposx := (random(17)+3)*10; // zufallszahl von 30 bis 190 in 10er schritten
  foodposy := (random(17)+3)*10; // zufallszahl von 30 bis 190 in 10er schritten

  Form1.ShapeFood.Left := foodposx;
  Form1.ShapeFood.Top := foodposy;
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:42
wenn x und y nicht größer 20 sein dürfen, warum erzeugst du dann Zufallswerte bis 199 und nicht nur bis 20?
Ein anderer Punkt ist das ich persönlich niemals so eine Funktion schreiben würde da es eben im schlimmsten Fall eine Endlosschleife ist. Denn zufällig könnte random dir immer Werte größer 20 ausgeben.
Zu deinem Punkt das die Werte durch 10 Teilbar sein müssen. So wirklich viel Punkte bleiben dann gar nicht übrig! denn kleiner gleich 20 sind nur 0,10 und eben 20.
Was ich auch nicht verstehe ist warum du x und y auf 0 setzt und direkt danach einen Zufallswert zuweist.

Kurz und knapp wie man es performanter macht ohne Endlosschleife etc.

Delphi-Quellcode:
var
  MAX_VAL: Integer;
  FACTOR: Integer;
  x: Integer;
  y: Integer;
begin
  MAX_VAL := 20;
  FACTOR := 10;
  x := random(MAX_VAL div FACTORY + 1);
  y := random(MAX_VAL div FACTORY + 1);
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:44
Zitat von SirThornberry:
wenn x und y nicht größer 20 sein dürfen, warum erzeugst du dann Zufallswerte bis 199 und nicht nur bis 20?
Er will doch gerade Zahlen größer als 20 haben, er benutzt ja als Schleifenabbruchbedinung "until x>20"
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:46
als im ersten Beitrag steht:
Zitat:
Erstens darf die Position nicht x > 20 und y > 20 betragen,
Und ich bin eben nach der Beschreibung und nicht nach dem Quelltext gegangen weil der Quelltext eben laut seiner Aussage nicht so ist wie gewollt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:47
Zitat von SirThornberry:
als im ersten Beitrag steht:
Zitat:
Erstens darf die Position nicht x > 20 und y > 20 betragen,
Und ich bin eben nach der Beschreibung und nicht nach dem Quelltext gegangen weil der Quelltext eben laut seiner Aussage nicht so ist wie gewollt.
Auch wieder wahr... hm bleibt also die Frage: Was willst du genau, rotte??
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
rotte

Registriert seit: 21. Mai 2009
9 Beiträge
 
#8

Re: Berechnungszeit zu lang. Optimierung??

  Alt 4. Jul 2009, 20:48
Danke für die schnelle Hilfe.
Funktioniert jetzt wunderbar.

Edit: Die Zahlen müssen größer als 20 sein. Tut mir Leid, wenn es etwas missverständlich war.
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz