![]() |
AW: Pac-Man Hilfe
Zitat:
![]() Die Daten kann man sich ja aus den ROM's holen ab $1A0 wenn ich es richtig im Kopf habe... |
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. |
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; |
AW: Pac-Man Hilfe
Und Ihr seid der Meinung, dass das den TE irgendwie weiterbringt?
|
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? |
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.
|
AW: Pac-Man Hilfe
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Mavarik :coder: |
AW: Pac-Man Hilfe
Zitat:
|
AW: Pac-Man Hilfe
Zitat:
|
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 11:38 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