Enum states

Hejsan! I dagens blogginlägg tänkte jag att jag skulle skriva om mitt arbete i gruppen under vecka tre. Min uppgift var att skapa en meny för spelet. Vad vi behövde för menyn var en ”play-knapp”, ”option-knapp” och en ”quit-knapp”. Men problemet här var att vi inte hade några ”states” som spelet kunde vandra mellan.”states” kan man säga är ett typ av stadium i ett spel t.ex. ”menustate” där spelets meny håller till eller ”gamestate” där spelet ”spelas” ut i. Så min uppgift blev istället att göra olika ”states” för spelet och en ”state hanterare” som tar in och byter mellan de olika ”statesen”. Men det stora problemet här var att jag hade väldigt lite kunskap om ”state hanterare” och om hur olika ”states” ska fungerar med varandra. Det var inte bara jag som hade lite kunskap om det men också de andra två programmerarna i gruppen. Så vi fick tips på att försöka göra det enkelt för oss genom använda ”enums ” istället, vilket gjorde det lättare.

Enum är en förkortning av ordet enumerering. Meningen med Enum är att skapa en eller flera variabler som innehåller fasta värden. Dessa grupperas och kan sedan anropas med ett namn istället för ett värde. ” (Johansson , Pelle.2002. ENUM- vad är det och vad används det till?http://www.pellesoft.se/article/323/enum—vad-ar-det-och-vad-anvands-det-till- (Hämtad 20016-02-25)).

Jag hade fortfarande lite problem med hur man skulle få allt att fungera med ”enum” så jag tog väldigt mycket hjälp från gruppens andra programmerare, Mathias. Så hur vi gjorde då var att skapa ”enum states” i huvudfilen, vi gjorde åtta olika ”states”. Första ”state” var en startbild som sedan ska gå över till en huvudmeny ”states” där man ska kunna välja mellan tre ytterligare ”states”. Spela ”state” som startar själva spelet sedan en kontroll ”state” som ska visa hur man styr i spelet, sista ”state” i huvudmenyn var en avsluts ”state” som ska avsluta spelet. Det finns också två ytterligare ”states” i spela ”state” som är en paus ”state” som pausar spelet och en förlorar ”state” som ska visa en ”gameover” bild när man förlorar.

enum Status { STARTSCREEN, MAINMENU, PLAY, OPTIONS, PAUSED, QUIT, CONTROLS, ENDSCREEN };

Efter det här var det mestadels bara att lägga in alla funktioner och allt annan kod under rätt ”state”. Varför vi valde att göra ”enum states” var p.g.a. att det var det enklaste sättet att göra de olika stadierna för spelet, inom vår grupps kunskapsnivå. Eftersom nu kunde vi bara köra allt i en huvudfil istället för att ha flera olika filer som ska styras med en ”state hanterare” som kan krångla till det. Det dåliga med ”enum states” är att det blir väldigt mycket kod i en fil och det gör att det blir väldigt grötigt och svårt att hitta den koden du är ute efter. Så ett tips till personer som ska använda ”enum states” gör kommentarer i koden, tydliga kommentarer det gör att det blir lättare att söka på koden du är ute efter och slipper slösa massa tid på att leta kod.blogginlägg

Hitbox

Hejsan! I dagens blogginlägg tänkte jag skriva om hur jag gjorde för att skapa fiendernas och projektilernas ”hitbox” att fungera att kollidera med varandra. I vårat spelet så existerar det fiender med mål att röra sig ner mot avataren för att sedan skada den, spelaren ska då med hjälp av avataren skjuta ner fienderna med projektiler som avataren skjuter. En ”hitbox” är en form som användas för att kolla kollisionen mellan olika objekt. Så det jag gjorde var att göra passande rektanglar för fienderna och projektiler, för fienderna var det 45 pixlar bred och 22 pixlar hög, projektiler var det 20 pixlar bred och 60 pixlar hög. Det viktiga att göra här att man speltestar för att se vad som är en lämpligt ”hitbox” storlek på fienderna och projektilerna. Vi vill inte att det ska bli för svårt för spelaren att pricka fienderna med projektilerna därför får inte ”hitboxen” på fienderna vara allt för små eller på projektilen. ”Hitboxen” får heller inte vara för stor, först för att det blir för enkelt att träffa fienderna i och med det kommer inte spelet bli utmanande för spelaren.

Vad jag gör sen när fiendernas och projektilernas ”hitboxes” träffar varandra är att jag raderar båda objekten, alltså både bilden av objektet och ”hitboxen”. Varför jag gör det är p.g.a. ifall jag inte raderar bort objektets bild och ”hitboxes” så kommer det sväva runt massa onödigt minne från varje objekt i spelet som kommer göra att spelet saktas ner och tills slut kommer spelet krascha p.g.a. allt överflödigt minne som inte raderas bort. För att göra det så använder jag mig utav en funktion som gör att så fort en fiende och projektils ”hitboxes” träffar den ena eller den andra så raderas bort deras bild och ”hitbox”. Ifall man skulle vilja ha fiender med mer liv t.ex. någon bossfiende som kommer ner ibland som tar 5 projektiler att döda. För att göra det så behöver jag börja med att sätta ett värde på bossfienden, då sätter jag ett värde på 5. Sedan behöver jag sätta ett värde på projektilen på hur mycket projektilen ska skada, i detta fall är det 1. Jag sätter en ny funktion där ifall en projektilen interagerar med en fiende så förlora fienden 1 värde på livet. Denna funktion händer varje gång en projektil interagerar med en fiende till värdes livet på fienden når noll. När en fienders liv når noll så utför en ny funktion som raderar bort både bilden och ”hitboxen” för just den fiende som når noll. I GIF:en under kan man se hur projektilerna interagerar med fienderna.

 

RandomGenerator

Hejsan! Mitt namn är Stam, jag ingår i grupp 1 som gör sin variation av konceptetet Planet Suburbia. En av de uppgifterna jag hade att jobba med första veckan var att programmera fiendernas skapelseplats. Fienderna är rymdskepp som rör sig uppifrån och ner, fienderna ska alltid börja längst upp på skärmen men de ska ha en slumpmässig skapelseplats vågrätt längst skärmen. För att lycka med det här så behövde jag skapa en slumpgenerator. Jag visste inte riktigt exakt hur jag skulle gå till väg i början men stötte på en väldigt bra youtube kanal (https://www.youtube.com/user/BlueVideoGame) om spelkodning, där jag refererar de mesta av min slumpgenerators kod .

De visade sig att c++ har en include fil( <cstdlib> )som har en funktion som heter rand() som ger ut en slumpmässigt nummer. Jag börjar med att göra en random.h fil där jag deklarerar int generateRandom variabeln samtidigt som jag deklarerar ett int max värde i generateRandom för att sedan kunna använda int max värdet i generateRandom funktion som sedan kommer ingå i random.cpp filen.

int generateRandom(int max);”

Jag gör en header file för slumpgeneratorn därför att jag tycker personligen att det blir lättare att kunna komma åt funktionen från andra filer och även lättare att återanvända funktionen. Efter det gör jag en random.cpp file som kommer innehålla slump funktionen.

int generateRandom(int max)

{

int randomNumber = rand();

float random = (randomNumber % max)+1;

return random;

}

I random.cpp börjar jag med att deklarera funktionen rand() som en int randomNumber detta gör jag mest för att göra det lättare för mig själv att komma ihåg vad rand() gör. Efter det deklarerade jag en float random med ett värde (randomNumber % max) +1. Vad som händer här är att randomNumber kommer först ge ut ett slumpmässigt värde eftersom jag deklarerade randomNumber lika med rand() efter det kommer modulus operatorn att dividera det värdet med max och lämna kvar vad som blir över efter dividerandet t.ex.

5/2 = 2.5 men om man kör det i en modulus så går värdet 2, två hela gånger i värdet 5 men då återstår värdet 1, 5%2 = 1.

Efter att modulus har gjort sitt kommer det värdet som återstår att adderas på med värdet 1, att addera slutgiltiga värdet med värdet 1 är egentligen helt onödigt men vad det gör att att det slutgiltiga värdet kommer att vara 1 värde större. Varför jag använder av int max när jag hanterade modulus i funktionen är p.g.a. att ifall jag skulle sätta ett fast värde som t.ex. 1, 5 eller 6 så kommer jag bara kunna få ett begränsat antal utfall som ”slumpas” därför används int max värde för att kunna få ett ”obegränsat” antal utfall i funktionen. Vad detta kommer göra angående spelupplevelsen är att fienderna kommer inte skapas på samma plats, flera utfall desto fler olika platser kan fienderna skapas på.

Första bilden ni ser är när jag använder mig av int max i funktionen andra bilden använder jag mig av ett fast värde som 6 i funktionen.