Göm menyn

TDDC74 Programmering: Abstraktion och modellering

Projekt

VT 2017

Projektförslag

Förslagen nedan med texten "med extrafunktionalitet" indikerar att förslaget i dess enklaste form är lite för enkelt, och att ni skall hinna lägga till något ytterligare för att bli godkända, till exempel highscore-lista eller spara- och ladda-funktionalitet. Notera att förslagen utan denna text i dess enklaste former inte nödvändigtvis är tillräckligt svåra.

Detta ger en grov indelning. Projekt behöver inte falla under enbart en rubrik! Ett grafiskt spel där figuren avgör vilken väg den ska ta över skärmen kan både vara ett grafiskt spel och ett optimeringsprojekt, till exempel.

Har ni ett eget förslag som inte ligger inom ramarna för detta? Bolla gärna idéer med er labbass. Vet hen inte, kan frågan tas vidare.

Animerade realtidsspel

Vad som avses med realtidsspel i det här sammanhanget är spel där saker och ting förflyttas i en kontinuerlig värld, och där vi har någon form av tidsaspekt. Vi begränsar oss även till spel i 2D, och för enkelhetens skull uppmuntras ni till att modellera alla saker i spelet som antingen fyrkanter eller cirklar, vilket gör det lite enklare att upptäcka kollisioner.

Äventyrsspel - grafiskt eller ej

Här bygger du ett äventyrsspel modell Monkey Island eller laboration 5. Spelet kan luta sig rätt rejält på laboration 5, men det är fortfarande ett 3hp-projekt, och något/några konceptuellt nya saker ska tillföras.

Ett par exempel på utökningar (flera kan krävas!):

  • Grafisk presentation
  • Peka-klicka-presentation av spelet (kanske med animerad vandring över skärmen?)
  • Mer aktivt händelsedrivet spel, med en smidig hantering av saker som "om person X har sak Y och använder sak Z, så...". Flexibelt utbyggbart, i Racket-kod.
  • RPG-utvidgning med nivåer, attribut och turbaserat stridssystem
  • Separat lagring av världen. I labb 5 beskrivs allt som Racket-kod. Man skulle kunna skapa ett eget beskrivningsspråk för hur spelvärlden fungerar. Exempelvis, att inte skriva en world_init med Racketkod, utan ha textfiler för de olika sakerna som skapas, och låta en character% beskrivas modell
    (character
     (type "character%")
     (name "Link")
     (starts-at "woods")
     (starts-carrying ("flute" "sword"))
     (triggers
      ([when (gets-item "book")
          (read "book")
          (teleport-to "mountain")]
       [when (arrive-at "bedroom") (drop-item "shoes")]
       [when (and (at-place "mountain") (talk-to "shepherd")) (give-item "key" "shepherd")]))
    ...)
    Sedan laddar ert spel in texten ovan och skapar character%-objekt.
  • ...

Detta projekt kan göras mer eller mindre omfattande, och kan rekommenderas om du inte är jättevan.

Observera dock att det inte handlar om att lägga ned 2x2 arbetsveckor (3hp per projektpartner) på att bygga en stor labb 5-värld. Fokus ligger på konceptuellt intressanta utbyggnader, ombyggnad (laga genvägar som tagits i skelettet) och kodkvalitet.

Grafiska icke-realtidsspel - brädspel med mera

Det går även att skapa grafiska spel bestående i "mer diskreta" världar bestående av rutor, och utan "kontinuerlig" tid.

  • Pacman (fast i ett rutnät) (testspela)
  • Schack (testspela)
  • Mine Sweeper (med extrafunktionalitet) (testspela)
  • Memory (med mycket extrafunktionalitet) (testspela)
  • Sudoku (med extrafunktionalitet) (testspela)
  • Doctor Who (fast utan animationer och i 2D) (testspela)
  • 15 Slider (med mycket extrafunktionalitet) (testspela)
  • Carcassonne
  • Roborally
  • Ricochet Robots
  • ...

I dessa spel kan det även vara intressant att lägga in lite intelligens, till exempel låta datorn spela spelet.

Datorspråk

Nu har ni skrivit kod i ett programmeringsspråk, med en given språktolk. Här kan ni få hitta på ett eget språk, och utveckla en egen språktolk. Eller utveckla ett program som skriver om (kompilerar) ert språk till Racket (eller något annat språk). Eller som analyserar kod och optimerar den så att den evalueras mer effektivt? Man kan göra många spännande saker med programkod, och algoritmerna brukar bli väldigt vackra. Ni får välja hur ni vill göra.

Optimering, algoritmiska och matematiska problem

Om ni vill göra något man verkligen har nytta av kanske projekt liknande dessa passar er.

  • Hitta kortaste eller snabbaste vägen mellan två orter. En ungefärlig Sverigekarta finns att tillgå. Algoritmerna man använder är vanliga och viktiga inom exempelvis AI och optimeringslära.
  • Logisk resolver (satslogik): Vi bevisar om logiska slutsatser följer av en uppsättning fakta om världen. Exempel: om vi har en uppsättning regler för en robot, modell "rött ljus -> stanna fordonet", och testar vilka tillåtna slutsatser som får dras.

Föreslå gärna egna pyssel eller dylikt. Tidigare har studenter exempelvis gjort mycket effektiva Sudokulösare.

Medicinsk teknik

Här är några förslag på projekt speciellt framtagna för de av er som går Medicinsk teknik. Det är helt tillåtet att välja dessa (eller andra projekt), oavsett program.

  • Medicinska beslutsstödssystem (expertsystem)
    Skapa system som utifrån ett antal symptom (och en faktabas) kan ta fram tips på möjliga diagnoser (eller, mer generellt, slutsatser).
  • Presentation/visualisering av hälsodata

    Att ha en mängd information räcker inte; den måste åskådliggöras för att samband ska framträda. Detta projekt handlar om att bygga system för att presentera data på ett tydligt och lättfattligt sätt. Inspirationen hit kommer från Hans Roslings gapminder.

Simuleringar

Om ni vill arbeta med grafik men skapa något nyttigt istället för roligt så kan ett simuleringsprogram vara ett alternativ till spel. En simulering kan grafiskt visa hur någonting utvecklas med tiden, till exempel hur ett uttryck i Scheme evalueras enligt substitutionsmodellen.

  • Substitutionsmodellevaluerar i Scheme.
  • Digitalkrets-simulator. Bygg ett grafiskt interface där man kan koppla ihop olika logiska komponenter (AND, OR,...), och simulerar körningar. För att ha något att relatera till kan man kolla på följande programvaror CEDAR Logic Simulator och Logisim.

Artificiell intelligens, planering

I dessa projekt ligger fokus på klassiska AI-tekniker, och sätt att få datorspelare som gör hyfsat vettiga drag.

  • Othello-AI. Det finns ett skelett för den grafiska biten av ett Othellospel. Skriv klart det, och skapa en relativt vettig artificiell intelligens.
  • Automatisk planering.

Det kan nämnas att IDA har såväl grund- och fortsättningsutbildning (exv TDDC17 Artificiell intelligens, TDDD48 Automatisk planering, TDDD10 AI-programmering...) som framgångsrika forskare på området.


Sidansvarig: Anders Märak Leffler
Senast uppdaterad: 2017-03-28