Meddelande
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 .
- 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 tack för alla tips
Senast redigerat av oskillz (2016-11-10 15:03)