AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Programm Billard. Verbeserungsvorschläge?
Thema durchsuchen
Ansicht
Themen-Optionen

Programm Billard. Verbeserungsvorschläge?

Ein Thema von AlphaRage · begonnen am 12. Dez 2010 · letzter Beitrag vom 12. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
AlphaRage

Registriert seit: 12. Dez 2010
5 Beiträge
 
#1

Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 01:00
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]

Geändert von Matze (12. Dez 2010 um 09:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 01:14
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AlphaRage

Registriert seit: 12. Dez 2010
5 Beiträge
 
#3

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 01:16
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 02:03
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AlphaRage

Registriert seit: 12. Dez 2010
5 Beiträge
 
#5

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 02:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 02:35
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 )

Deiner Lehrerin kann ich nur den Nuhr-Tipp geben:
Zitat:
Wenn man keine Ahnung hat, einfach mal die Fresse halten!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 02:41
(wer kommt auf den Quatsch, statt Destroy GibFrei zu benutzen, aber statt Create nicht etwa Erzeuge sondern Init? - Kann nur ein Lehrer sein )

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...
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 09:38
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 10:45
(wer kommt auf den Quatsch, statt Destroy GibFrei zu benutzen, aber statt Create nicht etwa Erzeuge sondern Init? - Kann nur ein Lehrer sein )
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.
  Mit Zitat antworten Zitat
AlphaRage

Registriert seit: 12. Dez 2010
5 Beiträge
 
#10

AW: Programm Billard. Verbeserungsvorschläge?

  Alt 12. Dez 2010, 14:08
Ich weiß immer noch nicht wo und wie Ihr malt...
Wir zeichnen auf dem Bildschirm mit "meinStift" bzw "hatStift".
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
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