Delphi-PRAXiS
Seite 4 von 9   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Pac-Man Hilfe (https://www.delphipraxis.net/184622-pac-man-hilfe.html)

Mavarik 12. Apr 2015 10:17

AW: Pac-Man Hilfe
 
Zitat:

Zitat von himitsu (Beitrag 1297297)
Den zweiten Link (pacmandossier) hatte ich wohl nicht richtig erwischt, beim Anklicken ... der erklärt das ja ganz schön ausführlich.

Aber da geht es doch nur um die Geister?

Authentischer wäre es bestimmt, wenn man den Sound quasi auch live "generiert" (lässt sich alles im originalen Quellcode abgucken), aber im Notfall.
http://www.classicgaming.cc/classics/pacman/sounds.php

Hier ist der Source vom Sound in Z80!

Die Daten kann man sich ja aus den ROM's holen ab $1A0 wenn ich es richtig im Kopf habe...

Mavarik 12. Apr 2015 12:24

AW: Pac-Man Hilfe
 
Mal auf die Schnelle...

Delphi-Quellcode:
unit TestMaze;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, System.Rtti, FMX.Layouts, FMX.Grid,
  FMX.Objects, FMX.ScrollBox, FMX.Memo;

Const
    maze : array [0..377] of byte = (208, 210, 210, 210, 210, 210, 210, 210,
    210, 212, 252, 252, 252, 218, 2, 220, 252, 252, 252, 208, 210, 210, 210,
    210, 214, 216, 210, 210, 210, 210, 212, 252, 218, 9, 220, 252, 252, 252,
    218, 2, 220, 252, 252, 252, 218, 5, 222, 228, 5, 220, 252, 218, 2, 230, 232,
    234, 2, 230, 234, 2, 220, 252, 252, 252, 218, 2, 220, 252, 252, 252, 218, 2,
    230, 234, 2, 231, 235, 2, 230, 234, 2, 220, 252, 218, 2, 222, 252, 228, 2,
    222, 228, 2, 220, 252, 252, 252, 218, 2, 220, 252, 252, 252, 218, 2, 222,
    228, 5, 222, 228, 2, 220, 252, 218, 2, 222, 252, 228, 2, 222, 228, 2, 220,
    252, 252, 252, 218, 2, 220, 252, 252, 252, 218, 2, 222, 242, 232, 232, 234,
    2, 222, 228, 2, 220, 252, 218, 2, 231, 233, 235, 2, 231, 235, 2, 231, 210,
    210, 210, 235, 2, 231, 210, 210, 210, 235, 2, 231, 233, 233, 233, 235, 2,
    222, 228, 2, 220, 252, 218, 27, 222, 228, 2, 220, 252, 218, 2, 230, 232,
    248, 2, 246, 232, 232, 232, 232, 232, 232, 248, 2, 246, 232, 232, 232, 234,
    2, 230, 248, 2, 246, 232, 232, 244, 228, 2, 220, 252, 218, 2, 222, 252, 228,
    2, 247, 233, 233, 245, 243, 233, 233, 249, 2, 247, 233, 233, 233, 235, 2,
    222, 228, 2, 247, 233, 233, 245, 228, 2, 220, 252, 218, 2, 222, 252, 228, 5,
    222, 228, 11, 222, 228, 5, 222, 228, 2, 220, 252, 218, 2, 222, 252, 228, 2,
    230, 234, 2, 222, 228, 2, 236, 211, 211, 211, 238, 2, 230, 234, 2, 222, 228,
    2, 230, 234, 2, 222, 228, 2, 220, 252, 218, 2, 231, 233, 235, 2, 222, 228,
    2, 231, 235, 2, 220, 252, 252, 252, 218, 2, 222, 228, 2, 231, 235, 2, 222,
    228, 2, 231, 235, 2, 220, 252, 218, 6, 222, 228, 5, 240, 252, 252, 252, 218,
    2, 222, 228, 5, 222, 228, 5, 220, 252, 250, 232, 232, 232, 234, 2, 222, 242,
    232, 232, 234, 2, 206, 252, 252, 252, 218, 2, 222, 242, 232, 232, 234, 2,
    222, 242, 232, 232, 234, 2, 220);


type
  TForm55 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure LoadMaze;
    Procedure Draw(X,Y,C : Integer);
  end;

var
  Form55: TForm55;

implementation

{$R *.fmx}

procedure TForm55.Draw(X, Y, C: Integer);
var
  R : TRectangle;
begin
  Y := Y * 16;
  X := X * 16;
  R := TRectangle.Create(self); // todo: Mal das richte IMG nehmen...
  R.Parent := Self;
  R.Position.X := X;
  R.Position.Y := Y;
  R.Width := 15;
  R.Height := 15;
end;

Procedure TForm55.LoadMaze;
var
  F      : File;
  ROM    : Array[0..4095] of byte;
  i,X,Y,C : Integer;
begin
{
  AssignFile(F,'..\..\ROMS\pacman.6j'); // :-)
  Reset(F,1);
  Blockread(F,ROM[0],4095);
  CloseFile(F);
}
  Move(Maze[0],ROM[$437],Sizeof(Maze));
  X := 0;
  Y := 0;
  for i:=$437 to $5B1 do
    begin
      if (ROM[i] > 1) and (ROM[i] < $30)
        then X := X + ROM[I]-2
        else begin
               Draw(27-Y,X,ROM[I]);
               Draw(Y,X,ROM[I]);
             end;
      inc(X);
      if X >= 32 then
        begin
          inc(Y);
          X := 0;
        end;
    end;
end;

procedure TForm55.Button1Click(Sender: TObject);
begin
  LoadMaze;
end;

end.

Popov 12. Apr 2015 12:55

AW: Pac-Man Hilfe
 
Es gibt tonnenweise bessere Alternativen als das im Projekt von TE:
Delphi-Quellcode:
var
  StringGridErsatz: array[0..23, 0..23] of String;

procedure FillStringGrid;
var
  sl: TStringList;
  x, y: Integer;
begin
  sl := TStringList.Create;
  try
    //Nur ein Beispiel. Alternativ als Textdatei laden
    sl.Add('111111111111111111111111');
    sl.Add('100000000001000000000001');
    sl.Add('101110111001001111011101');
    sl.Add('101110111000001111011101');
    sl.Add('100000000000000000000001');
    sl.Add('101110110111111001011101');
    sl.Add('100000110001000001000001');
    sl.Add('111110111101001111011111');
    sl.Add('000010110000000001010000');
    sl.Add('000010110111011101010000');
    sl.Add('111110110100000101011111');
    sl.Add('000000000100000100000000');
    sl.Add('111110100111111101011111');
    sl.Add('000010100000000001010000');
    sl.Add('000010100111110001010000');
    sl.Add('111110000001000000011111');
    sl.Add('100000111001001111000001');
    sl.Add('100110000000000000011101');
    sl.Add('100010100111110011010001');
    sl.Add('111010100001000011010111');
    sl.Add('100000100001000011000001');
    sl.Add('101111111101011111111101');
    sl.Add('100000000000000000000001');
    sl.Add('111111111111111111111111');

    for y := 0 to 23 do
      for x := 0 to 23 do
        StringGridErsatz[x, y] := Copy(sl[y], x + 1, 1);
  finally
    sl.Free;
  end;
end;

procedure FeldMauer(Canvas: TCanvas; x, y: Integer);
const
  w = 21;
begin
  Canvas.Brush.Color := clMaroon;
  Canvas.Pen.Color := clMaroon;
  Canvas.Rectangle(x * w, y * w, x * w + w, y * w + w);
end;

procedure FeldLeer(Canvas: TCanvas; x, y: Integer);
const
  w = 21;
begin
  Canvas.Brush.Color := clWhite;
  Canvas.Pen.Color := clWhite;
  Canvas.Rectangle(x * w, y * w, x * w + w, y * w + w);
end;

procedure FeldSetzen(Canvas: TCanvas; x, y: Integer);
const
  w = 21;
begin
  if StringGridErsatz[x, y] = '0' then
    FeldLeer(Canvas, x, y)
  else FeldMauer(Canvas, x, y);
end;

procedure FeldKorrektur(Canvas: TCanvas);
const
  w = 21;
var
  x, y: Integer;
begin
  for y := 0 to 23 do
    for x := 0 to 23 do
      FeldSetzen(Canvas, x, y);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FillStringGrid;
  FeldKorrektur(Canvas);
end;

DeddyH 12. Apr 2015 13:08

AW: Pac-Man Hilfe
 
Und Ihr seid der Meinung, dass das den TE irgendwie weiterbringt?

Popov 12. Apr 2015 16:19

AW: Pac-Man Hilfe
 
Damit so ein Packman funktioniert, muss es ein nutzbares Feld geben. Ein Feld aus dem man Infos bekommt wo die Mauer ist, wo der Gang ist, wo die Bonbons liegen. Das hat das Projekt von dem TE nicht. Seine Kollegen haben haben ihm ein Projekt übergeben mit dem man sich in dem Labyrinth bewegen kann, aber wo man nicht wirklich ohne Umrechnung weiß in welcher Spalte und Zeile man sich befindet. Auch ist die Umrechnung nicht so einfach. Ich hab es zwar nicht lange versucht, nur eine halbe Stunden, aber ich konnte den Plan der in in der einen StringGrid 48 Spalten und Zeilen hat, auch 24 Spalten und Zeilen umrechnen. Der Grund ist die ungleichmäßige Verteilung. Mit etwas Mühe findet man da schon die Umrechnung, ich fand sie nicht.

Wie soll also der TE da seine Punkte platzieren? In dem ersten StringGrid geht es nicht, den zweiten müsste man erst aus dem ersten berechnen.

Es geht hier also weniger drum die Punkt in dem Labyrinth zu platzieren, als die Frage wo man das bitte machen soll. Es gibt kein nutzbares Feld dafür.

Ich beneide den TE also nicht. Ob ihm das alles was bringen wird? Ich weiß es nicht. Was würdest du vorschlagen?

Bjoerk 12. Apr 2015 17:28

AW: Pac-Man Hilfe
 
Popov, ich weiß jetzt weshalb die Kumpels von TE 2 unterschiedliche Grids haben. Pacman und die Guys sind ja doppelt so groß wie das Fressenraster.

Mavarik 13. Apr 2015 09:41

AW: Pac-Man Hilfe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Mavarik (Beitrag 1297314)
Mal auf die Schnelle...

Dann kann man auch "einfach" die Paletten und die original Grafiken auslesen...

Mavarik :coder:

Bjoerk 13. Apr 2015 12:35

AW: Pac-Man Hilfe
 
Zitat:

Zitat von Mavarik (Beitrag 1297434)
Zitat:

Zitat von Mavarik (Beitrag 1297314)
Mal auf die Schnelle...

Dann kann man auch "einfach" die Paletten und die original Grafiken auslesen...

Mavarik :coder:

Man hätte TE einfach auch mitteilen können, daß er nur die 4 GridCells, die sich "unter" der momentanen GridCell von Pacman befinden, finden muß. Da du ja ein Pacman Profi seit Z80 Tagen bist, war das sicherlich klar? :wink:

Mavarik 13. Apr 2015 12:38

AW: Pac-Man Hilfe
 
Zitat:

Zitat von Bjoerk (Beitrag 1297487)

Man hätte TE einfach auch mitteilen können, daß er nur die 4 GridCells, die sich "unter" der momentanen GridCell von Pacman befinden, finden muß. Da du ja ein Pacman Profi seit Z80 Tagen bist, war das sicherlich klar? :wink:

Der Source war mir zu verwuschelt... Daher habe ich mir den nicht angeschaut...

Bjoerk 14. Apr 2015 10:19

AW: Pac-Man Hilfe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ein Pacmanraster mal aufgemalt damit's etwas deutlicher wird. Pacman und die Guys bewegen sich in Palletsrasterschritten, sind aber selbst ca. doppelt so groß wie das Palletsraster. Falls man DrawCell o.ä. verwenden möchte müssten die also z.B. mit neg. Margins gezeichnet werden.

Falls sich jemand mal mit dem Geisterverhalten genauer beschäftigt hat und auf Deutsch hier kurz erläutern könnte, wäre seeeeeeeeeeehr nett, my english is too bad. Man findet im Internet nix in german darüber. :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr.
Seite 4 von 9   « Erste     234 56     Letzte »    

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