Autor Beitrag
ultraz06
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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 ?
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 06.02.09 15:10 
weiß keiner eine lösung`?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.02.09 16:22 
Mehrmals? Dann könntest du z.B. abfragen:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 06.02.09 16:22 
ausblenden Delphi-Quelltext
1:
2:
 random(120)
if countdown=55 then rosasichtbar :=true;

aber so wird das sicher nix
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 06.02.09 16:25 
ausblenden Delphi-Quelltext
1:
rosasichtbar := random(120) = 55;					
ultraz06 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 06.02.09 16:28 
rosasichtbar := random(120) = 55;

verstehe ich nicht
ausblenden 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.02.09 16:49 
user profile iconultraz06 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if not rosasichtbar and (Random(100) >= 70) then
  rosasichtbar := True;

Puffer.Canvas.Draw(xrosa, yrosa, rosa);
PaintBox1.Canvas.Draw(0, 0, Puffer);
So ist es richtig eingerückt. Wie user profile iconDeddyH auch eben sagte: Du führst Puffer.Canvas.Draw(xrosa, yrosa, rosa); immer aus.
ultraz06 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 06.02.09 16:53 
also
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 06.02.09 16:55 
so habe ich es jetzt
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 06.02.09 17:04 
ausblenden 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



BeitragVerfasst: 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.