![]() |
Delphi-Version: 5
Pacman
Halli Hallo,
Ich will ein PacMan verschnitt programmieren. Ich habe jetzt die Form schon in einzelne Kacheln aufgeteilt. Jetzt möchte ich, dass die "Geister" (bei mir nur kreise") eine bestimmte Anzahl sind und direkt am Anfang mit gezeichnet werden. Irgendwie hab ich da einen Hänger. ich hab mir gedacht, vielleicht geht es mit einem Array in dem ich sie Speicher und zeichnen lasse aber irgendwie funktioniert das alles nicht. Habt ihr einen kleinen Denkanstoß für mich oder tipps? Danke euch schon mal LG |
AW: Pacman
Zitat:
Was funktionniert nicht? Gibt es eine Fehlermeldung? Du kannst schon mal bisschen Code zeigen. |
AW: Pacman
einen Cade gibt es nur "indirekt" habe ein altes projekt ausgekramt und als vorlage benutzt und hat nicht viel geholfen. Bin ein zimlicher neuling. Vor allem sollen sie ja auch zufällig gezeichnet werden.
Also hier ist der Code den ich als vorlage genommen und schon verändert hab.
Delphi-Quellcode:
for i := 0 to high(Self.FMonsterArray) do
begin if assigned(Self.FMonsterArray[i]) then begin lRect.TopLeft.X := Self.FMonsterArray[i].Position.X; lRect.TopLeft.Y := Self.FMonsterArray[i].Position.Y; lRect.BottomRight.X := (lRect.TopLeft.X + 16); lRect.BottomRight.Y := (lRect.TopLeft.Y + 16); if Self.FCount <= High(Self.FMonsterArray) then begin Self.FMonsterArray[Self.FCount] := TphMonster.Create; Self.FMonsterArray[Self.FCount].Position := Point(random(GetWidth(ACanvas.ClipRect)), random(GetHeight(ACanvas.ClipRect))); Self.FCount := (Self.FCount +1); end; ACanvas.Ellipse(lRect.TopLeft.X, lRect.TopLeft.Y, lRect.BottomRight.X, lRect.BottomRight.Y); end; end; |
AW: Pacman
Ich würde in der Klasse
Delphi-Quellcode:
eine Methode einbringen, die sich um das Zeichnen kümmert:
TphMonster
Delphi-Quellcode:
und dann in einer Schleife folgendes tun:
...
procedure TphMonster.draw(pCanvas : TCanvas); const BREITE = 16; begin pCanvas.brush.color := clWhite; //eventuell Farbe festlegen pCanvas.Ellipse(PositionX, PositionY, PositionX + BREITE , PositionY + BREITE); end; ...
Delphi-Quellcode:
Wenn du willst kannst du ja mal die Quellen deiner Vorlage geben und deinen gesamten Quellcode anhängen.
...
FMonsterArray[i].draw(ACanvas); ... |
AW: Pacman
Das klappt schon mal ganz gut... Mit dem zufälligen zeichnen klappts jedoch noch nicht ganz.
versucht hab ich es so:
Delphi-Quellcode:
ACanvas.Ellipse(Random(ACanvas.ClipRect.TopLeft.X), random(ACanvas.ClipRect.TopLeft.Y), ACanvas.ClipRect.TopLeft.X + lWidth ,
ACanvas.ClipRect.TopLeft.Y + lWidth); |
AW: Pacman
Zitat:
Delphi-Quellcode:
constructor TphMonster.Create();
begin self.PositionX := random(); // Angeben der Größe self.PositionY := random(); end; |
AW: Pacman
hmmm.... Ich glaub ich bin da gerade ein bisschen zu doof für.
Also es sieht jetzt folgender maßen aus:
Delphi-Quellcode:
Der zeichnet zwar die Kreise aber immer nur an einem Fleck statt mehrere Verstreut auf der Form
procedure TphGameField.DrawMonsters(ACanvas: TCanvas);
var lRect: TRect; i: Integer; const lWidth = 16; begin //TODO: zufällig zeichnen lassen (ca. 10) for i := 0 to high(Self.FMonsterArray) do begin Self.FMonsterArray[Self.FCount] := TphMonster.Create; FMonsterArray[i].Draw(ACanvas); end; end; ............................................ constructor TphMonster.Create; begin // inherited Create; randomize; Self.FPosition.X := random(128); // Angeben der Größe Self.FPosition.Y := random(128); end; destructor TphMonster.Destroy; begin inherited Destroy; end; procedure TphMonster.Draw(ACanvas: TCanvas); var x,y: integer; const lWidth = 16; begin // randomize; // x := random(ACanvas.ClipRect.TopLeft.X); // y := random(ACanvas.ClipRect.TopLeft.Y); ACanvas.brush.color := clRed; // ACanvas.Ellipse(x, y, (x + lWidth), (y + lWidth)); end; Hab da was bei zeichnen grad entdeckt aber trotzdem gehts nicht |
AW: Pacman
Kannst du mal bitte die Klassendefinition der Klasse
Delphi-Quellcode:
mal reinhängen?
TphMonster
|
AW: Pacman
Delphi-Quellcode:
//Spieler und Monster
TphItem = class(TObject) private FName: String; FSize: Integer; FPosition: TPoint; procedure GetName(const Value: String); procedure GetSize(const Value: Integer); procedure GetPosition(const Value: TPoint); public constructor Create(); destructor Destroy(); property Name: String read FName write GetName; property Size: Integer read FSize write GetSize; property Position: TPoint read FPosition write GetPosition; end; //Spielfigur TphPlayer = class(TphItem) private public constructor Create(); destructor Destroy(); end; //Gegner (Monster) TphMonster = class(TphItem) private public procedure Draw(ACanvas: TCanvas); constructor Create(); destructor Destroy(); end; ......................... TphGameField = class(TObject) private FArray: Array of Array of Byte; FPlayer: TphPlayer; FMonsters: TObjectList; FViewPort: TphViewPort; FSize: Integer; FPosition: TPoint; FCount: Integer; FMonsterArray: Array [0..20] of TphMonster; procedure SetPosition(const Value: TPoint); protected function InitArray(AWidth, AHeight: Integer): Boolean; public constructor Create(AWidth, AHeight, ASize: Integer); destructor Destroy(); override; function MovePlayer(ADirection: Byte): TPoint; //???????????????????????? procedure DrawGameField(ACanvas: TCanvas; AClipRect: TRect); procedure DrawPlayer(ACanvas: TCanvas); procedure DrawMonsters(ACanvas: TCanvas); property Player: TphPlayer read FPlayer {write SetPlayer}; property ViewPort: TphViewPort read FViewPort {write SetViewPort}; Property Position: TPoint read FPosition write SetPosition; end; |
AW: Pacman
Zitat:
Delphi-Quellcode:
Und dann im Create des Monsters dies machen:
constructor TphItem.Create(posx, posy) ;
begin ... // andere Felder initialisieren, ggf. in der Paramterliste erweitern FPosition.Position.X := posx; FPosition.Position.Y := posy; // eventuell anpassen wegen TPoint, properties nicht im Kopf ;) end;
Delphi-Quellcode:
Zuhause also heute abend kann ich das besser überprüfen ;)
constructor TphMonster.Create;
begin randomize; // ---> auslagern , nur einmal nötig inherited Create(random(128), random(128)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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