Hallo!
Wir müssn in info ne art "facharbeit" erledigen .. naja Delphi is nich wirklich meine stärke.
Un zwar möchte ich das Spiel Pong erstellen jedoch habe ich Probleme mit dem abprallen von dem Schläger. Vom Spielfeld klappts.
Kann mir mal bitte jemand sagen was ich falsch gemacht hab und mir das bitte mal erklären?
Meine Pong Unit
unit mPong;
interface
uses mSUM , mSpielfeld, mSchlaeger ;
type Pong = class
einBuntstift : Buntstift;
kenntSpielfeld : Spielfeld;
kenntSchlaeger : Schlaeger;
zGroesse: Zahl;
zGeschwindigkeit : Zahl;
constructor init;
procedure zeichne;
procedure rolle;
procedure bewegeBis ( pHPosition , pVPosition : Zahl);
procedure dreheBis (Winkel:Zahl);
procedure Wandabprall;
procedure setzeGroesse (pRadius:Zahl);
procedure setzeGeschwindigkeit (pGeschwindigkeit : Zahl);
procedure loesche;
procedure lerneSpielfeldkennen (pSpielfeld:Spielfeld);
procedure lerneSchlaegerkennen (pSchlaeger:Schlaeger);
function hPosition:Zahl;
function vPosition:Zahl;
function Winkel:Zahl;
destructor gibFrei;
end;
implementation
constructor Pong.init;
begin
einBuntstift:=Buntstift.init;
zGroesse := 10;
zGeschwindigkeit := 3;
einBuntstift.bewegeBis(950,20);
self.zeichne ;
self.dreheBis(50);
end;
procedure Pong.lerneSpielfeldkennen (pSpielfeld:Spielfeld);
begin
kenntSpielfeld:=pSpielfeld;
end;
procedure Pong.lerneSchlaegerkennen (pSchlaeger:Schlaeger);
begin
kenntSchlaeger:=pSchlaeger;
end;
procedure Pong.zeichne;
begin
einBuntstift.zeichneKreis(zGroesse);
end;
procedure Pong.rolle;
begin
if (self.hPosition >= kenntSpielfeld.rechterRand-zGroesse-zGeschwindigkeit) or
(self.hPosition <= kenntSpielfeld.linkerRand+zGroesse+zGeschwindigkeit) or
(self.vPosition <= kenntSpielfeld.obererRand+zGroesse+zGeschwindigkeit) or
(self.vPosition >= kenntSpielfeld.untererRand-zGroesse-zGeschwindigkeit) or
(self.hPosition <= kenntSchlaeger.rechterRand+zGroesse+zGeschwindigkeit) or
(self.hPosition >= kenntSchlaeger.linkerRand-zGroesse-zGeschwindigkeit) or
(self.vPosition >= kenntSchlaeger.obererRand-zGroesse-zGeschwindigkeit) or
(self.vPosition <= kenntSchlaeger.untererRand+zGroesse+zGeschwindigkeit)
then
self.Wandabprall;
einBuntstift.radiere;
einBuntstift.zeichneKreis (zGroesse);
einBuntstift.normal;
einBuntstift.bewegeUm(zGeschwindigkeit);
einBuntstift.zeichneKreis(zGroesse);
end;
procedure Pong.bewegeBis (pHPosition, pVPosition : Zahl);
begin
self.loesche;
einBuntstift.bewegeBis ( pHPosition, pVPosition);
self.zeichne;
end;
procedure Pong.dreheBis (Winkel:Zahl);
begin
einBuntstift.dreheBis(Winkel);
end;
procedure Pong.setzeGroesse (pRadius:Zahl);
begin
self.loesche;
zGroesse:=pRadius;
self.zeichne;
end;
procedure Pong.setzeGeschwindigkeit (pGeschwindigkeit:Zahl);
begin
self.loesche;
zGeschwindigkeit:=pGeschwindigkeit;
self.zeichne;
end;
procedure Pong.Wandabprall;
begin
if self.hPosition>= kenntSpielfeld.rechterRand-zGroesse-zGeschwindigkeit
then self.dreheBis(180-self.winkel);
if self.hPosition<= kenntSpielfeld.linkerRand+zGroesse+zGeschwindigkeit
then self.dreheBis(180-self.winkel);
if self.vPosition>= kenntSpielfeld.untererRand-zGroesse-zGeschwindigkeit
then self.dreheBis(360-self.winkel);
if self.vPosition<= kenntSpielfeld.obererRand+zGroesse+zGeschwindigkeit
then self.dreheBis(360-self.winkel);
if self.hPosition<= kenntSchlaeger.rechterRand+zGroesse+zGeschwindigkeit
then self.dreheBis(360+self.winkel);
if self.hPosition>= kenntSchlaeger.linkerRand-zGroesse-zGeschwindigkeit
then self.dreheBis(360+self.winkel);
if self.vPosition<= kenntSchlaeger.untererRand+zGroesse+zGeschwindigkeit
then self.dreheBis(180+self.winkel);
if self.vPosition>= kenntSchlaeger.obererRand-zGroesse-zGeschwindigkeit
then self.dreheBis(180+self.winkel);
end;
procedure Pong.loesche;
begin
einBuntstift.radiere;
einBuntstift.zeichneKreis (zGroesse*6);
end;
destructor Pong.gibFrei;
begin
einBuntstift.gibFrei;
end;
function Pong.hPosition:Zahl;
begin
result :=einBuntstift.hPosition;
end;
function Pong.Winkel:Zahl;
begin
result :=einBuntstift.Winkel;
end;
function Pong.vPosition:Zahl;
begin
result :=einBuntstift.vPosition;
end;
end.
Hauptprogramm
program pExtremePong;
uses
mSuM,
mSpielfeld in 'mSpielfeld.pas',
mPong in 'mPong.pas',
mSchlaeger in 'mSchlaeger.pas';
var
meinBildschirm : Bildschirm;
meinSpielfeld : Spielfeld;
meinBuntstift : Buntstift;
meinPong : Pong;
meineMaus : Maus;
meinSchlaeger : Schlaeger;
meineTastatur: Tastatur;
{meinSchlaeger2 : Schlaeger;}
begin
meinBildschirm :=Bildschirm.init;
meinSpielfeld := Spielfeld.init(75,0);
meinBuntstift := Buntstift.init;
meinPong := Pong.init;
meineMaus := Maus.init;
meinSchlaeger := Schlaeger.init;
meineTastatur := Tastatur.init;
{meinSchlaeger2 := Schlaeger;}
//meinPong.bewegeBis(200,200);
meinPong.lerneSpielfeldkennen(meinSpielfeld);
meinPong.lerneSchlaegerkennen(meinSchlaeger);
meinPong.zeichne;
meinSchlaeger.zeichne;
repeat
meinPong.rolle;
warte(1);
If meineTastatur.wurdeGedrueckt
then
If meineTastatur.zeichen=PFEILOBEN then
begin
meinSchlaeger.loesche;
meinSchlaeger.bewegeHoch;
meinSchlaeger.zeichne;
meineTastatur.weiter;
end
else
If meineTastatur.zeichen=PFEILUNTEN then
begin
meinSchlaeger.loesche;
meinSchlaeger.bewegeRunter;
meinSchlaeger.zeichne;
meineTastatur.weiter;
end
until(meineMaus.istGedrueckt);
meinPong.gibFrei;
meineMaus.gibFrei;
meinSchlaeger.gibFrei;
//meinSchlaeger2.gibFrei;
meinBuntstift.gibFrei;
meinSpielfeld.gibFrei;
meinBildschirm.gibFrei;
end.
Schläger
unit mSchlaeger;
interface
uses mSUM , mSpielfeld ;
type Schlaeger = class
eineTastatur : Tastatur;
einBuntstift : Buntstift;
kenntSpielfeld : Spielfeld;
zGeschwindigkeit : Zahl;
constructor init ;
procedure zeichne;
procedure loesche;
procedure BewegeHoch;
procedure BewegeRunter;
function obererRand:Zahl;
function untererRand:Zahl;
function rechterRand:Zahl;
function linkerRand:Zahl;
destructor gibFrei;
end;
implementation
constructor Schlaeger.init;
begin
einBuntstift:=Buntstift.init;
einBuntstift.bewegeBis(1000,400);
end;
procedure Schlaeger.zeichne;
begin
einBuntstift.zeichneRechteck(10,160);
end;
procedure Schlaeger.loesche;
begin
einBuntstift.radiere;
einBuntstift.zeichneRechteck(10,160);
end;
procedure Schlaeger.bewegeHoch;
begin
einBuntstift.hoch;
einBuntstift.dreheBis(90);
einBuntstift.bewegeUm(50);
einBuntstift.dreheBis(0);
einBuntstift.normal;
end;
procedure Schlaeger.bewegeRunter;
begin
einBuntstift.hoch;
einBuntstift.dreheBis(270);
einBuntstift.bewegeUm(50);
einBuntstift.dreheBis(0);
einBuntstift.normal;
end;
function Schlaeger.obererRand:Zahl;
begin
result:=einBuntstift.vPosition;
end;
function Schlaeger.untererRand:Zahl;
begin
result:=einBuntstift.vPosition+160;
end;
function Schlaeger.rechterRand:Zahl;
begin
result:=einBuntstift.hPosition+10;
end;
function Schlaeger.linkerRand:Zahl;
begin
result:=einBuntstift.hPosition;
end;
destructor Schlaeger.gibFrei;
begin
einBuntstift.gibFrei;
end;
end.
Vielen dank im vorraus!