Göm menyn

TDDE10 Objektorienterad programmering i Java

Projekt


Omfattning och upplägg

Projektet omfattar 2 hp, d.v.s ca 50 arbetstimmar per person. Det enda schemalagda momentet för projektet är en lektion á 2 timmar. Projektet görs över kursens sista tre veckor. Kontentan av detta är att projektet genomföres självständigt och kommer kräva mycket arbete utanför schemalagd tid. Det kommer självklart att finnas möjlighet att boka tid med handledare under projekttiden men i stort kommer alla problem vad gäller projektets design, genomförande och slutställande göras självständigt av studenterna.

Projektet görs tillsammans med den labpartner som man gjort laborationer med. Det är tillåtet att byta partner om man vid denna del av kursen känner att man ligger på olika kunskaps eller ambitionsnivå, kraven är dock samma för alla (se nedan). Endast i undantagsfall tillåter vi tre-grupper eller singlar.

Projektförslag

Ett lämpligt projekt (till omfattning och innehåll), med kursens laborationer och teori som grund, är att göra ett klassiskt arkadspel. Du kanske kommer ihåg sådana höga montrar med en TV-inuti, de brukade (kanske fortfarande?) stå på fritidsgårdar och i bowlinghallar. Vanligtvis behövde spelaren lägga i mynt för att få spela. Därpå kör spelet i gång och målet är att försöka ta sig så långt som möjligt. Vanligtvis har spelaren ett antal liv och när liven är slut så är spelet likaså och det är dags att lägga i nya mynt, om man nu har råd och/eller tid med det.

Ett annat lämpligt projekt till storlek och innehåll, om man inte längre minns arkadspelen, är att titta på simplare mobilspel. Titta i så fall på den typen av mobilspel som är i realtid (inte turbaserat). Många av dessa spel kan behöva modifieras för att nå upp till minimikraven för projektet, så ta det i beaktning när ni väljer.

Exakt vilket spel och hur det skall se ut skall beskrivas i kravspecifikationen. Kravspecifikationen skall innehålla en beskrivning av projektet i en flödande text (och allra helst med en eller flera bilder). Detta utgör er vision över det färdiga systemet. Därefter skall ett antal konkreta krav följa (i tabellform). Det är då viktigt att kraven är tydliga, verifierbara, numrerade och prioriterade. Kraven måste också minst täcka de minimikrav som vi har på projektarbetet. Kravspecifikationen skall skickas som en PDF-fil till handledaren (er laborationsassistent) via e-post och godkännas innan projektet kan påbörjas. Kravspecifikationen ska även läggas upp i ert GitLab-projekt när den blivit godkänd, så att det blir lätt för er, och för oss att gå tillbaka och kolla kraven.

Längst ner på sidan har vi länkat till ett antal videoklipp på gamla klassiska arkadspel och lämpliga mobilspel. Många av dessa har revitaliserats många gånger under åren eftersom de är så älskade. Lättast blir det nog om man försöker göra sin egen version av någon av dessa klassiker. Självklart får man göra ett helt eget arkadspel men man måste då räkna med att det kommer ta mer tid innan man kommer igång med själva kodandet, eftersom själva spelet skall designas också.

Minimikrav

Funktionella
  • Projektet skall bestå av ett 1-spelarspel med grafiskt gränsnitt.
  • Gränssnittet skall styras med tangentbord och/eller mus. Det är inte krav på att båda ska användads.
  • Spelet skall ha en "meny", med några alternativ (t.ex. "nytt spel", "highscore" och "avsluta").
  • Spelet skall åtminstone ha två "banor", minst två olika typer av "fiender" och minst två olika typer av "power-ups". För att det ska räknas måste funktionaliteten skilja. Ex: Ett monster jagar spelaren, det andra rör sig slumpmässigt, en powerup get poäng medan en annan ger extra liv. Det måste alltså skilja tillräckligt för att motivera att det ska vara två olika klasser.
  • Spelet skall lagra poäng från tidigare spel i en "highscore" eller liknande. Detta måste lagras på datorns hårddisk.
Icke-funktionella
  • Projektet skall göras objektorienterat och vara skrivet i Java.
  • Alla klasser skall ha javadoc. Som minst kräver vi en kort beskrivning för klassen. Javadoc på metoder är frivilligt.
  • Projektet skall ha minst två moduler (paket), en för grafik och en för logik.
  • Projektet skall versionshanteras med Git.

Redovisning

Deadlines för projektet hittar du under "Schema och Deadlines" i menyn till vänster, eller här.

Checklista för godkänt projektarbete
  • Inlämnad och godkänd kravspecifikation.
    Se ovan.
  • Handledare inbjuden till projektet i gitlab.
    Detta borde göras så snart ni har börjat hacka. Det finns en liten guide för hur man skapar ett projekt på gitlab och hur man bjuder in handledaren.
  • Godkänd muntlig redovisning/demonstration av färdigt projekt. Görs på redovisningstillfället i slutet av läse-perioden.
  • Inlämnad och godkänt reflektionsdokument. Ca 2-3 A4 sidors reflektion kring ert lärande i projektet. Ev. runt följande frågor:
    • Hur gjorde ni er objektorienterade analys? Använde ni Use-cases, CRC-kort eller något annat? Fungerade det bra eller dåligt? Varför?
    • Hur blev designen av systemet och hur påverkade det genomförandet och er möjlighet att uppfylla alla krav? (Obs. ej den grafiska designen). Vad hade kunnat göras annorlunda, designmässigt?
    • Vilka svårigheter hade ni? Vad var särskilt viktigt när projektet skulle startas upp/genomföras/färdigställas?
    • Hur hjälpte utvecklingsverktygen er, (eclipse, git, m.m.)?
    • Vad var den största lärdomen från projektarbetet?
    I slutet av reflektionsdokumentet skall det också finnas ett grovt klassdiagram över de klasser ni har. Fokusera på klassernas relationer snarare än faktiska metoder/variabler. Klassdiagrammet är utöver de 2-3 A4-sidorna text.

    Observera att reflektionsdokumentet inte skall innehålla reflektioner om eller synpunkter på själva kursen. Sådana är vi självklart också intresserade av, men hänvisas till våra kursvärderingssystem.

Länkar till förslag på projekt

Robotron 2084
Spelet som låter spelaren både förflytta sig i åtta riktningar OCH skjuta i alla åtta riktningar, SAMTIDIGT.
QBert
Isometriskt spel där man skall hoppa på alla "lådor" på en bana och samtidigt undvika fienderna.
Arkanoid (a.k.a break-out, DX-ball)
Spelet där du kontrollerar en "paddel" och skall studsa en boll på brickor som då försvinner. Tänk att Pong kunde bli roligare när man tog bort den andra spelaren...
Galaga (a.k.a space invaders, life force)
Detta är ett av många s.k. "scrolling shooters". Du är ett litet skepp längst ner eller längst till vänster på skärmen och rör dig hela tiden frammåt. Fiender kommer in från olika sidor som du måste skjuta ned, annars skjuter de dig eller så kraschar du in i dem.
Centipede (Millipede, m.fl.)
En annan variant på "masken". I detta spel kommer masken för att äta dig!
Missle Command
Mänskligheten har bara ett litet antal städer kvar. Missiler regnar från himmelen, du kontrollerar ett luftvärn och måste skjuta ner dem innan städerna går förlorade!
Bomb It (a.k.a bomberman)
Placera ut bomber och döda fienderna på planen!
Frogger
Du spelar en liten groda med ett mål, att ta sig över vägen.
Flappy Bird
För den lilla fågeln i säkerhet genom att styra den genom rör, förbi fiender och över rörliga rör.
Doodle Jump
Om du vill ha en vertikal scroller istället för Flappy Birds side-scroller är Doodle Jump för dig! Styr din hoppande filur över förädiska plattformar, ta power-upsen och ta dig så långt du bara kan!
Plants vs. Zombies
Om du vill göra ett spel med ite mer action, typ döda zombies, kanske ett spel i stil med Plants vs. Zombies är något för dig. Placera ut blommor som skjuter ner zombies innan de dödar alla dina blommor.
Rougelikes (tänk Binding of Isaac m.fl.)
Vi välkomnar även lite mer komplicerade spel om ni "dummar" ner dem. Ett simpelt rougelike är görbart inom gränserna för projektet.

Övriga resurser

  • Liten guide till att skapa ett projekt på gitlab och sedan "klona ner det" för att sätta igång och jobba, och hur man bjuder in sin handledare.
  • Liten guide till att lägga upp, ett redan existerande projekt på gitlab (och versionshantera det med git), och hur man bjuder in sin handledare
  • Länk till git bash (rekommenderas för de som vill köra git på windows)

Sidansvarig: Magnus Nielsen
Senast uppdaterad: 2024-01-09