AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism Panel Spiel => Panel automatisch erzeugen?
Thema durchsuchen
Ansicht
Themen-Optionen

Panel Spiel => Panel automatisch erzeugen?

Ein Thema von Juggy D · begonnen am 18. Okt 2007 · letzter Beitrag vom 27. Okt 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Juggy D

Registriert seit: 18. Okt 2007
29 Beiträge
 
#1

Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 17:13
Hallo,

wir haben als Hausaufgabe aufbekommen ein Spiel zu erstellen.
Bei dem Spiel sollen in einem Shape-Fenster fünf gleichgroße Panel an einer zufälligen Position erzeugt werden, wenn man auf den Button Start klickt. Wenn man dann auf eines der Panel klickt, soll dieser verschwinden, und man bekommt einen Punkt.

Ich hab ein Shape-Fenster mit dem Namen "ShSpiel" erstellt, dardrauf einen Panel mit dem Namen "Panel" und folgendes eingegeben:

Delphi-Quellcode:
procedure TForm1.BStartClick(Sender: TObject);
var i: integer;
begin
for i:= 0 to 4 do begin
Panel:= TPanel.Create (ShSpiel);
Panel.AutoSize:= True;
Panel.Left:=Random (ShSpiel.Width);
Panel.Top:= Random(ShSpiel.Height);
Panel.Parent:= Form1;
Wenn ich nun aber auf den Button Start klicke, werden keine neuen Panel erzeugt. Weiss jemand was ich falsch eingegeben habe?

Weiterhin sollen bei dem Spiel alle 2 Sekunden die Panel neu positioniert werden und ein weiteres Panel soll immer dazukommen.
Hierzu hab ich den Timer genommen, auf True gesetzt und als Intervall 2000 eingegeben. Aber auch hier tut sich nichts, die Panels bewegen sich einfach nicht.
Und wie kann ich das eingeben, dass in Verbindung mit dem Timer immer ein neues Panel dazukommt? Jemand einen Vorschlag dazu?

Hoffe ihr könnt mir helfen, vielen Dank schonmal im Vorraus.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 17:15
Nur Dunkel aus meiner Erinnerung: Muss das Panel nicht auch noch sichtbar gemacht werden? Hast du mal im Debugger geschaut, ob wirklich keine Panels erzeugt wurden oder diese nur nicht sichtbar sind?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Juggy D

Registriert seit: 18. Okt 2007
29 Beiträge
 
#3

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 17:26
Wo muss ich denn im Debug nachgucken? Ansicht --> Debug-Fenster --> Und dann?
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 17:36
Lass mal AutoSize weg.
Blackheart
  Mit Zitat antworten Zitat
Juggy D

Registriert seit: 18. Okt 2007
29 Beiträge
 
#5

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 17:41
Danke dir vielmals, jetzt werden schonmal 5 Panels erstellt. Ich hab
Delphi-Quellcode:
Panel.Left:= Random(ShSpiel.Width)-25;
Panel.Top:= Random(ShSpiel.Height)-25;
eingegeben, nun stehen die Panels auf der rechten und unteren Seite nich mehr über, aber oben und links ragen sie noch aus dem Weissen Feld hinaus. Wie krieg ich hin, dass sie da nicht mehr rausragen?
  Mit Zitat antworten Zitat
Juggy D

Registriert seit: 18. Okt 2007
29 Beiträge
 
#6

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 20:47
Okay, ich bin mit dem Programm schon etwas weiter. Obiges Problem besteht aber immer noch

Ich hab nun nen Timer eingefügt, und möchte, dass alle vorhandenen Panels neu positioniert werden (Sprich, die sollen gemischt werden).
Ich hab folgendes eingegeben, bewegen tut sich aber leider nur ein Panel (ich nehme an der letzte):
Delphi-Quellcode:
procedure TFPanel1.Timer1Timer(Sender: TObject);
begin
Panel.Left:= Random(ShSpiel.Width)-25;
Panel.Top:= Random(ShSpiel.Height)-25;
end;
Habs auch mit ner FOR-Schleife versucht und dann "ComponentCount-1 downto 0", dies hat aber auch nur Auswirkungen auf den einen Panel.

Jemand nen Vorschlag?
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 21:03
du musst auch innerhalb der schleife auf Components[i] zugreifen
Delphi-Quellcode:
for i:=components.count-1 downto 0 do
begin
  Panel:=Components[i] as TPanel;
  panel.left:=...
  panel.top:=...
end;
HTH Frank
  Mit Zitat antworten Zitat
Juggy D

Registriert seit: 18. Okt 2007
29 Beiträge
 
#8

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 21:43
Wenn ich das so mache, wie du es angegeben hast, dann kommt nach dem man auf Start klickt folgender Fehler:
Im Projekt Fang1 ist eine Exception der Klasse EInvalidCast aufgetreten. Meldung: Ungültige 'Typumwandlung'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Ich habs dann auch mal so probiert, geht aber auch nicht, bzw. nur ein Panel wird umpositioniert.
Delphi-Quellcode:
procedure TFPanel1.Timer3Timer(Sender: TObject);
var I: integer;
begin
for i:= ComponentCount-1 downto 0 do begin
if Components[i] is TFPanel1 then
Panel.Left:= Random(ShSpiel.Width)-25;
Panel.Top:= Random(ShSpiel.Height)-25;
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#9

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 22:26
ja, habe die Abfrage vergessen...habs net getested, sollte eigentlich nur verdeutlichen, dass du die variable panel setzen sollst auf die aktuelle Komponente...

Delphi-Quellcode:
for i:=components.count-1 downto 0 do
begin
  if Components[i] is TPanel then
  begin
    Panel:=Components[i] as TPanel;
    panel.left:=...
    panel.top:=...
  end;
end;
ggf. TPanel durch deinen Typ ersetzen, aber wenn du von TPanel abgeleitet hast, müsste das auch ohne die Änderung gehen.

HTH
  Mit Zitat antworten Zitat
Juggy D

Registriert seit: 18. Okt 2007
29 Beiträge
 
#10

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 18. Okt 2007, 23:33
Hmm... leider bewegt sich da dann nix

EDIT:

Habs jetzt mal so gemacht, eigentlich müsste das doch gehen, dass jetzt für alle Panels die Position geändert wird?

Delphi-Quellcode:
procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
for i:=0 to ComponentCount-1 do begin
  if Components[i] is TFPanel1 then
     TFPanel1(Components[i]).Left:= Random(ShSpiel.Width)-25;
     TFPanel1(Components[i]).Top:= Random(ShSpiel.Height)-25;
Bei mir kommt aber auch da ne Fehlermeldung... Ich bin langsam am verzweifeln.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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