Ga naar hoofdinhoud

Opdracht

Na het doorlopen van de microStudio tutorial heb je een eenvoudige maar werkende game. De code staat hieronder.

Code
init = function()
gameover = 0
running = 0
blades = [200,300,400]
passed = [0,0,0]
score = 0
position = 0
speed = 2
end

update = function()
if gameover>0 then
gameover = gameover+1
if gameover>300 then init() end
elsif running then
position = position+speed
speed = speed + 0.001

if touch.touching and hero_y == 0 then
hero_vy = 7
audio.beep("square tempo 20000 volume 10 span 100 C4 to C6")
end

hero_vy -= 0.3
hero_y = max(0,hero_y+hero_vy)

for i=0 to blades.length-1
if blades[i]<position-120 then
blades[i] = position+280+random.next()*200
passed[i] = 0
end
if abs(position-blades[i])<10 then
if hero_y<10 then
running = 0
gameover = 1
audio.beep("saw tempo 10000 volume 50 span 50 C2 to C4 to C2 to C4")
elsif not passed[i] then
passed[i] = 1
score += 1
audio.beep("saw tempo 960 volume 50 span 20 C6")
end
end
end
else
if touch.touching then running = 1 end
end
end

draw = function()
screen.fillRect(0,0,screen.width,screen.height,"rgb(57,0,57)")

for i=-6 to 6 by 1
screen.drawSprite("wall",i*40-position%40,-80,40)
end

screen.drawSprite("hero",-80,-50+hero_y,20)
for i=0 to blades.length-1
screen.drawSprite("blade",blades[i]-position-80,-50,20)
end

screen.drawText(score,120,80,20,"#FFF")
if gameover then
screen.fillRect(0,0,screen.width,screen.height,"rgba(255,0,0,.5)")
screen.drawText("GAME OVER",0,0,50,"#FFF")
elsif not running then
screen.drawText("READY?",0,30,50,"#FFF")
end
end

Opdrachten

  1. Pas de start en eindtekst aan.
  2. Pas de achtergrondkleur van het spel en het eindscherm aan.

Assets

In deze opdracht worden de getekende sprites vervangen door assets uit het Pixel Platormer pack van Kenney. Het is mogelijk om assets toe te voegen aan microStudio door ze vanaf je computer naar Sprites te slepen.

Download voor deze opdracht microstudio-kenney-assets.zip . Open deze zip-map en sleep de bestanden naar Sprites.

  1. Verwijder de sprites wall, blade en hero
  2. Hernoem tile_0002 naar wall
  3. Hernoem tile_0042 naar blade
  4. Hernoem tile_0006 naar hero

Test nu je spel. Als alles goed is gegaan ziet het spel er nu uit zoals de screenshot hierboven.

Opdracht

  1. Verander de huidige sprites door sprites naar keuze, dat mag ook uit een ander asset-pack.

Animation

Je kunt sprites animeren door bij een sprite linksonder op Animation te klikken.

Opdracht

  1. Geef de hero een animatie van miniaal 2 frames.

High Score

In deze opdracht gaan we de high score bijhouden.

  1. Voeg boven init = function() het volgende toe: high_score = 0
  2. Voeg na if gameover then het volgende toe: if score > high_score then high_score = score end
  3. Voeg onder screen.drawText("GAME OVER",0,0,50,"#FFF") het volgende toe: screen.drawText("HIGHSCORE: " + high_score,0,-50,20,"#FFF")

De code is dan als hieronder.

Code
high_score = 0

init = function()
gameover = 0
running = 0
blades = [200,300,400]
passed = [0,0,0]
score = 0
position = 0
speed = 2
end

update = function()
if gameover>0 then
gameover = gameover+1
if gameover>300 then init() end
elsif running then
position = position+speed
speed = speed + 0.001

if touch.touching and hero_y == 0 then
hero_vy = 7
audio.beep("square tempo 20000 volume 10 span 100 C4 to C6")
end

hero_vy -= 0.3
hero_y = max(0,hero_y+hero_vy)

for i=0 to blades.length-1
if blades[i]<position-120 then
blades[i] = position+280+random.next()*200
passed[i] = 0
end
if abs(position-blades[i])<10 then
if hero_y<10 then
running = 0
gameover = 1
audio.beep("saw tempo 10000 volume 50 span 50 C2 to C4 to C2 to C4")
elsif not passed[i] then
passed[i] = 1
score += 1
audio.beep("saw tempo 960 volume 50 span 20 C6")
end
end
end
else
if touch.touching then running = 1 end
end
end

draw = function()
screen.fillRect(0,0,screen.width,screen.height,"rgb(57,0,57)")

for i=-6 to 6 by 1
screen.drawSprite("wall",i*40-position%40,-80,40)
end

screen.drawSprite("hero",-80,-50+hero_y,20)
for i=0 to blades.length-1
screen.drawSprite("blade",blades[i]-position-80,-50,20)
end

screen.drawText(score,120,80,20,"#FFF")
if gameover then
if score > high_score then high_score = score end
screen.fillRect(0,0,screen.width,screen.height,"rgba(255,0,0,.5)")
screen.drawText("GAME OVER",0,0,50,"#FFF")
screen.drawText("HIGH SCORE: " + high_score,0,-50,20,"#FFF")
elsif not running then
screen.drawText("READY?",0,30,50,"#FFF")
end
end

Toelichting

codetoelichting
high_score = 0Bij start spel is de high_score gelijk aan 0.
if score > high_score then high_score = score endAls de huidige score groter is dan de high_score wordt de high_score gelijk aan de score. Deze code wordt uitgevoerd zodra de gebruiker 'game over' is.
screen.drawText("HIGH SCORE: " + high_score,0,-50,20,"#FFF")Geeft de high_score weer in beeld op positie 0,-50 met lettergrootte 20 en in de kleur wit (#FFF).

Opdracht

  1. Pas de code aan zodat er NEW HIGH SCORE: komt te staan zodra er een nieuwe high score is. Is de high score niet verbeterd dan staat er HIGH SCORE:.

Aanvullende opdrachten

  1. Voeg munten of gems toe om te verzamelen. Deze verhogen de score met +2.