Meddelande

Du befinner dig just nu på en äldre version av Pluggakuten, gamla.pluggakuten.se. Nya Pluggakuten lanserades den 6 februari 2017 och du finner forumet på www.pluggakuten.se.

På gamla.pluggakuten.se kan du fortfarande läsa frågorna och svaren som ställts, men du kan inte skapa ett nytt konto eller nya trådar. Nya frågor och nytt konto skapar du på det nya forumet, välkommen dit!

Bredden först algoritm med 2D array (PacMan spel)

oskillz
Medlem

Offline

Registrerad: 2016-04-02
Inlägg: 34

Bredden först algoritm med 2D array (PacMan spel)

Jag har gjort ett Pac-man spel där jag använder mig av en 2-dimensionell array för att skapa min karta av tiles. Just nu så har jag det så att spökena rör sig helt random men jag skulle vilja implementera en bfs algoritm för att kunna få spökena att röra sig mot ett visst mål.

Jag vet i teorin hur man gör bredden först sökning. Jag vet att man ska börja på en nod i en graf, markera den som besökt och sen gå till dens obesökta grannar och markera dom besökta osv tills man gått igenom hela grafen. Jag har dock lite problem med att översätta det till kod och skulle behöva lite hjälp med att komma igång. Hur definierar jag till exempel startnoden som den tile som spöket börjar på? Och när jag har besökt alla grannar till den noden dvs ovanför, nedanfär, till höger och till vänster om den noden hur ska jag då spara undan dom noder som jag redan besökt? Och sen när alla noder är besökta, hur får jag då spöket att faktiskt gå den kortaste vägen till det definierade målet? Någon som skulle kunna vägleda mig lite här vore väldigt uppskattat smile.

 
roland.nilsson
Medlem

Offline

Registrerad: 2015-09-11
Inlägg: 613

Re: Bredden först algoritm med 2D array (PacMan spel)

Varför göra en BFS?  Om du vill har kortaste vägen i en graf så är Djikstra's algoritm ett bra sätt.  https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm .  Du kan representera grafen t.ex som en lista med par  (t1, t2)  där t1 och t2 är två närliggande tiles (pekare eller index eller nåt).

 
oskillz
Medlem

Offline

Registrerad: 2016-04-02
Inlägg: 34

Re: Bredden först algoritm med 2D array (PacMan spel)

Du menar alltså att jag ska säga att till exempel tile[0,0] och [0,1] i min 2D array är ett par? Den algoritmen väljer väl vilken nod den ska gå till baserat på avståndet till den, men alla grannar till noden kommer ju ha samma avstånd, dvs 1 ruta.

 
roland.nilsson
Medlem

Offline

Registrerad: 2015-09-11
Inlägg: 613

Re: Bredden först algoritm med 2D array (PacMan spel)

oskillz skrev:

Du menar alltså att jag ska säga att till exempel tile[0,0] och [0,1] i min 2D array är ett par?

Japp.  Jag antar att du har ett rutnät med tiles där de rutor spöket kan röra sig mellan bildar par.

oskillz skrev:

Den algoritmen väljer väl vilken nod den ska gå till baserat på avståndet till den, men alla grannar till noden kommer ju ha samma avstånd, dvs 1 ruta.

Ja, men du ska väl gå till ett mål ett antal rutor bort?  Så avståndet är det antal steg (ruta till ruta) som spöket måste ta för att nå målet.  Och Djikstra's hittar kortaste vägen.  I ditt fall har alla kanter i grafen vikten 1, men det går bra ändå.

 
oskillz
Medlem

Offline

Registrerad: 2016-04-02
Inlägg: 34

Re: Bredden först algoritm med 2D array (PacMan spel)

Jag har en 2d array med tiles och så läser jag in från en fil med streamreader hur kartan ska se ut, var det finns väggar och mat. Från början så är ju alla typer av tiles med i arrayen, även väggarna som ju då inte ska räknas med i några par, ska jag göra en ny array som bara inehåller tiles man kan gå på? Förstår inte riktigt hur man enklast delar in alla tiles i par sen. Sorry är lite förvirrad ^^

 
roland.nilsson
Medlem

Offline

Registrerad: 2015-09-11
Inlägg: 613

Re: Bredden först algoritm med 2D array (PacMan spel)

Tja, du behöver på något sätt representera vilka par av tiles som spöket kan röra sig mellan.  Men om den informationen redan finns i din karta så kan du också ha en funktion f(tile1, tile2) som bara kollar i din array om spöket kan gå mellan tile1 och tile 2 (returnera true/false eller 1/0 eller nåt). Då kan du i Djikstra's algoritm bara anropa f() för att hitta "grannar" till en viss tile.

Men du behöver fortfarande kunna märka noder (tiles) som visited eller inte, och dessutom lagra avstånden.  För det behöver du ytterligare arrayer.

Om du inte hemskt gärna vill implementera algoritmen själv så finns det säkert också nåt library/package som har Djikstra's algoritm.  (Vet inte vilket språk du använder.)

 
oskillz
Medlem

Offline

Registrerad: 2016-04-02
Inlägg: 34

Re: Bredden först algoritm med 2D array (PacMan spel)

Okej ^^, använder c# och visual studio monogame. Ska försöka sätta mig in i koncepten lite mera smile tack för alla tips smile

Senast redigerat av oskillz (2016-11-10 15:03)

 


Sidfot

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

Powered by Mattecentrum
 |  Denna sida använder cookies |  Kontakta oss |  Feedback |