2017InfB34 Sense Hat Snake

From rtgkomArkiv
Jump to: navigation, search

Elever: Mads Funch, Martin Pinholt, Christian Fuglsang, Erik Vangslev

Lærer: Karl Bjarnason

Fag: It B

Klasse: 3.4

Skole: HTX Roskilde



Introduktion[edit]

Lige siden de tidlige computere, har der været spil. Computerspillene har gennemgået en kæmpe udvikling over de sidste 25 år. En stor del af denne udvikling skyldes, at computerne er blevet mere kraftfulde og billigere.

https://intelligence.org/wp-content/uploads/2014/03/Fuller-Millett-figure-1.png

Udviklingen har ført til at spiludvikling den dag idag handler om at lave 3d spil, der kan udfordre de nye computers ydeevne og de forbedret internetforbindelser. Men i det nylige kapløb, er en del af det som gjorde spillene specielle gået tabt. Mange af de nye titler fejler i at fange brugerne, og dette skyldes ofte en stejl læringskurve, eller bare manglende interesse på grund af andre mere interessante spil.

Vi har derfor tænkt os at lave snake på en sense hat til en raspberry pi, for genoplive de gamle spil på en lidt nytænkende måde.


Snake spillet[edit]

Det program, som vi har valgt at kode og afprøve på vores raspberry pi, er et spil ved navn “Snake”. Snake-spillets koncept stammer helt tilbage til 1976, hvor det var muligt at spille et spil ved navn “Blockade” på arkademaskiner, som havde lignende træk til spillet ved navn “Snake” publiceret af Nokia. Vores snake-spil er primært baseret på telefonspillet med navnet Snake. Spillet var forudinstalleret på Nokias mobiltelefoner fra 1998, hvor det skabte enorm interesse og omtale.

Selve spillet går ud på at bevæge en såkaldt “slange” hen imod noget mad. Efter at spilleren har “spist” denne mad, bliver spillerens længde større (længdeforlængelsen svarer til madens størrelse). Målet i spillet er derfor at spise mest muligt mad, og derved blive så lang som muligt, hvor man samtidig opnår en større score. Dog bliver spillet dermed også sværre og sværre, nu mere mad man spiser, da spillet slutter når man enten støder mod en af banens kanter, eller at man bevæger sin slange ind i sig selv, som længere inde i spillet bliver sværere og sværer ikke at gøre, på grund af slangens større længde.

Vores udgave[edit]

I vores udgave af snake-spillet, har vi valgt at give spillet et tvist, i form af at selve spillet foregår på en sense hat (som vi har forklaret i et separat afsnit). Har bevæger spilleren sig rundt på en led-skærm, hvor slangen ses i form af en limegrøn led, mens at maden ses som en rød led. Samtidig anvender vi ikke tastatur og mus til styringen af spilleren, men i stedet det indbygget joystik på sense hatten, som gør spillet mere interaktivt og giver samtidig et anderledes twist til et velkendt og gammelt spil.

Raspberry pi specifikationer[edit]

Den anvendte raspberry pi, er en raspberry pi 2b. Denne raspberry pi har følgende specifikationer:

- SoC: Broadcom BCM2836 (CPU, GPU, DSP, SDRAM)

- CPU: 900 MHz quad-core ARM Cortex A7

- GPU: Broadcom VideoCore IV @ 250 MHz

- Memory: 1 GB (bliver delt med GPU’en)

- USB porte: 4

- Video input: 15-pin MIPI camera interface (CSI) connector

- Video outputs: HDMI, composite video (PAL and NTSC) via 3.5 mm jack

- Audio input: I²S

- Audio outputs: Analog via 3.5 mm jack; digital via HDMI and I²S

- Storage: MicroSD

- Network: 10/100Mbps Ethernet

- Peripherals: 17 GPIO plus specific functions, and HAT ID bus

- Power rating: 800 mA (4.0 W)

- Strømforsyning: 5 V via MicroUSB or GPIO header

- Dimensioner: 85.60mm × 56.5mm

- Vægt: 45g

https://www.raspberrypi.org/app/uploads/2017/05/Raspberry-Pi-Model-B-462x322.jpg

Billedet viser en Raspberry Pi 2b magen til den vi selv har anvendt

Sense hat specifikationer[edit]

Den anvendte sense hat, har følgende specifikationer:

- Gyroskop

- Accelerometer

- Magnetometer

- Barometer

- Temperaturmåler

- Fugtighedsmåler

- 8 x 8 LED matrix

- Joystick med 5 knapper (op, ned, højre, venstre og museklik)

https://images-na.ssl-images-amazon.com/images/I/51K53jwHU0L._SX355_.jpg

Billedet ovenfor viser en sense hat magen til den vi har anvendt

Opsætning af Raspberry Pi[edit]

For at få startet raspberry pi’en, skulle vi første installere et operativsystem. Dette gjorde vi ved at følge instrukserne på raspberry pi’s egen hjemmeside: www.raspberrypi.org. Her gik vi ind på menusiden “downloads”, og valgte operativsystemet “Raspbian”. Dette operativsystem downloadede vi ned på et microSD-kort ved brug af en SD-adapter fra SD-kort til microSD-kort. Herefter satte vi raspberry pi’en til en computerskærm og forbandt både mus og tastatur. Det var her vi begyndte at opsætte sense hatten (ved at forbinde denne), og begynde kodningen, som er forklaret nedenfor.

Dokumentation[edit]

Udviklingsmetode[edit]

Til at opsætte raspberry pi’en og programmere selve spillet “Snake på sense hat”, arbejdede vi med en programmeringsmetode, der oftest kaldes “pair programming”. Denne arbejdsmetode tager udgangspunkt i at en gruppe på to eller flere, i vores tilfælde fire personer, arbejder sammen med kodningen af et program på en computer, hvor alle i gruppen kan skiftes mellem at kode og “overvåge” de andres kode. Det er i denne process, at pair programming især har sin fordel, over almen enkeltvis kodning, da hver person i gruppen let kan komme med forslag til ændringer eller forslag til andre løsningsmetoder. Det er samtidig også i denne del af processen i pair programming, at de andre personer kan overtage tastaturet og straks begynde at kode. Dette kan eksempelvis ske hvis de har en bedre ide til programmet, eller hvis den tidligere person ved tastaturet går i stå.

Personen der sidder ved computeren med tastaturet og aktivt koder kaldes “driver”, mens at personerne der reviewer/overvåger koden der bliver skrevet, kaldes enten “observer” eller “navigator”.


Fordele ved pair programming[edit]

Den største fordel ved pair programming, er at en større gruppe aktivt kan blive inddraget og hjælpe med at udvikle et program på samme tid. Denne fordel er især væsentlig i større projekter, som eksempelvis vores, hvor det vil være besværligt for eksempelvis alle fire personer i gruppen at kode dele af snake-programmet, da størstedelen af koden er afhængig af hinanden. Dog har vi i udviklingsarbejdet kodet på flere computere samtidig, hvor vi arbejdede med de dele af koden, som ikke var nødvendigt at kode på samme computer, da disse dele var uafhængige af selve snake-programmet. Disse dele er eksempelvis startskærmen og slutskærmen (game over / win). Andre af de største fordele ved pair programming, er effektivitet og få fejl i koden. Dette skyldes at flere personer hele tiden verificerer koden og chancen for at opdage fejl eller uoptimale løsningsstrategier, er dermed meget større end ved traditionel programmering, hvor det først er langt senere i kodningsarbejdet, at man opdager fejl, eller finder andre måder at løse et problem på.

Koncept[edit]

For at kunne implementere på en Raspberry Pi, er det ikke explicit nødvendigt at kende til specifikationerne, men det kan blive nødvendigt, hvis der er brug for optimering senere. Det er dog nødvendigt at kende til udviklingsplatformen på Raspberry Pi, som hovedsageligt er Python. Python er et “interpreted language” (kan også kompileres), hvor man hurtigt kan importere moduler samt programmere diverse programmer.

Vores “Snake spillet”, som er implementeret i Python, består af flere moduler, som tilsammen kører vores spil. Følgende figur viser strukturen af de moduler, som spillet er bygget op af:

[http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-0.jpg

SenseHat er det generelle modul, som bruges til at tale med det fysiske modul til vores Raspberry Pi. Her kan man få input fra brugeren samt output vha. den 8x8 RGB Led Matrix, som er indbygget.

App er et modul, som vi har skrevet. Her håndteres alt der har med tid at gøre, samt Hardware kommunikation. Med håndtering af tid menes der håndtering af “ticks per second” samt “frames per second”.

SnakeWorld håndterer selve spillet og dets stadie (om man har tabt eller vundet etc.). Det er her, hvor der tilføjes Entities (spilleren, haler og mad), som hvert eneste tick bliver opdateret. Det er også her, hvor alt bliver vist på skærmen vha. App modulet. Constants definerer generelle konstanter, som bruges i hele programmet. For eksempel er det her, hvor farven på spilleren og maden er defineret, samt hvor mange ticks per sekund spillet skal køre med.

Entity er et objekt på skærmen, som hvert tick skal opdateres. I spil generelt bliver Entities brugt til alt fra particles, spillere og fjender. Med andre ord bruges Entities til alt, som har med en bevægelse at gøre.

SnakePlayer sørger for alt der har med brugerinput samt håndtering af spillerens position på skærmen at gøre. Når spilleren har bevæget sig, håndteres kollision.


Ud fra disse elementer og generelle teknikker kører spillet på vores Raspberry Pi uden problemer.

Instruktion[edit]

Spillet starter ud med at man er i midten og går mod bunden. ved brug af joysicket, kan snakens retning ændres.

http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-1.jpg

Hver gang man samler en mad op (rød pixel), bliver man en længere

http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-2.jpg

http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-3.jpg

http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-4.jpg

Man taber hvis man rammer en af kanterne eller sig selv. Spillet slutter af med at man bliver mødt med en rød skærm som signalere at spillet er slut:

http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-5.jpg

Hvis det lykkes at fylde hele skærmen ud, så har man vundet og bliver præsenteret med en grøn skærm som signalere at man har vundet.

http://www.rtgkom.dk/~martinp15/Snake_sense_hat/snake-6.jpg

Konklusion[edit]

Samlet set har vi fået programmeret og testet vores spil “Snake på Raspberry Pi”. Hermed har vi opnået at genoplive et klassiske spil fra den tid, hvor spillede handlede om mere end bare grafik. Vi har samtidig opnået at bruge sense hatten til at gøre spillet mere interaktivt og intuitivt at spille, end hvad typiske computerspil tillader. Derudover har vi fået erfaring med at opsætte og arbejde med en raspberry pi, samt fået indblik i en del af dennes muligheder for at arbejde med it-relateret problemstillinger.

Kildeliste[edit]

Graf over computer styrke: https://intelligence.org/2014/05/12/exponential-and-non-exponential/

Teknisk tegning: https://www.quora.com/What-are-the-exact-dimensions-of-the-Raspberry-Pi-2-Model-B

Specifikationer til raspberry pi: https://arstechnica.com/information-technology/2015/02/raspberry-pi-2-arrives-with-quad-core-cpu-1gb-ram-same-35-price/

https://www.raspberrypi.org/products/raspberry-pi-2-model-b/

Specifikationer til sense hat: http://www.farnell.com/datasheets/1958037.pdf