Projekt 2020/2021

Preliminär version.  Ändringar i form av förtydliganden,  rättelser och tillägg av projektförslag kan komma att göras. 

Kursens projekt är en programmeringsuppgift som genomförs väsentligen utan handledning och utan detaljerade anvisningar. Får utföras av två personer tillsammans eller enskilt. Om två personer jobbar tillsammans ska båda kunna redogöra för programmets alla delar. Projekt för betyg A är större än kursens labbar men projekt för E behöver inte vara det.

Redovisning

Projektet redovisas som en vanlig labb men vi avsätter minst 20 minuter för varje redovisning. Information om tidsbokning kommer senare.

Redovisning sker i ert Zoom-rum. Ställ er i queue-kön med en länk till rummet inför er bokade redovisning.

Vi kommer att erbjuda bokningsbara redovisningstider från januari till slutet av period 3 2021.  Vi tar emot redovisningar även senare i mån av tid.

Om du vill redovisa innan det går att boka tid på webben, maila Ann (ann"at"kth.se) för att bestämma tid.

Tänk på följande inför redovisningen:

  • Ha UML-diagrammet till hands vid redovisningens början, gärna så att man kan se diagrammet samtidigt som program-demo eller programlistning. Att se diagram och program samtidigt krävs inte vid Zoom-redovisning.
  • Förbered redovisningen genom att planera hur ni ska berätta översiktligt om programmet och vem som ska berätta om vilken programdel. Båda gruppmedlemmarna ska vara beredda att svara på frågor om alla programdelar.
  • Om ni bokat tid men inte kan komma så AVBOKA förstås.

 

UML

UML-klassdiagram ingår i alla projektuppgifter. Små hjälpklasser som String och ArrayList behöver inte tas med. Markera metoder (och ev. variabler) som används från andra klasser som public och ta med dem i diagrammen. Andra metoder och variabler kan utelämnas. Var noga med diagrammen! Det duger bra att rita för hand men rita tydligt och skriv läsligt.

Betygsättning

Betyg E, C eller A ges på projektet.  

Kvalitetskrav för alla betygsnivåer: Programmet ska bestå av flera klasser med olika ansvarsområden och väldefinierade gränssnitt (publika metoder). Kodupprepning får förekomma endast mycket sparsamt eller inte alls. Namn på variabler och metoder ska väljas så att de bidrar till att göra programmet tydligt. Använd gärna något designmönster! Vi kräver inte strikt att ni använder designmönster men en lämplig användning av ett sådant räknas som ett plus som kan kompensera för någon liten brist i programmet.

Krav för betyg A: Uppgiften ska vara så komplex att det vanligen behövs minst fyra moduler med tydligt definierade olika ansvarsområden. En modul är vanligen en klass men kan bestå av flera klasser. Det räcker inte att ha ett visst antal klasser för att få A. Om man t.ex. har flera likartade subklasser till en basklass räknas det inte som olika moduler (som i Schack-programmet nedan).

Krav för betyg C:  Mindre komplext program. Tre moduler kan räcka.

Krav för betyg E: Ett enkelt välskrivet program med minst tre klasser kan ge E.

Betyg C eller E kan ges för ett program som helt eller delvis är en prototyp för ett program som planerats för en högre betygsnivå. Då består programmet av fler klasser än vad som föreslås för betyg C och E men några av klasserna är ofullständiga, deras instansieringar blir "mock objects".

 

Projektförslag

Projektförslag 1: Simulering av brownsk rörelse

Läs mer om förslaget här: Brownsk rörelse

 

Projektförslag 2: Nätspel - spel som spelas av minst två klienter

Spelet kan vara enkelt här eftersom det är rätt mycket jobb med kommunikationen. Projektet kan läggas upp så att en Server (jfr labb3) har hand om en spelmodell och låter användare (klienter) koppla upp sig och spela.

 

Projektförslag 3: Spel på en dator

Gör ett klassiskt eller ett modernare spel, med eller utan rörelse. Kan vara spel för en person eller för två personer. Othello, Pacman och Tetris är exempel på välkända klassiska spel. 2048 är ett modernare men populärt spel som också passar för projekt. Spelet Lines and dots beskrivs här: Beskrivning av Lines and dots.

 

Projektförslag 4: Intelligent schackbräde

Programmet för betyg A ska fungera så här (för C och E implementeras delmängder)

  1. Visa ett schackbräde (rutigt 8x8) med bilder av schackpjäser
  2. Hålla reda på om svart eller vit står på tur att flytta
  3. Utföra drag som begärs av användaren
  4. Användaren klickar på startruta och slutruta. Om det är ett korrekt (*) drag så utförs det, annars ges felmeddelande.
  5. Kunna reglerna för pjäsernas förflyttningar (men inte föreslå drag, dvs inte spela) och endast utföra korrekta (*) schackdrag.
  6. Ta bort slagna pjäser från brädet
  7. När användaren valt en pjäs att flytta, visa vilka rutor det är möjligt att flytta till, t.ex. genom att ge dem annan färg.
  8. När en bonde når motsatt ände av brädet (motståndarens startände) ska bonden promoveras. Det går bra att bonden alltid blir en dam.
  9. Identifiera när ett drag medför att andra spelarens kung är hotad (schack) och meddela det.

Två personer spelar mot varandra med programmet som bräde. Brädet utför endast korrekta drag.

(*) Reglerna för schack finns att läsa här: https://sv.wikipedia.org/wiki/Schackregler Links to an external site.. Implementera pjäsernas rörelse enligt Wikipedia-sidan med följande undantag. Regeln att kungen inte får ställas "i slag" (så att det egna draget gör att kungen hotas av andra spelaren) behöver inte implementeras. Specialdragen en passant och rockad behöver inte finnas med i programmet för någon betygsnivå. Specialdraget promovering ska finnas med för betyg A.

Betyg E: Utför punkterna 1-6 ovan fast med förenklade schackregler: Bönderna flyttar som bönder. Alla andra pjäser får flytta som godtycklig annan pjäs, t.ex. som kung (allra enklast) eller springare (näst enklast). Andra pjäser kräver att man kollar fri väg mellan pjäserna.

Betyg C: Utför punkterna 1-6 med vanliga schackregler enligt (*). Promovering (punkt 8) krävs inte.

Betyg A: Utför punkterna 1-9 ovan. 

 

Projektförslag 5: Hitta på något eget

Måste godkännas av någon av kursledarna i förväg. Maila ett förslag.