Entwickler-Ecke
Sonstiges (Delphi) - Fehler bei Programmierung?Passiert nichts bei klick auf Bild
delphianer5 - Di 27.04.10 20:34
Titel: Fehler bei Programmierung?Passiert nichts bei klick auf Bild
Hi,
ich habe ein Problem mit einem Projekt.
Beschreibung des Programms/Spiels:
Man hat ein Spielfeld(Image-Kompente,auf der ne Canvas liegt).Darauf ist ein Bild von Stefan Raab.
Das Programm wird mit einem Button gestartet der einen Timer aktviert,der dafür sorgt das das Bild innerhalb des Spielfeldes hin und her springt.
Ziel des Spieles ist es, 3mal auf das Bild zu klicken,bei jedem Klick spirngt es schneller bzw. das Intervall des Timers wird herabgesetzt.
Wenn man es geschafft hat 3 mal auf das Bild zu klicken hat man gewonnen und es erscheint der Text 'Winner!'.
Wenn man 5mal daneben geklickt hat dann endet das Spiel und es erscheint der Text 'Loser!'.
Um die Klicks zu zählen verwende ich eine Variable und wenn man aufs Bild klickt wird eins hochgezählz.
Problem:
Ich hab das Problem das nichts passiert wenn ich auf das Bild klicke.
Ich habs ein paar mal durchgesehen,aber wie es meistens so ist,ist es wahrscheinlich nur ein dummer Fehler den man selbst so nicht erkennt.
Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111:
| unit USchlagdenRaab;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg;
type TForm1 = class(TForm) bt_Start: TButton; Im_Spielfeld: TImage; Im_Raab2: TImage; Im_Raab: TImage; Timer1: TTimer; procedure FormActivate(Sender: TObject); procedure bt_StartClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Im_RaabClick(Sender: TObject); procedure Im_SpielfeldClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject); begin randomize; Im_Spielfeld.Canvas.Rectangle(0,0,Im_Spielfeld.width,Im_Spielfeld.height); Im_Raab.Enabled:=False; Im_Raab2.Enabled:=False; Im_Spielfeld.Enabled:=False; Im_Raab2.Left:=Im_Raab.Left; Im_Raab2.Top:=Im_Raab.Top; end;
procedure TForm1.bt_StartClick(Sender: TObject); var klickzaehler,fehlklicks:real; begin if bt_Start.Caption='Start' then begin Timer1.Enabled:=True; end; Im_Raab.Enabled:=True; klickzaehler:=0; fehlklicks:=0; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Im_Raab.Left:=Im_Spielfeld.Left+random(Im_Spielfeld.width-Im_Raab.Width); Im_Raab.Top:=Im_Spielfeld.Top+random(Im_Spielfeld.Height-Im_Raab.height); Im_Raab2.Left:=Im_Raab.Left; Im_Raab2.Top:=Im_Raab.Top; Im_Raab.Enabled:=True; end;
procedure TForm1.Im_RaabClick(Sender: TObject); var klickzaehler:real; begin klickzaehler:=klickzaehler + 1; if klickzaehler=1 then begin Timer1.Interval:=750; end; if klickzaehler=2 then begin Timer1.Interval:=500; if klickzaehler=3 then begin Im_Spielfeld.Canvas.Font.Size:=80; Im_Spielfeld.Canvas.Font.Color:=clgreen; Im_Spielfeld.Canvas.Font.Name:='Comic Sans MS'; Im_Spielfeld.Canvas.Textout(Im_Spielfeld.Left,Im_Spielfeld.Top,'Winner'); Im_Raab.Visible:=False; Im_Raab2.Visible:=True; Im_Spielfeld.Enabled:=False; Im_Raab.Enabled:=False; Timer1.Enabled:=False; end; end;
end;
procedure TForm1.Im_SpielfeldClick(Sender: TObject); var fehlklicks:integer; begin fehlklicks:=fehlklicks+1; if fehlklicks=5 then begin Timer1.Enabled:=False; Im_Spielfeld.Canvas.Font.Size:=80; Im_Spielfeld.Canvas.Font.Color:=clgreen; Im_Spielfeld.Canvas.Font.Name:='Comic Sans MS'; Im_Spielfeld.Canvas.Textout(Im_Spielfeld.Left,Im_Spielfeld.Top,'Loser'); Im_Raab.Visible:=False; Im_Raab2.Visible:=True; Im_Spielfeld.Enabled:=False; Im_Raab.Enabled:=False; end; end;
end. |
Wäre sehr nett wenn ihr mir helfen könntet.
mfg
PS:Wie immer ist mir kein guter Titel eingefallen,sry.
BenBE - Di 27.04.10 20:40
Hast Du für das Bild auch im Objektinspektor die richtigen Prozeduren zugewiesen oder nur den Quelltext reinkopiert?
P.S.: Bei Zeile 77 vor dem If: Da fehlt das End; (das doppelte von Zeile 88). Der innere Block wird nie aufgerufen. Wundert mich eigentlich, warum der Compiler da keine Warnung schmeißt (oder du hast die ignoriert ;-))
delphianer5 - Di 27.04.10 21:09
Nein,hab die 2 Bilder richtig geladen und das Programm nach und nach geschrieben.
Wie meinst du das mit den Prozeduren zugewiesen?
Ja ich versteh die Fehlermeldungen nicht ganz.
Wieso wird der Wert niemals benutzt?Ich hab ihn doch integer zugewiesen und den Wert 0 sowie das bei klick 1 drauf addiert werden soll.
Hier ein Bild von den Fehlermeldungen:
Moderiert von
Narses: Bild als Anhang hochgeladen.
SvenAbeln - Di 27.04.10 21:26
Du zählst deine Klicks in einer lokalen Variable, die ist:
- nicht initialisiert
- wird sie gelöscht wenn die Prozedur zu Ende ist.
Mach die mal zu privaten Feldern von deinem Formular und integer dürfte passender sein, oder kann man auch 2,546 mal klicken :wink:
Delphi-Quelltext
1: 2: 3: 4:
| private klickzaehler: integer; fehlklicks: integer; |
BenBE - Di 27.04.10 22:28
Mal abgesehen davon, dass Du in der einen Prozedur etwa folgendes stehen hast:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if A = 2 then Begin If A = 3 then Begin end; end; |
Ich hoffe, dir fällt da was auf ;-)
delphianer5 - Mi 28.04.10 22:00
@BenBE: oh nicht gut^^ Danke für den Hinweis!
@SvenAbeln: Danke für den Tipp jetzt funktioniert es!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!