Laboration 3. Händelser och ljud

Mål

  • Få en grundläggande arkitektur
  • Spela upp ljudeffekter
  • Hantera indata

Teori

MVC, Model View Controller

MVC är en mjukvaruarkitektur. En MVC-arkitektur hjälper programmeraren att dela upp kodens ansvar i olika komponenter. Det finns tre grundläggande komponenter de är:

Model. Spellogik och regler. Vad kan hända?

Spelets modell samlar spelets regler på en plats. Här samlar vi de objekt som påverkar spelet? Vilken är deras logiska position och andra egenskaper som exempelvis hitpoints, hastighet och förmågor.
Här samlar vi också de regler som styr spelet som exempelvis fysik och AI och andra basala regler som när är spelet slut och vem vann?
I första laborationen är bollens position och hastighet samt reglerna för hur den studsar delar av modellen.

//Regel om fienden kolliderar med spelaren dör spelaren
for (int i = 0; i < MaxEnemies; i++) {
   if (m_enemy[i].isColliding(m_player)) {
      m_player.setDead();
   }
}

View. Rendering och ljud. Vad kan vi se och höra?

Vyns uppgift är att presentera det som sker för användaren. Det vill säga vyn renderar modellen på skärmen. Som i laboration 1 är de transformationsfunktioner vi skrivit en del av vyn.
Vyn samlar också sådant som bara är visuellt som utritning av bakgrunder, effekter som Ljudeffekter och partikeleffekter är också en del av vyn.
Vyn spelar också upp bakgrundsljud som musik.
Eftersom vyn använder bilder, modeller och ljud så brukar den också ladda in dem.

//Rita ut alla fiender underst
for (int i = 0; i < a_game.MaxEnemies; i++) {
 DrawEnemy(a_game.m_enemy[i]);
}
//Rita ut spelaren ovanpå
DrawPlayer(a_game.m_player.m_pos);

Controller. Interaktion. Vad kan vi göra?

Kontrollern reagerar på indata som exempelvis musrörelser och ändrar i modellen beroende på indata. Kontrollern väljer och använder vyer för att kunna utföra sin uppgift.

//Interaktion. Vad kan vi göra
if (gamepad.IsClicked() == true) {
    a_game.FireWeapon();
}
m_gameView.Draw(a_game);

Komponenternas relationer

För att minska antalet relationer så brukar man begränsa hur klasser i de olika komponenterna får interagera. Ta en titt på följande bild:


Pilarnas riktning visar hur de olika klassernas relationer får bildas.
En klass i Controller får använda både klasser i modellen och i vyn medan en klass i vyn får använda klasser i modellen men inte i controllern. En klass i modellen får inte använda vare sig vyn eller controllern.

Effekter

  • Lättare att hitta i koden.
  • Lättare att återanvända kod eftersom vi samlar liknande kod i komponenterna
  • Bättre code-Cohesion

Uppgift 1. Dela upp koden i namespaces

Dela upp koden ifrån laboration 1 och 2 genom att placer klasserna i namnrymder. Vi har ännu ingen interaktion och därför har vi inte mycket kod i vår MasterController. Som stöd finns här en bild av hur man skulle kunna dela upp klasserna från laborationerna i namnrymderna Model, View och Controller. Kameran hamnar nu alltså i namnrymden View.Camera

Uppgift 2. Interagera och spela upp ljud

Målet med uppgiften är att interagera med simuleringen och spela upp en partikeleffekt och en ljudeffekt på platsen för interaktionen. Vi skapar för ändamålet en ny klass GameController som får uppdraget att hantera indata och sedan be lämplig vy att visualisera och spela upp ljud.



Uppgift 3. Ett minimalt spel

Öka antal bollar till 10 i laborationsuppgift 1. Vid klick i spelarean med musen skall en explosionsljudeffekt spelas upp och de bollar som är inom en liten area från musklicket skall försvinna.
Camera-klassen kommer nu behöva en ny metod för att översätta från vy-koordinater tillbaka till logiska koordinater. Reglerna som avgör vilka bollar som har träffats placerar vi i Modellen.


Välkommen till CoursePress

en utav Linnéuniversitets lärplattformar. Som inloggad student kan du kommunicera, hålla koll på dina kurser och mycket mer. Du som är gäst kan nå de flesta kurser och dess innehåll utan att logga in.

Läs mer lärplattformar vid Linnéuniversitetet

Studentkonto

För att logga in behöver du ett studentkonto vid Linnéuniversitet.

Läs mer om att hämta ut studentkonto

Inloggning LNU