AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pac-Man Hilfe

Ein Thema von Zwinge112 · begonnen am 10. Apr 2015 · letzter Beitrag vom 23. Apr 2015
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#31

AW: Pac-Man Hilfe

  Alt 12. Apr 2015, 11:17
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...
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#32

AW: Pac-Man Hilfe

  Alt 12. Apr 2015, 13:24
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#33

AW: Pac-Man Hilfe

  Alt 12. Apr 2015, 13:55
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] = '0then
    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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Pac-Man Hilfe

  Alt 12. Apr 2015, 14:08
Und Ihr seid der Meinung, dass das den TE irgendwie weiterbringt?
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
Popov
(Gast)

n/a Beiträge
 
#35

AW: Pac-Man Hilfe

  Alt 12. Apr 2015, 17:19
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?
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Pac-Man Hilfe

  Alt 12. Apr 2015, 18:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#37

AW: Pac-Man Hilfe

  Alt 13. Apr 2015, 10:41
Mal auf die Schnelle...
Dann kann man auch "einfach" die Paletten und die original Grafiken auslesen...

Mavarik
Miniaturansicht angehängter Grafiken
pacman.png  
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Pac-Man Hilfe

  Alt 13. Apr 2015, 13:35
Mal auf die Schnelle...
Dann kann man auch "einfach" die Paletten und die original Grafiken auslesen...

Mavarik
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?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#39

AW: Pac-Man Hilfe

  Alt 13. Apr 2015, 13:38

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?
Der Source war mir zu verwuschelt... Daher habe ich mir den nicht angeschaut...
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Pac-Man Hilfe

  Alt 14. Apr 2015, 11:19
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.
Angehängte Dateien
Dateityp: pdf PacmanRaster.pdf (21,8 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    


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:05 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