Göm menyn

TDDD49 Programmering C# och .NET

HT2


Följande labbar ska redovisas separat eller i klump, personligen av samtliga (1 eller 2) studenter som lämnar in labben. Labbarna ska även lämnas in elektroniskt.

Temat är brädspel. En lämplig storlek är schack eller poker - tictacktoe är för litet. Du kan implementera ett existerande brädspel med regler och allt som en övning i kursen - men förstås inte publicera sådant copyright-skyddat material.

Tänk på att implementera ett lagom stort brädspel. Kursen är på 107 timmars eget arbete. Om du vill göra ett för stort spel - lämna då in något tekniskt och volymmässigt tillräckligt och jobba vidare efter kursen. Om du vill göra ett väldigt, väldigt litet spel - gör inte det för då kan du inte bli godkänd.

Tänk också på att labbarna hänger ihop. När du löser en labb, gör det med de andra labbarna i åtanke.
Detta gäller skärskilt den första labben som också inkluderar mycket planering.

Labb 1: Spelets motor

  • Här definerar du datatyper du behöver, tillståndshantering och spellogik.
  • En separat regelmotor som validerar förändringar av spelets datatyper (tillåtet, icke tillåtet) implementeras.
  • Separera logik, datatyper och regelmotorn väl. Det finns många olika sätt. Hitta ett som ser till att man med minimal insats kan byta ut någon del.
  • Ett sista krav här är att spelmotorn kan hantera flera spelare och det måste vara irrelevant till spelmotorn huruvida ett spelare är faktiskt en AI eller en mänsklig spelare (via GUI).

Labb 2: GUI

  • Bygg spelets grässnitt (GUI).
  • GUIt ska vara helt separerat från annan kod. T.ex. ska därför inte spellogik hamna i event-metoder utan läggas i spelmotorn. Eventmetoderna andropar sedan spelmotorn.

Labb 3: AI

  • Bygg kod för en AI-spelare som kan spela på egen hand. AIn behöver inte vara särdeles intelligent. Men en helt slumpmässig AI är oacceptabel och det måste vara möjligt att AIn vinner.
  • AIn ska arbeta mot spelmotorn på samma sätt som GUIt och vara i övrigt helt separerad från övrig logik.

Labb 4: Synkad lagring och LINQ

  • Impementera stöd för att lagra spelets tillstånd på ett oberoende format. Detta ska ske hela tiden, d.v.s. en ändring i spelts tillstand medför att det lagrade datat uppdateras.
  • Synkad lagring innebär att det fungerar också tvärtom. Även förändringar i det lagrade datat ska upptäckas av spelet så att t.ex. en manuell ändring i databasen eller XML-filen upptäcks av programmet som uppdaterar spelets tillstand (vilket medför att GUI updateras).
  • Om spelet startas upp senare ska spelet återta det tillstånd det hade senast.
  • Du kan välja att hantera lagring med en databas, XML, JSON ... eller något annat format men det ska gå att tolka utanför C# och inte direkt bygga på C#-serialisering.
  • Spelet ska hela tiden hålla ett och samma tillstånd. Spelet behöver dock inte klara att hantera mer än en spelomgång samtidigt.
  • Ett sista, men viktigt, krav är att du i alla lägen använder LINQ för att jobba med din lagring.

Om du skött dig i kursen :-) bör du nu ha ett sjukt kul spel.


Sidansvarig: Johannes Schmidt
Senast uppdaterad: 2015-10-29