| Autor |
Beitrag |
ultraz06
      
Beiträge: 84
|
Verfasst: Do 05.02.09 19:02
hi^^
ich habe folgendes problem und zwar will ich ein spiel machen wo man ballons abschießen muss in einer bestimmten zeit.
so sagen wir einmal man hat 2min zeit um alle abzuschießen, mein problem ist nun das ich die ballons während den 2 min immer unabhänging voneinander erscheinen lassen will.
also das sie eine zeitsequenz ohne durchfliegenden ballon ist.
ich habe insgesamt 7 ballons das müsste reichen, da ich sie ja mehrmals erscheinen lassen will.
nun weiß ich nicht ob ich das mit randomize machen soll ?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Zeichnen; begin
Puffer.Canvas.Draw(0,0,Hg); if (gruenSichtbar)then Puffer.Canvas.Draw(xgruen,ygruen,gruen); if (blauSichtbar) then Puffer.Canvas.Draw(xblau,yblau,blau); if (rotsichtbar) then Puffer.Canvas.Draw(xrot,yrot,rot); if (lilasichtbar) then Puffer.Canvas.Draw(xlila,ylila,lila); if (gelbsichtbar) then Puffer.Canvas.Draw(xgelb,ygelb,gelb); if (rosasichtbar) then Puffer.Canvas.Draw(xrosa,yrosa,rosa); if (schwarzsichtbar)then Puffer.Canvas.Draw(xschwarz,yschwarz,schwarz); PaintBox1.Canvas.Draw(0,0,Puffer); end; |
da werden die 7 ballons gezeichnet nun will ich halt das sie immer unterschiedlich gezeichnet werden in den 2 mins.
aber wie kann ich das realisieren?
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 15:10
weiß keiner eine lösung`?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.02.09 15:42
Du müsstest zufällig entscheiden, ob sie angezeigt werden, wo sie angezeigt werden etc., dafür bietet sich Random an. Für eine Ja/Nein Entscheidung kannst du z.B. schauen ob der Wert von Random größer als ein Wert im Bereich ist. Zudem musst du dir merken, wie viele Ballons gerade angezeigt werden, wenn du das mit einbeziehen willst (damit nicht zu viele gleichzeitig erscheinen).
Mir ist nur nicht klar gewesen wo eigentlich dein Problem liegt, als ich den Beitrag gestern gesehen hatte, deshalb habe ich zunächst nicht geantwortet.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:01
naja aber wie kann ich das umsetzen?
random mit dem interval in dem das ganze gehen muss, also 2 min.
und dann wie kann ich das mit random weiter umsetzen?
Delphi-Quelltext 1:
| if random**** then rotsichtbar :=true; |
nach dem prinzip
"schauen ob der Wert von Random größer als ein Wert im Bereich ist"
das verstehe ihc nicht so ganz
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.02.09 16:12
Die einfachste Lösung wäre wohl, wenn du sagst das Spiel dauert 2 Minuten, dass du dann am Anfang mit Random(120) z.B. die Sekunde für jeden Ballon festlegst, wann er erscheinen soll. Dann kannst du in einem Timer schauen ob die Zeit gekommen ist und ihn anzeigen. Zusätzlich kannst du dann eine Endzeit speichern, wenn er wieder verschwinden soll.
Also so in der Art:
Ballon1 soll bei Random(120) erscheinen, nehmen wir mal z.B. 55. jetzt überprüfst du im Timer ob mindestens 55 Sekunden vergangen sind seit dem Start. Wenn ja, zeigst du den Ballon an und setzt die Anzeigesekunde auf einen hohen Wert, z.B. 2000, damit später der Ballon nicht immer wieder angezeigt wird.
Genauso prüfst du auf die Verschwindezeit und lässt den Ballon da wieder verschwinden.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:18
mhm naja ich wollte doch aber einen ballon mehrmals zu unterschiedlichen zeiten erscheinen lassen?
geht das mit einer einfachen AND anweisung in der random routine?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.02.09 16:22
Mehrmals? Dann könntest du z.B. abfragen: Delphi-Quelltext 1: 2:
| if not xy.Visible and (Random(100) >= 70) then xy.Visible := True; | Damit lässt du einen unsichtbaren Ballon mit etwa 30%iger Wahrscheinlichkeit sichtbar werden, weil 30 von den 100 möglichen Zahlen ihn sichtbar werden lassen.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:22
Delphi-Quelltext 1: 2:
| random(120) if countdown=55 then rosasichtbar :=true; |
aber so wird das sicher nix
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.02.09 16:25
Delphi-Quelltext 1:
| rosasichtbar := random(120) = 55; |
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:28
rosasichtbar := random(120) = 55;
verstehe ich nicht
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| random(100) ; if not rosasichtbar and (Random(100) >= 70) then rosasichtbar := True; Puffer.Canvas.Draw(xrosa,yrosa,rosa); PaintBox1.Canvas.Draw(0,0,Puffer); end; |
da kommt der rosa ballon gleich von begin an
soll ich es in die zeichen roeutine vom anfang schreiben?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.02.09 16:33
Wozu soll der random-Aufruf gut sein? Und kann es sein, dass da ein begin und ein end fehlen?
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:39
hast du dir das thema durchgelesen?
dastet die bedeutung des random für die routine.
ich will die ballons zu unterschiedlichen zeiten erscheinen lassen
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.02.09 16:43
Und was hat das mit Deinem Code zu tun? Random ist eine Funktion. Wenn Du deren Rückgabe nicht auswertest, ist das kein syntaktischer Fehler, aber logischer Blödsinn. Desweiteren setzt Du rosasichtbar auf true, wertest das aber nicht aus, da der Code danach immer ausgeführt wird. Denk mal darüber nach, was Du eigentlich erreichen möchtest.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.02.09 16:49
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:52
wie ich werte es nicht aus?
ich will zufällig also per random die ballons ersceinen lassen.
naja dann werden halt xysichtbar:=true nach der gewissen zeit
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:53
also Delphi-Quelltext 1: 2: 3: 4: 5:
| if not rosasichtbar and (Random(100) >= 70) then begin rosasichtbar := True; Puffer.Canvas.Draw(xrosa, yrosa, rosa); end;
PaintBox1.Canvas.Draw(0, 0, Puffer); |
so etwa?
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 16:55
so habe ich es jetzt
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Zeichnen; begin
Puffer.Canvas.Draw(0,0,Hg); if not rosasichtbar and (Random(100) >= 70) then begin rosasichtbar := True; Puffer.Canvas.Draw(xrosa, yrosa, rosa); end; PaintBox1.Canvas.Draw(0,0,Puffer); end; |
aber es kommt nix
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.02.09 16:58
Das wirkt natürlich nur, wenn zeichnen aufgerufen wird einige Male, die Chance ist schließlich ca. 30%...
Eigentlich gehört die Abfrage wohl eher in einen Timer, schließlich willst du doch die Prüfung immer wiederholen.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Fr 06.02.09 17:04
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Zeichnen; begin
Puffer.Canvas.Draw(0,0,Hg); if not rosasichtbar and (Random(100) >= 10) then begin rosasichtbar := True; Puffer.Canvas.Draw(xrosa, yrosa, rosa); end; PaintBox1.Canvas.Draw(0,0,Puffer); end; |
da müsste die wahscheinlichkeit 90% sein , dann habe ich das in nen timer geschrieben aber es kommt nix
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.02.09 18:10
Nimm Dir doch einfach eine TImagelist, pack die Bilder da rein und lasse Dir für das nächste Bild einen zufälligen Index generieren, dann ist das erste Problem schonmal vom Tisch.
|
|
|