Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Programm Billard. Verbeserungsvorschläge? (https://www.delphipraxis.net/156708-programm-billard-verbeserungsvorschlaege.html)

AlphaRage 12. Dez 2010 00:00

Programm Billard. Verbeserungsvorschläge?
 
Hallo.

Seit ca. 2 Monaten programmieren wir im Informatik-Unterricht mit Delphi. Meine Erfahrung damit ist also noch nicht so hoch.
Unser zweites Projekt, Billard genannt, bereitet mir da schon ein paar Probleme. Habe mich vor ein paar Stunden mal dran gesetzt und probiert.
Ich habe bisher die beiden Units 'mKugel' und 'mTisch' geschrieben. Außerdem das Hauptprogramm 'pBillard'.
Scheint auch alles richtig zu laufen. Kompilieren funktioniert, aber leider wird der Tisch einfach nicht gezeichnet. Die Kugel erkennt nur die Ränder des Tisches. Aber er ist unsichtbar. Ich bin mir sicher, dass ihr helfen könnt.
Außerdem hoffe ich auf Verbesserungsvorschläge!
Vielleicht nützt es zu wissen, dass ich in Delphi 6 programmiere.
Und bitte wundert euch nicht darüber, dass wir die Befehle in Deutsch schreiben. Mir wäre es von Beginn an auch lieber gewesen, in Englisch zu schreiben. Finde es so nämlich ein wenig verwirrend.

Hier sind die Codes!

Delphi-Quellcode:
program PBilliard;

uses
  mSuM,
  mKugel,
  mTisch in 'mTisch.pas';

var
  hatBildschirm : Bildschirm;
  hatStift : Stift;
  hatTastatur : Tastatur;
  hatMaus : Maus;
  hatKugel : Kugel;
  hatTisch : Tisch;

begin
  hatBildschirm:=Bildschirm.init;
  hatStift:=Stift.init;
  hatTastatur:=Tastatur.init;
  hatMaus:=Maus.init;
  hatKugel:=Kugel.init(500,200,200,0.05,5,40);
  hatTisch:=Tisch.init(40,40,800);


repeat
 hatKugel.bewege;
until hatMaus.istGedrueckt;


  hatStift.gibFrei;
  hatBildschirm.gibFrei;
  hatTastatur.gibFrei;
  hatMaus.gibFrei;
  hatKugel.gibFrei;
end.
Delphi-Quellcode:
unit mKugel;

interface

uses mSuM;

type Kugel = class

private

zFarbe: ganzeZahl;

zX: Zahl;
zY: Zahl;
zGeschwindigkeit: Zahl;
zRichtung: Zahl;
zGroesse: Zahl;

hatStift: Buntstift;

public

constructor init (pFarbe: ganzeZahl ; pX, pY, pGeschwindigkeit, pRichtung, pGroesse: Zahl);
procedure zeichne;
procedure loesche;
procedure bewege;
procedure setzeRichtung (pRichtung: Zahl);
procedure setzeGroesse (pGroesse: Zahl);
procedure setzeFarbe (pFarbe: ganzeZahl);
procedure setzeGeschwindigkeit (pGeschwindigkeit: Zahl);
function gibX: Zahl;
function gibY: Zahl;
function gibRichtung: Zahl;
destructor gibFrei;

end;

implementation

constructor kugel.init (pFarbe: ganzeZahl ; pX, pY, pGeschwindigkeit, pRichtung, pGroesse: Zahl);
begin
   hatStift:= Buntstift.init;
   zX:= pX;
   zY:= pY;
   zFarbe:= pFarbe;
   zGroesse:= pGroesse;
   zGeschwindigkeit:= pGeschwindigkeit;
   zRichtung:= pRichtung;
   hatStift.setzeFarbe (zFarbe);
   hatStift.hoch;
   hatStift.bewegeBis (zX,zY);
   hatStift.dreheUm (zRichtung);
   hatStift.runter;
   hatStift.setzeFuellmuster (gefuellt);
end;



procedure kugel.zeichne;
begin
   hatStift.zeichneKreis (zGroesse);
end;



procedure kugel.loesche;
begin
   hatStift.radiere;
   self.zeichne;
   hatStift.normal;
end;



procedure kugel.bewege;
begin
   self.loesche;
   hatStift.hoch;
   hatStift.bewegeUm (zGeschwindigkeit);
   hatStift.runter;

   if (hatStift.hPosition <= 85) or (hatStift.hPosition >= 795)
      then self.setzeRichtung (180-zRichtung);

   if (hatStift.vPosition <= 85) or (hatStift.vPosition >= 795)
      then self.setzeRichtung (360-zRichtung);

   self.Zeichne;
end;



procedure Kugel.setzeRichtung(pRichtung: Zahl);
begin
   hatStift.dreheBis (pRichtung);
   zRichtung:= pRichtung;
end;



procedure Kugel.setzeGroesse(pGroesse: Zahl);
begin
   zGroesse:= pGroesse;
end;



procedure Kugel.setzeFarbe(pFarbe: ganzeZahl);
begin
  zFarbe:= pFarbe;
end;



procedure Kugel.setzeGeschwindigkeit(pGeschwindigkeit: Zahl);
begin
   zGeschwindigkeit:= pGeschwindigkeit;
end;



function kugel.gibX;
begin
   result:= hatStift.hPosition;
end;



function kugel.gibY;
begin
   result:= hatStift.vPosition;
end;



function kugel.gibRichtung;
begin
   result := hatStift.Winkel;
end;



destructor Kugel.gibFrei;
begin
   self.loesche;
   hatStift.gibFrei;
end;


end.
Delphi-Quellcode:
unit mTisch;

interface

uses mSuM;

type Tisch = class

private

zhT, zvT, zLaenge: ganzeZahl;

hatStift: Buntstift;

public

constructor init(phT, pvT, pLaenge: ganzeZahl);
procedure zeichne;
procedure loesche;
function gibRechterRand: Zahl;
function gibLinkerRand: Zahl;
function gibObererRand: Zahl;
function gibUntererRand: Zahl;
destructor gibFrei;

end;


implementation
constructor tisch.init (phT, pvT, pLaenge: ganzeZahl);
begin
   hatStift:= Buntstift.init;
   zhT:= phT;
   zvT:= pvT;
   zLaenge:= pLaenge;
   hatStift.bewegeBis (zhT, zvT);
end;



procedure tisch.zeichne;
begin
   hatStift.normal;
   hatStift.zeichneRechteck (zLaenge, ZLaenge);
end;



procedure tisch.loesche;
begin

end;



function tisch.gibObererRand;
begin
   result:= zvT;
end;



function tisch.gibUntererRand;
begin
   result:= zvT + zLaenge;
end;



function tisch.gibRechterRand;
begin
   result:= zhT;
end;



function tisch.gibLinkerRand;
begin
   result:= zhT + zLaenge;
end;



destructor tisch.gibFrei;
begin
   self.loesche;
   hatStift.gibFrei;
end;



end.
[edit=Matze][code]- durch [delphi]-Tags ersetzt. MfG Matze[/edit]

Bummi 12. Dez 2010 00:14

AW: Programm Billard. Verbeserungsvorschläge?
 
von Zeichen sieht man in dem Code gar nichts....
ich schätze in mSum ist
Bildschirm;
Stift;
Tastatur;
Maus;
Buntstift;
deklariert und "hatstift.xxx" zeichnet auf einem Canvas welches über Bildschirm festgelegt ist.

Krude Syntax ;-)

AlphaRage 12. Dez 2010 00:16

AW: Programm Billard. Verbeserungsvorschläge?
 
Stimmt!
Hätte ich wohl erwähnen sollen.
Dann bin ich jetzt schonmal etwas schlauer.

Nur mit dem Wort "Canvas" kann ich nichts anfangen. Was bedeutet das?

Bummi 12. Dez 2010 01:03

AW: Programm Billard. Verbeserungsvorschläge?
 
Canvas ist die "Zeichenfläche" von Controls.
z.B.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Color := clRed;
  Canvas.Ellipse(10,10,100,100);
  Paintbox1.Canvas.Pen.Color := clLime;
  Paintbox1.Canvas.Ellipse(10,10,100,100);
   
end;

AlphaRage 12. Dez 2010 01:12

AW: Programm Billard. Verbeserungsvorschläge?
 
Danke! Gut zu wissen. Damit wäre dann geklärt, was ich vergessen hatte.
Jetzt fehlt nur noch die Problemlösung und eventuelle Verbesserungsvorschläge.

Außerdem: Kann man dieses flackern der "Kugel" entfernen?
Das sieht extrem unrealistisch aus und stört auch ein wenig, wenn alles, was sich in diesem Programm "bewegt" dauernd flackert.

Unsere Lehrerin behauptet, dass es am Bildschirm läge. Das halte ich aber für Unsinn. Das Problem scheint nämlich jeder zu haben.

Sir Rufo 12. Dez 2010 01:35

AW: Programm Billard. Verbeserungsvorschläge?
 
Zitat:

Zitat von AlphaRage (Beitrag 1068034)
Außerdem: Kann man dieses flackern der "Kugel" entfernen?
Das sieht extrem unrealistisch aus und stört auch ein wenig, wenn alles, was sich in diesem Programm "bewegt" dauernd flackert.

Unsere Lehrerin behauptet, dass es am Bildschirm läge. Das halte ich aber für Unsinn. Das Problem scheint nämlich jeder zu haben.

Ja, geht ... mit DirectX ... also nix mit den tollen Schul-(Sprachverbrecher)-Units

(wer kommt auf den Quatsch, statt Destroy GibFrei zu benutzen, aber statt Create nicht etwa Erzeuge sondern Init? - Kann nur ein Lehrer sein :roll: )

Deiner Lehrerin kann ich nur den Nuhr-Tipp geben:
Zitat:

Wenn man keine Ahnung hat, einfach mal die Fresse halten!

Namenloser 12. Dez 2010 01:41

AW: Programm Billard. Verbeserungsvorschläge?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1068038)
(wer kommt auf den Quatsch, statt Destroy GibFrei zu benutzen, aber statt Create nicht etwa Erzeuge sondern Init? - Kann nur ein Lehrer sein :roll: )

Deiner Lehrerin kann ich nur den Nuhr-Tipp geben:
Zitat:

Wenn man keine Ahnung hat, einfach mal die Fresse halten!

Das ist irgendwie so eine Berufskrankheit von Info-Lehrern...

Bummi 12. Dez 2010 08:38

AW: Programm Billard. Verbeserungsvorschläge?
 
Ich weiß immer noch nicht wo und wie Ihr malt...
Doublebuffered wird Euch nicht viel helfen da Ihr aj auch löschen müßt. Ihr könntete in ein Bitmap malen und wenn dies fertig ist diese immer komplett auf das Canvas malen.

sx2008 12. Dez 2010 09:45

AW: Programm Billard. Verbeserungsvorschläge?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1068038)
(wer kommt auf den Quatsch, statt Destroy GibFrei zu benutzen, aber statt Create nicht etwa Erzeuge sondern Init? - Kann nur ein Lehrer sein :roll: )

Dito - schönen Gruß an den/die Lehrer(in).
Der Destruktor muss grundsätzlich Destroy heisen!
Delphi-Quellcode:
// die einzige richtige Deklaration
// man darf weder den Namen ändern noch das Override weglassen!!!
destructor Destroy; override;
Beim Konstruktor kann man den Namen frei wählen, nicht aber beim Destruktor, denn der Destruktor ist eine virtuelle Methode.

AlphaRage 12. Dez 2010 13:08

AW: Programm Billard. Verbeserungsvorschläge?
 
Zitat:

Zitat von Bummi (Beitrag 1068050)
Ich weiß immer noch nicht wo und wie Ihr malt...

Wir zeichnen auf dem Bildschirm mit "meinStift" bzw "hatStift".


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz