• No results found

PROCEDURELL GENERERING AV PUSSEL

N/A
N/A
Protected

Academic year: 2021

Share "PROCEDURELL GENERERING AV PUSSEL"

Copied!
50
0
0

Loading.... (view fulltext now)

Full text

(1)

PROCEDURELL GENERERING AV

PUSSEL

Svårighetsevaluering av procedurellt genererade

pussel

PROCEDURAL GENERATION OF

PUZZLES

Evaluation of difficulty in procedurally generated

puzzles

Examensarbete inom huvudområdet Informationsteknologi

Grundnivå 30 högskolepoäng

Vårtermin 2020

Sara Uvalic

(2)

Sammanfattning

Arbetets frågeställning lyder: Hur överensstämmer den beräknade svårighetsgraden med den faktiska och upplevda svårighetsgraden för ett pussel som är procedurellt genererat med hjälp av en sökbaserad metod? Spelnivåerna som genererats har haft spelet PipeWalker (Artemsen 2012) som utgångspunkt. Fokus har legat på svårighetsgraden då detta ansetts vara bästa indikatorn på pussels kvalitét (Taylor & Parberry 2011). Genereringsprocessen har utgått från metoden Taylor (2015) använt sig av, då den sägs kunna generera alla typer av rutnätsbaserade pussel. Under speltestning har faktisk och upplevd svårighetsgrad tagits fram, i syftet att jämföras med den svårighetsgrad som beräknats under genereringen. Undersökningens resultat visade att den beräknade svårighetsgraden var mycket högre än den faktiska och upplevda. Dock kunde samband ses mellan de olika svårighetstyperna i ökningen mellan nivåerna. I framtida arbeten föreslås iterering av undersökningen, för att utifrån en större datamängd fastställa trovärdiga parametrar till beräkning av de olika svårighetsgraderna och därigenom komma fram till en tillförlitlig beräkning av svårighetsgrad under generering.

(3)

Innehållsförteckning

1

Introduktion ... 1

2

Bakgrund ... 2

2.1 Evaluering av spelinnehåll ... 2

2.2 Procedurella tekniker ... 3

2.2.1 Online och offline... 3

2.2.2 Specifik anpassning av tekniker ... 3

2.2.3 Sökbaserad generering ... 4

2.2.4 Answer Set Programming ... 4

2.3 Genererbart innehåll ... 5 2.3.1 Pussel ... 5 2.4 PipeWalker ... 5

3

Problemformulering ... 7

3.1 Metodbeskrivning ... 7 3.1.1 Beräknad svårighetsgrad ... 8

3.1.2 Faktisk svårighetsgrad och upplevd svårighetsgrad ... 9

3.1.3 Beräkning av faktisk svårighetsgrad ... 10

3.1.4 Intervjuer och datahantering ... 12

(4)

1

1

Introduktion

Procedurell generering av spelinnehåll är en metod där datorn skapar spelinnehåll med hjälp av algoritmer. Det är ett sätt för spelutvecklare att spara tid och pengar på, då en designer kan lägga sitt fokus på annat viktigt arbete. Den populäraste kategorin av mobilspel, som står för majoriteten av spelindustrins intäkter, är pusselspel (Go-Globe 2018). Ändå tillhör pussel den typ av spelinnehåll som det är ovanligt att procedurellt generera (Barriga 2019).

Problemet som undersökts är hur jämförbar en beräknad svårighetsgrad är med den faktiska svårighetsgraden och den upplevda svårighetsgraden för en spelare. Den beräknade svårighetsgraden bestämdes av datorn under genereringsprocessen, den faktiska svårighetsgraden mättes under speltestning och den upplevda svårighetsgraden bestämdes av spelarna själva. Spelnivåerna vars svårighetsgrad bedömdes är genererade till en prototyp med pusselspelet PipeWalker (Artemsen 2012) som utgångspunkt. Att fokus legat på svårighetsgraden hos pussel kommer sig av hur detta är en tydlig indikation på hur bra ett pussel är (Taylor och Parberry 2011).

En sökbaserad metod för procedurell generering har använts för att skapa nivåer, och beräkna deras svårighetsgrad, till en prototyp liknande pusselspelet PipeWalker (Artemsen 2012). Ett urval av dessa nivåer har använts i en undersökning där deras beräknade svårighetsgrad jämfördes med deras faktiska och upplevda svårighetsgrad. Testdeltagarna fick svara på bakgrundsfrågor och frågor om deras spelupplevelse i en enkät före och under speltestningens gång. En pilotstudie har ägt rum för att se om frågorna är tydliga och huruvida svaren ger efterfrågad information, samt för att undersöka om artefakten fungerar som den ska.

(5)

2

2

Bakgrund

Procedurell generering av spelinnehåll (PCG, från engelskan Procedural Content Generation) innebär användningen av en dators kapacitet för att skapa spelinnehåll utifrån små mängder data eller data indirekt samlat från användare. Nelson, Shaker och Togelius (2016) definierar PCG som spelinnehåll skapat algoritmiskt med begränsad eller indirekt användar-input. Den största anledningen för spelutvecklare att använda sig utav PCG är att en spelutvecklare, främst designer, grafiker eller game writer, kan lägga sitt fokus på annat viktigt arbete. På detta sätt sparar utvecklarna tid och pengar medan de fortfarande kan producera innehåll med hög kvalitet och variation.

Det finns väldigt många användningsområden för procedurell generering, även utanför spelutveckling. Stadsmiljöer som Barriga (2019) klassificerar som game systems används bland annat inom stadsplanering, utbildning, simuleringar och underhållning (Bidarra, Brandão Silva, Coelho & Eisemann 2015). Procedurell generering kan också användas i film. Visuella effekter innehåller ofta en stor mängd av liknande objekt, till exempel byggnader eller människor. Om dessa skulle vara exakta kopior av samma byggnad eller människa så skulle mönster snabbt visa sig. Detta vill man undvika i filmeffekter då en stad inte består av en enda typ av byggnad, och folkmassor ofta är mycket varierade. Det vore dock ineffektivt och tidskrävande att skapa alla variationer för hand, och därför används procedurell generering. Mjukvaruprogrammet MASSIVE (Massive Software) utvecklades för filmtrilogin Sagan om Ringen (2001-2003). Programmet simulerar stora folkmassor för filmernas stora digitala arméer. För att arméerna inte skulle vara för monotona så genererades en unik karaktär för varje enhet, där variationer inkluderade bland annat olika utrustning, små färgändringar samt proportioner.

Nelson, Shaker och Togelius (2016) tar upp exempel på vad som kan ses som eftertraktat av PCG. Dessa är genereringshastighet, garanti att innehållet når uppsatta krav, möjlighet att kontrollera delar av innehållet och skapandet av variation och mångfald. Taylor och Parberry (2011) tar upp andra kriterier som är viktiga för PCG. Förutom mångfald, kontrollerbarhet och hastighet tar de upp struktur och intressanthet som önskvärda egenskaper hos en procedurell genererare. Med struktur menas att det genererade innehållet har någon ordning och inte bara är slumpmässigt brus. Intressanthet definierar de som en kombination av mångfald och struktur.

2.1 Evaluering av spelinnehåll

En nackdel med procedurell generering är att resultatet inte enkelt går att förutse, och på så sätt kan resultera i artefakter som inte ser ut eller beter sig som man vill. Därför kan det genererade innehållet behöva utvärderas på något sätt, för att bland annat avgöra om det är bra nog att användas. Speciellt är det viktigt i sökbaserad generering (Shaker & Togelius 2016). Det finns många olika sätt att göra denna utvärdering och det finns många olika åsikter om vad som är viktigt och hur “bra” spelinnehåll ska definieras.

(6)

3

en funktion de kommit fram till, för att sedan konfirmera att funktionen fungerar genom att låta spelare betygsätta banorna. När datorn själv räknar ut och mäter hur “bra” det genererade innehållet är, säger man att den använder en fitnessfunktion.

Taylor och Parberry (2011) menar att svårighetsgraden på ett pussel är den bästa indikatorn på hur intressant det är. Ett enklare pussel kan vara bra för nya spelare för att lära sig spelets mekaniker, men blir lätt tröttsamt. Pusslet blir även ointressant om pusslet är för svårt, vilker är varför det är viktigt att hitta en bra nivå på graden av svårighet. I deras arbete avgör de svårighetsgraden på spelnivåer i pusselspelet Sokoban (Thinking Rabbit 1982) genom att mäta avståndet mellan starttillståndet och vinsttillståndet på olika sätt. Taylor (2015) tar upp exempel på hur datorn kan mäta svårighetsgraden på ett pussel, bland annat beräkning av minst antal handlingar till vinsttillståndet eller förgreningsfaktorn i grafen som beskriver pusslet. Han tar även upp hur det kan mätas under speltestning genom att räkna antal gånger spelaren startar om nivån, antal handlingar som utförs och tiden det tar för spelaren att klara pusslet. Att även direkt fråga spelaren om pusslet var roligt och om de löste det av en slump är bra sätt att undersöka kvaliteten på pusslet (Taylor 2015).

2.2 Procedurella tekniker

Det finns många olika metoder av PCG och det är vanligt att vissa metoder lämpar sig mer för vissa typer av spelinnehåll. Några av de första teknikerna som användes till spel var konstruktiva och passade väldigt bra för att generera grottsystem och labyrinter, medan andra tidiga tekniker var mer anpassade för att skapa texturer eller stadsmiljöer (Barriga 2019).

2.2.1 Online och offline

Spelinnehåll kan genereras i utvecklingsstadiet av spelet och kallas då offlinegenerering eller under tiden spelet spelas, onlinegenerering (Barriga 2019). När spelinnehållet genereras online tillåter detta en möjlighet för oändlig variation och återspelbarhet, medan offlinegenerering ger designern mer kontroll över innehållet som skapas (Nelson, Shaker & Togelius 2016).

2.2.2 Specifik anpassning av tekniker

Det är vanligt att anpassa genereringstekniker till en genre, spel eller till och med specifika delar av ett spel. Bidarra, Lopes och van der Linden (2014) tar upp SpeedTree (Interactive Data Visualization, Inc.) som ett exempel på hur väldigt specifikt procedurell generering kan användas och att just SpeedTree används i ett flertal spel, bland annat Grand Theft Auto IV (Take-Two Interactive 2008), Batman: Arkham Asylum (Eidos Interactive 2009) och Battlefield 3 (Electronic Arts 2011).

(7)

4

arbete i nuläget är alldeles för stort. Detta är något Kerssemakers et al. (2012) också anser då även deras arbete resulterade i generering av plattformsspel.

Taylor (2015) beskriver en metod för att procedurellt generera alla typer av pussel som kan representeras i ett rutnät. Genereringsprocessen använder bredd-först sökning, se 2.2.3, för att garantera det genererade pusslets lösbarhet. Sökalgoritmen görs i en graf där noder representerar vilket tillstånd spelet befinner sig i och kanter representerar en handling som tar spelet mellan två tillstånd.

2.2.3 Sökbaserad generering

I sökbaserad PCG används en sökalgoritm för att hitta spelinnehåll med efterfrågade egenskaper (Shaker & Togelius 2016). Egenskaperna representeras på något sätt och utvärderas med en funktion som avgör om spelinnehållet är tillräckligt bra, det vill säga har tillräckligt bra egenskaper, medan sökalgoritmer itererar processen.

Maulidevi och Prasetya (2016) använder sig av sökbaserad procedurell generering i sitt arbete där de har för avsikt att procedurellt skapa roliga och funktionella banor till racingspel. De använder 2 olika sökalgoritmer vars genomsnittliga genereringstid och underhållningsvärde jämförs med varandra och sedan betygsätts av spelare som testar de genererade banorna. Bredd-först sökning (BFS) är en vanlig sökalgoritm för att hitta den kortaste vägen i en graf (Weiss 2014). Strategin innebär att alla noder närmast startnoden undersöks först för att sedan gå vidare till noderna närmast dessa. För att undvika att undersöka samma nod igen är det vanligt att märka ut dessa noder på något sätt, eller att undersöka grafen som ett träd. I ett träd, en graf utan cykler, innebär algoritmen att varje nod med samma djup i trädet undersöks innan noderna på nästa nivå undersöks.

2.2.4 Answer Set Programming

Svarbaserad programmering (ASP, från engelskan Answer Set Programming) är en typ av logikprogrammering, en programmeringsmetod såsom exempelvis objektorienterad programmering. Logikprogrammering använder logiska regler som programmeraren sätter upp. Inom ASP delas dessa regler upp i fakta, val och integritetsvillkor. Fakta är absoluta sanningar, val är möjliga sanningar och integritetsvillkoren låter programmet veta vad som inte är tillåtet för att låta datorn rensa ut dessa möjligheter från de möjliga sanningarna. Användandet av ASP kan ge en designer större kontroll över spelinnehållet som genereras med PCG. Det som designern behöver göra är att beskriva det önskade spelinnehållet med logiska termer som kan användas som fakta, val och integritetsvillkor. Detta har Mateas och Smith (2011) gjort, och de beskriver hur de använt ASP som en metod för PCG och hur de använder sin metod för att generera en kromatisk labyrint.

(8)

5

2.3 Genererbart innehåll

Det finns en stor variation i hur tekniker är uppbyggda och fungerar eftersom det också finns en stor variation av spelinnehåll att generera som teknikerna måste anpassa sig efter. Hendrikx, Iosup, Meijer & Van Der Velden (2013) samt Barriga (2019) är överens om att de olika typer av genererbart spelinnehåll kan kategoriseras i sex kategorier, däribland game bits, game scenarios och game systems. Dessa kategorier är de vanligaste att diskutera och använda procedurell generering till. Teknikerna varierar sig beroende på vilket sorts spelinnehåll som ska genereras. I spelet Minecraft (Mojang 2009) används till exempel perlin noise för att skapa en textur som sedan världskartor kan genereras från, medan spelet Event[0] (Ocelot Society 2016) använder sig av konkreta exempel för att generera miljontals olika rader av dialog till spelets AI-karaktär.

2.3.1 Pussel

Game scenarios kan beskriva abstrakta delar av ett spel, som hur andra objekt interagerar för att utveckla spelets händelseförlopp, och kategoriseras som story eller nivåer. Det kan också beskriva mer konkret spelinnehåll, exempelvis spelets narrativ eller ett pussel.

Enligt Barriga (2019) är game systems och game scenarios de typer av spelinnehåll som inte varit särskilt vanligt att procedurellt generera i kommersiella spel. Detta trots att pusselspel är väldigt populära. Enligt Go-Globe (2018) står mobilspel för 51% av spelindustrins intäkter och av alla kategorier inom mobilspel är pusselspel den populäraste med 57% av alla spel tillhörande kategorin. Pusselspel har även den högsta kundlojaliteten av alla mobilspelskategorier (Go-Globe 2018).

De Kegel (2016) beskriver en typ av pussel där spelaren bildar en väg från punkt A till punkt B genom att ändra spelmiljön med hjälp av givna verktyg. Hon kallar denna typ av pussel för path-building puzzles. Procedurell generering har undersökts inom den här kategorin förut. Andersen, Mateas, Popović, och Smith (2012) genererade spelnivåer till pusselspelet Refraction (GameScience 2010). De delade upp genereringsprocessen i tre delar som de utvecklar 2 metoder vardera för. Första delen genererar en graf som beskriver vilka delar pusslet ska ha och vilka handlingar som knyter ihop dem. Andra delen i processen läser in grafen och placerar ut alla pusselbitar på ett rutnät. Tredje delen går ut på att lösa givna pussel, för att undersöka om det finns alternativa lösningar. Varje del av processen görs först med en sökbaserad metod och sedan med ASP.

2.4 PipeWalker

(9)

6

(a) (b)

(c) (d)

(10)

7

3

Problemformulering

Frågan som har undersökts i detta arbete är en specifik del av en mer generell fråga: Kan verkligen den sökbaserade metoden Taylor (2015) beskriver för rutnätsbaserade pussel användas för att skapa intressanta spelnivåer till flera olika pusselspel? Denna fråga är i sin tur del av ett större område kring hur metoder för PCG kan användas för att skapa icke-specifikt spelinnehåll, vilket skulle förenkla och popularisera PCG inom spelutveckling. Den mer specifika frågan lyder: Hur överensstämmer den beräknade svårighetsgraden med den faktiska och upplevda svårighetsgraden för ett pussel som är procedurellt genererat med hjälp av en sökbaserad metod?

Procedurell generering av olika typer av game scenarios, däribland pussel, är idag inte särskilt vanligt i kommersiella spel (Barriga 2019). Ett ökat användande av procedurell generering till pussel öppnar upp möjligheter för att använda och undersöka PCG i samband med andra typer av spelinnehåll, framförallt andra typer av game scenarios. Det är viktigt att öka användningen av PCG för pussel till större grad än det görs idag på grund av detta och även med anledning av speltypens popularitet, se 2.1.

Taylor (2015) menar att metoden han använt för att procedurellt generera pussel går att använda för att skapa lösbara pussel till alla typer av pusselspel som är rutnätsbaserade. Det räcker dock inte att ett pussel är lösbart för att det ska anses “bra”. Som sagt finns många olika åsikter om vad som gör spelinnehåll, och alltså även pussel, bra, se 2.1.

Hos alla spel är hur spelaren upplever spelet som underhållande eller roligt en av de viktigaste aspekterna som designern behöver ha i åtanke under utvecklingsprocessen. Om ett spel inte är underhållande har spelaren ingen anledning att fortsätta spela. Hos pusselspel är intressanthet en tydlig indikation på hur underhållande spelet är. Taylor och Parberry (2011) nämner att intressanthet är svårdefinierat men att det är en kombination av svårighet och variation av spelinnehållet. De säger även, som nämnt i 2.1, att svårighetsgraden är den bästa indikatorn på hur intressant ett pussel är, vilket är anledningen till att svårighet ligger i frågeställningens fokus.

Taylor (2015) berättar hur den sökbaserade metoden kan användas för att skapa spelnivåer till spelet Sokoban (Thinking Rabbit 1982) och hur han använt den till sitt egna spel Tumblestone (The Quantum Astrophysicists Guild 2016). Metoden ska fungera för alla typer av rutnätsbaserade pusselspel, vilket leder till valet av spelet PipeWalker (Artemsen 2012) för användande till undersökningen. Spelet är rutnätsbaserad men har andra mekaniker än de två tidigare spelen, mer liknande Refraction (GameSciene 2010) som Andersen et al. (2012) procedurellt genererade spelnivåer till.

3.1 Metodbeskrivning

(11)

8

under speltestningen kallas faktisk svårighetsgrad och spelarnas bedömning kallas upplevd svårighetsgrad.

Varje enskild speltestning bör inte vara längre än ungefär 20-30 minuter långa. Detta på grund av att fler testdeltagare tros ha möjlighet att undvara en kortare stund för att delta i studien hellre än för en undersökning som tar lång tid. 10 till 20 minuter är även den tid som tonåringar och vuxna genomsnittligt kan fokusera på en uppgift (Korn & Wilson 2007), så längre tid än detta för varje spelnivå skulle inte ge ett trovärdigt resultat. Då varje pussel endast får spelas en kort stund, bidrar detta till att antalet pussel för varje speltestning blev 4, en väldigt enkel nivå för att lära sig kontrollerna och 3 av varierande svårighetsgrader, lätt, medium och svår, som sedan använts för att validera den beräknade svårighetsgraden.

3.1.1 Beräknad svårighetsgrad

Den beräknade svårighetsgraden har räknats ut under tiden nivån genererades. Spelnivåerna har representerats av en graf som används för att beräkna svårighetsgraden. I grafen beskriver noderna pusslets tillstånd och kanterna är handlingar som tar spelet mellan dessa tillstånd. Tillståndet beskriver hur pusselbitarna på spelplanen är placerade och roterade, och en handling består av att en pusselbit roteras.

För att beräkna svårighetsgraden har ett antal parametrar undersökts. Det finns ett antal aspekter i grafen som är möjliga kandidater. Taylor (2015) har med grafens bredd i sin beräkning av svårighet, då detta representerar antalet möjliga handlingar. Detta fungerar i hans algoritm för att generera spelet Sokoban (Thinking Rabbit 1982), men inte i detta arbete. I detta arbete får grafen en stor bredd redan med en gång, då alla bitar på spelplanen placeras ut i första stadiet av genereringen. Som exempel får startnoden 25 barnnoder när en spelplan med 5 rader och 5 kolumner genereras, då det finns 25 pusselbitar som kan roteras. Något som istället hade kunnat vara en faktor på spelnivåns svårighetsgrad är storleken på spelplanen, en mindre spelplan visar på en lättare nivå medan en större spelplan visar på en svårare nivå.

Storleken på spelplanen är en intressant och tydlig faktor till beräkningen av nivåns svårighetsgrad. Wang, Wang och Sun (2012) diskuterar i sitt arbete aspekter som påverkar pussels svårighetsgrad. De tar upp storleken på en nivå som en tydlig indikation på svårighetsgraden genom exemplet att en större labyrint är svårare än en mindre. Detta argument gäller även för detta arbete. Då spelarna under undersökningen fick spela 3 banor av olika svårighetsgrad hade spelnivåerna kunnat delas in i 3 olika storlekar. En spelplan med 3 rader och 3 kolumner hade visat på en lättare nivå, 5 rader och 5 kolumner en medelsvår och 7 rader och 7 kolumner en svår spelnivå. Dock är detta en väldigt tydlig indikation på svårighetsgraden vilket hade kunnat leda testdeltagarnas svar när de själva ska bedöma svårighetsgraden, se 3.1.2. För att undvika detta har inte olika storlekar på spelplanen att genererats (och alltså inte varit en parameter till den beräknade svårighetsgraden), alla spelnivåer har 3 rader och 3 kolumner som anses passa undersökningens syfte. Detta då ett pussel med 3 rader och 3 kolumner bedömdes ta lagom lång tid att lösa.

(12)

9

med det faktum att det finns en pusselbit i varje ruta på spelplanen, till skillnad från i Sokoban (Thinking Rabbit 1982), leder till att storleken och förgreningsfaktorn på en graf i detta arbete är snarlika för alla spelnivåer av samma storlek.

Kortaste vägen mellan start- och vinsttillstånd i grafen som representerar en spelnivå är den enda kvarvarande intressanta parametern i grafen för den beräknade svårighetsgraden. Då det finns flera möjliga lösningar till en spelnivå finns det flera vinsttillstånd i grafen. Därför är det inte längre av intresse att hitta en väg till ett vinsttillstånd. Det intressanta är längden till det närmaste vinsttillståndet, med andra ord tillståndets djup eller minsta antal klick för att lösa pusslet, som detta representerar.

Antalet slutbitar på spelplanen är en lämplig parameter att använda vid beräkning av nivåns svårighetsgrad. Wang, Wang och Sun (2012) tar upp i sitt exempel med en labyrint att antalet vägkorsningar påverkar svårighetsgraden, vilket i detta arbete anses motsvara antalet slutbitar som behöver kopplas ihop med startbiten.

Parametrarna som har använts för att beräkna svårighetsgraden är alltså minsta antal klick som krävs för att lösa pusslet och antalet slutbitar placerade på spelplanen. Dessa parametrar har använts för att skapa en fitnessfunktion som datorn använt för att avgöra den beräknade svårighetsgraden, se ekvation 1. Klickfaktorn i ekvation 1 är beroende av minsta antal klick som krävs för att lösa pusslet, klickantal i ekvation 2, och av antalet slutbitar i nivån, se ekvation 2. Talet 3 i ekvation 1 kommer sig av att 9, högsta möjliga beräknade svårighetsgrad, är en multipel av 3 och att öka antalet slutbitar för var tredje grad av svårighet kändes, med tanke på spelplanens valda storlek, lämpligt.

Ekvation 1 Funktion för beräknad svårighetsgrad

𝑓(𝑘𝑙𝑖𝑐𝑘𝑎𝑛𝑡𝑎𝑙, 𝑠𝑙𝑢𝑡𝑏𝑖𝑡𝑎𝑟) = 𝑘𝑙𝑖𝑐𝑘𝑓𝑎𝑘𝑡𝑜𝑟 + 3(𝑠𝑙𝑢𝑡𝑏𝑖𝑡𝑎𝑟 − 1)

Ekvation 2 Beräkning av klickfaktor 𝑘𝑙𝑖𝑐𝑘𝑚𝑎𝑥 = 10 + (5 ∙ 𝑠𝑙𝑢𝑡𝑏𝑖𝑡𝑎𝑟) 𝑥 =𝑘𝑙𝑖𝑐𝑘𝑚𝑎𝑥 4 𝑘𝑙𝑖𝑐𝑘𝑎𝑛𝑡𝑎𝑙 ∈ [𝑘𝑙𝑖𝑐𝑘𝑚𝑖𝑛, 𝑘𝑙𝑖𝑐𝑘𝑚𝑖𝑛 + 𝑥] ⇒ 𝑘𝑙𝑖𝑐𝑘𝑓𝑎𝑘𝑡𝑜𝑟 = 1 𝑘𝑙𝑖𝑐𝑘𝑎𝑛𝑡𝑎𝑙 ∈ [𝑘𝑙𝑖𝑐𝑘𝑚𝑖𝑛 + 𝑥, 𝑘𝑙𝑖𝑐𝑘𝑚𝑖𝑛 + 2𝑥] ⇒ 𝑘𝑙𝑖𝑐𝑘𝑓𝑎𝑘𝑡𝑜𝑟 = 2 𝑘𝑙𝑖𝑐𝑘𝑎𝑛𝑡𝑎𝑙 ∈ [𝑘𝑙𝑖𝑐𝑘𝑚𝑖𝑛 + 2𝑥, 𝑘𝑙𝑖𝑐𝑘𝑚𝑎𝑥] ⇒ 𝑘𝑙𝑖𝑐𝑘𝑓𝑎𝑘𝑡𝑜𝑟 = 3

3.1.2 Faktisk svårighetsgrad och upplevd svårighetsgrad

Ett urval av de genererade spelnivåerna har använts till en speltestning i syftet att validera deras beräknade svårighetsgrad. För att göra detta har svårighetsgraden mätts under speltestning samt bedömts av spelarna för att få fram en upplevd svårighetsgrad.

(13)

10

parametrar har använts i en funktion, se 3.1.3, som ger ett index mellan 0 och 9, för att lättare kunna jämföras med den beräknade svårighetsgraden och den upplevda svårighetsgraden. Efter varje spelad nivå har spelarna fått göra en bedömning av nivån de just spelade. Då nivåerna som spelas är kategoriserade i lätt, mellan och hög svårighetsgrad, bör den upplevda svårighetsgraden representeras av en multipel av siffran 3. Det kan även vara intressant att se vilken grad av dessa svårighetskategorier nivåerna upplevs ha, exempelvis att den upplevs som medelsvår men istället för att vara precis i mitten av spektrumet ligga närmare en lättare nivå än en svårare. Därför har spelarna fått ge pusslets svårighetsgrad ett poäng mellan 1 och 9, som kan jämföras med den beräknade svårighetsgraden. Detta är den primära datan som samlats in efter att varje pussel spelats. För att kunna dra slutsatser om Taylor och Parberrys (2011) påstående om hur svårighet är den bästa indikatorn på hur intressant, och därmed bra, ett pussel är, kommer deltagarna även att få svara på hur roliga de upplevde nivån. Taylor (2015) pekar ut att lösning genom slump är något som kan påverka hur pusslet upplevs, både i svårighet och intressanthet, vilket leder till sista frågan efter varje enskilt pussel: hade du någon strategi för att lösa pusslet? Om de svarat att de hade en strategi så har de ombetts förklara den för att undersöka om de faktiskt löste den slumpmässigt eller inte. Denna data har dock inte samlats in i syftet att svara på arbetets frågeställning, utan endast eftersom den kan vara intressant att analysera.

Något som kan påverka hur svåra spelnivåerna är för spelarna, både den faktiska och upplevda, är hur vi människor förväntar oss spelprogression. Det är vanligt att svårighetsgraden på spelnivåer ökar linjärt så det är möjligt att detta är vad vi förväntar oss när vi spelar. För att denna förväntning inte ska påverka svårighetsgraden av de enskilda pusslen, har deltagarna fått spela de genererade nivåerna i en ickelinjär ordning. Då de linjära ordningarna, lätt-mellan-svår och svår-mellan-lätt, ska undvikas och varje testdeltagare spelar 3 genererade pussel, finns det 4 möjliga ordningar för nivåerna att spelas i. Detta innebär att flera testdeltagare får spela nivåerna i samma ordning, vilket kan användas i analysen. Frågor om hur ordningen nivåerna spelas i påverkar den upplevda svårighetsgraden kan då undersökas. För att undersöka den aspekten är det därför viktigt att låta fler spelare spela i samma ordning, och därmed har 2 möjliga ordningar valts ut till undersökningen. Testdeltagarna har delats in i två grupper där deltagare i samma grupp spelar samma version av spelet. Då det varken är önskvärt att första spelade nivån är av den lättaste svårighetsgraden eller av den svåraste svårighetsgraden finns det endast två möjliga ordningar kvar. Första gruppen har spelat nivåerna i ordningen mellan-lätt-svår, och kommer härefter refereras till som mellan-lätt-svår, och andra gruppen i ordningen mellan-svår-lätt, då det endast är dessa ordningar som återstår. För att samla in mer data gällande svårighetsgraden för varje enskild spelnivå har båda grupperna fått spela samma spelnivåer, men ordningen de spelat dem i bestämdes alltså av vilken grupp de tillhörde.

3.1.3 Beräkning av faktisk svårighetsgrad

Med typiska fitnessfunktioner som inspiration valdes en linjär typ av ekvation som lämplig, se ekvation 3. Parametrarna i funktionen är tiden i sekunder för spelaren att klara nivån, x, antal gånger spelaren startat om nivån, y, och antal gånger spelaren tryckt på någon pusselbit, z. Konstanterna a, b och c behöver sättas till lämpliga värden innan funktionen kan användas för att beräkna den faktiska svårighetsgraden, s.

(14)

11

𝑠 = 𝑎𝑥 + 𝑏𝑦 + 𝑐𝑧

För att bestämma konstanterna a, b och c i ekvation 3, undersöktes resultaten från pilotstudien. Att starta om nivån tros inte behövas om inte nivån är väldigt svår, och därför anses denna parameter ha större vikt än de andra parametrarna. Detta innebär att konstanten b som hänger ihop med den parametern kommer att vara större än de andra konstanterna. Tiden att klara en nivå tros ha större vikt än antal klick som behövs. Utifrån resultatet från pilotstudien, se tabell 1, kan detta resonemang styrkas genom att undersöka resultaten från spelnivå 3. Alla testdeltagare fick samma antal klick för att klara nivån men deltagare 2 tog längre tid på sig. Detta kan tolkas som att hen tagit längre tid till att tänka över dragen, och därmed var spelnivån svårare för denne än de andra två deltagarna. Utifrån de här argumenten har vi nu kommit fram till ett förhållande för konstanterna i ekvation 3. Konstanten c ska vara mindre än a, som i sin tur behöver vara mindre än b.

Tabell 1 Tiden (sekunder), antal omstarter av spelnivån och antal klick för 3 testdeltagare i

pilotstudien att klara av de tre olika spelnivåerna.

P1N1 P2N1 P3N1 P1N2 P2N2 P3N2 P1N3 P2N3 P3N3

Tid 9 12 8 13 56 8 13 26 11

Omstart 0 0 0 0 0 0 0 0 0

Klick 11 11 11 11 26 8 12 12 12

Den kortaste tiden att klara en spelnivå var 8 sekunder och minsta antal klick för att klara nivån var 8. Deltagaren med detta resultat anses väldigt duktig på den här typen av spel och nivån anses vara väldigt lätt. Nivån skulle få det minsta värdet på svårighetsskalan, och utifrån dessa värden kan lämpliga värden på a och c i ekvation 3 börja undersökas. Med enkel aritmetik och värdena från P3N1, se tabell 1, hittades ett samband mellan konstanterna a och c, se ekvation 4. Utifrån detta samband, kravet att a är större än c samt ett krav på att båda värdena ska vara positiva, togs möjliga värden på a och c fram och jämfördes i en graf med värden från pilotundersökningen, se figur 2.

Ekvation 4 Förhållande mellan konstanterna a och c i ekvationen för beräkning av faktisk svårighetsgrad

(15)

12

Figur 2 Graf där olika värden på a och c i ekvationen s=ax+cz jämförs.

Parametrarna x, tiden i sekunder att klara en spelnivå, och z, antal klick för att klara

en spelnivå, är tagna från resultaten av pilotundersökningen.

Utifrån grafen i figur 2 valdes värdena 0,09 och 0,025 för konstanterna a och c, då dessa värden gav en funktion där värdena på s är medianvärdet för alla funktionerna. Som sagt tros omstartande av nivån vara ett tecken på att nivån är väldigt svår. Det har även noterats att konstanten b i ekvation 3 bör vara större än konstanterna a och c. Med detta i åtanke anses värdet 1 vara lämpligt för konstanten b, vilket innebär att den faktiska svårighetsgraden ökar ett steg för varje omstart av nivån. Detta resulterar i att ekvation 5 använts för att beräkna den faktiska svårighetsgraden.

Ekvation 5 En linjär funktion för beräkning av faktisk svårighetsgrad. 𝑠 = 0,9𝑥 + 1𝑦 + 0,25𝑧

3.1.4 Intervjuer och datahantering

(16)

13

insamlandet av mer kvalitativa data. Under rådande omständigheter i världen gällande covid-19 under tiden då undersökningen äger rum (Folkhälsomyndigheten 2020) har beslut om att hålla undersökningen på distans tagits, och därmed kommer frågeformulär istället för intervjuer att användas. Intervjuer hade kunnat ske via IP-telefoni men ett val att inte använda detta gjordes. Detta på grund utav två anledningar. För det första skulle inte testdeltagarna behöva ladda ner ytterligare ett program för att kunna delta i studien, fler deltagare troddes då vilja delta. För det andra innebär intervjuer i realtid att möten måste bokas in, vilket ger färre deltagare möjlighet att delta i undersökningen.

Då datan till stor del är kvantitativ är det möjligt att låta spelarna svara på en enkät istället för muntliga intervjuer. I och med att undersökningen sker på distans öppnar detta upp för ett större antal möjliga deltagare. Innan deltagarna spelat första nivån har de blivit ombedda att fylla i delen i frågeformuläret rörande deras bakgrund av spelerfarenhet. Dessa frågor är till för att undersöka om testdeltagaren är med i den primära målgruppen för pusselspel och hur detta kan påverka resultatet av undersökningen. Pusselspel har en väldigt bred publik, men den primära målgruppen för pusselspel består av kvinnor i 35-års åldern. Detta är ett antagande som grundar sig i att just denna målgrupp tagits fram för spelet Candy Crush (King 2012) (Yee 2015). Därför berör bakgrundsfrågorna i enkäten deras ålder, kön och hur ofta de spelar olika typer av spel. Att ha en enkät på detta sätt anses bättre än en muntlig intervju i detta fall då syftet med frågorna är att kunna kategorisera testdeltagarna i hur stor spelerfarenhet de har samt i vilken grad de tillhör målgruppen för pusselspel.

Efter varje avklarad spelnivå återvänder deltagarna till frågeformuläret för att svara på frågor gällande den nyss spelade nivån, se Appendix B. Det finns alltid en “övrigtfråga” där deltagarna fått ge egna kommentarer. Bedömningen av den enskilda nivåns svårighetsgrad och hur rolig spelnivån upplevs är kvantitativ och har därför inte möjlighet för deltagarna att svara med egna ord på dessa frågor. De övriga frågorna ställs i syftet att få mer kvalitativa svar vilket är anledningen till att det här funnits möjlighet för deltagarna att skriva sina egna svar. Frågorna efter att alla spelnivåerna är avklarade, se Appendix C, har handlat om att jämföra de olika nivåerna och formulerades liknande dessa: Vad tyckte du om spelet? Var något pussel mer intressant än de andra? Vilket? Varför?

Information om arbetets datahantering har getts i början av undersökningen. I enlighet med informationskravet av Vetenskapsrådet (2002) har deltagarna informerats om att deras deltagande är frivilligt och att de när som helst får avbryta sin medverkan, innan undersökningen påbörjats. De har även informerats om syftet med undersökningen och att alla uppgifter som samlas in endast används för detta syfte. All data som samlas in under undersökningen förvaras och används endast för forskningsändamålet och på ett sådant sätt att obehöriga inte kan ta del av dem, i enlighet med konfidentialitetskravet och nyttjandekravet (Vetenskapsrådet 2002). Detta är också något deltagarna har informerats om innan speltestet.

3.1.5 Pilotstudie

(17)

14

För att kunna få ett resultat som kan gälla generellt hade det varit önskvärt att ha så många testdeltagare som möjligt och även ett stort mångfald i deltagargruppen. Att ha testdeltagare från hela världen hade varit välkommet, då skulle kanske slutsatser om hur olika regioner i världen har lättare för att lösa pussel eller analysera annan intressant data som kunnat komma fram i undersökningen. Det hade även varit intressant att ha testdeltagare i många olika åldrar för att se vad för skillnader det finns i den upplevda svårighetsgraden. Eftersom undersökningen sker på distans finns det en möjlighet för personer i andra delar av världen att delta, men de behöver kunna förstå svenska då detta är språket instruktionerna och frågorna i undersökningen är skrivna på. Valet att göra undersökningen på svenska är för att undvika otydligheter som kan uppstå vid användandet av annat språk än de som talas flytande av undersökaren. Att ha testdeltagare i olika åldrar har fortfarande varit möjligt, men inte i lika stor grad som varit önskat. Anledningen till detta är att personer under 15 år behöver vårdnadshavares samtycke (Vetenskapsrådet 2002) och tillvägagångssättet för rekryteringen. Testdeltagare har rekryterats via personliga kontakter och vissa Facebookgrupper. Då de personliga kontakter som har möjlighet att delta i undersökningen till stor del består av studenter och spelutvecklare, har detta trots vara majoriteten av deltagargruppen. Dock gav rekryteringen via Facebook-grupper ett större deltagarantal än förväntat, med både deltagare som tillhör målgruppen för pusselspel och testdeltagare som inte tillhör den.

(18)

15

4

Genomförande

En prototyp av ett pusselspel av typen path-building, se 2.3.1, har skapats med spelet PipeWalker (Artemsen 2012) som utgångspunkt. Spelnivåer till denna prototyp har sedan procedurellt genererats utifrån önskade svårighetsgrader. Dessa svårighetsgrader var av typen beräknad svårighet, se 3.1.1.

Den procedurella genereringen har utgått från en genereringsmetod som beskrivits av Taylor (2015) för spelet Sokoban (Thinking Rabbit 1982). Denna metod ska kunna generera spelnivåer för alla pussel som är rutnätsbaserade, vilket är varför den använts som inspiration. Då pusselspelet som genererats i detta arbete är av en annan typ än Sokoban (Thinking Rabbit 1982), dock fortfarande rutnätsbaserat, har vissa anpassningar av metoden fått göras. Dessa anpassningar inkluderade bland annat hur en spelnivå representerats och ändringar av stegen i den ursprungliga genereringsmetoden.

Efter att prototypen skapats och spelnivåer genererats har en pilotstudie av undersökningen ägt rum. Resultatet av denna ledde till omformuleringar i instruktionerna för testdeltagarna och ett grafisk förtydligande av start- och slutbitar i prototypen.

4.1 Produkt

Produkten i detta arbete har delats upp i två delar, en spelbar prototyp som använts till undersökningen och genereringsprocessen för spelnivåer av önskad svårighetsgrad till denna prototyp. I detta kapitel beskrivs dessa två delar. Först diskuteras den spelbara prototypens olika element och hur den fungerar. Sedan beskrivs metoden som användes för att generera spelnivåer till denna prototyp.

4.1.1 Spelet

Artefakten består av 3 olika spelnivåer av olika beräknade svårighetsgrader, se 3.1.1, samt en “träningsnivå” bestående av 4 pusselbitar vilken agerar som ett tillfälle att lära sig spelets kontroller. Under varje spelnivå mäts antal gånger spelplanen nollställs för att börja om, tiden det tar för spelaren att lösa nivån från start eller omstart, samt antal klick det tar för spelaren att lösa nivån från start eller omstart. Dessa värden blir sedan spelaren ombedd att skriva in i ett formulär där de även svarar på frågor, se 3.1.3, och betygsätter spelnivån, se 3.1.2.

Det finns 5 olika typer av pusselbitar i artefakten, se figur 3. En startbit, typ A, som det alltid finns exakt en utav på spelplanen. Slutbitar, typ B, som det alltid finns minst en utav på spelplanen. Raka bitar, typ C, som fortsätter vägen i samma riktning den kom ifrån. Svängbitar, typ D, som leder vägen i en rätvinklig riktning. Förgreningsbitar, typ E, som istället för bitar av typ C och D som skickar vidare vägen i en riktning, skickar den i två riktningar. För varje pusselbit av typ A och E på spelplanen finns det även en pusselbit av typ B.

A B C D E

(19)

16

En spelplan består av ett rutnät av dessa pusselbitar. Målet är att bygga en väg mellan alla utplacerade slutbitar och startbiten med hjälp utav övriga pusselbitar på spelplanen. Alla pusselbitar på spelplanen behöver inte användas i denna väg. Detta skiljer sig alltså från spelet som prototypen utgick ifrån. Vägen skapas genom att rotera pusselbitarna, varje gång de trycks på roteras de 90 grader moturs. Spelnivåerna i artefakten består av 9 pusselbitar.

4.1.2 Spelnivågenerering

För att generera en spelnivå med önskad svårighetsgrad gavs generatorn ett heltal 1–9 och en storlek på matrisen, för denna undersökning valdes en matrisstorlek på 3 rader och 3 kolumner, se 3.1.1. Utifrån dessa värden skapades en startmatris som sedan skickades in i en grafgenererare där bland annat spelnivåns lösbarhet utvärderades. Om spelnivån var lösbar beräknades dess svårighetsgrad. Denna process itererades tills en spelnivå vars beräknade svårighetsgrad överensstämmer med den önskade svårighetsgraden, eller tills en förbestämd längsta tid för genereringen nåtts.

Först skapades en lista av alla lediga matrispositioner för den givna matrisstorleken. Så länge det fanns positioner i denna lista skapades nya pusselbitar och tilldelades en av dessa positioner som då togs bort ur listan. Den första pusselbiten som skapades var av typ A. När en pusselbit skapats blev den tilldelad en slumpmässigt vald position från listan av lediga positioner och en slumpmässigt vald rotation. I de flesta fall blev även typen av pusselbit slumpmässigt vald, dock har det funnits vissa restriktioner här. En pusselbit av typ A kunde endast skapas en gång, så den fanns inte med bland valbara typer och skapades innan alla andra. En pusselbit av typ B kunde endast placeras ut i samband med typ A eller E då det i andra fall inte skulle gå att skapa vägar till alla slutbitar, vilket innebar att inte heller denna typ kunde väljas slumpmässigt. Pusselbitar av typ C och E kunde inte placeras i hörn då detta skulle innebära att vägen ledde ut ur spelplanen. Det kunde inte heller placeras ut en pusselbit av typ E om det endast fanns en ledig position kvar i listan med matrispositioner, då en pusselbit av typ B var tvungen att placeras ut i samband med denna. Det önskade antalet slutbitar för matrisen skickades in till generatorn baserat på den önskade svårighetsgraden, vilket innebar att när detta antal nåtts kunde inga ytterligare pusselbitar av typ E placeras ut på spelplanen. Om det önskade antalet slutbitar var 1 fick inte heller slutbiten blir placerad bredvid startbiten, då detta var ett sådant enkelt fall att det inte längre anses räknas som pussel. När det inte längre fanns några lediga positioner kvar returnerades den nya matrisen av matrisgeneratorn, förutsatt att antalet slutbitar stämde överens med det önskade antalet. Givet en startmatris från matrisgeneratorn testades spelnivåns lösbarhet. Detta gjordes genom skapandet av en graf där varje nod representerade spelnivåns tillstånd. Ett tillstånd bestod av en matris med alla pusselbitars typer, positioner och rotationer, samt nodens djup i grafen vilket representerat antalet handlingar från starttillståndet. Varje nod har även haft en referens till sin föräldranod. Första steget var att skapa en startnod utifrån den givna startmatrisen som haft djupet noll och ingen förälder. För varje nod som skapats kördes en pathfinder på dess matris för att avgöra om noden befunnit sig i ett vinsttillstånd, om startnoden varit i ett vinsttillstånd anses nivån inte vara ett pussel då det innebar att nivån redan var löst. Om startnoden inte varit i ett vinsttillstånd lades denna till i en kö som itererats igenom så länge kön inte varit tom. För varje iteration skapades nya noder vars förälder satts till den första noden i kön, som då även tagits bort ur kön.

(20)

17

pathfinder som avgjorde om noden var i ett vinsttillstånd, vilket innebar att den skulle sparas undan i en lista av vinsttillstånd. Matrisen i den nyskapade noden skapades utifrån föräldranodens matris, med skillnaden att en pusselbit roterats en gång. Vid skapandet av nya noder roterades pusselbitarna i förälderns matris en gång för varje ny nod, förutsatt att pusselbiten inte ännu roterats max antal gånger. Max antal rotationer innebar att pusselbiten roterats ett helt varv, förutom för de av typ C som endast kan ha två olika rotationer. Det var inte heller varje pusselbit i matrisen som roteras, spannet av pusselbitar som ska roteras avgjordes av ett startindex hos föräldranoden. Startindexet sattes till ett steg mindre än vilken i turordningen under skapandet av föräldranoden och dess syskon som föräldranoden var. Som exempel sattes startindexet till noll om föräldranoden var den första av sina syskonnoder att skapas sätts, vilket innebar att alla pusselbitar i dess matris skulle roteras. Detta gjordes för att undvika skapandet av matrisdubletter i grafen.

Om det efter skapandet av grafen inte fanns några vinsttillstånd, började spelnivågenereringen om igen med skapandet av en ny startmatris. Om det däremot fanns vinsttillstånd användes det lägsta värdet på djup hos dessa tillstånd, med andra ord lägsta antal klick för att lösa nivån, tillsammans med antalet slutbitar i matrisen för att beräkna spelnivåns svårighetsgrad enligt 3.1.1. Om den beräknade svårighetsgraden och den önskade svårighetsgraden stämde överens sparades denna spelnivå och dess svårighetsgrad. I annat fall itererades hela spelnivågenereringsprocessen.

4.2 Inspiration

Projektet inspirerades av en metod för procedurell generering som Taylor (2015) använt sig av och beskrivs kunna generera alla typer av rutnätsbaserade pussel. Han har beskrivit metoden med spelet Sokoban (Thinking Rabbit 1982) som exempel.

Denna genereringsmetod började med en tom rutnätsbaserad spelplan. Det första som gjordes var att slumpmässigt placera ut alla nödvändiga pusselbitar, i fallet för Sokoban (Thinking Rabbit 1982) var detta spelarkaraktären, en låda och en låddestination. Efter detta, och efter varje gång en ny pusselbit placerats ut på spelplanen, avgjordes spelplanens lösbarhet av en algoritm. Om pusslet inte var lösbart börjar genereringen om, annars valdes slumpmässigt en ny pusselbit ut och placeras på en slumpmässigt vald tillgänglig position på spelplanen. När en ny pusselbit placerats utvärderas som sagt pusslets lösbarhet. Om den efter detta inte var lösbar, togs den senast utplacerade pusselbiten bort och förra steget i genereringen utfördes igen. Denna process fortsatte tills en ny pusselbit misslyckats att placeras ut ett förbestämt antal gånger på rad.

Algoritmen som avgjorde pusslets lösbarhet gick ut på att utifrån spelplanen skapa ett bredd-först-sökträd. I detta sökträd representerade varje nod spelnivåns tillstånd, det vill säga vilka pusselbitar av vilka typer som befann sig vart på spelplanen. Varje kant i detta träd representerade en handling som tar spelplanen mellan två tillstånd. För att hitta den bästa lösningen av spelnivån söktes trädet igenom med BFS, se 2.2.3, för att hitta den kortaste vägen mellan starttillståndet och vinsttillståndet. Om det inte fanns något vinsttillstånd var spelnivån olösbar.

(21)

18

förgreningsfaktor. Taylor (2015) har använt denna metod för att generera spelnivåer till hans spel Tumblestone (The Quantum Astrophysicists Guild 2016).

4.3 Anpassning av genereringsmetod

I spel inom kategorin path-building puzzles, som spelnivåerna genererade i detta arbete tillhör, behöver alla pusselbitar vara utplacerade på spelplanen innan nivåns lösbarhet kan utvärderas. Detta innebär att alla pusselbitar anses som nödvändiga och inte kan placeras ut en i taget med en lösbarhetsalgoritm som körs efter varje utplacering, som i 4.2. Detta ledde till valet att generera en hel matris, som representerar en spelplan, istället för att påbörja genereringen med en tom spelplan.

Taylor (2015) representerade spelnivåns tillstånd med en sträng i hans exempel angående spelet Sokoban (Thinking Rabbit 1982). Eftersom spelet i detta arbete behövde fler variabler för att avgöra om nivån befann sig i ett vinsttillstånd, togs beslutet att representera ett tillstånd med en matris istället. Varje element i denna matris var en pusselbit som hade en typ, en rotation och en lista av vilka riktningar dennes väg ledde. Pusselbiten hade samma position i matrisen som den hade på spelplanen.

Eftersom tillstånden i detta arbete innehöll mer information än de i genereringsmetoden som använts som inspiration, se 4.2, och varje tillstånd har haft väldigt många fler möjliga handlingar skulle grafen till detta arbete tagit upp väldigt mycket minne. Som nämnt i 3.1.1 skulle en spelplan med storleken 5 gånger 5 ge varje tillstånd 25 möjliga handlingar, ett tryck på varje pusselbit.

Problemet med minnesplats löstes genom att inte spara hela grafen. Noder sparades endast undan om de befann sig i ett vinsttillstånd, då det var dessa som var intressanta att kolla närmare på. Då grafen genererades enligt en BFS metod och varje nods djup sparades under genereringen var det inte längre nödvändigt att göra en separat genomsökning av grafen efter kortaste vägen till vinstillstånden. Denna sökning gjordes istället implicit under skapandet av nya noder i grafen, vilket kortat ner genereringstiden och minnesanvändningen för en spelnivå betydligt.

4.4 Pilotstudie

(22)

19

Under pilotstudien framgick det att instruktionerna och målet för de individuella spelnivåerna inte var tillräckligt tydliga. Besluts tog även om att endast be deltagarna fylla i en kod i formuläret, istället för 3 kortare som de ursprungligen fick fylla i, efter varje avklarad nivå. Vid tidpunkten för pilotstudien såg start- och slutbitarna ut som i figur 4, och designades sedan om till hur de ser ut i figur 5. Instruktionerna ändrades också för att tydliggöra att inte alla pusselbitar på spelplanen nödvändigtvis måste vara del av vägen mellan start- och slutbitar.

Figur 4

Grafik för startbit och slutbit under pilotstudie.

(23)

20

5

Utvärdering

Undersökningen har skett på distans med 16 försöksdeltagare som fått hämta hem artefakten och starta den på sin egen dator. Artefakten bestod av en enklare spelnivå, för att ge deltagarna en förståelse för kontrollerna, samt tre genererade spelnivåer. 8 av deltagarna tillhörde testgrupp mellan-lätt-svår och spelade de generade nivåerna i ordningen mellan-lätt-svår enligt deras beräknade svårighetsgrad, se 3.1.1, medan övriga 8 tillhörde gruppen mellan-svår-lätt och spelade dessa nivåer i ordningen mellan-svår-mellan-svår-lätt. Innan någon spelnivå spelades svarade deltagarna på frågor i syftet att avgöra om de tillhör målgruppen för pusselspel, se Appendix A. Efter varje avklarad spelnivå fick deltagarna svara på frågor angående den spelade nivån, se Appendix B. När alla spelnivåer var avklarade och tillhörande frågor besvarade, fick deltagarna svara på avslutande frågor där möjlighet att jämföra spelnivåerna och ge övriga synpunkter gavs, se Appendix C. Spelnivå A hade en beräknad svårighetsgrad 2, spelnivå B hade en beräknad svårighetsgrad 5 och spelnivå C hade en beräknad svårighetsgrad 7. Spelnivåerna kan ses i figur 6.

Spelnivå A Spelnivå B Spelnivå C

Figur 6 Genererade spelnivåer som använts i undersökningen, sorterade efter

beräknad svårighetsgrad från vänster till höger.

5.1 Resultat

Resultatet från undersökningen finns uppställt i listor i Appendix D. De första listorna redogör för deltagarnas svar på bakgrundsfrågorna, se Appendix A, och avgörande om de tillhör den primära målgruppen för pusselspel samt huruvida de har en positiv inställning till pusselspel. Då den primära målgruppen för pusselspel är kvinnor i 35-årsåldern, har de ansetts tillhöra denna grupp om de har angivit sin könsidentitet som kvinna och är mellan 30 och 40 år. Deras inställning till pusselspel har antagits utifrån deras svar angående spelvanor och deras åsikt om pusselspel, som är citerade från enkätsvaren. Efter dessa listor följer resultaten av varje spelnivå, uppdelat i grupp mellan-lätt-svår och B samt en sammanställning av gruppernas resultat i genomsnitt och median.

(24)

21

resultatet från grupp lätt-svår kan ses i figur 8 och resultatet från gruppen mellan-svår-lätt kan ses i figur 9.

Tabell 2 Genomsnittliga värden för faktisk svårighetsgrad, upplevd svårighetsgrad samt

rolighetsbedömning från undersökning av 3 genererade spelnivåer med olika beräknade svårighetsgrader.

Faktisk svårighetsgrad Upplevd svårighetsgrad Rolighetsbedömning mellan-lätt-svår mellan-svår-lätt mellan-lätt-svår mellan-svår-lätt mellan-lätt-svår mellan-svår-lätt Spelnivå A 1,67 2,14 1,75 2,50 2,88 4,13 Spelnivå B 1,64 1,76 1,00 1,50 3,00 3,38 Spelnivå C 2,07 1,95 2,13 3,00 3,88 3,88

Figur 7

Sammanställning av gruppernas genomsnitt gällande faktisk

svårighetsgrad, upplevd svårighetsgrad samt rolighetsbedömning, sorterade enligt

(25)

22

Figur 8

Genomsnittliga resultat från gruppen mellan-lätt-svår gällande faktisk

svårighetsgrad, upplevd svårighetsgrad samt rolighetsbedömning, sorterade i den

ordning gruppen spelade nivåerna i.

Figur 9 Genomsnittliga resultat från gruppen mellan-svår-lätt gällande faktisk

(26)

23

5.2 Analys

Det fanns inga extrema variationer i hur lång tid det tog för deltagarna att klara av en spelnivå, se Appendix D. Undantaget var två deltagare i gruppen mellan-svår-lätt som tog mycket längre tid för att klara av spelnivå A än övriga deltagare. Deltagare 13 klarade nivån på 52 sekunder och deltagare 14 på 30 sekunder. För samma spelnivå låg gruppens medianvärde för tiden på 15,5 sekunder, se Appendix D. Ingen av deltagarna startade om någon av spelnivåerna. Det fanns heller inga värden som gav större avvikanden angående antal klick för spelarna att klara nivån.

Deltagare 6, 7, 8 och 9 ansågs tillhöra den primära målgruppen för pusselspel, se 5.1. Deras resultat skilde sig inte mycket från övriga deltagares, med undantag för deltagare 8. Denna deltagare gav lägsta möjliga värde, 1, för upplevd svårighetsgrad och rolighetsbedömning på alla tre spelnivåer.

Det genomsnittliga resultatet från gruppen mellan-lätt-svår visar att den faktiska svårighetsgraden för spelnivå A och B låg väldigt nära varandra, 1,64 respektive 1,67, se tabell 2. Den sista spelade nivån för gruppen, spelnivå C, hade högst faktisk svårighetsgrad av alla spelade nivåer. Det högsta värdet på faktisk svårighet som spelnivå C, som även hade högst beräknad svårighetsgrad, fick i gruppen mellan-lätt-svår var 2,91, se Appendix D. Hos gruppen mellan-svår-lätt ökar den faktiska svårighetsgraden för varje spelad nivå, se figur 9. Båda ökningarna växer med 0,19, det är alltså lika stor skillnad mellan spelnivå B och C som mellan C och A. Den spelnivå som fick högst faktisk svårighetsgrad av deltagarna i gruppen mellan-svår-lätt var spelnivå A, vars beräknade svårighetsgrad var lägst. Spelnivå A fick det högsta värdet på faktiskt svårighet i gruppen och det var 4,91, se Appendix D. Detta var det högsta värdet på faktisk svårighet någon av spelnivåerna fick i undersökningen.

I gruppen mellan-lätt-svår ökar den upplevda svårighetsgraden genom undersökningen, varje spelad nivå upplevs som svårare än den innan, se figur 8. Det genomsnittliga värdet på upplevd svårighet växer lika mycket varje gång den ökar. Hos gruppen mellan-svår-lätt hade den först spelade nivån, spelnivå B, den lägsta upplevda svårighetsgraden, se figur 9. Nästa spelade nivå, spelnivå C, hade högst upplevd svårighetsgrad av alla tre spelade nivåer. Spelnivå A, som spelades sist, hade en upplevd svårighet med ett värde mellan de andra nivåerna, men närmare den med högre upplevd svårighetsgrad, spelnivå C. Utav alla spelnivåer var den högsta upplevda svårighetsgraden 6, givet av deltagare 10 tillhörande gruppen mellan-svår-lätt, se Appendix D.

Den genomsnittliga rolighetsbedömningen hos gruppen mellan-lätt-svår visade att spelnivå A och B var relativt nära varandra, se figur 8. Den första spelade nivån, spelnivå B, upplevdes som lite roligare än den efter, spelnivå A, medan den sista spelade nivån, spelnivå C, hade en större ökning och upplevdes som roligast av de tre nivåerna i gruppen. Gruppen mellan-svår-lätt ansåg att spelnivåerna blev roligare för varje spelad nivå, se figur 9. Spelnivå B fick lägst genomsnittlig rolighetsbedömning, 3,38, och spelnivå A fick högst, 4,13, se tabell 2. Spelnivå C fick en genomsnittlig rolighetsbedömning på 3,88, högre än spelnivå B och lägre än spelnivå A, om än närmare värdet hos spelnivå A. Utav alla spelnivåer fick spelnivå A det högsta värdet på rolighet, 7, från deltagare 10 tillhörande gruppen mellan-svår-lätt, se Appendix D.

(27)

24

hade högst värde för båda dessa typer av svårighetsgrad. Hur rolig varje spelnivå var ökade i takt med att den beräknade svårighetsgraden ökade. Spelnivån med lägst beräknad svårighetsgrad, spelnivå A, hade lägst upplevd rolighet och spelnivå C, som hade högst beräknad svårighetsgrad, ansågs vara roligast. I figur 9 kan ett samband mellan faktisk svårighetsgrad, hur rolig nivån upplevs samt spelordningen för gruppen mellan-svår-lätt ses. Den först spelade nivån för gruppen, spelnivå B, hade lägst värde på både faktisk svårighet och rolighetsbedömning, medan den sist spelade nivån, spelnivå A, hade högst faktisk svårighetsgrad och rolighetsbedömning. Ingen mätdata visar samband till den beräknade svårighetsgraden för gruppen. Det finns inte heller något samband till den upplevda svårighetsgraden hos gruppen.

Efter att alla spelnivåer var avklarade fick deltagarna svara på avslutande frågor, se Appendix C. Flera av deltagarna kommenterade på spelplanens storlek, se Appendix D, och hur de tror att större spelplaner hade bidragit till svårare och roligare spelnivåer. Nedan följer ett urval av dessa svar:

• “Kul, rolig idé. Hade varit intressant att se ännu större pussel :)”

• “Påminner om andra appspel som jag spelat tidigare. Grundprincipen för spelet tycker jag är riktigt bra, men samtliga tre nivåer var alldeles för lätta. För att vara intressant/utmanande, hade det behövt vara mer än 3x3 rutor, kanske typ 6x6 eller 7x7. Det hade behövt funnits fler vägar med flera förgreningar.”

• “Ganska rolig idé, men tror att komplexiteten skulle behöva vara större. Just nu kändes det som att man lätt skulle kunna lösa pusslen genom att klicka på måfå, och det tycker jag inte är tillfredsställande. Större banor än 3x3 skulle säkert lätt göra det roligare.” Det var även flera deltagare som ansåg att spelnivåerna var svårare och roligare när det fanns fler slutbitar placerade på spelplanen. Ett urval av dessa svar:

• “Nivå 3 (spelnivå C). Där fick jag tänka till.”

• “Roligast var nog pussel 3 (spelnivå C), för att det fanns fler bitar med olika förgreningar.”

• “Det var rätt kul, jag har spelat liknande förut. Det var bra att det på de svårare nivåerna fanns flera slutbitar som behövde vara med.”

• “Tvåan (spelnivå C), det var fler slutbitar och man fick ändra bitar igen”

Till sist var antalet bitar som inte behövde vara del av vägen mellan start och slutbit något som vissa deltagare ansåg bidra till högre svårighetsgrad, och därmed roligare spelnivåer:

• “Ungefär lika allihop. Ett var kanske lite roligare för att det fanns två olika lösningar.”

• “Den sista banan (spelnivå A) var roligare eftersom den inte var lika självklar.”

• “Det sista (spelnivå A) var roligast då man försökte hitta den snabbaste vägen med färst roteringar.”

(28)

25

5.3 Slutsatser

Frågan som undersökts i detta arbete är: Hur överensstämmer den beräknade svårighetsgraden med den faktiska och upplevda svårighetsgraden för ett pussel som är procedurellt genererat med hjälp av en sökbaserad metod?

Genomsnittet för spelnivåernas faktiska svårighetsgrad höll sig mellan 1,64 och 2,14. Genomsnittet för spelnivåernas upplevda svårighetsgrad kunde komma upp i högre värden, men fortfarande inte högre än 3. Dessa värden skiljer sig alltså mycket från den beräknade svårighetsgraden som hade värdena 2, 5 och 7. Även om värdena skilde sig mycket fanns det hos gruppen mellan-lätt-svår ett samband mellan ökningen i faktisk svårighetsgrad, hur rolig spelnivån upplevdes och spelnivåns beräknade svårighetsgrad.

Utifrån resultatet och jämförelser mellan hur rolig en spelnivå upplevdes och olika typer av svårighetsgrader, kan slutsatsen att högre svårighetsgrad indikerar en roligare spelnivå nås. Detta är något även Taylor och Parberry (2011) har kommit fram till, se 2.1. Kommentarerna från testdeltagarna, se Appendix D, styrker denna slutsats.

För att undvika att leda spelarnas bedömning av den upplevda svårighetsgraden togs ett beslut om att inte låta deltagarna spela nivåerna i en linjär ordning, baserat på deras beräknade svårighetsgrad, se 3.1.1. Trots detta visade undersökningens resultat på att spelordningen spelar roll. Det genomsnittliga värdet för upplevd svårighetsgrad var lägst hos den första spelade nivån i båda testgrupperna, se 5.1. I testgruppen mellan-svår-lätt ökade den faktiska svårighetsgraden för varje spelad nivå, se 5.2, medan de två första nivåerna i gruppen mellan-lätt-svår hade väldigt närliggande värden för faktisk svårighet. Detta indikerar att spelordningen faktiskt har betydelse, inte bara för den upplevda svårighetsgraden, utan även för den faktiska svårighetsgraden.

Valdes rätt parametrar för beräknad svårighetsgrad och faktisk svårighetsgrad? För den beräknade svårighetsgraden valdes minsta antal klick som krävs för att klara nivån samt antalet slutbitar placerade på spelplanen, se 3.1.1. Utifrån resultatet av undersökningen och kommentarerna från deltagarna, se 5.2, anses dessa parametrar passande. Dock hade dessa parametrars vikt behövt vara lägre och ytterligare parametrar hade kunnat vara användbara. Utifrån kommentarer från testdeltagare, se 5.2, samt tidigare diskussion angående spelplanens storlek som parameter för beräknad svårighetsgrad, se 3.1.1, tycks detta vara en parameter som borde varit med. Även variation var något testdeltagarna pekade ut som indikation på svårighetsgrad, se 5.2. Dessa kommentarer leder till att antalet möjliga vinsttillstånd för en nivå, se 4.1.2, är en bra parameter till beräknad svårighetsgrad.

(29)

26

6

Avslutande diskussion

6.1 Sammanfattning

Syftet med arbetet har varit att undersöka om genereringsmetoden Taylor (2015) beskrivit, se 4.2, kan användas för att skapa bra nivåer till andra typer av pusselspel än för Sokoban (Thinking Rabbit 1982) som han beskrivit metoden för. För att undersöka kvalitén på spelnivåerna har fokus legat på spelnivåernas svårighetsgrad då detta ansetts vara bästa indikatorn på hur intressant, och därmed underhållande, ett pussel är (Taylor & Parberry 2011). Spelnivåerna som genererats i detta arbete har haft spelet PipeWalker (Artemsen 2012) som utgångspunkt, då dessa pussel är rutnätsbaserade, som Taylors (2015) metod sägs fungera för, men har tillräckligt annorlunda spelregler än Sokoban (Thinking Rabbit 1982) för att vara intressant att undersöka.

Taylors (2015) genereringsmetod har legat som grund för genereringen i detta arbete, med tillägget att en beräknad svårighet, se 3.1.1, ska bestämmas under processen. Även andra anpassningar av metoden har fått göras, inkluderande hur spelnivåerna representeras och mindre ändringar i metodens steg. För att validera den beräknade svårigheten har faktisk och upplevd svårighet, se 3.1.2, tagits fram under speltestning.

En distansundersökning skedde med 16 deltagare som spelade 3 genererade spelnivåer av olika beräknad svårighetsgrad. Deltagarna blev indelade i två grupper, A och B, där deltagare ur samma grupp spelade nivåerna i samma ordning. Utifrån undersökningens mätdata har faktisk svårighetsgrad tagits fram och deltagarna fick själva bedöma hur svåra och roliga de upplevde varje nivå. Spelnivå A, som hade en beräknad svårighetsgrad på 2, fick av gruppen mellan-lätt-svår i genomsnitt en faktisk svårighetsgrad på 1,67 och en upplevd svårighetsgrad på 1,75. Från gruppen mellan-svår-lätt fick samma spelnivå en genomsnittlig faktisk svårighetsgrad på 2,14 och en upplevd svårighetsgrad på 2,5. Spelnivå B hade en beräknad svårighetsgrad på 5, fick från gruppen mellan-lätt-svår en genomsnittlig faktisk svårighet på 1,64 och upplevd svårighetsgrad 1. Samma nivå fick av gruppen mellan-svår-lätt 1,76 som genomsnittlig faktisk svårighetsgrad och 1,5 som upplevd svårighetsgrad. Spelnivån med högst beräknad svårighetsgrad, 7, var spelnivå C. Av gruppen mellan-lätt-svår fick den en genomsnittlig faktisk svårighetsgrad 2,07 och upplevd svårighetsgrad 2,13. Hos gruppen mellan-svår-lätt blev den genomsnittliga faktiska svårighetsgraden 1,95 och den upplevda svårighetsgraden 3.

Utifrån resultatet kunde slutsatser dras kring parametrar för beräkning av beräknad svårighetsgrad och faktisk svårighetsgrad. Den beräknade svårighetsgraden hade mycket högre värden än den faktiska och upplevda svårighetsgraden, men ökningen mellan nivåerna tycktes ändå ha ett samband mellan de olika typerna av svårighetsgrad. Ett konstaterande att spelordningen för nivåerna påverkar den faktiska och upplevda svårighetsgraden kunde göras.

6.2 Diskussion

(30)

27

vinsttillstånd är en bra parameter för beräkning av svårighetsgrad. Dock hade den större vikt än lämpligt i just detta arbete. För pussel inom kategorin path-building, se 2.3.1, som de genererade i detta arbete faller inom, är även antalet slutbitar placerade på spelplanen en passande parameter.

En parameter för pusselgenerering som diskuterades men valdes bort i 3.1.1 var storleken på spelplanen. Wang, Wang och Sun (2012) menar att spelplanens storlek har en tydlig påverkan på pusslets svårighet. Diskussionen som fördes i 3.1.1 utgick till stor del från att de olika genererade spelnivåerna skulle ha olika storlekar efter vilken beräknad svårighetsgrad de tillhörde. Argumentet att detta skulle vara en alldeles för tydlig indikation på svårighetsgrad och kunna leda spelarnas bedömning av den upplevda svårighetsgraden gjordes. Detta argument ledde till valet att inte ha olika storlekar på spelplanen och endast generera spelnivåer med 3 rader och 3 kolumner. Resultatet av undersökningen och testdeltagarnas kommentarer visade dock att denna storlek på spelnivåer inte passade, åtminstone inte för denna målgrupp av spelare. Alla spelnivåerna visade sig vara lättare än de beräknats vara, både i avseende på faktisk svårighetsgrad och upplevd svårighetsgrad. För att undvika att påverka den upplevda svårighetsgraden kan fortfarande alla spelnivåer vara av samma storlek, men en större storlek hade kunnat väljas och antagligen gett en större möjlighet för en mer korrekt beräkning av svårighetsgrad.

Genereringsmetoden som används i detta arbete använder sig av en graf som beskriver alla möjliga tillstånd spelplanen kan befinna sig i samt handlingar som tar spelplanen mellan dessa tillstånd, se 4.1.2. Storleken på denna graf växer väldigt snabbt i jämförelse med spelplanens storlek, något som diskuterats i 3.1.1. Exemplets som tidigare nämnts är en spelplan med 5 rader och 5 kolumner, där grafens startnod skulle få 25 barnnoder. En spelplan med 6 rader och 6 kolumner skulle ge en startnod med 36 barnnoder, medan en spelplan med 7 rader och 7 kolumner skulle ge startnoden 49 barnnoder. Då varje nod i grafen behöver undersökas för att hitta alla möjliga vinsttillstånd, skulle större grafer innebära längre genereringstid. Denna genereringsmetod, som grundar sig mycket på att använda en sådan graf och söka igenom den, är därför inte lämplig för större spelnivåer.

En annan metod för generering av spelnivåer till denna undersökning som kunnat skapa nivåer med större spelplaner är en metod som ibland används när pussel designas för hand. Metoden skulle utgå från en spelplan där alla pusselbitar redan har sin korrekta rotation, det vill säga ett färdiglöst pussel, och slumpmässigt rotera pusselbitarna ett förutbestämt antal gånger. Detta skulle då vara det minsta antal klick som behövs för att klara nivån, och fortfarande kunna användas för att beräkna spelnivåns svårighetsgrad. Denna metod använder då inte längre grafen och därmed inte någon typ av sökning i den. Det tros påverka genereringstiden positivt för större spelnivåer jämfört med metoden som använts i detta arbete.

References

Related documents

Vad som Chaves (1993, 1994) lyfte fram som ett av den interna sekulariseringens tidiga problem, är att den inte innehåller några kriterier för vad som räknas som sekulärt respektive

I många länder har också ur- sprungsfolken svårt att få laglig rätt till sin traditionella mark och vräks från sin mark och utsätts för hot, trakasserier och till och med

Jobless growth innebär som sagt för det första att det under en definierad tidsperiod sker ekonomisk tillväxt, samt för det andra att denna tillväxt inte leder

Den andra modellen beskriver förhållandet mellan aktiebolaget och dess intressenter när revisorn är bortplockad. Kostnaderna i form av revisionsarvode och arbete med

Även om elevens lösningar på andra problemlösningsuppgifter inte kunde synliggöra alla av Krutetskiis matematiska förmågor som avsågs att synliggöras var elevens

Familjen upplevde att de fick mycket stöd från andra föräldrar i samma situation men att när något av de andra barnen med cancer dog blev det väldigt stressfullt för familjen

Detta är en deskriptiv studie över hur bilismen påverkat den fysiska miljön längst södra älvstranden i Göteborg med stadsmotorleden Oscarsleden som fallstudie. Undersökningen

Det är Eurovision vi pratar om men det är klart att vi genom lokaltidningar kommer att sätta vissa avtryck och berätta om varför vi tycker det är viktigt för Malmö,