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

Relevanta dokument
TDP005. Föreläsning 3 - UML. Filip Strömbäck

Detaljbeskrivning av Player

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 9 Erik Nilsson, Institutionen för Datavetenskap, LiU

Arv. Objektorienterad och komponentbaserad programmering

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

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

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad konstruktion

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

F4. programmeringsteknik och 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.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 9 Erik Nilsson, Institutionen för Datavetenskap, LiU

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Inkapsling (encapsulation)

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Dugga i Grundläggande programmering STS, åk

Relationer mellan objekt

Programmering B med Visual C

Laboration 1 - Grunderna för OOP i Java

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Konstruktion av klasser med klasser

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

TDDC76 - Programmering och Datastrukturer

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

OOP Objekt-orienterad programmering

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

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

TDIU01 Programmering i C++

Programmering A. Johan Eliasson

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

Objektorientering i liten skala

TDDE10 TDDE11, 725G91/2. Objektorienterad programmering i Java, Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC76 Programmering och datastrukturer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Objektorienterad Programmering (TDDC77)

Programmering för språkteknologer II, HT2014. Rum

Programmering för språkteknologer II, HT2011. Rum

Introduktion till Git

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 15: Repetition DVGA02

Föreläsning 5-6 Innehåll

Praktikum i programmering

TDDC76 - Programmering och Datastrukturer

TDP005 Projekt: Objektorienterat system

OOP Tenta

Objektorienterad analys och design

Objektorienterad Programmering (TDDC77)

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

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Presentation av trafiksimuleringsprojektet

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tommy Färnqvist, IDA, Linköpings universitet

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Polymorfi. Objektorienterad och komponentbaserad programmering

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Tentamen i Objektorienterad modellering och diskreta strukturer

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

OOP Objekt-orienterad programmering

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Lösningsförslag till tentamen

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

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

Den som bara har en hammare tror att alla problem är spikar

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

TDDC77 Objektorienterad Programmering

Objektorienterad Programmering (TDDC77)

Transkript:

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

1 Projektkrav 2 Projektplannering 3 Spelutveckling

1 Projektkrav 2 Projektplannering 3 Spelutveckling

3 / 26 Upplägg Spåna projektidé Planering Koda på! 23/4 23/5 25/4 Bilda Grupp 4/5 git kontroll 1/5 Lämna in kort beskrivning 11/5 git kontroll 9/5 Lämna in statusrapport 18/5 git kontroll 22/5 Redovisning

4 / 26 Projektbeskrivning Vad går projektet ut på? Fokus i kursen är på programmering Vad ni gör för projekt är helt upp till er...... men diskutera er projektidé med er handledare Projektet ska vara objektorienterat Tillståndet i ert projekt ska vara uppbyggt från en extern resurs Kraven är designade med spel i åtanke, men vi är öppna för alla typ av projekt!

1 Projektkrav 2 Projektplannering 3 Spelutveckling

6 / 26 Projektplannering Objektorienteradanalys (OOA) Viktiga frågor man måste besvara innan man kan börja programmera: Vilka klasser ska finnas i vårt projekt? Vad ska dessa klasser ha för ansvar? Vilka funktioner ska finnas i varje klass? Att svara på dessa frågor är svårt...

7 / 26 Projektplannering Objektorienteradanalys (OOA) Verktyg för att förenkla planeringen: CRC-kort Klassdiagram Kallas objektorienteradanalys (OOA).

8 / 26 Projektplannering CRC-kort Klassnamn Ansvar Kollaboratörer Står för class-responsibility-collaboration, ett CRC-kort för varje klass, Skriv alla ansvar klassen har i vänstra kolumnen, Högra kolumnen innehåller alla kollaboratörer. Tips: leta efter substantiv i er projektbeskrivning!

9 / 26 Projektplannering CRC-kort - Exempel Visa tiden Ändra tiden Byta batteri Klocka LCD-display LCD-display, knappar Batteri Bil Svänga Ratt, Hjul Accelerera Pedaler, Motor Håll passagerare Personer

10 / 26 Projektplannering UML Vad är ett klassdiagram? Visuell representation av projektets design, Oberoende av programmeringsspråk, Standardiserat sätt att kommunicera idéer på, Innehåller; Alla klasser, Vilka medlemmar varje klass har, Vilka relationer som finns mellan klasserna

11 / 26 Projektplannering Klassdiagram - klasser Hur representeras en klass? - hours : int - minutes : int Display + sethours(hours : int) : void + setminutes(minutes : int) : void + public # protected - private

12 / 26 Projektplannering Klassdiagram Watch - time : int Button + ispressed() : bool Display - hours : int - minutes : int + sethours() : void + setminutes() : void Battery - charge : float + islow() : bool

13 / 26 Projektplannering Klassdiagram - relationer Olika typer av relationer mellan klasser: Arv arv mellan klasser B är en A Komposition delad livslängd A består av B mellan klasser Aggregation en klass refererar till A har en B en annan Association en klass använder sig av en annan A använder B

14 / 26 Projektplannering Klassdiagram - relationer A C E G 1 1 B 1..* D 0..* F H B är en A (arv) C består av minst en D (komposition) E har noll eller fler F (aggregation) G använder sig av H (association)

15 / 26 Projektplannering Mer om detta kommer på lektionen!

1 Projektkrav 2 Projektplannering 3 Spelutveckling

17 / 26 Spelutveckling Hur utvecklar man ett spel? Hittills har era labbar gått ut på att göra terminalbaserade program som utför en uppgift och sedan avslutar. Spel fungerar väldigt annorlunda från sådana program och kräver lite annat tänk. Ett spel måste göra 3 saker upprepade gånger; Hantera mus och tangentbord Uppdatera all logik i spelet Rita ut alla objekt på skärmen

18 / 26 Spelutveckling Main-loop För att utföra dessa operationer gör vi en loop: int main () { while (running) { handle_input (); update_logic (); render (); throttle (); } } Mer om hur dessa funktioner kan tänkas fungera på nästa föreläsning.

19 / 26 Spelutveckling Hur kan vi byta mellan olika tillstånd? Den enklaste metoden: int main () { int state = 0; while (running) { if ( state == 0) handle_menu (); else if ( state == 1) handle_game (); else if ( state == 2) handle_pause (); else running = false; throttle (); } } Detta går att göra mycket bättre...

20 / 26 Spelutveckling Ett mer skalbart alternativ State Tillståndsmaskin Main-loop Menu + handle () : void + update () : void + render () : void Game Pause MenuState GameState PauseState + handle () : void + update () : void + render () : void + handle () : void + update () : void + render () : void + handle () : void + update () : void + render () : void

21 / 26 Spelutveckling En tillståndsmaskin Hur används den? int main () { State * state; while (running) { state ->handle (); state ->update (); state ->render (); throttle (); } } int main () { } while (running) { handle_input (); update_logic (); render (); throttle (); } Detta är väldigt likt hur det såg ut från början!

22 / 26 Spelutveckling Men hur byter man tillstånd? Det finns många sätt. Gör det som passar ert projekt bäst! Exempel finns här: https://gitlab.ida.liu.se/tddi82/game_skeleton.git

23 / 26 Spelutveckling Resurshantering Spel består ofta av externa resurser t.ex. bilder och ljud, dessa resurser finns sparade på hårddisken, för att kunna använda dem måste vi ladda in resurserna i RAM-minnet, vi vill undvika att ladda in samma fil flera gånger.

24 / 26 Spelutveckling Resurshantering template <typename T> class Manager { static map <string, T> resources; public: static T& load( string const& file) { auto it { resources. find( file) }; if (it == end( resources)) { T res { load_from_file <T>( file)}; it = resources. insert( res). first; } return *(it->second); } };

25 / 26 Spelutveckling Resurshantering Med resurshanteraren: Image& im1 { Manager <Image >:: load(" fil. png") }; Image& im2 { Manager <Image >:: load(" fil. png") }; Manuell hantering: Image im1 { load_from_file <Image >(" fil. png") }; Image im2 { load_from_file <Image >(" fil. png") };

26 / 26 Spelutveckling Kollisionshantering Problem att lösa: Vad innebär det att två objekt har kolliderat? Hur detekterar vi kollisioner mellan alla objekt? Kan vi generalisera kollisionshanteringen?

www.liu.se