Autor Beitrag
chris3000
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 20.06.09 18:23 
...und da ich es erst vor 20min. geschafft habe, das programm zum laufen zu bekommen, benötige ich hilfe.
kann ich einfach alles hier fragen?
ich fang einfach mal mit der ersten an:

Wie kann ich grafiken erstellen, und ihre bewegungen koordinieren?
also eben wie bei tetris.. die symbole einfach runterkommen lassen
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Sa 20.06.09 18:34 
die erste Frage ist natürlich, wie viel du in Delphi schon kannst. Du hast geschrieben, du hast gerade erst das Programm zum Laufen gebracht - wenn du damit meinst, dass du die IDE gestartet hast, ist das definitiv erstmal zu wenig, und du solltest bei null Anfangen, dir erstmal ein paar Tutorials, ein Buch oder aber Suche in: Delphi-Forum CHRISTIANS CRASHKURS durchlesen. Als Buch würde ich dir ansonsten Delphi für Kids von Hans-Georg Schumann nahelegen (gibt es in jeder guten Bücherei), damit habe ich wenigstens Delphi gelernt.
Wenn du allerdings schon recht gut in Delphi klar kommst, solltest du das ganze am besten mit einer Paintbox lösen können. Du musst dann mithilfe eines TTimers die Paintbox permanent neuzeichnen und im Paintbox.OnPaint ereignis die verschiedenen Steinchen Zeichnen, Kollisionen Abfragen, Punktauswertung etc.

Grafiken erstellen:

Zum erstellen von Grafiken benutzt man am besten die Canvas. Da gibt es diverse Funktionen wie:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1OnClick(Sender: TObject);
begin
  Paintbox1.Repaint;
end;

procedure TForm1.Paintbox1Paint(Sender: TObject);
begin
  with Paintbox1.Canvas do
  begin
    MoveTo(100,100); //Den Malcursor zur Position X= 100; Y= 100; bewegen.
    LineTo(100,200); //Eine Linie vom Malkursor bis zur Position X= 100; Y=200; (Senkrechter Strich nach Unten)
    Brush.Color := clRed; //Füllfarbe auf Rot
    Pen.Color := clLime //Stiftfarbe auf Grün
    Rectangle(200,200,400,400); //ein Grüngefülltes Rechteck mit Rotem Rand mit Ecke oben Links: (200,200) Ecke oben Rechts (400,400) = ein Quadrat mit Seitenlänge 200
    Ellipse(10,10,20,20); //einen Kreis malen
  end;
end;
chris3000 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 20.06.09 19:39 
okay..
mit diesem crash dings hab ich scon diese demo gemacht.. mal sehn, wie ich weiter komme..
danke schonmal

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

so
ich habe jetzt gefunden, wie ich die figuren machen kann.
allerdings habe ich bis jetzt nur das quadrat und dieses lange schmale wir mache ich z.B ein L ein Z oder so ich habe die beiden mit 'Shape' gemacht und einfach die Farbe geändert.
und nochwas: wie bekomme ich die dazu, sich zu bewegen?

PS: sorry für Dp, man möge mir verzeihen
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Sa 20.06.09 22:49 
ich möchte dir an dieser Stelle nochmal nahelegen, auf TShape zu verzichten.

bewegung macht man logischerweise indem man beim Zeichnen (s.o.) die Position des Y-Wertes verändert:

du ziehst zuerst einen Timer aufs Formular und stellst bei Interval 100 ein. Dann ziehst du eine Paintbox aufs Formular und stellst die Größe auf ca. 500 * 500. Dann doppelklickst du auf den Timer und gibst das ein, was hier hinter Timer1Timer steht. Dann Wählst du die Paintbox -> Ereignisse -> OnPaint und trägst die andere Methode da ein. Jetzt noch schnell hinter public die beiden globalen Variablen deklarieren und dann F9 und los gehts!
Wenn du das verstanden hast, kannst du dich schwierigeren Sachen widmen.

ausblenden 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:
TForm1 = class(TForm)
  procedure Timer1Timer(Sender : TObject);
  procedure Paintbox1Paint(Sender : TObject);
private

public
  SteinX,SteinY : Integer
end;

implementation

procedure TForm1.Timer1Timer(Sender : TObject);
begin
  SteinY := Timer1.Tag;
  Timer1.Tag := Timer1.Tag + 1;
  if Timer1.Tag > 200 then Timer1.Tag := 0;
  Paintbox1.Repaint;
end;

procedure TForm1.Paintbox1Paint(Sender : TObject);
begin
  Paintbox1.Canvas.Rectangle(0,SteinY,20,SteinY+20);
end;