Göm menyn

TDDD49 Programmering C# och .NET

HT2 2013


Följande labbar ska genomföras. Lab 2 redovisas personligen av de (1 eller 2) studenter som lämnar in. Lab 1 och 3 lämnas in elektroniskt som körbara Visual Studio projekt – kursledningen ska själva kunna testa på sina datorer. (Testa att du själv kan öppna det projekt du lämnar in på en annan dator och se upp med hårdkodade referenser till platser på din egen dator.)

Årets tema är brädspel - men det är ok att byta ut tillämpningen om du uppfyller de tekniska och arbetsvolymmässiga krav som kursen har. Ett lämplig storlek på spelet är schack eller poker - tictacktoe är för litet. 3D-tick-tack-toe kan vara ok. Du kan naturligtvis implementera ett brädspel som finns med regler och allt - men naturligtvis inte publicera sådant utanför kursen.

Tänk på att implementera ett lagom stort brädspel. Kursen är på 107 timmars eget arbete. Om du gör ett för stort spel - lämna då in något ofullständigt men tekniskt och volymmässigt tillräckligt och jobba vidare efter kursen.

Labb 1:

  • Bygg ett grässnitt för ett brädspel i WPF.
  • Kopplingen mellan GUIt och spelets interna tillstånd ska skötas med data-bindings - t.ex. genom INotifyPropertyChanged klasser. (titta t.ex på: Data Binding (WPF))
  • Två-vägsbindning är inte nödvändigt och kan vara komplext. Bindning från data till GUI och sedan event för att fråga regelmotorn om en förändring får görs är den tänkta designen.
  • Separera interaktion från logik – t.ex. med en klass med spelmetoder som dina WPF-event anropar. WPF-ens Code Behind-klasser ska bara hantera interaktion. Detta för att med minimal ansträngning kunna byta frontend - t.ex. i webbform över ASP.NET.
  • För labb 1 är spelet en visuell prototyp - där interaktioner och känslan i spelet realiseras. Bygg så att du skulle kunna göra en demo.
  • Tänk på att WPFs olika layoutsystem (Canvas, DockPanel, Grid, StackPanel, VirtualizingPanel, WrapPanel) har olika egenskaper och att de kan påverkar dina möjligheter att implementera till t.ex. animeringar. Här behöver du göra ett genomtänkt val som passar med ditt spel.

Labb 2:

  • Bygg en regelmotor som t.ex. verifierar olika drag och håller ordning på spelets tillstånd. Regelmotorn ska vara isolerad mot resten av systemet. Du behöver tänka igenom och bygga "rätt" struktur för detta.
  • Du ska enhetstesta din regelmotor med enhetstestprojekt i Visual Studio. OBS! Enhetstestning kräver att du skriver testbar kod - att designen passar testning. Den intresserade studenten kan här praktisera test-driven utveckling för sina regler.
  • För lite komplexare regelsystem som i schack behöver regelmotorn inte vara helt komplett - t.ex. gällande drag som inte får göras eftersom det ställer kungen i schack matt.

Labb 3:

  • Du ska kunna spara och återskapa ett pågående parti på ett dataformatoberoende sätt via Entity Framework och LinQ. Du ska sedan implementera stöd för att till en lokal databas lagra nödvändig data. (Intressant läsning om detta finns t.ex. i denna walk-through). Den intresserade studenten kan jobba mot t.ex. SQLite.
  • Implementera övrig logik så att spelet kan spelas med turordning och andra steg som spelet kräver.
  • Packetera för leverans till kund som en installationsfil med Visual Studios deployment-projet.

Om du skött dig i kursen :-) bör du nu ha ett sjukt kul spel som bara saknar en spelar-AI för att kunna deployas. Eftersom du isolerat både GUIt och lagringen så bygger du lätt en cross-plattformapp med multitouch-interaktion med t.ex. http://xamarin.com/ till Android, iOS och Windows Phone - som just kräver separat GUI-implementering. Lycka till!


Sidansvarig: Erik Berglund
Senast uppdaterad: 2013-10-25