Det er mange som samler på forskjellige ting der ute. Selv har jeg en ganske stor samling med rare brettspillregler. Mer spesifikt en samling av regler som beskriver hvilken spiller som skal få starte spillet. Denne samlingen har etter hvert gitt meg to hobbyprosjekter: En nettside og en Android-app.
Dette er historien om hvorfor i all verden jeg har samlet på dette, hva det er jeg har laget, og hvordan det har blitt mottatt av andre brettspillnerder der ute.
De fleste brettspillregler er relativt seriøse, i den forstand at det er viktig at de følges når man skal spille spillet de tilhører. Men én type regel skiller seg gjerne fra dette. Det er en regel som går igjen i veldig mange spill, og som ofte er lekent og humoristisk utformet: Regelen som forteller hvem som får lov å starte spillet.
Ta for eksempel er denne, hentet fra spillet Streets:
The person who has the most “hipster cred” is the First Player!
Eller denne enda mer fargerike varianten fra The Bridges of Shangri-La:
The player who last reached the peak of Mount Everest using nothing but blue and white checkered stilts carved from the wood of a Mammoth tree begins. In case of a tie, choose the wisest player of the group.
Jeg har lenge vært glad i å spille brettspill, og opp igjennom årene har jeg bladd i ganske mange forskjellige regelbøker. Og på et punkt begynte jeg å notere ned noen av disse morsomme reglene når jeg kom over dem.
Den fulle samlingen kan du nå finne på nettsiden firstplayer.fun. Les videre for å få vite litt mer om hvorfor og hvordan jeg endte opp med å lage denne.
App og nettside: To løsninger som trengte problemer
For et par år siden hadde jeg bestemt meg for at jeg ville lære litt om utvikling av mobilapplikasjoner, og hadde meldt meg inn i faggruppen for dette i Bekk. Sammen med fagleder kom jeg frem til at jeg skulle skrive en native Android app for å lære mest mulig om den platformen. Jeg trengte et tema for appen, og kom på den begynnende samlingen med brettspillregler.
Senere deltok jeg i faggruppen for webutvikling. Selv om jeg hadde vært borti frontend-oppgaver på prosjekt fra tid til annen, og hadde en del erfaring med Elm, så hadde jeg lite kjennskap til moderne webutvikling i JavaScript. Planen var å endelig lære meg React ordentlig. Jeg lærer best ved å lage noe, og igjen kom jeg på samlingen med regler.
Den resulterende appen er nå tilgjengelig i Google Play Store, og nettsiden ligger som nevnt på firstplayer.fun.
Hvilket problem forsøker dette å løse?
Mye av motivasjonen for å lage både appen og nettsiden (foruten å lære ny teknologi) var nok å dele denne rare samlingen med omverden, i håp om at det var andre der ute som også ville sette pris på noe så esoterisk.
Men det var også én spesifikk funksjon jeg tenkte kunne være nyttig for mange: Muligheten til å få servert en tilfeldig start-regel.
Grunnen til at mange ignorerer disse reglene når det skal spilles er at de ofte er ganske statiske i natur, altså at de gjerne velger den samme spilleren hver gang. De fleste løser dette ved å plukke en tilfeldig spiller, gjerne ved hjelp av apper som Chwasi eller liknende. Men hvorfor ikke gjøre prosessen litt morsommere ved å la en tilfeldig regel fra et faktisk brettspill avgjøre i stedet?
Tekniske detaljer
Android-appen har jeg skrevet i Kotlin, med rammeverket Jetpack Compose som er den nye måten å lage native apper på Android. Etter å først ha laget en "hello world"-app på den gamle måten, så må jeg si at Jetpack Compose var mye mer behagelig å jobbe med. Visningskoden skrives på en deklarativ måte, enveis dataflyt gjør at tilstand er langt enklere å forholde seg til, og en slipper tonnevis med XML.
Nettsiden er basert på React, og skrevet i TypeScript. Jeg tok utgangspunkt i react-ts
-malen til vite.js, som gav et veldig fint startpunkt og gjorde det raskt å komme i gang. Etter hvert trakk jeg også inn react-router
for å få til navigasjon på siden, og fuse.js for å få til et veldig enkelt søk i regelsamlingen, men klarte meg ellers uten andre avhengigheter. Jeg valgte også å trekke inn hele regelsamlingen i selve nettsiden, slik at jeg slapp å bygge noen backend, og alt er enkelt servert som statiske filer fra S3 hos AWS.
Felles for både app og nettside er at de henter data fra en gigantisk JSON-fil med alle reglene jeg har samlet. Til dette har jeg laget meg litt verktøystøtte i form av noen Python-scripts. Disse tar det jeg selv har skrevet inn — hovedsaklig selve regelteksten, navnet på spillet, samt en referanse til BoardGameGeek.com (BGG) — og spytter ut en større fil der det er generert ID-er og hentet en del mer info om spillet fra BGG sitt API.
Mottagelsen
Jeg nevnte appen i en tråd på Reddit da den var ferdig, og har selv postet på BGG for å bleste om prosjektet. I begge tilfeller var responsen over all forventning. Appen har til dags dato blitt installert 1922 ganger, og nettsiden har i skrivende stund den siste måneden hatt ca 2600 sidevisninger. Veldig bra for noe jeg primært laget for å lære meg nye teknologier, og som har en veldig smal målgruppe.
Den morsomste konsekvensen av å ha laget dette er at jeg nå stadig får eposter fra engasjerte brukere som tipser om nye regler som burde legges til i samlingen. Enkelte går så langt at de har saumfart alle spillene de har i hylla på jakt etter flere regler, og sender meg bilder fra aktuelle regelbøker!
Hva har jeg lært?
Jeg har lært mye av å holde på med disse prosjektene, men for å nevne det viktigste:
- Jeg har lært mye om hvordan mobilapper på Android fungerer og lages. Dette var en platform jeg aldri hadde vært borti tidligere.
- Jeg har fått kjenne på at moderne rammeverk som Jetpack Compose er utrolig mye mer behagelig å jobbe med sammenliknet med å gjøre det på "gamlemåten".
- Jeg har fått en god forståelse av grunnleggende React og hvordan ting gjøres i moderne webutvikling med JavaScript.
- Og jeg har erfart at å ta seg tid til skisser og konseptualisering i Figma sparer mye tid og krefter sammenliknet med å bare sette i gang med å kode på det første som faller inn i hodet.
Og ikke minst har jeg oppdaget at det er flere der ute som er veldig entusiastiske for noe så smalt som tøysete brettspillregler!