AGB  ·  Datenschutz  ·  Impressum  







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

Zufalls-Bewegung

Ein Thema von Aria · begonnen am 19. Okt 2005 · letzter Beitrag vom 19. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Aria

Registriert seit: 19. Okt 2005
Ort: Hamburg
11 Beiträge
 
#1

Zufalls-Bewegung

  Alt 19. Okt 2005, 23:00
Hallo nochmal,
ich habe noch eine Frage

Also, in meinem Delphi-Game, bewegen sich Vögel-Bilder durch den Bildschirm.
Diese Bewegung habe ich mit einem Timer gemacht:

Delphi-Quellcode:
image2.Top:=image2.Top+10;
image2.Left:=image2.left+10;
Der Timer wird aktiviert (enabled) wenn ich einen Button drücke.
Ich möchte aber, dass die Bilder zufällig die richtung wechseln, während sie durch den Bildschirm fliegen, ist das möglich, wenn ja wie würde dass dann lauten?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:05
Hallo,

klar ist das möglich.

Definiere einfach zwei Variablen als Integer (z. B. RichtungX und RichtungY). Die setzt Du am Anfang auf +1 und rufst Randomize auf. In Deinem Timer schreibst Du dann einfach
Delphi-Quellcode:
 if Random(100) = 0 then
  RichtungX := -RichtungX;
if Random(100) = 0 then
  RichtungY := -RichtungY;
image2.Top:=image2.Top+10 * RichtungY;
image2.Left:=image2.left+10 * RichtungX;
Durch die Multiplikation mit -1 drehst Du einfach das Vorzeichen um. Den Wert bei Random kannst Du beliebig wählen, je größer, desto seltener die Wechsel.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:06
Etwa so:

Delphi-Quellcode:
Randomize;

// OnTimer:
delta := randomrange(-10,10); // in unit Math;

Vogel.left := Vogel.Left+Delta;
Randomrange gibt ein zufällige Zahl zwischen den beiden übergebenen zurück.

Natürlich noch Überprüfungen, ob der Vogel aus dem Bild fliegt usw.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Aria

Registriert seit: 19. Okt 2005
Ort: Hamburg
11 Beiträge
 
#4

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:11
Also, ich muss nun

Delphi-Quellcode:
 if Random(100) = 0 then
  RichtungX := -RichtungX;
if Random(100) = 0 then
  RichtungY := -RichtungY;
image2.Top:=image2.Top+10 * RichtungY;
image2.Left:=image2.left+10 * RichtungX;
in den Timer angeben, und dann? Weiter habe ich nicht mehr verstanden!
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:20
Sein Code funktioniert so, dass der Vogel sich bei jedem Timerevent um 10 Pixel bewegt.
Mit dem Random(100)=0 will er erreichen, dass sich die Bewegungsrichtung des Vogels ändert.
Da es sich bei RichtungX aber wahrscheinlich um eine lokale Variable handelt, wird der Code so nicht laufen.
Anderer Vorschlag:
Delphi-Quellcode:
if random(100)=0 then x:=1 else x:=-1;
Vogel.left:= Vogel.left+x*random(20);
Damit verschiebt sich dein Vogel jedesmal um 0-19 Pixel und änder etwa alle hundert Events die Rchtung.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Aria

Registriert seit: 19. Okt 2005
Ort: Hamburg
11 Beiträge
 
#6

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:23
Dass habe ich jetzt unter

Delphi-Quellcode:
image2.Top:=image3.Top+27;
image2.Left:=image3.left+17;
eingefügt, nun wird mir aber gesagt, dass "x" kein deklarierter befehl oder so ist!
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:23
Hallo,

durch die Random-Befehle wird (so der Zufall will) bei dem Variablen das Vorzeichen gewechselt (RichtungX := -RichtungX). Durch die anschließende Multiplikation mit eben dieser Variable (sprich: dem Vorzeichen) wird entweder 10 addiert oder eben (10 * -1 = -10) subtrahiert.

In Dein Form.Create schreibst Du noch
Delphi-Quellcode:
Randomize;
RichtungX := 1;
RichtungY := 1;
Damit initialisierst Du den Zufallszahlengenerator und Deine beiden Vorzeichen.

Zitat von Toxman:
Damit verschiebt sich dein Vogel jedesmal um 0-19 Pixel und änder etwa alle hundert Events die Rchtung.
Nein, damit wird alls 100 Events einmal die Richtung geändert, die restlichen 99 Events nicht.

Gruß
xaromz
  Mit Zitat antworten Zitat
Aria

Registriert seit: 19. Okt 2005
Ort: Hamburg
11 Beiträge
 
#8

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:31
Sorry, dass ihr mir alles so genau erklähren müsst, aber wo genau muss das jetzt rein:

Zitat:
Randomize;
RichtungX := 1;
RichtungY := 1;
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:35
Hallo,

das Zeug muss in Deine Create-Methode (Ereigniss FormCreate im OI). Dann wird das Ganze beim Fenster-Erzeugen am Anfang aufgerufen.
Außerdem musst Du die beiden Variablen RichtungX und RichtungY noch im private-Bereich Deiner Form deklarieren.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#10

Re: Zufalls-Bewegung

  Alt 19. Okt 2005, 23:36
pass auf...

du sagst in jedem ontimer nicht
Delphi-Quellcode:
image2.Top:=image2.Top+10;
image2.Left:=image2.left+10;
sondern

Delphi-Quellcode:
image2.Top:=image2.Top+(Random(3)-1)*10;
image2.Left:=image2.left+(Random(3)-1)*10;
Random(2) gibt 0, 1 oder 2 zurück...Random(2)-1 also -1,0 oder 1
also bewegt sich das Image nicht mehr nur nach unten, sondern nach unten, nach oben oder gar nicht
für rechts/links ist es analog.

im OnCreate der Form rufst du dann noch Randomize; auf um den Zufallgenerator zu initialisieren.
Fertig!
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:48 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