AGB  ·  Datenschutz  ·  Impressum  







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

Pacman

Ein Thema von TheSodomizer666 · begonnen am 15. Jun 2009 · letzter Beitrag vom 16. Jun 2009
Antwort Antwort
TheSodomizer666

Registriert seit: 15. Mai 2009
2 Beiträge
 
#1

Pacman

  Alt 15. Jun 2009, 17:06
Hallo erstmal..bin relativ neu hier (wie man sieht...^^") und find gut,dass es dieses Forum gibt.

Ich habe ein Problem bei meinem Pacman Spiel. Die Geister sollen sich automatisch bewegen (klappt,jedoch mit schlechten ergebnissen,weil sie sich fast nur auf einer stelle bewegen, mit random),aber sie sollten erkennen,wenn sie auf eine wand treffen. Ich habe dazu ein 2D-Array benutzt.Wäre gut,wenn ihr mir weiterhelfen könntet.
hier ein Ausschnitt aus dem Code für die Bewegung der Geister:

Code:
 procedure TForm1.Timer3Timer(Sender: TObject);
var gfeld : TPoint;
begin
 case geist1[3] of
  1:
    begin
    gfeld.X:=round((geist1[1]-10+15)/30)-1;    //[1]=x koordinate ;
    gfeld.Y:=round((geist1[2]+15)/30)-1;       //[2]=y koordinate
    if (welt[gfeld.X,gfeld.Y]<>'1') and (welt[gfeld.X,gfeld.Y]<>'4') then
    dec(geist1[1]);
    if (gfeld.X=1) and (gfeld.Y=9) then inc(geist1[1],16*30);
    end;
  2:
    begin
    gfeld.X:=round((geist1[1]+15)/30)-1;
    gfeld.Y:=round((geist1[2]-10+15)/30)-1;
    if (welt[gfeld.X,gfeld.Y]<>'1') and (welt[gfeld.X,gfeld.Y]<>'4') then
    dec(geist1[2]);
    end;
  3:
    begin
    gfeld.X:=round((geist1[1]+10+15)/30)-1;
    gfeld.Y:=round((geist1[2]+15)/30)-1;
    if (welt[gfeld.X,gfeld.Y]<>'1') and (welt[gfeld.X,gfeld.Y]<>'4') then
    inc(geist1[1]);
    if (gfeld.X=19) and (gfeld.Y=9) then dec(geist1[1],16*30);
    end;
  4:
     begin
    gfeld.X:=round((geist1[1]+15)/30)-1;
    gfeld.Y:=round((geist1[2]+10+15)/30)-1;
    if (welt[gfeld.X,gfeld.Y]<>'1') and (welt[gfeld.X,gfeld.Y]<>'4') then
    inc(geist1[2]);
    end;
 end;
 gfeld.X:=round((geist1[1]+15)/30)-1;      // Orientierung
 gfeld.Y:=round((geist1[2]+15)/30)-1;
 geist1[3]:=random(4);



danke schonmal im Vorraus .
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Pacman

  Alt 15. Jun 2009, 17:22
Deine Geister dürfen nicht bei jedem Schritt eine neue Richtung bekommen,
sondern nur wenn sie auf ein Hindernis getroffen sind.
in Pseudocode:
Delphi-Quellcode:
procedure BewegeGeist(geist);
begin
  repeat
    neuePos := BrechneNeueKoordinaten(geist.aktuellePosition, geist.Richtung);
    Wenn neuePos frei ist dann
      geist.aktuellePosition = neuePos
      ZeicheGeist(geist)
      Bewegt := True
      if neuePos = Spieler dann
         MampfMampf
    else
      geist.Richtung := zufallsrichtung
  until Bewegt;
end;
Man kann das noch verfeinern, wenn man zusätzlich zur Zufallsrichtung noch zufällig die Anzahl der max. Schritte (zwischen 2 und 10) festlegt.
Jeder Geist zählt dann die Schritte runter bis auf 0 (falls er nicht vorher auf Hindernis drauf) und bekommt dann eine neue Richtung.
Andreas
  Mit Zitat antworten Zitat
TheSodomizer666

Registriert seit: 15. Mai 2009
2 Beiträge
 
#3

Re: Pacman

  Alt 15. Jun 2009, 17:52
ah..thx..aber wie soll ich die neue Position denn benennen?(Ich bin da ziemlich schwer von Begriff mit alldem...Ist ein Projekt,das ich morgn fertig haben muss,für die Schule).
  Mit Zitat antworten Zitat
fui-tak

Registriert seit: 24. Okt 2008
117 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Pacman

  Alt 16. Jun 2009, 16:59
Ist es jetzt schon zu spät??

Egal, wir haben das letztens im Unterricht mit Java folgendermaßen gelöst:

Delphi-Quellcode:
function zugMoeglich(x,y:integer):boolean;
begin
     Result := true;
     if welt[x,y] = zahlDerWand then
           Result := false;
     if (x < 1)or(x > breiteDesSpielfeldes) then
           Result := false;
     if (y < 1)or(y > hoeheDesSpielfeldes) then
           Result := false;
end;



...
if zugMoeglich(x+1,y) then
   nachRechtsBewegen;
...
So hast du jedenfalls schonmal eine Überprüfung, ob eine Wand an der Position ist, bevor der Geist da hin läuft
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:21 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