CD5250 - Objektorienterad programutveckling med C++, 5 poäng, period 3, 2002

Projektuppgift - Tetris

materiel

Kodskelett för projektet i MFC. Programmet visar en boll som ändrar storlek när man tryckt på start (F1). Bollen kan styras i alla riktningar med piltangenterna och animationen stoppas när man tryckt på stop (F2).

  • bounce.zip
  • förberedelser

    Tetris is a game designed by the Russians to slow down research in the west
  • Studera kodexempel för programmering i MFC (Microsoft Foundation Classes) och bilda er en uppfattning om hur det kan användas.
  • Gör en analys och design av problemet. Skapa klassdiagram och arvshierarkier för de ingående klasserna. Detta skall ni göra innan ni börjar programmera. Ingen programmeringshjälp ges till de som inte har redovisat design och fått godkänt av laborationsassistenterna.
  • Ett mål för designen är att undvika onödiga switch-satser och istället använda polymorfism och virtuella metoder.
  • Simulera er design med papper och penna och kontrollera att ni har tillgång till alla objekt m.m.
  • introduktion

    Om ni inte har varit strandsatta på en öde ö det senaste decenniet så har ni antagligen spelat Tetris. För er andra så finns det en uppsjö av exempel att hämta hem från nätet och testa för att få en uppfattning om hur spelet fungerar.

    Det finns sju olika bitar med olika form. Dessa kan roteras, släppas ned, flyttas vänster eller höger.

    I bilden visar de svarta cirklarna rotationscentrum för var och en av bitarna. För att rotera bitarna kan ni använda följande formel för var och en av bitarnas rutor:

    x' = xc + yc - y
    y' = yc - xc + x

    Där (xc, yc) är koordinaterna för rotationscentrum. x' och y' syftar på de nya x resp. y-värdena.

    Spelbordet är 10 rutor brett och ungefär 25 rutor högt. Nya bitar genereras slumpvis vid toppen av spelbordet och faller sedan en ruta i taget nedåt mot botten. Medan biten faller kan spelaren flytta biten i sidled och rotera den med knapparna "J", "K" och "L". Mellanslagstangenten gör att biten snabbt faller ned till botten.

    Bitarna faller ned till botten och läggs ovanpå varandra. När en rad är fylld med rutor tas alla dessa rutor bort och alla rutor ovanför faller ned en rad. Flera rader kan försvinna samtidigt om de fylls igen vid samma tillfälle (dock kan inte fler än fyra rader försvinna samtidigt pga att den längsta biten är fyra rader hög). Spelet slutar då inga mer bitar får plats på spelbordet.

    Poängräkning får ni själva bestämma regler för hur de skall fungera.

    uppgift

    Uppgiften är att skriva ett mycket vanebildande Tetris-spel skrivet med hjälp av MFC (om inget annat överenskommits med lärare). Några av de saker ni måste ta ställning till är:

  • Hur ni skall slumpvist skapa olika typer av bitar
  • Hur bitarna skall falla, roteras, samt flyttas i sidled
  • Hur respektive bit skall rita ut sig själv
  • Hur varje bit håller reda på dess position
  • Hur varje bit skall kontrollera om en förflyttning är tillåten, dvs. så att biten inte hamnar på en redan upptagen plats på spelbrädet eller hamnar utanför spelbrädet.
  • Hur ni skall hantera användarens input
  • Hur spelbrädet håller reda på var alla bitar ligger
  • Hur spelbrädet kontrollerar när rader skall tas bort
  • Hur spelbrädet skall uppdateras när rader tas bort
  • Hur ni skall hålla reda på när spelet tar slut
  • tips

    Börja smått. Försök först att få en bit att falla ned över spelplanen. Få sedan förflyttning i sidled att fungera, och slutligen rotation och fall att fungera. Om ni får detta att fungera skall det behövas relativt små förändringar för att få de andra bitarna att bete sig på liknande sätt. Slutligen kan ni implementera funktionaliteten för att upptäcka och ta bort fulla rader och "end of game".

    När ni skapar datastrukturerna för spelbordet kan det vara en god idé att reservera extra utrymme runtomkring spelplanen för "väggar" och "golv". På detta sätt kan ni undvika specialkollar för bitarna när de försöker flytta sig utanför spelbrädets kanter. Dessa extrabitar skall naturligtvis inte visas på spelbrädet, utan endast finnas där för er egen skull. Tänk även efter hur många bitar extra på varje sida som kan behövas (hur "tjock" väggen måste vara).

    extrauppgifter

    Om ni har extra tid över och vill förbättra spelet kan ni eventuellt vilja lägge till följande funktioner:

  • Gör så att bitarna faller snabbare och snabbare ju längre spelet håller på
  • Lägg till så att spelaren kan "pausa" spelet
  • Lägg till så att spelaren kan starta om spelet
  • Lägg till så att spelaren kan spara och ladda spel
  • Gör så att användaren kan få online-hjälp i spelet
  • Använd olika färger på bitarna
  • Skapa en "high-score"-lista
  • redovisning

    Demonstrera spelet för en laborationsassistent. Skicka sedan in källkod + projektfil (*.dsp) och dokumentation (analys, design m.m.) i en zippad fil. Var noggranna och kontrollera att allt finns med.

    Aktuellt
    Utvärdering2
    Nyheter
    Föreläsning 14
    Laboration 6
    Projektuppgift
    CD5250
    Nyheter
    Kursinformation
    Föreläsningar
    Labbar
    Projektuppgift
    C --> C++
    STL-intro
    Size-klassen
    Utvärdering
    Utvärdering2
    Visual C++
    Kursplan
    Schema
    Underrubriker
    materiel
    förberedelser
    introduktion
    uppgift
    tips
    extrauppgifter
    redovisning
    Ansvarig lärare: Martin Skogevall - martin.skogevall@mdh.se
    Senast uppdaterad: Tue Mar 05 16:57:48 GMT+01:00 2002