Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating second half of target lab #6703

Merged
merged 2 commits into from
Feb 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/courses/csintro/blocks/unit-2/lab0201-part1.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
if (projectileCount < maxProjectiles) {
fireSprite = sprites.create(lab2imgs.flame, SpriteKind.Projectile)
fireSprite.setPosition(flamethrower.x, flamethrower.y)
fireSprite.setVelocity(0, -90)
fireSprite.setVelocity(0, -200)
fireSprite.setFlag(SpriteFlag.AutoDestroy, true)
projectileCount += 1
}
Expand Down
4 changes: 2 additions & 2 deletions docs/courses/csintro/blocks/unit-2/lab0201-part2.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ let fireSprite: Sprite = null
let flamethrower: Sprite = null
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
```

```ghost
Expand All @@ -125,8 +125,8 @@ let fireSprite: Sprite = null
let flamethrower: Sprite = null
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
game.onUpdateInterval(1000, function () {
iceSprite = sprites.create(lab2imgs.icecube, SpriteKind.Enemy)
iceSprite.setPosition(randint(8, 152), 0)
Expand Down
8 changes: 4 additions & 4 deletions docs/courses/csintro/blocks/unit-2/lab0201-part3.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ Test your project to see if your code runs as expected.
let flamethrower: Sprite = null
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
// @highlight
info.setScore(0)
// @highlight
Expand Down Expand Up @@ -120,8 +120,8 @@ let flamethrower: Sprite = null
scene.setBackgroundColor(11)
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
info.setScore(0)
info.setLife(3)
```
Expand Down Expand Up @@ -155,8 +155,8 @@ let fireSprite: Sprite = null
let flamethrower: Sprite = null
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
game.onUpdateInterval(1000, function () {
iceSprite = sprites.create(lab2imgs.icecube, SpriteKind.Enemy)
iceSprite.setPosition(randint(8, 152), 0)
Expand All @@ -182,8 +182,8 @@ let fireSprite: Sprite = null
let flamethrower: Sprite = null
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
info.setScore(0)
info.setLife(3)
game.onUpdateInterval(1000, function () {
Expand Down
20 changes: 13 additions & 7 deletions docs/courses/csintro/blocks/unit-2/lab0201-part4.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@

## Collision alert! @showdialog

When enemies hit your player, the player should lose a life. Let's finish
the game by adding one more event handler.
When enemies hit your player, the player should lose a life.<br/>
Let's finish the game by adding one more event handler.

![Lab 2.1.4](https://arcade.makecode.com/api/_0wWasDYJfW35/thumb)


## Ouch!

Expand All @@ -21,7 +24,7 @@ that removes one of the player's lives.
---

Test your project to see if your code runs as expected.
View the hint if you need help.


#### ~ tutorialhint

Expand All @@ -34,8 +37,10 @@ sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSp

## Complete! @showdialog

Good work! Your game is now complete! If you have time, then move on to the bonus
section, where we will add some sound effects!
Good work! Lab 2.1 is now complete!

If you have time, move on to the bonus
level, to add some sound effects!



Expand Down Expand Up @@ -64,8 +69,8 @@ let flamethrower: Sprite = null
scene.setBackgroundColor(11)
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
info.setScore(0)
info.setLife(3)
game.onUpdateInterval(1000, function () {
Expand Down Expand Up @@ -95,10 +100,11 @@ sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSp
let iceSprite: Sprite = null
let fireSprite: Sprite = null
let flamethrower: Sprite = null
scene.setBackgroundColor(11)
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
flamethrower.setStayInScreen(true)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
info.setScore(0)
info.setLife(3)
game.onUpdateInterval(1000, function () {
Expand Down
147 changes: 97 additions & 50 deletions docs/courses/csintro/blocks/unit-2/lab0201-part5.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,40 @@
# Lab 2.1 Part 5 (BONUS): Pew, Pew!
### @explicitHints true

## BONUS -- Pew pew! @showdialog
## BONUS Pew, Pew! @showdialog

Time to add some sound effects to your project!

![Lab 2.1.5](https://arcade.makecode.com/api/_ehvLLVLYx1iu/thumb)

## Pew pew!

Let's add a sound whenever a projectile is fired.
We'll use a new event handler for this.

---

1. From the ``||sprites:Sprites||`` drawer, add an
``||sprites:on created||`` ``||variables(sprites):sprite||``
``||sprites:of kind (Player)||``
``||sprites:on created [sprite] of kind [Player]||``
container to your workspace.
1. Change the block so that it reads as follows:
``||sprites(noclick):on created sprite of kind Projectile||``
1. Into your new container, drag a
``||music:play sound (ba ding) until done||``
``||music:play (sound ba ding) until done||``
block from the
``||music:Music||`` drawer.
1. Change the sound to **pew pew**.
1. Change the playback mode to **in background**.

This new event handler will run anytime a projectile is created in your project.

Test your project to see if your code runs as expected.
View the hint if you need help.
---

Test your project to see if your code runs as expected.
Feel free to try different sounds!

#### ~ tutorialhint

```block
sprites.onCreated(SpriteKind.Projectile, function (sprite) {
music.play(music.melodyPlayable(music.pewPew), music.PlaybackMode.InBackground)
Expand All @@ -40,60 +46,99 @@ sprites.onCreated(SpriteKind.Projectile, function (sprite) {
Now, let's add a sound whenever an enemy is destroyed.
We'll use yet another new event handler for this.

---

1. From the ``||sprites:Sprites||`` drawer, add an
``||sprites:on destroyed||`` ``||variables(sprites):sprite||``
``||sprites:of kind (Player)||``
``||sprites:on destroyed [sprite] of kind [Player]||``
container to your workspace.
1. Change the block so that it reads as follows:
``||sprites(noclick):on created sprite of kind Enemy||``
``||sprites(noclick):on destroyed sprite of kind Enemy||``
1. Into your new container, drag a
``||music:play sound (ba ding) until done||``
``||music:play (sound ba ding) until done||``
block from the
``||music:Music||`` drawer.
1. Change the sound to **small crash**.
1. Change the playback mode to **in background**.

This new event handler will run anytime an enemy is destroyed.

Test your project to see if your code runs as expected.
View the hint if you need help.
---


Test your project to see if your code runs as expected.
Feel free to try different sounds!

---

**Question**: Did you notice that the crash plays when an enemy flies off of the screen,
too? Why is that? How could you fix it?

~hint Answer
Instead of using the new "on destroyed" event handler, you could add the
sound blocks to the existing event handlers where the enemies are destroyed.

---

We have an instruction in our code telling the computer to auto-destroy Enemy sprites when they leave the screen.

To avoid hearing the crash in that instance, try moving the sound effect out of the <br/>
``||sprites(noclick):on destroyed sprite of kind Enemy||`` <br/>
container and into the overlap container where the destroying happens.

hint~

#### ~ tutorialhint

```block
sprites.onDestroyed(SpriteKind.Enemy, function (sprite) {
music.play(music.melodyPlayable(music.smallCrash), music.PlaybackMode.InBackground)
})
```

or

```blocks
sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, otherSprite) {
info.changeScoreBy(1)
sprites.destroy(sprite)
sprites.destroy(otherSprite, effects.spray, 500)
//@highlight
music.play(music.melodyPlayable(music.smallCrash), music.PlaybackMode.InBackground)
})
```





## Complete! @showdialog

Good work! If you still have some time, then give these other bonuses a try!
Good work! If you still have time, give these other bonuses a try!

---


- Create your own images for each sprite
- Create a background image
- Let the player fire projectiles with the **B** button also, but use
this block instead:

```block
let projectile = sprites.createProjectileFromSprite(sprites.projectile.explosion1, heroSprite, 0, -50)
let projectile = sprites.createProjectileFromSprite(lab2imgs.flame, flamethrower, 0, -50)
```
How does this block work compared to the blocks that you used for the **A** button?
(How does this block work compared to the blocks that you used for the **A** button?)

- Create your own images for the sprites.
- Create a background image.



```package
lab2imgs=github:kiki-lee/lab2imgs
```

```template
controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
plasmaSprite = sprites.create(sprites.projectile.explosion1, SpriteKind.Projectile)
plasmaSprite.setPosition(heroSprite.x, heroSprite.y)
plasmaSprite.setVelocity(0, -50)
plasmaSprite.setFlag(SpriteFlag.AutoDestroy, true)
fireSprite = sprites.create(lab2imgs.flame, SpriteKind.Projectile)
fireSprite.setPosition(flamethrower.x, flamethrower.y)
fireSprite.setVelocity(0, -200)
fireSprite.setFlag(SpriteFlag.AutoDestroy, true)
})
sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, otherSprite) {
info.changeScoreBy(1)
Expand All @@ -104,32 +149,33 @@ sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSp
info.changeLifeBy(-1)
sprites.destroy(otherSprite, effects.fire, 500)
})
let enemySprite: Sprite = null
let plasmaSprite: Sprite = null
let heroSprite: Sprite = null
heroSprite = sprites.create(sprites.space.spaceOrangeShip, SpriteKind.Player)
heroSprite.setPosition(80, 110)
heroSprite.setStayInScreen(true)
controller.moveSprite(heroSprite)
let iceSprite: Sprite = null
let fireSprite: Sprite = null
let flamethrower: Sprite = null
scene.setBackgroundColor(11)
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
info.setScore(0)
info.setLife(3)
game.onUpdateInterval(1000, function () {
enemySprite = sprites.create(sprites.space.spaceAsteroid0, SpriteKind.Enemy)
enemySprite.setPosition(randint(8, 152), 0)
enemySprite.setVelocity(0, 25)
enemySprite.setFlag(SpriteFlag.AutoDestroy, true)
iceSprite = sprites.create(lab2imgs.icecube, SpriteKind.Enemy)
iceSprite.setPosition(randint(8, 152), 0)
iceSprite.setVelocity(0, 25)
iceSprite.setFlag(SpriteFlag.AutoDestroy, true)
})
```

```ghost
controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
plasmaSprite = sprites.create(sprites.projectile.explosion1, SpriteKind.Projectile)
plasmaSprite.setPosition(heroSprite.x, heroSprite.y)
plasmaSprite.setVelocity(0, -50)
plasmaSprite.setFlag(SpriteFlag.AutoDestroy, true)
fireSprite = sprites.create(lab2imgs.flame, SpriteKind.Projectile)
fireSprite.setPosition(flamethrower.x, flamethrower.y)
fireSprite.setVelocity(0, -200)
fireSprite.setFlag(SpriteFlag.AutoDestroy, true)
})
controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
projectile = sprites.createProjectileFromSprite(sprites.projectile.explosion1, heroSprite, 0, -50)
projectile = sprites.createProjectileFromSprite(lab2imgs.flame, flamethrower, 0, -50)
})
sprites.onCreated(SpriteKind.Projectile, function (sprite) {
music.play(music.melodyPlayable(music.pewPew), music.PlaybackMode.InBackground)
Expand All @@ -146,20 +192,21 @@ sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSp
info.changeLifeBy(-1)
sprites.destroy(otherSprite, effects.fire, 500)
})
let enemySprite: Sprite = null
let plasmaSprite: Sprite = null
let heroSprite: Sprite = null
let iceSprite: Sprite = null
let fireSprite: Sprite = null
let flamethrower: Sprite = null
let projectile: Sprite = null
heroSprite = sprites.create(sprites.space.spaceOrangeShip, SpriteKind.Player)
heroSprite.setPosition(80, 110)
heroSprite.setStayInScreen(true)
controller.moveSprite(heroSprite)
scene.setBackgroundColor(11)
flamethrower = sprites.create(lab2imgs.flamethrower, SpriteKind.Player)
flamethrower.setPosition(80, 110)
controller.moveSprite(flamethrower)
flamethrower.setStayInScreen(true)
info.setScore(0)
info.setLife(3)
game.onUpdateInterval(1000, function () {
enemySprite = sprites.create(sprites.space.spaceAsteroid0, SpriteKind.Enemy)
enemySprite.setPosition(randint(8, 152), 0)
enemySprite.setVelocity(0, 25)
enemySprite.setFlag(SpriteFlag.AutoDestroy, true)
iceSprite = sprites.create(lab2imgs.icecube, SpriteKind.Enemy)
iceSprite.setPosition(randint(8, 152), 0)
iceSprite.setVelocity(0, 25)
iceSprite.setFlag(SpriteFlag.AutoDestroy, true)
})
```
Loading
Loading