![]() |
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:
[edit=Matze][code]- durch [delphi]-Tags ersetzt. MfG Matze[/edit]
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. |
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 ;-) |
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? |
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; |
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. |
AW: Programm Billard. Verbeserungsvorschläge?
Zitat:
(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:
|
AW: Programm Billard. Verbeserungsvorschläge?
Zitat:
|
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. |
AW: Programm Billard. Verbeserungsvorschläge?
Zitat:
Der Destruktor muss grundsätzlich Destroy heisen!
Delphi-Quellcode:
Beim Konstruktor kann man den Namen frei wählen, nicht aber beim Destruktor, denn der Destruktor ist eine virtuelle Methode.
// die einzige richtige Deklaration
// man darf weder den Namen ändern noch das Override weglassen!!! destructor Destroy; override; |
AW: Programm Billard. Verbeserungsvorschläge?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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