Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.72 KB | None | 0 0
  1. Dagen har gått åt till att försöka städa upp projektet och lägga till ett antal kommentarer för att sedan gå igenom hur jag skulle gått tillväga för att lösa de resterande problemen för att lösa kunna göra klart spelet med AI och allt. Om jag hade haft mer tid eller eventuellt kommit igång tidigare med allt arbete hade jag gjort på ett sätt som beskrivs nedan för att lösa de olika problemen. Problem kvar att lösa tills spelet är klart:
  2. Hantera turnorder och så att man bara kan hantera sina egna pjäser.
  3. Kunna fortsätta spela efter att hoppa över pjäser
  4. Ett Wincondition o att spelet fortsätter utan den som “vunnit”
  5. En Ai som går igenom hur den skall göra sina moves så smart som möjligt
  6. Ska gå att ladda och spara
  7.  
  8. Hur ska jag då lösa dessa problem?
  9. Att hantera turnorder är ett av de enklare problemen. Jag hade använt mig av restoperatorn för att skapa modulo på antalet spelare för att hela tiden gå runt antalet spelare. Sedan hade jag skapa en property på varje individuell pjäs som visar vilken olik spelare denna tillhör som sedan säga till varje spelare att denna bara kan hantera sina “egna” pjäser.
  10.  
  11. Problemet med att kunna fortsätta spela efter att man hoppat över en pjäs, med andra ord att dubbelhoppa, hade jag nog löst genom att använda mig av en sorts End Turn knapp som kan tryckas efter att spelaren har flyttat på en pjäs. När en spelare hoppar över en annan pjäs så kan denna hoppa igen enligt reglerna. I brist på en bättre lösning hade jag nog använt mig av en bool, som börjar false och så fort man hoppat över en pjäs blir denna sann och man då får “en till tur” förutsatt att man dubbelhoppar. Annars får spelaren inte göra några fler förflyttningar och man måste trycka på End Turn-knappen. Jag tror definitivt att det finns ett par fler smartare lösningar men detta är den enda jag kunde komma tänka på just nu.
  12.  
  13. Angående Wincondition hade jag använt mig av en hashtabell som hämtar ett specifikt “vinnande bräde” och jämför detta med det nuvarande brädet. Detta blir dock väldigt mycket jobb eftersom det finns ofantligt många olika sorters bräden som kan finnas när en spelare har vunnit, bara att en pjäs står olika på planen så måste det behövs att det kollas på en annan sorts index i tabellen.
  14.  
  15.  
  16. Därför hade jag nog kollat om någon spelare har alla sina pjäser på platser som motsvarar där de skall vinna. Man går med andra ord igenom varje spelares lista av pjäser för att kolla om alla de olika pjäserna har positioner liknande de vinnande nodernas positioner. Detta blir även väldigt mycket jobb och undersökande men för att minska summan minne som behövs tänker jag att man bara behöver kolla på en av de olika i listan och om denna inte stämmer behöver vi inte kolla på de andra nio pjäserna.
  17.  
  18. Om detta hade blivit för klurigt hade jag istället använt mig av en sorts “grann-igenkänningsfunktion” på det sättet att jag undersöker vad min nod som bara har två grannar (den längst ner i mitt bo) har för koordinater. Därefter jämför jag den med origo för att sedan gå lika långt som denna är från Origo, i motsatt riktning för att hitta boet mittemot (dit mina pjäser ska med andra ord). När jag nu hittat den noden kollar jag om denna har något på sig och om detta är en av mina pjäser, om detta stämmer undersöker vi om dess grannar också har mina grannar på sig för att sedan undersöka om de har mina pjäser på sig. Sist undersöker jag detta en gång till så att vi undersökt deras olika grannar tre gånger, om alla dessa har mina pjäser som sina grannar har jag vunnit.
  19.  
  20. För att ladda och spara det nuvarande spelet hade jag sparat alla de olika nodernas positioner som en sträng och sedan hämtat denna när man vill ladda. Exempelvis sparar jag en tom nod på position 4.5 i koordinatsystemet som 450 medan jag sparar en samma nod med en pjäs tillhörande spelare 1 som 451. Sedan gör jag detta för varje nod som finns på brädet. Detta ger mig en sträng som är 121 stycken lång med tresiffriga tal. Detta är sedan enkelt att hämta och använda för att sätta ut pjäserna med en foorloop som bygger upp brädet igen.
  21.  
  22. Nu till det roligaste och mest utmanande med hela uppgiften, att skapa en vettig AI som använder sig av ett träd för att utföra de smartaste valen utifrån vilka poäng vi ger olika positioner. Eftersom jag nu har ett fungerande spel på det sättet att det följer regler när man förflyttar pjäser så finns det redan ett par “möjliga förflyttningar” så allt jag behöver göra är att lägga till dessa i en lista. Efter detta kan man sedan göra en liknande operation för att kunna få en lista av motståndarnas möjliga förflyttningar för att kunna förutspå vad dessa kan göra. När vi sedan har denna lista kan vi ha en rekursiv foreach- metod som går igenom för varje olikt möjlig förflyttning kan vi “undersöka om vi faktiskt gjorde denna förflyttning” hur vår position skulle vara i det steget. För att kunna göra en förflyttning i “teorin” tänkte jag mig att man bara återskapar varje nods position som finns på brädet och sedan förflyttar oss till den positionen som vi undersöker om den är fördelaktig nog för oss. Detta ger vi genom att varje individuell plats på brädet ger en specifik poäng, dels beroende på vart de andra pjäserna ligger, vart denna plats är och vart den ska. Allt detta förändrar denna poäng hela tiden för att sedan bestämma för varje nod vart den vill flytta.
  23. När vi har allt detta kan Ai-n beräkna vart den bästa noden att förflytta sig till är, för att sedan använda sig av Min-Max-algoritmen för att kunna få fram de mest optimala noden att förflytta sig till.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement