"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

SOLVED: Delphi Problem

Luki1987 03.12.2004 - 17:07 2124 29
Posts

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
Hallo. Also ich habe in Informatik Wahlpflichtfach (8. Klasse Gymnasium) eine Hü bekommen: Ich soll mit Delphi (wir verwenden die aktuelle 6.0er Version) ein kleines "Spiel" programmieren:

Dabei braucht man eigentlich nur ein Panel, ein Image und einen Button. Im Image sollten zuerst einmal 100 Felder erstellt werden (10x10; ich habe dafür 500x500 Pixel genommen, sprich 5x5 Pixel für jedes Feld). Am Anfang jeder "Runde" soll in einem der Felder ein "Schatz" versteckt werden. Nun beginnt die Schatzsuche. Sobald man auf ein Feld drückt, erscheint auf dem Panel die Entfernung zum Schatz (um diese auszurechnen muss man den Pythagorassatz verwenden - die Entfernung kann ruhig dezimal angegeben werden).
Ja, sobald man den Schatz gefunden hat, soll das Spiel halt abgebrochen werden und man soll es über den Button wieder neu starten können.
Könntet ihr mir dabei helfen? Bin nicht so wirklich bewandert in Delphi.
Big TIA!
MfG
Bearbeitet von Luki1987 am 04.12.2004, 11:50

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Du hast kein Delphi-Problem, sondern ein Motivationsproblem. Wir machen nicht deine Hausübung.

Wenn du spezifische Fragen stellst und beweisen kannst, dass du selbst nachgedacht hast, dann wird dir sicher geholfen.

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
Gut, passt. Ich bin gerade dabei das zu versuchen, nur komme ich absolut net weiter. Naja, dann fangen wir einmal am Anfang an:
Ich habe ein Image erstellt (Image1) -> nun will ich da drauf die Linien erstellen (damit diese 100 Kästchen entstehen). Wie mach ich das?
image1.canvas.lineto(X;Y);
Geht das? Bzw. wie gebe ich die Koordinaten in der Klammer an - da sollten ja eigentlich 4 Stück rein oder (X,Y-Koordinate vom Startpunkt und X,Y-Koordinatie vom Endpunkt)?

Souly

Addicted
Avatar
Registered: Mar 2004
Location: Graz
Posts: 480
i hab leider delphi gerade nicht installiert, aber die Delphi hilfe is äh so schön gemacht, da steht äh immer alles ganz genau und oft auch mit Beispielen.
Schleifen wirst auch machen müssen ( oder alles selbst reinschreiben :> ). Für den Schatz machst z.B.: ein Array 10x10 und machst ihn zufällig wo rein...
Wirst du schon zambringen :)

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Mit MoveTo und LineTo, soweit ich weiß.

Delphi 6 als "die aktuelle" zu bezeichnen, ist aber auch etwas komisch...

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
@Souly: In der Hilfe steht der Befehl image1.canvas.lineto(X;Y) -> nur eigentlich müsste ich ja vier Koordinaten eingeben bzw. wird mir sobald ich das Programm starten will, angezeigt, dass "canvas" ein "undeclared identifier" ist... :confused:
@RingDing: Aha, beide Befehle. Thx, das werd ich einmal versuchen. Wir verwenden Delphi 6; ich dachte das wäre die aktuellste (Schul-PCs sind eigentlich relativ gut (P4 2,6c) - kürzlich aufgerüstet)...
Naja, thx auf jeden Fall einmal an alle, ich werde einfach probieren und noch einmal probieren...
MfG

Souly

Addicted
Avatar
Registered: Mar 2004
Location: Graz
Posts: 480
also zuerst setzt in startpunkt mit image1.canvas.moveto(x,y) dann image1.canvas.lineto(x,y). btw. machs mit einer Paintbox!, image is ja nur wennst bilder einfügen willst.

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
Ja, das probier ich die ganze Zeit (wir haben es bisher nur mit image1.canvas gemacht -> darum verwende ich das weiter), aber es zeigt mir das "Canvas" immer als "undeclared identifier" an.

OK, das mit den Linien passt. Ich meld mich später wieder ;)
Bearbeitet von Luki1987 am 03.12.2004, 17:59

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
So, zu früh gefreut. Irgendwie kommen da keine Striche. Wenigstens ist die Fehlermeldung jetzt weg, aber er zeichnet noch immer nichts. Liegt's evtl. an der Strichfarbe (Hintergrundfarbe=Strichfarbe)?
Hier die derzeitige Unit:


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TDBImage;
Button1: TButton;
Panel1: TPanel;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var t: integer;
begin
for i:=1 to 9 do
begin
with image1 do
begin
Canvas.MoveTo(t*50,0);
Canvas.LineTo(t*50,500);
Canvas.MoveTo(0,t*50);
Canvas.LineTo(500,t*50);
t:=t+1;
end;
end;
end;

end.

Habe versucht, das gleich mit einer Variable "t" zu lösen, die in jeder Schleife um eines erhöht wird -> alle 50 Pixel sollte ein Strich entstehen (waagrecht und senkrecht). Laufen tut das Programm, aber es entstehen keine Striche? Sieht jemand einen Fehler?
Doh, ich bin so überfordert mit der Aufgabe... Naja, was soll's.
Wäre nice, wenn mir wer verraten könnte, woran es liegt, dass kein "Gitter" entsteht???
TIA.
MfG


Edit: Oder wie geht das mitm Array?
Bearbeitet von Luki1987 am 03.12.2004, 20:01

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
Kann mir echt keiner helfen? Es wäre echt nice, wenn ihr mir NUR verraten könntet, warum da nichts gezeichnet wird?!? Woran liegt das? Thx.

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
Wieder Solved...

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
So, wieder ein Problem:
Ich habe mittlerweile das Image mit den 100 Feldern erstellt. Funktioniert wunderbar, ich habe bisher alles auf den Button programmiert, weil das eben jedes Mal, wenn man das Spiel startet passieren soll.
Weiters lasse ich eine Zufallszahl zwischen 1 und 100 generieren, die das Feld markiert, an der der Schatz "vergraben" ist.
Nur soll jetzt regisitriert werden auf welches Feld der Spieler klickt. Wie kann ich ein Image unterteilen (also eben dass ich die 100 Felder, die ich soeben durch Linien erzeugt habe, auch untereinander abgrenzen kann, damit man feststellen kann, wohin der Spieler geklickt hat)?
Irgendwie geht das mit den Pixeln iirc, aber ich weiß den Befehl nicht mehr und Google findet auch nichts?!? Oder muss man doch Rectangles machen? Naja, ich weiß nicht mehr weiter...
Hilfe!
TIA!
MfG

Edit: Der Code:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Image1: TImage;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
schatz: integer;
implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 9 do
begin
with Image1 do
begin
Canvas.Pen.Width:=1;
Canvas.Pen.Color:=clblack;
Canvas.MoveTo(i*50,0);
Canvas.LineTo(i*50,500);
Canvas.MoveTo(0,i*50);
Canvas.LineTo(500,i*50);
end;
randomize;
schatz:=random(100)+1;
end;
end;


end.

murcielago

Dr. Doom
Avatar
Registered: Oct 2002
Location: *
Posts: 2689
auf des image gibts sicher an onclick event oder?

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
Ja, das Image ist aber das ganze (sprich alle 100 Felder) -> ich brauche das aber separat (weil der Schatz ist ja nur in EINEM der Felder) - gibt's da keine Lösung?
Trotzdem thx für deine Hilfe!
MfG

Edit: Bin gerade draufgekommen, dass eine andere Möglichkeit wäre, Rechtecke zu erstellen:
image1.canvas.rectangle(0,0,50,50); usw.
Evtl. ist das besser?

murcielago

Dr. Doom
Avatar
Registered: Oct 2002
Location: *
Posts: 2689
klar gibts was.

im onmousedown event handler bekommst x und y koordinate vom mauszeiger mit. also wohin er klickt hat, wennst jetz ein bischen herumrechnest bekommst genau das feld heraus wohin er klickt hat, verstehst?

und des mim rectangle vergiss bzw. kannst es auch so machen, bleibt sich aber dann blunzn.
Bearbeitet von murcielago am 03.12.2004, 22:45
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz