Föreläsning 20 Textspelsprojekt



Relevanta dokument
Föreläsning 5 Mer om funktioner, villkor

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

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

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN OOP

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

Tentamen. Lösningsförslag

Malmö högskola 2008/2009 CTS

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

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

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

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

OOP Objekt-orienterad programmering

Del A (obligatorisk för alla)

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

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

Klasshierarkier - repetition

Del A (obligatorisk för alla)

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: Exempel och problemlösning

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

F4. programmeringsteknik och Matlab

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

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

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

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Objektorienterad Programmering (TDDC77)

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Tentamen OOP

Lösningsförslag till exempeltenta 2

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

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

tentaplugg.nu av studenter för studenter

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Generiska konstruktioner. Kursbokens kapitel 13

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Laboration A Objektsamlingar

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Att skriva till och läsa från terminalfönstret

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

LÖSNINGSFÖRSLAG TENTAMEN

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

Polymorfi. Objektorienterad och komponentbaserad programmering

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Objektsamlingar i Java

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

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

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 18 Filer och avbildningar

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Objektorienterad Programmering DAT043

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

Föreläsning 13 Innehåll

OOP Omtenta

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl 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

DAT043 Objektorienterad Programmering

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

Föreläsning 12: Exempel och problemlösning

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Laboration 1 - Grunderna för OOP i Java

Tentamen i Programmering

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Klasser och objekt. Henrik Johansson. August 20, 2008

Transkript:

Föreläsning 20 Textspelsprojekt Grunderna i programmering (Java) Jan Lönnberg Institutionen för datateknik -universitetets tekniska högskola 10.11.2010

Repetition HashMap public class CustomerDatabase { private HashMap<String, Customer> customers; public CustomerDatabase() { this.customers = new HashMap<String, Customer>(); public void addcustomer(customer newcustomer) { this.customers.put(newcustomer.getsocialsecuritycode(), newcustomer); public Customer getcustomer(string socialsecuritycode) { return this.customers.get(socialsecuritycode); public String getlist() { String list = ""; for (Customer current : this.customers.values()) { list += current.getname() + "\n"; return list; Föreläsning 20 Textspelsprojekt 2/17

AdventureBad-projektet AdventureBad Prova att spela spelet! Undersök spelet i debuggern. Föreläsning 20 Textspelsprojekt 3/17

AdventureBad-projektet Kritik Spelet fungerar men är ganska trist. Uppgift 8.2 handlar om att rätta till den bristen. Koden är svårt att utvidga. Att sätta till ett nytt område går ännu bra. Att sätta till nya rörelseriktningar är mer arbetsamt. Föreläsning 20 Textspelsprojekt 4/17

AdventureBad-projektet Nytt område Area northpole = new Area("North Pole", "You nd yourself at the North Pole. BRRR!"); northforest.setnorthexit(northpole); northpole.setsouthexit(northforest); Föreläsning 20 Textspelsprojekt 5/17

AdventureBad-projektet Ny rörelseriktning Vi vill t.ex. ha ett träd att klättra upp i. Vi behöver alltså riktningarna up och down. Det finns flera ställen som behöver ändras för att få en ny riktning att röra sig i. Adventure-klassen behöver förstås ett nytt område och information om hur man kommer till och från det. Area behöver nya instansvariabler upneighbor och downneighbour (och get- och set-metoder för dessa). Player.go-metoden behöver några if-satser till. Adventure.printAreaInfo behöver några if-satser till. Föreläsning 20 Textspelsprojekt 6/17

Refaktorering Kritik Det vore bättre om vi kunde komma undan med ändringar på några få ställen. Koden blir dessutom bara mer repetitiv ju mer riktningar vi sätter in. Vi försöker minimera upprepningarna och flytta så mycket som möjligt in i Area. Första steget är att bli av med alla metoder för olika riktningar. Föreläsning 20 Textspelsprojekt 7/17

Refaktorering public void addexit(string direction, Area neighbor) { if (direction.equals("north")) this.northneighbor = neighbor; else if (direction.equals("east")) this.eastneighbor = neighbor; else if (direction.equals("south")) this.southneighbor = neighbor; else if (direction.equals("west")) this.westneighbor = neighbor; Föreläsning 20 Textspelsprojekt 8/17

Refaktorering public Area getneighbor(string direction) { if (direction.equals("north")) return this.northneighbor; else if (direction.equals("east")) return this.eastneighbor; else if (direction.equals("south")) return this.southneighbor; else if (direction.equals("west")) return this.westneighbor; else return null; Föreläsning 20 Textspelsprojekt 9/17

Refaktorering Vad vann vi? Nya riktningar kräver inte mera nya metoder. Player.go-metoden blir enklare. public String go(string direction) { Area destination = this.location.getneighbor(direction); if (destination!= null) { this.location = destination; return "You go " + direction + "."; else return "You can't go " + direction + "."; Föreläsning 20 Textspelsprojekt 10/17

Refaktorering Bättre, men inte bra addexit och getneighbor har fortfarande en if för varje riktning och mera behövs för en ny riktning. Area behöver en instansvariabel för varje ny riktning. Adventure.printAreaInfo-metoden blev inte ett dugg bättre och måste fortfarande ändras för varje ny riktning. Nästa steg Vi ändrar Area så att varje områdes grannar finns i en HashMap istället för en skild variabel. Föreläsning 20 Textspelsprojekt 11/17

Refaktorering Vad ändras? Area får en ny HashMap<String, Area> neighbors istället för alla grannvariabler. Area.addExit reduceras till en put i denna avbildning. Area.getNeighbor reduceras till en get från denna avbildning. Vi flyttar sedan printareainfo till Area. De möjliga riktningarna kan sedan läsas från neighbors nyckelmängd. Vi kan nu lägga till nya riktningar bara med att skapa en ny utgång! Föreläsning 20 Textspelsprojekt 12/17

Modell mot användargränssnitt Mera kritik av AdventureBad Användargränssnittet och modellen av spelets värld är inte åtskilda. Modellen av världen skriver också text på skärmen! Adventure-objektet är en modell av äventyret och läser tangentbordet. Vad gör vi om vi vill ha en GUI för spelet eller två olika gränssnitt? Ändringarna är överallt! Mer generellt: hur kan vi använda en given modell med ett annat gränssnitt? Föreläsning 20 Textspelsprojekt 13/17

Modell mot användargränssnitt Skilj åt dem! I ett välskrivet program är modellen maximalt åtskild från gränssnittet. Modellen kommunicerar inte med användaren; den skriver inte ut saker, öppnar fönster eller reagerar på tangentslag eller klickningar. Gränssnittet kan ändras på eller bytas ut utan att röra vid modellen. Gränssnittet måste dock veta vad som kan göras med modellen. Gränssnittet beskriver modellen för användaren. Användarens input ges till modellen genom metodanrop. Föreläsning 20 Textspelsprojekt 14/17

Modell mot användargränssnitt Adventure Projektet Adventure är en bättre grund för fortsatt utveckling än AdventureBad. Ovannämnda förbättringar har gjorts (jämför!). AdventureTextUI sköter tangentbord och utskrift. Andra klasser bara tar emot och returnerar strängar; gränssnittets sak är att bestämma hur det här visas för användaren. Spelet är dock fortfarande bundet till text. Det finns också ett grafiskt gränssnitt. Föreläsning 20 Textspelsprojekt 15/17

Roll: Flagga Flagga Variabeln Player.hasQuit är en flagga. Flaggor visar att ett visst tillstånd gäller (om flaggan är hissad). Flaggor har bara två värden och är oftast av boolean-typ. Enkelriktad flagga En enkelriktad flagga kan bara byta värde en gång. T.ex. hasquit är false, men blir true om spelaren vill sluta och blir aldrig false igen. Se t.ex. rond 6 för mer exempel. Föreläsning 20 Textspelsprojekt 16/17

Slut Nästa föreläsning Rekursion 17.11.2010 16:15 18:00 i T1 Kom ihåg Deadline för åttonde ronden är tisdag 23.11 kl. 12! Föreläsning 20 Textspelsprojekt 17/17