Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - counter


Struppi - So 03.06.07 15:21
Titel: counter
ich programmiere gerade an einem kleinen shooter und habe ein problem.


im groben geht es darum auf fliegende enten zu schießen.
die getroffenen enten werden per onclick auf visible := false gesetzt.

1. wie kann ich einen counter erstellen ??
2. wie kann ich einen dynamischen zähler erstellen, der durchs onclick auf die ente einfach immer eins dazu zählt ??

das problem ist ja, dass das ganze dynamisch sein soll, da die viecher in unterschiedlichen reihenfolgen abgeschossen werden können.

dadurch muss der zähler immer eins dazu zählen egal welche ente angeklickt wird...


bitte helft mir, ich hänge fest


Dunkel - So 03.06.07 15:33

Was ist der Unterschied zwischen #1 & #2?

Einfach nur eine globale Integer Variable erstellen und um 1 erhöhen, z.B. so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
{...}
var
  Zaehler: integer;
{...}

procedure TForm1.OnClick(Sender: TObject);
begin
  Inc(Zaehler);  // hier wird die Variable Zaehler immer um 1 erhöht!
end;


Ach ja, die Variable sollte noch initialisiert werden, sprich am Anfang des Programms (OnCreate z.B.) auf 0 gesetzt werden.


Struppi - So 03.06.07 15:59

die variablke wird also immer um 1 erhöht ??

gut, dann gibts keinen unterschied zwischen 1 und 2 :D


was genau meinst du mit OnCreate auf 0 setzen ??
da steh ich grad auffm schlauch ...


Nilan - So 03.06.07 16:22

Doppelklick auf dein Formular, dann kommt automatisch das OnCreate Ereignis deiner Form.
Da musst du nur noch folgenden Code reinschreiben:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
Zaehler:=0;
end;


Das heißt, die Variable initialisieren, macht man das nicht, kann es zu Problemen kommen.

Aber vielleicht solltest du dir erstmal ein wenig Grundwissen verschaffen? ;)

Nilan :)


Blackheart666 - So 03.06.07 18:14

user profile iconNilan hat folgendes geschrieben:
Doppelklick auf dein Formular, dann kommt automatisch das OnCreate Ereignis deiner Form.
Da musst du nur noch folgenden Code reinschreiben:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
Zaehler:=0;
end;


Das heißt, die Variable initialisieren, macht man das nicht, kann es zu Problemen kommen.

Aber vielleicht solltest du dir erstmal ein wenig Grundwissen verschaffen? ;)

Nilan :)

Welche Probleme sollten da deiner Meinung nach auftauchen, vieleicht soll ja auch der Zaehler nicht unbedingt bei 0 starten :wink:


jakobwenzel - So 03.06.07 18:37

Die Probleme, die Nilan meint, treten nur bei lokalen Variablen auf, da globale automatisch auf 0 initialisiert werden.

Loale werden überhaupt nicht initialisiert, weswegen dann da irgendwas drinsteht.


Struppi - So 03.06.07 21:58

ich hab das jetz alles so gemacht und es passiert einfach überhaupt nix ...

es kommt zwar keine fehlermeldung, aber im programm tut sich auch nix ...



und zu dem grundwissen:

da hast du wohl recht, aber ich mach das ganze für die schule und hatte vorher noch null delphi erfahrung ...


Dunkel - So 03.06.07 22:07

Was hast Du denn wie gemacht? Wenn Du einfach nur den Quellcode von hier via C&P in Dein Projekt eingefügt hast, dann tut sich da auch nix.

Zeig mal ein wenig Code von Dir!


Struppi - So 03.06.07 23:52

klar hab ich das per C & P eingefügt :D


das war ja meine frage, wie man genau sonen counter erstellt ...

ich hab kein plan von nix *sich schäm*


Blackheart666 - Mo 04.06.07 08:40

Wollen mal nicht so sein, eigentlich hatte Dunkel das schon geschrieben.
Crashkurs mal anschauen :wink:
http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.htmlvar


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Form1: TForm1;
  MyCount:Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Inc(MyCount);// Count um 1 erhöhen
 // MyCount:=MyCount+1; wäre das gleiche
 if MyCount > 10 then MyCount:=1//Bis 10 zählen dann zurücksetzen
 Caption:=IntToStr(MyCount);// Anzeigen
end;


Delete - Mo 04.06.07 08:57

vielleicht solltest du allen enten das gleiche onclick-event hinzufügen...

evtl. so, z.B. bei oncreate


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to self.ComponentCount -1 do
  begin
    if self.Components[i] is TEntenKomponente then
    begin
      with self.Components[i] as TEntenKomponente do
      begin
        onClick := MeinOnClickEvent;  // MeinOnClickEvent muss existieren...
      end;
    end;
  end;
end;


gruß
rd3