AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pac-Man Hilfe

Ein Thema von Zwinge112 · begonnen am 10. Apr 2015 · letzter Beitrag vom 23. Apr 2015
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 13:16
Oder vielleicht so in der Art:
Delphi-Quellcode:
const
  FELDER_X = 24;
  FELDER_Y = 24;
  
type
  TFeldZustand = (dtNix, dtWand, dtPunkt, dtGeist, dtPacman);
  
  TSpielfeld = array[0..FELDER_X - 1, 0..FELDER_Y - 1] of TFeldzustand;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 13:34
Einmal abgesehen von besseren Lösungswegen.

Unverständlich ist auch, weshalb das Grid "FeldPac" 24x24 Felder besitzt aber das Grid "FeldMauer" 47x47.

Im Prinzip fehlt auch ein wirkliches Spielfeld, welches nach den Angaben in den Grids dynamisch gezeichnet/aufgebaut wird.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 13:35
Was ich ebenfalls vermisse ist das Konzept. Das könnte z.B. in etwa so aussehen (Siehe unten). Bin mir aber nicht sicher, zum Beispiel Sir Rufo kann doch sowas normalerweise immer recht gut.
Delphi-Quellcode:
unit uPacMan;

interface

uses
  Types, SysUtils, Dialogs, Classes, Graphics;

type
  TPacManStyle = (pmsPacMan, pmsRedGuy, pmsPinkGuy, pmsCyanGuy, pmsOrangeGuy);

  TPacManPowerStyle = (pmpDefault, pmpPower);

  TPacManOrientation = (pmoCenter, pmoLeft, pmoRight, pmoTop, pmoBottom);

  TPacManGuy = class
  private
    FStyle: TPacManStyle;
    FPowerStyle: TPacManPowerStyle;
    FOrientation: TPacManOrientation;
    FX, FY: integer;
  public
    property Style: TPacManStyle read FStyle write FStyle;
    property PowerStyle: TPacManPowerStyle read FPowerStyle write FPowerStyle;
    property Orientation: TPacManOrientation read FOrientation write FOrientation;
    property X: integer read FX write FX;
    property Y: integer read FY write FY;
  end;

  TPacManGuys = array[TPacManStyle] of TPacManGuy;

  TPacManCellStatus = (pmcEmpty, pmcWall, pmcPellet, pmcPowerPellet,
    pmcPacMan, pmcRedGuy, pmcPinkGuy, pmcCyanGuy, pmcOrangeGuy);

  TPacManCell = class
  private
    FX, FY, FWidth, FHeight: integer;
    FStatus: TPacManCellStatus;
  public
    procedure Draw(Canvas: TCanvas; Bitmap: TBitmap);
    property X: integer read FX write FX;
    property Y: integer read FY write FY;
    property Width: integer read FWidth write FWidth;
    property Height: integer read FHeight write FHeight;
    property Status: TPacManCellStatus read FStatus write FStatus;
  end;

  TPacManGrid = class
  private
    FColCount, FRowCount: integer;
    FCells: array of array of TPacManCell;
    function GetCell(X, Y: integer): TPacManCell;
  public
    property Cell[X, Y: integer]: TPacManCell read GetCell; default;
    property ColCount: integer read FColCount;
    property RowCount: integer read FRowCount;
    constructor Create(const ColCount, RowCount, Width, Height: integer);
    destructor Destroy; override;
  end;

  TPacManGame = class
  private
    FGuys: TPacManGuys;
    FGrid: TPacManGrid;
    function GetGuy(Style: TPacManStyle): TPacManGuy;
  public
    property Guy[Style: TPacManStyle]: TPacManGuy read GetGuy;
    property Grid: TPacManGrid read FGrid;
    constructor Create(const ColCount, RowCount, Width, Height: integer);
    destructor Destroy; override;
  end;

implementation

{ TPacManCell }

procedure TPacManCell.Draw(Canvas: TCanvas; Bitmap: TBitmap);
var
  Rect: TRect;
begin
  Rect.Left := FX * FWidth;
  Rect.Top := FY * FHeight;
  Rect.Right := Rect.Left + FWidth;
  Rect.Bottom := Rect.Top + FHeight;
  Canvas.MoveTo(Rect.Left, Rect.Top);
  Canvas.LineTo(Rect.Right, Rect.Top);
  Canvas.LineTo(Rect.Right, Rect.Bottom);
  Canvas.LineTo(Rect.Left, Rect.Bottom);
  Canvas.LineTo(Rect.Left, Rect.Top);
  if Bitmap <> nil then
  begin
    Rect.Left := Rect.Left + 4;
    Rect.Top := Rect.Top + 4;
    Rect.Right := Rect.Right - 4;
    Rect.Bottom := Rect.Bottom - 4;
    Canvas.StretchDraw(Rect, Bitmap);
  end;
end;

{ TPacManGrid }

constructor TPacManGrid.Create(const ColCount, RowCount, Width, Height: integer);
var
  X, Y: integer;
begin
  FColCount := ColCount;
  FRowCount := RowCount;
  SetLength(FCells, FColCount, FRowCount);
  for X := 0 to FColCount - 1 do
    for Y := 0 to FRowCount - 1 do
    begin
      FCells[X, Y] := TPacManCell.Create;
      FCells[X, Y].X := X;
      FCells[X, Y].Y := Y;
      FCells[X, Y].Width := Width div ColCount;
      FCells[X, Y].Height := Height div RowCount;
    end;
end;

destructor TPacManGrid.Destroy;
var
  X, Y: integer;
begin
  for X := 0 to FColCount - 1 do
    for Y := 0 to FRowCount - 1 do
      FCells[X, Y].Free;
  SetLength(FCells, 0);
  inherited;
end;

function TPacManGrid.GetCell(X, Y: integer): TPacManCell;
begin
  Result := FCells[X, Y];
end;

{ TPacManGame }

constructor TPacManGame.Create(const ColCount, RowCount, Width, Height: integer);
var
  Style: TPacManStyle;
begin
  FGrid := TPacManGrid.Create(ColCount, RowCount, Width, Height);
  for Style := pmsPacMan to pmsOrangeGuy do
  begin
    FGuys[Style] := TPacManGuy.Create;
    FGuys[Style].Style := Style;
  end;
end;

destructor TPacManGame.Destroy;
var
  Style: TPacManStyle;
begin
  FGrid.Free;
  for Style := pmsPacMan to pmsOrangeGuy do
    FGuys[Style].Free;
  inherited;
end;

function TPacManGame.GetGuy(Style: TPacManStyle): TPacManGuy;
begin
  Result := FGuys[Style];
end;

end.

Geändert von Bjoerk (11. Apr 2015 um 14:09 Uhr) Grund: TPacManGuys eingeführt.
  Mit Zitat antworten Zitat
Zwinge112
(Gast)

n/a Beiträge
 
#4

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 14:08
@Popov,
Warum wir über die StringGrids gehen weiß ich auch nicht genau.. ich hab den Plan nicht gemacht....
Kannst du mir nen Tipp geben, wie ich es mit Hilfe eines StringGrids bewältigen Könnte die Punkte rein zu bekommen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#5

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 14:24
Dann würde ich mit den anderen sprechen, ob man wirklich unbedingt ein StringGrid benutzen will. Es macht ja keinen Sinn, etwas mit Gewalt umsetzen zu wollen, was sich im Nachhinein als zu umständlich erweist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Zwinge112
(Gast)

n/a Beiträge
 
#6

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 14:51
naja das Problem hierbei ist, dass die anderen ihre Teile alle schon fertig haben.... nur meiner mit den Punkten fehlt jetzt noch......
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 15:07
naja das Problem hierbei ist, dass die anderen ihre Teile alle schon fertig haben.... nur meiner mit den Punkten fehlt jetzt noch......
Verständlich. Zweckmäßiger wäre es jedoch die anderen davon zu überzeugen ein PacManGrid zu entwerfen? Ist nicht sooo schwer.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 16:09
@Zwinge112

Ich hab mir den Code angeguckt und muss sagen, ich blick da nicht durch. Lassen wir das mit dem StringGrid usw. Das ist ein Teil für sich, das meine ich jetzt nicht. Ich meine die Logik die hinter dem ganzen Steckt. Ich hab mich nun eine halbe Stunde mit dem Code auseinandergesetzt und hab keine Ahnung was deine Kollegen da gemacht haben.

Wenn di nun meinen ihren Part erledigt zu haben und nun bist du dran, dann darfst du denen einen schönen Gruß von mir bestellen und sagen: Schrott basteln und den dann umrechnen, so dass ein Teil funktioniert, bedeutet nicht fertig zu sein.

Es gibt zwei StringGrids, FeldFac und FeldMauer. FeldPac hat 24 Spalten und 24 Zeilen. Das entspricht der Aufteilung der Grafik. Auch die hat 24x24 Felder. FeldMauer hat dagegen 47 Spalten und 47 Zeilen. Also 1 Spalte und eine Zeile zu wenig.

Wozu nun FeldMauer doppelt so viele Spalten und Felder hat, weiß ich nicht. Vor allem wird jede zweite Spalte und jedes zweite Zeile nicht genutzt. Nun ist in dem StringGrid 0 eine Mauer, 1 ist frei. Da das StringGrid zu groß ist, steht die 1 für Frei nur jede zweite Spalte und Zeile. Somit muss man zwischen FeldMauer und FeldPac umrechnen. Wie auch immer, ich hab mal die FeldMauer StringGrid visualisiert (siehe Bild unten in der großen Grafik). Dann habe ich versucht die FeldMauer Wege in FeldPac nachzuzeichnen (siehe die 9-er). Natürlich, mit etwas mehr Zeit bekommt man den Umrechnungsfaktor raus. Aber momentan habe ich keine Lust dazu. Wozu ist FeldMauer überhaupt so groß.

Also, das das schon mal klein wenig funktioniert, bedeutet es nicht, dass die Kollegen fertig sind.

Am besten alles zurück. Meinetwegen sollen die das mit den StringGrids lassen, aber dann sollten beide StringGrid gleich sein. Weil so wie es ist habe ich keine Ahnung wie man dein Problem lösen sollte.
Angehängte Grafiken
Dateityp: png Bsp3.png (40,1 KB, 29x aufgerufen)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Pac-Man Hilfe

  Alt 11. Apr 2015, 14:51
Zuerst musst du mir erklären was in den einzelnen StringGrids steht? Wieso ist der eine 24x24 Zellen groß, der andere 48x48?

Ansonsten habe ich dir bereits einen Tipp gegeben: wo PackMan war, da gibt es keine Punkte mehr. Und wenn ich mir das zweite StringGrid angucke, steht da nichts, wo PackMan noch nicht war, 1, wo PackMan gerade ist und 0, wo PackMan schon war. Schlussfolgerung: wo in StringGrid nichts steht, da sind noch Punkte.

Außerdem:

"Warum wir über die StringGrids gehen weiß ich auch nicht genau.. ich hab den Plan nicht gemacht...."

Das ist doch auch dein Projekt, du warst doch bei der Planung dabei.

Aber nur damit du verstehst wie deine Bitte klingt...

"Kannst du mir nen Tipp geben, wie ich es mit Hilfe eines StringGrids bewältigen Könnte die Punkte rein zu bekommen? "

Ich versuche die Bitte mal zu übersetzten. Stellt euch vor ihr währt KFZ-Designer Azubis und ihr hättet die Aufgabe bekommen ein Auto zu bauen. Einer aus euer Gruppe erinnerst sich an seinen Opa, der war Bauer, und im Schuppen steht noch ein Heuwagen. Der hat vier Räder, ein Auto hat auch vier Räder, also ist ein Heuwagen doch schon eine gute Grundlage für ein Auto. Da spart man sich etwas Arbeit, eine Art Karosserie ist da, Räder sind dran, also schon fast ein Auto.

Nun habt ihr die Leitern demontiert und die Deichsel. Ihr habt paar Sitze eingebaut, vielleicht schon eine Lenkvorrichtung, mit der sich die vorderen Räder drehen lassen. Eventuell liegt schon ein alter Dieselmotor vom Schrottplatz schon auf dem Wagen. Und nun kommt ihr mit der Frage, wie man daraus ein Auto machen kann.

Nur damit man das versteht, irgendwas wird man schon daraus machen können, aber der Ansatz ist schwierig. Ihr habt euch am Anfang sehr einfach gemacht und nun wird es schwieriger.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:45 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