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 3 von 4     123 4      
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 19. Okt 2007, 13:43
Wo du die TPanel erstellst, muss deren Owner auch die Form sein

Panel:= TPanel.Create (FPanel1); Ansonsten sind sie in Components[i] nicht drin....

Nu müsste es gehen!
  Mit Zitat antworten Zitat
Juggy D

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 19. Okt 2007, 13:47
Boahh es läuft... Ich danke dir tausendmal... Jetzt bin ich schonmal nen ganzes Stückchen weiter, jetzt muss ich nur noch das mit dem Punktesystem hinkriegen. Falls ich wieder Hilfe brauche, poste ich hier.

Nochmals vielen dank..
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 19. Okt 2007, 14:26
irgendwie kommt mir das bekannt vor...
gibts da nen Zusammenhang?

Gruß Frank
  Mit Zitat antworten Zitat
Juggy D

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 19. Okt 2007, 14:36
@frank

Ich glaub im Grunde ist es fast dasselbe, nur bei ihm heißt das Spiel "Moorhuhn" und er hat noch ein paar Grafiken.
Meins dagegen basiert wirklich nur auf gelbe Panels und weißen Hintergrund. Wenn ich fertig bin stell ich mal rein.
Aber zu dem Problem mit dem Punktezählen komm ich auch noch gleich. Ich muss erstmal das ganze mit dem neuen Punktefenster und SetPunkte verstehen.

  Mit Zitat antworten Zitat
Juggy D

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 19. Okt 2007, 23:08
Okay, brauche wieder eure Hilfe.

Bei dem Spiel sollen auch die Punkte gezählt werden und in einem seperaten Fenster angezeigt werden. Ich hab erstmal das mit dem seperaten fenster wegelassen. Also hab ich in das Hauptfrmular ein Edit Feld eingefügt. Dazu folgenden Code.
Wenn man verloren hat (= Null Punkte) soll die Message kommen "Verloren" und das Spiel soll aufhören neue Panels zu erstellen (break, das funktioniert auch alles. Nun hab ich mit else if angegeben, dass wenn man 10 Punkte hat, die Message "Gewonnen" erscheinen soll und das Spiel aufhören soll (break, da tut sich aber nix, auch wenn ich 10 Punkte habe kommt keine Message und das Spiel läuft weiter. Der letzte Teil ist glaub ich am wichtigsten:

Delphi-Quellcode:

procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
  Panel:= TPanel.Create (FPanel1);
  Panel.Color:= clYellow;
  Panel.Caption:= 'F';
  Panel.Width:= 49;
  Panel.Height:= 33;
  Panel.Left:= Random(ShSpiel.Width-60)+30;
  Panel.Top:= Random(ShSpiel.Height-50)+30;
  Panel.Parent:= FPanel1;
  Panel.OnClick:= PanelWeg;
  Zaehler:= Zaehler-1;


    for i:=ComponentCount-1 downto 0 do begin
       if Components[i] is TPanel then begin
          if Panel.Visible= True then begin
        TPanel(Components[i]).Left:= Random(ShSpiel.Width-60)+30;
        TPanel(Components[i]).Top:= Random(ShSpiel.Height-50)+30;
           Edit1.Text:=IntToStr(Zaehler)+' '+'Punkte';
        end
      else begin
        TPanel(Components[i]).Destroy;
      end;
    end;

if Zaehler = 0 then begin
   Timer1.Enabled:=False;
  ShowMessage('Verloren');
  break;
  end
  else
if Zaehler = 10 then begin
  Timer1.Enabled:=False;
  ShowMessage('Gewonnen');
  break;
  end;
end;


end;
  Mit Zitat antworten Zitat
Juggy D

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 20. Okt 2007, 19:34
Keiner nen Vorschlag? Irgendwie klappt das mit dem else Befehl im letzten teil zaehler=10 nicht. Für zaehler=0 funzt es.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 20. Okt 2007, 21:10
bitte nur 1 Frage pro Thread... (stand das nicht mal in den Forenregeln?)

mal davon abgesehen, kann ich in dem Code-Snippet nicht erkennen, dass du jemals 10 Punkte hast...wo bzw. auf welchen Wert initialisierst du Zähler? Ich sehe nur, dass du bei jedem Timer-Event 1 abziehst (egal,ob ein panel getroffen wird oder nicht). d.h. du müsstest den Zähler auf min. 11 initialisieren, damit die Bedingung erfüllt (beim ersten timer-event) ist.
Inkrementierst du den Zähler auch irgendwo?

HTH Frank
  Mit Zitat antworten Zitat
Juggy D

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 20. Okt 2007, 21:23
Hi,

Stimmt schon, nach dem Intervall vom Timer wird immer ein neues Panel erstellt, daher dann ein Punkt Abzug.

Habe natürlich bei den Panels eingestellt, dass bei OnClick der zaehler Wert auf +1 erhöht wird.
Das funktioniert auch alles, wenn ich auf nen Panel klicke, bekomme ich auch ein Punkt.

Das Problem aber ist (glaub ich zumindest), dass er bei der if abfrage auf zaehler=0 wartet und nicht mit dem else if zaehler=10 weitermacht. Da ist irgendwas falsch bei den If/else Befehlen glaub ich.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 21. Okt 2007, 14:19
hast du bemerkt, dass deine If-Abfrage in der For-Schleife steckt?
glaube das sollte nicht so sein, aber mit richtiger Einrückung würde man das sehen .
ansonsten 3 Fragen:
- wie wird Zaehler initialisiert
- werden vorher panels erstellt (außerhalb vom timer)
- hast du mit dem debugger schon 10 in der variable gesehen?

denn: mit jedem erstellten panel wird der Zähler dekrementiert (geht übrigends mit dec(zaehler) kürzer). selbst wenn du alle panels wegklickst wirst du so nie 10 Punkte erreichen, da diese 10 punkte vorher schon vom Zähler abgezogen wurden.

Delphi-Quellcode:
procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
  Panel:= TPanel.Create (FPanel1);
  Panel.Color:= clYellow;
  Panel.Caption:= 'F';
  Panel.Width:= 49;
  Panel.Height:= 33;
  Panel.Left:= Random(ShSpiel.Width-60)+30;
  Panel.Top:= Random(ShSpiel.Height-50)+30;
  Panel.Parent:= FPanel1;
  Panel.OnClick:= PanelWeg;
  Zaehler:= Zaehler-1;

  for i:=ComponentCount-1 downto 0 do
  begin
    if Components[i] is TPanel then
    begin
      if Panel.Visible= True then
      begin
        TPanel(Components[i]).Left:= Random(ShSpiel.Width-60)+30;
        TPanel(Components[i]).Top:= Random(ShSpiel.Height-50)+30;
        Edit1.Text:=IntToStr(Zaehler)+' '+'Punkte';
      end else
      begin
        TPanel(Components[i]).Destroy;
      end;
    end;

    if Zaehler = 0 then
    begin
      Timer1.Enabled:=False;
      ShowMessage('Verloren');
      break;
    end else if Zaehler = 10 then
    begin
      Timer1.Enabled:=False;
      ShowMessage('Gewonnen');
      break;
    end;
  end; //for
end;
HTH Frank
  Mit Zitat antworten Zitat
Juggy D

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

Re: Panel Spiel => Panel automatisch erzeugen?

  Alt 21. Okt 2007, 15:08
Hi,

hab die IF Abfrage aus der Schleife rasugenommen.
Der Zaehler wird bei FormCreate auf 5 gesetzt (da man am Anfang 5 Punkte haben soll).
Der Timer wird beim drücken des Start Buttons aktiviert und es werden 5 Panels erstellt (Bei StartClick).
Vom Debugger hab ich keine Ahnung. Wie guckt man da nach? 10 Punkte hatte ich aber auf jedenfall, da die Punkte in einem Seperaten Memofeld angezeigt werden. Es fehlt dann halt nur die Meldung "Gewonnen".

Hier mal der komplette Quellcode:

Delphi-Quellcode:
unit UFang1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, UPunkte;

type
  TFPanel1 = class(TForm)
    BStart: TButton;
    ShSpiel: TShape;
    Panel: TPanel;
    Timer1: TTimer;
    procedure BStartClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure PanelWeg(Sender:TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FPanel1: TFPanel1;
  zaehler: integer;

implementation


{$R *.dfm}

procedure TFPanel1.BStartClick(Sender: TObject);
var i: integer;
begin
  Timer1.Enabled:= True ;
    for i:= 0 to 4 do begin
      Panel:= TPanel.Create (FPanel1);
      Panel.Color:= clYellow;
      Panel.Caption:= 'F';
      Panel.Width:= 49;
      Panel.Height:= 33;
      Panel.Left:= Random(ShSpiel.Width-60)+30;
      Panel.Top:= Random(ShSpiel.Height-50)+30;
      Panel.Parent:= FPanel1;
      Panel.OnClick:= PanelWeg;
    end;
  Punktefenster:=TPunktefenster.Create(self);
  Punktefenster.show;
  Punktefenster.MPktAnzeige.Lines.Add(IntToStr(Zaehler)+' '+'Punkte');
end;

procedure TFPanel1.FormCreate(Sender: TObject);
begin
  randomize;
  Zaehler:=5;
end;

procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
  Panel:= TPanel.Create (FPanel1);
  Panel.Color:= clYellow;
  Panel.Caption:= 'F';
  Panel.Width:= 49;
  Panel.Height:= 33;
  Panel.Left:= Random(ShSpiel.Width-60)+30;
  Panel.Top:= Random(ShSpiel.Height-50)+30;
  Panel.Parent:= FPanel1;
  Panel.OnClick:= PanelWeg;
  Zaehler:= Zaehler-1;

    for i:=ComponentCount-1 downto 0 do begin
       if Components[i] is TPanel then begin
          if Panel.Visible= True then begin
        TPanel(Components[i]).Left:= Random(ShSpiel.Width-60)+30;
        TPanel(Components[i]).Top:= Random(ShSpiel.Height-50)+30;
        Punktefenster.MPktAnzeige.Lines.Add(IntToStr(Zaehler)+' '+'Punkte');
        end
      else begin
        TPanel(Components[i]).Destroy;
      end;
    end;


  end;
if Zaehler = 0 then begin
   Timer1.Enabled:=False;
  ShowMessage('Verloren');
  //break;
  end
  else
if Zaehler = 10 then begin
  Timer1.Enabled:=False;
  ShowMessage('Gewonnen');
  //break;
  end;

end;


procedure TFPanel1.PanelWeg(Sender:TObject);
begin
  TPanel(Sender).Hide;
  Zaehler:= Zaehler+1;
  Punktefenster.MPktAnzeige.Lines.Add(IntToStr(Zaehler)+' '+'Punkte');
end;


end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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