Autor Beitrag
delphianer5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Di 27.04.10 20:34 
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:
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 ;-))

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delphianer5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



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

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Di 27.04.10 21:26 
Du zählst deine Klicks in einer lokalen Variable, die ist:
  1. nicht initialisiert
  2. 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
private
  { Private-Deklarationen }
    klickzaehler: integer;
    fehlklicks: integer;
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 27.04.10 22:28 
Mal abgesehen davon, dass Du in der einen Prozedur etwa folgendes stehen hast:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if A = 2 then
Begin
    If A = 3 then
    Begin
        //Tu was
    end;
end;


Ich hoffe, dir fällt da was auf ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delphianer5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mi 28.04.10 22:00 
@BenBE: oh nicht gut^^ Danke für den Hinweis!

@SvenAbeln: Danke für den Tipp jetzt funktioniert es!