![]() |
spiel Problem
Hallo Leute
Das Jahr nähert sich ja langsam dem Ende und deswegen programmieren wir die letzten stunden ein spiel. Ich wollte ein Geschicklichkeitsspiel programmieren. Nun war meine erste Idee das ich ein Images nehmen und dann einen Timer welcher in jeder Sekunde ein neues left und top ausrechnet sieht in etwar so aus.
Delphi-Quellcode:
Nun hab ich mir überlegt wie ich es schaffen kann das wenn ich das Bild berühre einen Punkt kriege.
procedure TForm4.Timer1Timer(Sender: TObject);
begin image2.Left :=random(breite2); image2.top :=random(hoehe2); if touch1 = true then begin inc(l); end; If l >= 5 then begin timer1.Enabled :=false; form4.Visible :=false; form1.visible :=true; showmessage('Du hast gewonnen'); end; procedure TForm4.FormCreate(Sender: TObject); begin breite2 :=(form4.width)-100; hoehe2 :=(form4.height)-100; end; procedure TForm4.Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin touch1 :=true; end; procedure TForm4.Image2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin touch1 :=false; end; Deshalb setzte ich touch1 auf true wenn der Maus Zeiger auf dem bild gedrückt ist. Nun weiß ich leider noch nicht wie ich es schaffen kann das ich punkte abgezogen kriege wenn ich das Image mal nicht treffe. Mein Vorschlag ist es das ich im Timer abfrage ob die x und y Koordinaten mit left und top gleich sind funktioniert aber leider nicht. Kann wer helfen ;). Danke schon mal im voraus das ihr meine letzteren Fragen immer so hilfreich beantwortet habt. |
AW: spiel Problem
Guten Abend,
zwei Dinge vorab ;) Zum einen, gib mal deinem Thread einen aussagekräftigen Titel. Probleme hat hier jeder, da schreibt man ja einen Thread. Du kannst den Titel ändern, in dem du den Titel deines ersten Posts änderst. Eine andere Sache betrifft das programmieren: Vergleiche nie einen Boolean-Wert mit True oder False. So ists richtig:
Delphi-Quellcode:
Zu deinem Problem: Du musst uns erst mal genauer erklären, was denn dein Spiel macht. Fliegen deine Punkte, die es zu treffen gilt, durch die Gegend? Oder sind diese fix auf der Form platziert? Ebenso musst du dir mal genau überlegen, wie man eine Hit-Methode schreiben kann. Denn nur Top und Left-Koordinaten vergleichen reicht hier nicht ;)
var
MyBool : Boolean; begin MyBool := True; if MyBool then begin end; // Oder if not MyBool then begin end; end; |
AW: spiel Problem
Wenn Du es wirklich so umsetzen willst, dann nimm Form4.FormMouseDown für die Fehlclicks.
Ansonsten nimm ein GraphicControl male dort und werte die Clicks dort aus. |
AW: spiel Problem
Und
Delphi-Quellcode:
im Timer aufzurufen, ist sicherlich auch nicht das was du möchtest oO
showmessage('Du hast gewonnen');
Edit: Asso, da fehlt nen
Delphi-Quellcode:
end;
|
AW: spiel Problem
Wie wäre es, im onClick der Form zu sagen, dass er z.B. den Wert 100 im Label (oder was auch immer) abziehen soll und beim onClick jedes Bildes zu sagen, dass er 200 addieren soll und das Bild dann auf 0x0px setzen soll, damit du es nicht noch mal klicken kannst. Dann fragst du noch ab, ob alle Images die Breite/Höhe 0 haben und wenn dem so ist, ist das Spiel zu ende. Fertig. Ist eventuell nicht so kompliziert gebaut, sollte aber den Zweck erfüllen ;)
|
AW: spiel Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die ganze Hilfe.
Hat bei mir irgendwie geklapt. Nun stehe ich aber vor einem weiterem Problem. Ich schneide mir die die Bilder immer aus nun möchte ich die bei delphi verwenden aber da ist immer so ein weißer Hintergrund bei den Bildern wie krieg ich das hin das dieser transparent ist. wie bei dem bild unten leider nicht gut zu sehen ist das rundum das eigentliche bild weiß ist und auch bei delphi so aus sieht. |
AW: spiel Problem
wenn Du bei dem Konzept bleiben willst dass sich Controls auf dem Form bewegen, könntest Du sowas versuchen. (Ich denke längerfristig solltest Du alles in einem separaten Offlinebitmap berechen)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ImgList; type TMyGraphicControl=Class(TGraphicControl) private FImageList: TImageList; FIMageIndex: Integer; procedure SetImageIndex(const Value: Integer); procedure SetImagelist(const Value: TImageList); protected Procedure Paint;override; published Property ImageList:TImageList read FImageList Write SetImagelist; Property ImageIndex:Integer read FIMageIndex Write SetImageIndex; End; TForm1 = class(TForm) ImageList1: TImageList; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private FG:TMyGraphicControl; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin FG.Left := 100; FG.Top := 100; end; procedure TForm1.FormCreate(Sender: TObject); begin FG := TMyGraphicControl.Create(self); FG.Parent := self; FG.Width := ImageList1.Width; FG.Height := ImageList1.Height; FG.ImageList := Imagelist1; FG.ImageIndex := 0; DoubleBuffered := True; end; { TMyGraphicControl } procedure TMyGraphicControl.Paint; begin if assigned(FImageList) and (FimageList.Count > FImageIndex) then begin FImageList.Draw(Canvas,0,0,FimageIndex); end; end; procedure TMyGraphicControl.SetImageIndex(const Value: Integer); begin FIMageIndex := Value; invalidate; end; procedure TMyGraphicControl.SetImagelist(const Value: TImageList); begin FImageList := Value; Invalidate; end; end. EDIT: ich habe die Idee mal etwas weitergesponnen ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz