From e6d3c26411d2563e7d9af5b776a156f6dbb78862 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 14 Sep 2018 11:22:08 -0700 Subject: [PATCH] skill game (#1235) --- docs/SUMMARY.md | 1 + docs/projects/games.md | 5 ++ docs/projects/snap-the-dot.md | 98 +++++++++++++++++++++++ docs/static/mb/projects/snap-the-dot.png | Bin 0 -> 11070 bytes 4 files changed, 104 insertions(+) create mode 100644 docs/projects/snap-the-dot.md create mode 100644 docs/static/mb/projects/snap-the-dot.png diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index fb7cd1b9..cc02a465 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -46,6 +46,7 @@ * [Analog Pin Tester](/projects/analog-pin-tester) * [Light Level Meter](/projects/light-level-meter) * [Radio bridge](/projects/radio-bridge) + * [Snap the dot](/projects/snap-the-dot) ## #examples diff --git a/docs/projects/games.md b/docs/projects/games.md index fd2e9ae0..a6f5eaf2 100644 --- a/docs/projects/games.md +++ b/docs/projects/games.md @@ -22,6 +22,11 @@ Fun games to build with your @boardname@. "url":"/projects/reaction-time", "description": "Make a reaction time experiment that responds to your body's conductivity!", "imageUrl":"/static/mb/projects/reaction.jpg" +}, { + "name": "Snap the dot", + "url": "/projects/snap-the-dot", + "description": "Use the game blocks to create a skill game", + "imageUrl": "/static/mb/projects/snap-the-dot.png" }, { "name": "Salute!", "url":"/projects/salute", diff --git a/docs/projects/snap-the-dot.md b/docs/projects/snap-the-dot.md new file mode 100644 index 00000000..3dbef218 --- /dev/null +++ b/docs/projects/snap-the-dot.md @@ -0,0 +1,98 @@ +# Snap the dot + +## Introduction @unplugged + +Snap the dot is a kill game where the player has to press **A** exactly when the dot +is in the center of the screen. + +This is a tutorial to learn how to use the game engine. + +## Create a sprite @fullscreen + +Drag a ``||game:create sprite||`` block in the workspace. A sprite is a single pixel that can move on the screen. It has a ``x``, ``y`` position and a direction. + +```blocks +let sprite: game.LedSprite = null +sprite = game.createSprite(2, 2) +``` + +## Move the dot @fullscreen + +The sprite starts in the center facing right. Drag a +``||game:move||`` block in the forever to make it move. +Notice how it moves to the right but does not bounce back. + +```blocks +let sprite: game.LedSprite = null +sprite = game.createSprite(2, 2) +basic.forever(function () { + sprite.move(1) +}) +``` + +## Bounce @fullscreen + +Drag a ``||game:ifOnEdgeBounce||`` block to make the sprite +bounce on the side of the screen. Add also a ``||basic:pause||`` block to slow down the sprite. + +```blocks +let sprite: game.LedSprite = null +sprite = game.createSprite(2, 2) +basic.forever(function () { + sprite.move(1) + sprite.ifOnEdgeBounce() + basic.pause(100) +}) +``` + +## Test and download + +Use the simulator to find the best speed. If you have a @boardname@, press ``Download`` +to try it out on the device. + +## Button handling @fullscreen + +When **A** is pressed, we test if the sprite is in the center or not. + +Drag a ``||input:on button pressed||`` block to handle the **A** button. +Drag a ``||logic:if||`` block and test if ``||game:x||`` is equal to 2. + +```blocks +let sprite: game.LedSprite = null +input.onButtonPressed(Button.A, function () { + if (sprite.get(LedSpriteProperty.X) == 2) { + } else { + } +}) +sprite = game.createSprite(2, 2) +basic.forever(function () { + sprite.move(1) + basic.pause(100) + sprite.ifOnEdgeBounce() +}) +``` + ## Score and game over + +Drag a ``||game:add score||`` and a ``||game:game over||`` block to handle success +(sprite in the center) and failure (sprite not in the center) + + ```blocks +let sprite: game.LedSprite = null +input.onButtonPressed(Button.A, function () { + if (sprite.get(LedSpriteProperty.X) == 2) { + game.addScore(1) + } else { + game.gameOver() + } +}) +sprite = game.createSprite(2, 2) +basic.forever(function () { + sprite.move(1) + basic.pause(100) + sprite.ifOnEdgeBounce() +}) +``` + +## Test and download + +Your game is ready! Use the simulator to find the best speed. If you have a @boardname@, press ``Download`` to try it out on the device. diff --git a/docs/static/mb/projects/snap-the-dot.png b/docs/static/mb/projects/snap-the-dot.png new file mode 100644 index 0000000000000000000000000000000000000000..acf9073a183d57cda6f3ede5481c8c3d6cc074b4 GIT binary patch literal 11070 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 TZxYB{*B7daS_)Nimf`;oOVCSs literal 0 HcmV?d00001