4803 Droppings

Start-kod på GitHub. Kommer snart ...

Lösningsförslag på GitHub. Kommer snart ...

Spelet ser ut som bilderna nedan visar.

Spelet i korthet:

  • Ormen (eng. snake) flyttar vänster och höger med hjälp av piltangenterna.
  • Plommon trillar ner. Fånga dessa för att få poäng.
  • Undvik pumpor.

Genomgång

Alla objekt i spelet representeras av en klass. Från en klass kan man göra flera objekt. Till exempel finns det en klass Plum (sv. plommon). Från den görs flera objekt (plommon).

Din lärare skriver koden medan du ser på.

Följande klasser skrivs:

  • World - hela spelvärden som du ser i bilderna ovan.
  • Snake
  • Plum
  • Score

Reflektion

Nu ser spelet ut som figuren nedan.

En breakpoint sattes i metoden Draw i klassen World för att kunna se vilken data som sparas. I figuren nedan visas dessa variabler.

Be din lärare förklara vad du ser. Nyckelordet this representerar objektet av klassen World.

frågor

  1. Vilken data sparas i objektet av klassen World (this i bilden)?
  2. Vilken data sparas i ett plommon (eng. plum)?
  3. Vilken data sparas i en orm (snake)?
  4. Vilken data sparas i score?

Klassdiagram

Klassdiagram visas i figurerna nedan. Först följer en kort förklaring.

klassens namn - ruta 1

I den översta rutan står klassens namn.

variabler (data) - ruta 2

I nästa ruta är alla variabler uppräknade. Syntaxen är som koden, inte UML (Unified Modeling Language).

En förklaring av den första raden följer:

private Snake snake

private betyder att variabeln inte syns utanför objektet.

Snake är variabelns datatyp. Det kan vara en primitiv datatyp som int, float, bool eller en klassdatatyp.

snake är namnet på variabeln. Observera att det är skillnad på stor och liten bokstav.

metoder - ruta 3

I den tredje rutan finns: konstruktorer, properties och metoder. Syntaxen är som i koden här också.

Anrop till konstruktor görs för att skapa objekt.

Properties används för att lämna ut eller sätta värdet på variabler.

Metoder används för att "prata" med objekten.

En kort förklaring följer:

public void Update(GameTime gameTime)

public betyder att metoden syns utanför objektet.

void betyder att metoden inte ger ett svar.

Att det står något i parentesen betyder att man måste skicka med information när metoden anropas. Lite slarvigt kan man säga att gameTime måste skickas med.

World

  • private Snake snake
  • private System.Random random
  • private List<Plum> plums
  • private Score score
  • private float minTimeToNextPlum
  • private float timeToNextPlum
  • private int width
  • private int height
  1. public World(int width, int height)
  2. public void Initialize()
  3. public void LoadContent(GraphicsDeviceManager graphics, ContentManager content)
  4. public void Update(GameTime gameTime)
  5. public void Draw(GameTime gameTime, SpriteBatch spriteBatch)

Snake

  • private static Texture2D texture
  • private SpriteEffects spriteEffect
  • private Vector2 position
  • private float speed
  • private const int RIGHT = 1
  • private const int LEFT = 2
  • private int lastDirection = RIGHT
  1. public Snake(Vector2 position)
  2. public float Radius {get}
  3. public void Update(GameTime gameTime)
  4. public void Draw(SpriteBatch spriteBatch)
  5. public bool CollidesWith(Plum plum)

Plum

  • private static Texture2D texture
  • private Vector2 position
  • private float speed
  • private static float gravity = 100f
  1. public Plum(Vector2 position)
  2. public float Radius
  3. public Vector2 Position
  4. public void Update(GameTime gameTime)
  5. public void Draw(SpriteBatch spriteBatch)

Score

  • private int score
  • private Vector2 position
  • private static SpriteFont font
  1. public Score(Vector2 position)
  2. public void Add(int points)
  3. public void Draw(SpriteBatch spriteBatch)

Utmaningar

klassen Pumpkin

Lägg till klassen Pumpkin (sv. pumpa). Om ormen får en pumpa på sig fryser spelet.

klassen TextDisplay

När spelet fryser visas game over. Klassen TextDisplay ordnar detta. Skriv denna klass själv.

klassen Cherry

Lägg till en klass Cherry (sv. körsbär). Körsbär som fångas gör att hastigheten ökar under fem sekunder.

klassen Life display

Tre hjältan, som representerar tre liv, visas vid start. Kollision med pumpa gör att ett liv försvinner. När sista livet tar slut är det Game Over.

klassen Background

Kakla bakgrunden med en liten bakgrundsbild.

Tips: Rita den lilla bilden flera gånger längs x-axeln. Upprepa sedan i y-led.

Reflektion

Det var mycket nytt på en gång. Få kommer att förstå allt på en gång. Det krävs mer övning.

Viktiga begrepp:

  • klass
  • objekt
  • objektvariabel
  • konstruktor
  • propertiy
  • metod

Frågor

  • Vad har du lärt dig så här långt?
  • Vad är oklart?