Vecka sex: Highscore

Denna vecka har jag arbetat med vårt highscore system. Vad jag har gjort är att visa upp för spelaren de topp fem spelarnas poäng och namn. Detta har då gjorts med hjälp utav en textfil.

textfil
Textfilen

Jag började det hela med att skapa en textfil som innehåller namn samt poäng. Denna fil är då tänkt att innehålla all data som är för highscore. Så först har vi en Highscore state klass som spelaren kommer till om hen vill se de fem bästa spelarna som har spelat spelet. I dess Enter funktion  öppnar den en text fil och börjar läsa den. I en loop börjas det att läsas poäng samt namn, som läggs in i en varsin lista för respektive datatyp. Efter att all data har blivit läst ifrån textfilen så stängs den, och programmet går till uppdatering samt ritnings funktionerna. I uppdaterings funktionen händer det inget mycket, den väntar bara på att spelaren trycker på mellanslagsknappen för att komma till Menu state. Det är dock i ritningsfunktionen som det mesta händer i. Att skriva ut namnen är inget svårt, medans att skriva ut poängen är lite svårare, detta på grund av att poängen är floats medan namnen är av datatypen string. Det är så att när vi skriver ut täcken på skärmen så använder vi oss utav sfml:s klass Text, och den tar bara emot char eller strings. Så för att kunna mata ut våra poäng så måste vi göra om dem ifrån floats till strings utan att byta ut siffrorna till andra tecken. Detta görs genom att skicka in poängen först till en stringstream och sedan använda funktionen ‘str’ innan dem blir strings.

highscore
Highscore

Något som jag fick problem med var att de sista poängen som skrevs ut blev väldigt höga. Detta var på grund av att alla poäng hade lagts på varandra, vill säga att den med högst poäng hade 1000 poäng och tvåan hade 1000900 fast hen skulle egentligen  bara ha 900 poäng. Detta var för att stringstreamen krånglade, och det fixades genom att skapa den inne i loopen som ritar ut poängen istället för att skapa den utanför. Detta leder till att den skapas varje gång loopen loopas igenom, vilket innebär att den kan omöjligt veta de andra poängen. Det fanns ett annat sätt som dem berättade på webbsidan www.stackoverflow.com som går ut på att man använder funktionen ‘str’ och skriver in i parentesen std::string(). Jag vet dock ej om detta fungerar, då jag använde den nuvarande lösningen innan jag fick reda på den lösning, men lämnar den till de som läser utifall om våran lösning inte kan hjälpa dem.

Annonser
Vecka sex: Highscore

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Google+-foto

Du kommenterar med ditt Google+-konto. Logga ut /  Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s