TDP005 Projekt: Objektorienterat system

Relevanta dokument
Detaljbeskrivning av Player

TDP005 Projekt: Objektorienterat system

Designspecifikation den 13 december 2007

Space Invaders - Slutrapport

Övningar Dag 2 En första klass

TUTORIAL: KLASSER & OBJEKT

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Lab5 för prgmedcl04 Grafik

Kravspecifikation TDP005 Projekt: Objektorienterat system

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

PROGRAMMERINGSTEKNIK TIN212

Classes och Interfaces, Objects och References, Initialization

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Projektspecifikation

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Space Shooter. Projektrapport i kursen Avancerad C/C++ (DVA303) vid Mälardalens Högskola av Lars Lindqvist och Niklas Nolte

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Objektorientering i liten skala

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Fyra i rad Javaprojekt inom TDDC32

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Agenda. Objektorienterad programmering Föreläsning 13

Parameteröverföring. Exempel. Exempel. Metodkropp

Introduktion till arv

Programmering. Scratch - grundövningar

Malmö högskola 2007/2008 Teknik och samhälle

TUTORIAL: SAMLING & KONSOLL

Programmering = modellering

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

LÖSNINGSFÖRSLAG TENTAMEN

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Abstrakta datatyper Laboration 2 GruDat, DD1344

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Laboration: Grunderna i MATLAB

Grundläggande programmering med C# 7,5 högskolepoäng

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

TDIU01 (725G67) - Programmering i C++, grundkurs

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TENTAMEN OOP

Objektorientering: Lagring och livstid

TDIU01 Programmering i C++

TDDD78 Objektorientering: Lagring och livstid

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Föreläsning REPETITION & EXTENTA

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

2D1339 Programkonstruktion för F1, ht 2003

Joppes djurfamilj v2. Planering. Genomförande. Utvärdering och dokumentation

Tentamen i Introduktion till programmering

Design av en klass BankAccount som representerar ett bankkonto

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen, Algoritmer och datastrukturer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

DD1311 Programmeringsteknik för S1 Laborationer läsåret

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Sätt att skriva ut binärträd

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Föreläsning 13 Innehåll

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

ID1004 Laboration 4, November 2012

TDDD78 projekt: Tower Defence

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Tentamen FYTA11 Javaprogrammering

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

TDIU01 - Programmering i C++, grundkurs

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Programutveckling för Tekniska Tillämpningar Arbetsblad 5

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund Marcus Widblom Senast ändrad: 13 / 05 / 08

Transkript:

. TDP005 Projekt: Objektorienterat system Designspecifikation Författare, dylma900@student.liu.se, albve061@student.liu.se Höstterminen 2016 Version 0.2 2016-12-16

1 Revisionshistorik Ver. Revisionsbeskrivning Datum 0.1 Första utkast av designspecifikationen 161123 0.2 Designspecifikation efter att ha skrivit klart spelet 161216 2 Detaljbeskrivning av Player Syftet med Playerklassen är att representera den karaktär spelaren styr. Spelarens karaktär styrs av spelarens tangentbordsinmatning. Detta utöver att spelaren kan skjuta projektiler är skillnaden mellan spelar och fiendekaraktären. Player-klassen ärver av Character-klassen som ärver från Object-klassen som i sin tur ärver från Spriteklassen Players konstruktor tar emot 7 parametrar. Första är playerns hastighet i datatypen double, andra är boolesk som anger om spelaren är aktiv eller ej. Den tredje är hur mycket hit_points spelaren skall ha. De fyra sista är x och y koordinater samt bredd och höjd i den ordningen. Samtliga parametrar anropar Characters konstruktor. 2.1 Character Från Character ärver Player följande metoder och variabler: int get_hit_points() const; - En funktion som returnerar karaktärens hit_points void add_hit_points(int const add_amount); - En funktion som ökar karaktärens hit_points, om hit_points blir mer än 100 så sätts den till 100. void take_damage(int const damage); - En funktion som sänker en karaktärs hit_points Direction direction; - En variabel som innehåller den nuvarande karaktärens riktning bool can_move(direction const & direction, Object const & player) const; - En funktion som bestämmer om karaktären kan röra sig om objektet player inte är i vägen. bool can_move(direction const & direction, std::vector<character> const & enemies) const; - En funktion som bestämmer om karaktären kan röra sig beroende på om något objekt i vektorn är i vägen. sf::clock animation_clock; - En variabel som används för att bestämmer längden på intervallet mellan skiftandet av texturer sf::clock attack_clock; - En variabel som används som bestämmer ifall en karaktär kan attackera. int texture_counter; - En räknare som används för att identifiera var på sprite-sheetet den nuvarande texturen är. int hit_points; - En variabel som representerar karaktärens hit_points Syftet med klassen är att ha en klass för alla rörliga karaktärer som har hit_points. Characters konstruktor anropar Objects konstruktor med move_speed variabeln, aktiva boolesken, x och y koordinaterna samt bredden och höjden. I characters egna konstruktor så sätts direction variabeln till 0,0, hit_points sätts till parametern hit_points, texture_counter sätts till 0. Version 0.2 1 / 7

2.2 Object Från Object ärver Player fölande metoder och variabler: bool get_active() const; - En funktion som returnerar huruvida ett objekt är aktivt eller inte bool interesect(object const & object) const; - En funktion som kollar om två olika objekt kolliderar med varandra double get_move_speed() const; - En funktion som returnerar ett objekts move_speed double get_bottom() const; - En funktion som returnerar ett objekts bottom, det vill säga objektets högsta y-koordinat double get_top() const; - En funktion som returnerar ett objekts top, det vill säga objektets lägsta y-koordinat double get_left() const; - En funktion som returnerar ett objekts left, det vill säga objektets lägsta x-koordinat double get_right() const; - En funktion som returnerar ett objekts right, det vill säga objektets högsta x-koordinat void update(); - En funktion som uppdaterar ett objekts positionsvariabler void update_heart(); - En funktion som uppdaterar ett hjärtas positionsvariabler Direction generate_route(object const & p) const; - En funktion som genererar rutten som fiender skall ta för att röra sig mot spelaren bool active; En variabel som representerar huruvida ett objekt är aktiva i spelets värld double move_speed; - En variabel som representerar ett objekts move_speed double bottom; - En variabel som representerar ett objekts bottom-värde, det vill säga objektets högsta y-koordinat double top; - En variabel som representerar ett objekts top-värde, det vill säga objektets lägsta y- koordinat double left; - En variabel som representerar ett objekts left-värde, det vill säga objektets lägsta x- koordinat double right; - En variabel som representerar ett objekts right-värde, det vill säga objektets högsta x-koordinat Syftet med klassen är att ha en klass för alla objekt som kan kollidera med andra objekt. Objekten behöver nödvändigtvis inte ha hit_points som Character-klassen har. Objects konstruktor anropar Sprites konstruktor med x och y koordinaterna samt bredden och höjden. I objects egna sätts move_speed variablen samt active variabeln med parametrarnas värde. Version 0.2 2 / 7

2.3 Sprite Från Sprite ärver Player följande metoder och variabler: sf::sprite object; - En variabel som representerar objektet i spelvärden double x; - En variabel som representerar ett objekts x-koordinat double y; - En variabel som representerar ett objekts y-koordinat int width; - En variabel som representerar ett objekts bredd int height; - En variabel som representerar ett objekts höjd Spriteklassen används till för att samla alla egenskaper alla synliga objekt har på skärmen. Sprites egna konstruktor sätter x och y samt width och height enligt parametrarna. I konstruktorn sätts också spriten object x och y värden med hjälp av sprite funktionen setposition enligt parametrarna. Version 0.2 3 / 7

3 Detaljbeskrivning av MenuState MenuState är den klass som tar hand om alla element när det kommer till att en meny är aktiv. Den tar hand om både start_menu och gameover_menu. Detta fungerar eftersom de två olika menyerna är identiska, det ända som skiljer är den bakgrundsbild som visas och huvudbilden som antingen är en bild med spelnamnet eller en bild som visar att du förlorat spelet. I konstruktorn sätts playing till false då spelet ej är igång. Variabeln animation counter sätts till 0 då första animationen är på position 0 på vår rörliga karaktär vi har i menyerna. Variablen going_right sätts till true då karaktären börjar röra sig höger. Texture_counter sätts till 0 då första texturen är på position 0. 3.1 MenuState MenuState innehåller följande metoder och variabler: virtual int run (sf::renderwindow &app) override; - Huvudloopen som körs när denna klass är aktiv int get_highscore() const; - En funktion som hämtar information från highscore.txt och returnerar den nuvaranda högsta poängen int get_kill_count() const; - En funktion som hämtar information från highscore.txt och returnerar antalet dödade fiender. Denna funktion är skapad och fungerar men är inte implementerad i spelet void animate_character(); - En funktion som styr animeringen av en karaktärer som går fram och tillbaka på menyskärmen. sf::texture play1; - En variabel som innehåller en texturvariant av spelknappen sf::texture play2; - En variabel som innehåller en texturvariant av spelknappen sf::texture quit1; - En variabel som innehåller en texturvariant av knappen som avslutar spelet sf::texture quit2; - En variabel som innehåller en texturvariant av knappen som avslutar spelet sf::texture head_texture; - En variabel som innehåller texturen för menyns huvudbild std::vector<sf::texture> textures; - En vector som innehåller alla karaktärstexturer det vill säga: orc, human, skeleton sf::sprite play_button; - En variabel som representerar spelknappen, det är denna som ritas ut på skärmen sf::sprite quit_button; - En variabel som representerar knappen som avslutar spelet, det är denna som ritas ut på skärmen sf::sprite head_sprite; - En variabel som representerar huvudbilden, det är denna som ritas ut på skärmen sf::sprite character; - En variabel som representerar karaktären som går runt på menyn, det är denna som ritas ut på skärmen sf::text highscore; - En variabel som representerar texten som ritas ut på skärmen som då är högsta poängen int menu 0; - En variabel som håller koll på vilken del av programmet som skall vara aktiv int sprite_counter1; - En variabel som håller koll på x-positionen i den aktuella sprite-sheeten Version 0.2 4 / 7

int sprite_counter2; - En variabel som håller koll på y-positionen i den aktuella sprite-sheeten int texture_counter; - En variabel som håller koll på den nuvarandra positionen i std::vector<sf::texture> textures och ser till så att programmet inte letar efter en textur på en plats i vectorn där det inte finns någon textur bool playing; - En variabel som håller koll på huruvida spelet är aktivt eller inte bool going_right; - En variabel som håller koll på åt vilket håll karaktären på menyskärmen rör sig Direction dir; - En variabel som innehåller karaktärens riktning Den enda lokala variabeln i denna klass och dess huvudfunktion är den karaktären som rör sig runt på skärmen. 3.2 States Från States ärver MenuState följande metoder och variabler: virtual int run (sf::renderwindow &App) = 0; - En virtuell funktion som MenuState skriver över och använder för att köra sin primära menyloop. bool running; - En variabel som representerar huruvida den primära loopen skall vara aktiv eller inte sf::sprite background; - En variabel som innehåller bakgrundsbilden som skall ritas ut på spelskärmen sf::texture background_texture; - En variabel som innehåller texturen som background skall använda sf::font font; - En variabel som representerar den aktuella fonten som skall användas när text skrivs till spelskärmen sf::event event; - En variabel som innehåller och hanterar de olika händelserna som spelet skall utföra sf::texture player_texture; - En variabel som innehåller ett sprite-sheet av en människa, denna används som textur för spelaren sf::texture enemy_texture1; - En variabel som innehåller ett sprite-sheet av en orc, denna används som textur för fiender sf::texture enemy_texture2; - En variabel som innehåller ett sprite-sheet av ett levande skelett, denna används som textur för fiender 4 Beskrivning av designen Vår design bygger på en game klass som har kontroll över 2 spelstadier. Dessa stadier är MenuState och PlayState. Stadierna skapas och läggs i en vektor när game kör sin funktion run. De två olika stadierna ärver av klassen States som innehåller de metoder och attribut som de har gemensamt. Precis som kursens mål så är all kod uppdelad i klasser vilket gör det lättare att hitta och hantera vårt program. Sprite är klassen alla spelobjekt ärver ifrån. Detta ger dem ett antal gemensamma metoder och attribut. Under spriteklassen finns en till abstrakt klass, Object, som innehåller allt ett spelobjekt kan tänkas behöva. Klasserna Heart och Projectile ärver från Objekt. Under Objekt finns ännu en till klass som heter Character. Character är innehåller de metoder och attribut som både Player och Enemy använder. Vår Player och Enemy klass har just nu inga extra metoder eller attribut, det som skullle kunna göras är att dela upp fiendehanteringen i PlayState till Enemy. Version 0.2 5 / 7

En svaghet i designen skulle vara klasserna PlayState och MenuState. Dessa har för mycket ansvar och skulle kunna delas upp för att öka abstraktionen och läsbarheten. En annan svaghet i designen är att varje projektil som skapas innehåller en egen vektor, som inte egentligen används förutom för det första projektilobjektet vi skapar som tar hand och innehåller alla andra projektiler. Detta skulle kunna åtgärdas genom att skapa en vektor i PlayState som innehåller alla projektiler och sedan ha ett projektilobjekt och med hjälp av det kalla på de olika projektilfunktioner och skicka in vektorn som inparameter. 5 Externa filformat De externa filformatet som används i Box Wars är en oformaterad textfil(.txt). Denna sparar dels högsta vågen som har nåtts och antalet fiender som har dödats under det aktuella spelets gång. Notera att antalet döda fiender sparas men används inte i spelets aktuella form, detta då vi kände att det blev förvirrande att både presentera högsta vågen spelaren nått och antalet fiender som dödats. Dessa två värden separeras med ett tecken. Hämtningen av värdena görs med hjälp av formaterad inläsning. Konsekvensen av att använda sig av en sådan simpel struktur blir att användaren lätt kan ändra de värden som ligger inne i textfilen och få det att se ut som att hen klarat sig längre än vad hen egentligen gjort. Inmatningen till textfilen är dock uppbyggd på ett sådant sätt så att om användaren antingen förstör eller ändrar filen så att det inte ser ut som den borde göra så kommer spelet automatiskt rätta till filen nästa gång spelet körs. Något man skulle kunna implementera för att uppgradera denna struktur skulle kunna vara att man gömmer högsta poängen och dess värde i en stor textfil som innehåller en mängd olika karaktärer men att man själv implementerar ett sätt för programmet att hämta det rätta värdet. På detta sätt skulle inte spelaren kunna hitta det rätta värdet och fuska sig fram till en bra högsta poäng. Version 0.2 6 / 7

Figur 1: UML-Diagram på designen Version 0.2 7 / 7