pxt-arcade 1.12.2 → 1.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/built/target.js +148 -143
- package/built/target.json +148 -143
- package/built/targetlight.json +5 -5
- package/built/theme.json +5 -0
- package/docs/SUMMARY.md +1 -0
- package/docs/hero-banner.md +6 -6
- package/docs/hour-of-code-2022-es.html +1 -1
- package/docs/hour-of-code-2022-pt.html +0 -1
- package/docs/hour-of-code-2022.html +15 -12
- package/docs/index-ref.json +1 -1
- package/docs/kiosk.html +1 -1
- package/docs/multiplayer.md +135 -0
- package/docs/projects/SUMMARY.md +3 -1
- package/docs/skillmap/balloon/balloon1.md +26 -312
- package/docs/skillmap/balloon/balloon2.md +18 -315
- package/docs/skillmap/balloon/balloon3.md +18 -317
- package/docs/skillmap/balloon/balloon4.md +105 -583
- package/docs/skillmap/balloon.md +14 -13
- package/docs/skillmap/mole/mole1.md +51 -326
- package/docs/skillmap/mole/mole2.md +43 -332
- package/docs/skillmap/mole/mole3.md +47 -316
- package/docs/{test/skillmap → skillmap}/mole/mole4.md +0 -0
- package/docs/skillmap/mole.md +14 -4
- package/docs/skillmap/turkey/turkey1.md +194 -127
- package/docs/skillmap/turkey/turkey2.md +144 -96
- package/docs/skillmap/turkey/turkey3.md +135 -84
- package/docs/skillmap/turkey.md +12 -10
- package/docs/skillmaps.md +24 -8
- package/docs/static/kiosk/asset-manifest.json +6 -6
- package/docs/static/kiosk/static/css/main.8897f977.css +2 -0
- package/docs/static/kiosk/static/css/main.8897f977.css.map +1 -0
- package/docs/static/kiosk/static/js/main.f11fd683.js +3 -0
- package/docs/static/kiosk/static/js/{main.01c7792a.js.LICENSE.txt → main.f11fd683.js.LICENSE.txt} +12 -32
- package/docs/static/kiosk/static/js/main.f11fd683.js.map +1 -0
- package/docs/static/multiplayer/help/emojis.png +0 -0
- package/docs/static/multiplayer/help/host-multiplayer.png +0 -0
- package/docs/static/multiplayer/help/hosted-game.png +0 -0
- package/docs/static/multiplayer/help/join-game.png +0 -0
- package/docs/static/multiplayer/help/joined-game.png +0 -0
- package/docs/static/multiplayer/help/share-button.png +0 -0
- package/docs/static/multiplayer/help/start-game.png +0 -0
- package/docs/static/skillmap/assets/dkc-logo-small.png +0 -0
- package/docs/static/tutorials/arrows/2pbg.png +0 -0
- package/docs/static/tutorials/arrows/key.png +0 -0
- package/docs/static/tutorials/arrows/p1.png +0 -0
- package/docs/static/tutorials/arrows/p2.png +0 -0
- package/docs/static/tutorials/horse/finish.png +0 -0
- package/docs/static/tutorials/horse/frame.png +0 -0
- package/docs/static/tutorials/horse/p1.png +0 -0
- package/docs/static/tutorials/horse/p2.png +0 -0
- package/docs/test/skillmap/balloon.md +1 -1
- package/docs/test/skillmap/dino/{collectort1.md → dino1.md} +135 -79
- package/docs/test/skillmap/dino/{collectort2.md → dino2.md} +0 -0
- package/docs/test/skillmap/dino/{collectort3.md → dino3.md} +0 -0
- package/docs/test/skillmap/dino/{collectort4.md → dino4.md} +0 -0
- package/docs/test/skillmap/dino/{collectort5.md → dino5.md} +0 -0
- package/docs/test/skillmap/dino.md +82 -0
- package/docs/test/skillmap/mole.md +1 -1
- package/docs/test/skillmap/turkey.md +1 -0
- package/docs/test/tutorials/arrow.md +677 -0
- package/docs/test/tutorials/debug.md +180 -0
- package/docs/test/tutorials/horse.md +456 -0
- package/docs/test/tutorials/hundred.md +417 -0
- package/docs/test/tutorials/target.md +6 -2
- package/docs/test/tutorials/wakanda-forever.md +191 -172
- package/docs/tutorials/arrow.md +677 -0
- package/docs/tutorials/horse.md +456 -0
- package/docs/{test/tutorials/target/target_copy.md → tutorials/target.md} +11 -1085
- package/docs/tutorials/wakanda-forever.md +3 -1
- package/package.json +2 -2
- package/docs/skillmap/turkey/turkey0.md +0 -197
- package/docs/skillmap/turkey/turkey1a.md +0 -308
- package/docs/skillmap/turkey/turkey2a.md +0 -277
- package/docs/skillmap/turkey/turkey3a.md +0 -219
- package/docs/static/kiosk/static/css/main.927f4dad.css +0 -2
- package/docs/static/kiosk/static/css/main.927f4dad.css.map +0 -1
- package/docs/static/kiosk/static/js/main.01c7792a.js +0 -3
- package/docs/static/kiosk/static/js/main.01c7792a.js.map +0 -1
- package/docs/test/skillmap/balloon/balloon1.md +0 -247
- package/docs/test/skillmap/balloon/balloon2.md +0 -377
- package/docs/test/skillmap/balloon/balloon3.md +0 -389
- package/docs/test/skillmap/balloon/balloon4.md +0 -385
- package/docs/test/skillmap/mole/mole1.md +0 -382
- package/docs/test/skillmap/mole/mole2.md +0 -422
- package/docs/test/skillmap/mole/mole3.md +0 -384
- package/docs/test/skillmap/turkey/turkey1.md +0 -338
- package/docs/test/skillmap/turkey/turkey2.md +0 -318
- package/docs/test/skillmap/turkey/turkey3.md +0 -265
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## {Intro @unplugged}
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
Help Shuri, Okoye, and Riri Williams (Ironheart) escape Namor.
|
|
6
8
|
|
|
7
9
|

|
|
8
10
|
|
|
9
11
|
|
|
10
|
-
Design
|
|
12
|
+
Design your own adventure in MakeCode Arcade, creating sprites for Shuri, Okoye, Ironheart, and Namor.
|
|
11
13
|
|
|
12
14
|
## {Step 2}
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
image for the background.
|
|
16
|
+
**Let's visit Wakanda!**
|
|
16
17
|
|
|
17
18
|
---
|
|
18
19
|
|
|
@@ -22,6 +23,9 @@ and snap it into the empty <br/>
|
|
|
22
23
|
``||loops(noclick):on start||`` <br/>
|
|
23
24
|
container already in the workspace.
|
|
24
25
|
|
|
26
|
+
- :mouse pointer: Click **Next** to get to the next set step.
|
|
27
|
+
|
|
28
|
+
|
|
25
29
|
```blocks
|
|
26
30
|
//@highlight
|
|
27
31
|
scene.setBackgroundImage(img`.`)
|
|
@@ -29,14 +33,16 @@ scene.setBackgroundImage(img`.`)
|
|
|
29
33
|
|
|
30
34
|
## {Step 3}
|
|
31
35
|
|
|
32
|
-
- :
|
|
36
|
+
- :mouse pointer: Click the **empty grey square** in the<br/>
|
|
37
|
+
``||scene(noclick):set background image to [ ]||`` <br/>
|
|
38
|
+
block that's now in your workspace.
|
|
33
39
|
|
|
40
|
+
- :paint brush: Switch to **My Assets** <br/>
|
|
41
|
+

|
|
42
|
+
and choose the **Wakanda** background.
|
|
34
43
|

|
|
35
44
|
|
|
36
|
-
|
|
37
|
-
_💡 Switch over to **My Assets** to choose the image named 'wakanda'._
|
|
38
|
-
_The image name shows when you hover over it._
|
|
39
|
-
|
|
45
|
+
- :mouse pointer: Then click **Done**.
|
|
40
46
|
|
|
41
47
|
```blocks
|
|
42
48
|
//@highlight
|
|
@@ -46,29 +52,26 @@ scene.setBackgroundImage(assets.image`wakanda`)
|
|
|
46
52
|
## {Step 4}
|
|
47
53
|
|
|
48
54
|
|
|
49
|
-
**Introduce Shuri to the game as a new sprite
|
|
55
|
+
**Introduce Shuri to the game as a new sprite.**
|
|
50
56
|
|
|
51
57
|
---
|
|
52
58
|
|
|
53
|
-
- :paper plane: From ``||sprites:Sprites||``,
|
|
54
|
-
``||variables:set [mySprite] to sprite [ ] of kind [Player]||``
|
|
55
|
-
into **the end** of the
|
|
59
|
+
- :paper plane: From ``||sprites:Sprites||``, grab
|
|
60
|
+
``||variables(sprites):set [mySprite] to sprite [ ] of kind [Player]||``
|
|
61
|
+
and drag it into **the end** of the <br/>
|
|
56
62
|
``||loops(noclick):on start||`` container.
|
|
57
63
|
|
|
58
|
-
- :mouse pointer:
|
|
59
|
-
``||variables:set [mySprite] to sprite [ ] of kind [Player]||``<br/>
|
|
60
|
-
and
|
|
61
|
-
|
|
62
|
-
Rename it to **Shuri**.
|
|
64
|
+
- :mouse pointer: Now find your<br/>
|
|
65
|
+
``||variables(noclick):set [mySprite] to sprite [ ] of kind [Player]||``<br/>
|
|
66
|
+
block in the workspace and click on the name ``||variables(noclick):mySprite||``. <br/>
|
|
67
|
+
Select **Rename variable...** and enter **Shuri**.
|
|
63
68
|
|
|
64
|
-
- :paint brush: Click the grey box in the
|
|
65
|
-
|
|
69
|
+
- :paint brush: Click the empty grey box in the same block to open the **image editor**.
|
|
70
|
+
Switch to **My Assets** again and select **Shuri**.
|
|
66
71
|
|
|
67
72
|

|
|
68
73
|
|
|
69
74
|
|
|
70
|
-
_💡 Switch over to **My Assets** to choose the image for 'Shuri'._
|
|
71
|
-
|
|
72
75
|
```blocks
|
|
73
76
|
scene.setBackgroundImage(assets.image`wakanda`)
|
|
74
77
|
//@highlight
|
|
@@ -78,7 +81,7 @@ let Shuri = sprites.create(assets.image`shuri`, SpriteKind.Player)
|
|
|
78
81
|
## {Step 5}
|
|
79
82
|
|
|
80
83
|
|
|
81
|
-
**Allow Shuri to move inside the screen boundary
|
|
84
|
+
**Allow Shuri to move inside the screen boundary.**
|
|
82
85
|
|
|
83
86
|
We need to give Shuri the ability move around when the controller buttons are pressed.
|
|
84
87
|
|
|
@@ -123,34 +126,65 @@ controller.moveSprite(Shuri)
|
|
|
123
126
|
Shuri.setStayInScreen(true)
|
|
124
127
|
```
|
|
125
128
|
|
|
126
|
-
## {Step 7}
|
|
127
129
|
|
|
128
130
|
|
|
129
|
-
|
|
131
|
+
|
|
132
|
+
## {7. Check Your Game!}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
- :binoculars: Look at your project in the game window!
|
|
136
|
+
|
|
137
|
+
You should see Shuri and be able to move her around with the arrow keys when hovering over the controls.
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
## {Step 8}
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
**Add Namor to the game.**
|
|
130
148
|
|
|
131
149
|
---
|
|
132
150
|
|
|
133
|
-
- :paper plane: From ``||sprites:Sprites||``, drag
|
|
134
|
-
``||variables:set [mySprite] to sprite [ ] of kind [Player]
|
|
151
|
+
- :paper plane: From ``||sprites:Sprites||``, drag <br/>
|
|
152
|
+
``||variables(sprites):set [mySprite] to sprite [ ] of kind [Player]||``<br/>
|
|
135
153
|
into **the end** of the
|
|
136
154
|
``||loops(noclick):on start||`` container.
|
|
137
155
|
|
|
138
|
-
- :mouse pointer:
|
|
139
|
-
``||variables:set [mySprite] to sprite [ ] of kind [Player]||``<br/>
|
|
140
|
-
and
|
|
141
|
-
|
|
142
|
-
Rename it to **Namor**.
|
|
156
|
+
- :mouse pointer: Find the new<br/>
|
|
157
|
+
``||variables(noclick):set [mySprite] to sprite [ ] of kind [Player]||``<br/>
|
|
158
|
+
block in the workspace and click on the name ``||variables(noclick):mySprite||``. <br/>
|
|
159
|
+
Select **Rename variable...** and enter **Namor**.
|
|
143
160
|
|
|
144
|
-
- :paint brush: Click the grey box in the
|
|
145
|
-
|
|
161
|
+
- :paint brush: Click the empty grey box in the same block to open the **image editor**.
|
|
162
|
+
Switch to **My Assets** again and select **Namor**.
|
|
146
163
|
|
|
147
164
|

|
|
148
165
|
|
|
149
|
-
_💡 Switch over to **My Assets** to choose the image for 'Namor'._
|
|
150
166
|
|
|
151
|
-
|
|
167
|
+
```blocks
|
|
168
|
+
scene.setBackgroundImage(assets.image`wakanda`)
|
|
169
|
+
let Shuri = sprites.create(assets.image`shuri`, SpriteKind.Player)
|
|
170
|
+
controller.moveSprite(Shuri)
|
|
171
|
+
Shuri.setStayInScreen(true)
|
|
172
|
+
//@highlight
|
|
173
|
+
let Namor = sprites.create(assets.image`namor`, SpriteKind.Player)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
## {Step 9}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
**Make Namor the Enemy.**
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
- :mouse pointer: In the<br/>
|
|
152
185
|
``||variables(noclick):set [Namor] to sprite [ ] of kind [Player]||``<br/>
|
|
153
|
-
|
|
186
|
+
block that you just created, click on ``||sprites(noclick):Player||``<br/>
|
|
187
|
+
and change the kind to ``||sprites(noclick):Enemy||``.
|
|
154
188
|
|
|
155
189
|
```blocks
|
|
156
190
|
scene.setBackgroundImage(assets.image`wakanda`)
|
|
@@ -161,19 +195,19 @@ Shuri.setStayInScreen(true)
|
|
|
161
195
|
let Namor = sprites.create(assets.image`namor`, SpriteKind.Enemy)
|
|
162
196
|
```
|
|
163
197
|
|
|
164
|
-
## {Step
|
|
198
|
+
## {Step 10}
|
|
165
199
|
|
|
166
200
|
|
|
167
201
|
We want Namor to start in the upper corner of the screen.
|
|
168
202
|
|
|
169
203
|
---
|
|
170
204
|
|
|
171
|
-
- :paper plane: From ``||sprites:Sprites
|
|
205
|
+
- :paper plane: From the ``||sprites:Sprites||`` category, grab <br/>
|
|
172
206
|
``||sprites:set [mySprite] position to x [0] y [0]||``<br/>
|
|
173
|
-
and
|
|
207
|
+
and snap it in at **the end** of the ``||loops(noclick):on start||`` container.<br/>
|
|
174
208
|
|
|
175
209
|
|
|
176
|
-
- :mouse pointer: Click ``||variables(noclick):
|
|
210
|
+
- :mouse pointer: Click ``||variables(noclick):mySprite||`` and choose ``||variables(noclick):Namor||``.<br/>
|
|
177
211
|
Set **x** to **148** and **y** to **2**.
|
|
178
212
|
|
|
179
213
|
|
|
@@ -187,19 +221,19 @@ let Namor = sprites.create(assets.image`namor`, SpriteKind.Enemy)
|
|
|
187
221
|
Namor.setPosition(148, 2)
|
|
188
222
|
```
|
|
189
223
|
|
|
190
|
-
## {Step
|
|
224
|
+
## {Step 11}
|
|
191
225
|
|
|
192
226
|
|
|
193
227
|
Let's add the code that makes Namor chase Shuri all around the screen.
|
|
194
228
|
|
|
195
229
|
---
|
|
196
230
|
|
|
197
|
-
- :paper plane: From ``||sprites:Sprites
|
|
231
|
+
- :paper plane: From the ``||sprites:Sprites||`` category, grab <br/>
|
|
198
232
|
``||sprites:set [myEnemy] follow [mySprite]||`` <br/>
|
|
199
|
-
and snap it in at **the end** of ``||loops(noclick):on start
|
|
233
|
+
and snap it in at **the end** of the ``||loops(noclick):on start||`` container in the workspace.
|
|
200
234
|
|
|
201
|
-
- :mouse pointer: Click ``||variables(noclick):
|
|
202
|
-
Click on ``||variables(noclick):
|
|
235
|
+
- :mouse pointer: Click ``||variables(noclick):myEnemy||`` and change it to ``||variables(noclick):Namor||``.<br/>
|
|
236
|
+
Click on ``||variables(noclick):mySprite||`` and change to ``||variables(noclick):Shuri||``.<br/>
|
|
203
237
|
Click the plus **(+)** icon to expand the block and change the speed to **30**.
|
|
204
238
|
|
|
205
239
|
|
|
@@ -215,96 +249,123 @@ Namor.setPosition(148, 2)
|
|
|
215
249
|
Namor.follow(Shuri, 30)
|
|
216
250
|
```
|
|
217
251
|
|
|
218
|
-
## {Step 10}
|
|
219
252
|
|
|
220
|
-
|
|
253
|
+
## {12. Check Your Game!}
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
- :binoculars: Don't forget to look at your project in the game window after each step!
|
|
257
|
+
|
|
258
|
+
Play with your project as you go along. This will help make sure you're on the right track.
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
## {Step 13}
|
|
265
|
+
|
|
266
|
+
**When Namor attacks Shuri, she should lose lives.**
|
|
221
267
|
|
|
222
|
-
Let's make sure the game detects when Namor gets to Shuri
|
|
268
|
+
Let's use a sprite overlap event to make sure the game detects when Namor gets to Shuri.
|
|
223
269
|
|
|
224
270
|
---
|
|
225
271
|
|
|
226
|
-
- :paper plane: From ``||sprites:Sprites
|
|
272
|
+
- :paper plane: From the ``||sprites:Sprites||`` category, grab <br/>
|
|
227
273
|
``||sprites:on [sprite] of kind [Player] overlaps [othersprite] of kind [Player]||``<br/>
|
|
228
274
|
and drop it into an **empty area** of the workspace.
|
|
229
275
|
|
|
230
276
|
|
|
231
|
-
- :mouse pointer: Change the
|
|
277
|
+
- :mouse pointer: Change the **kind** of **otherSprite** from ``||sprites(noclick):Player||`` to ``||sprites(noclick):Enemy||``.
|
|
232
278
|
|
|
233
|
-
- :id card: To subtract a life from Shuri,
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
- :mouse pointer: Send Namor back to the corner of the screen by duplicating<br/>
|
|
238
|
-
the ``||sprites(noclick):set Namor position to x 148 y 2||`` block from <br/>
|
|
239
|
-
``||loops(noclick):on start||`` and placing the copy into<br/>
|
|
240
|
-
``||sprites:on [sprite] of kind [Player] overlaps [othersprite] of kind [Enemy]||``.
|
|
279
|
+
- :id card: To subtract a life from Shuri, open ``||info:Info||`` and grab<br/>
|
|
280
|
+
``||info:change life by -1||``.<br/>
|
|
281
|
+
Snap this into the empty <br/>
|
|
282
|
+
``||sprites(onclick):on [sprite] of kind [Player] overlaps [othersprite] of kind [Enemy]||``<br/> event block in the workspace.<br/>
|
|
241
283
|
|
|
242
284
|
|
|
243
285
|
```blocks
|
|
244
286
|
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
|
|
245
287
|
info.changeLifeBy(-1)
|
|
246
|
-
otherSprite.setPosition(148, 2)
|
|
247
288
|
})
|
|
248
289
|
```
|
|
249
290
|
|
|
250
|
-
## {Step 11}
|
|
251
291
|
|
|
252
|
-
|
|
292
|
+
|
|
293
|
+
## {Step 14}
|
|
294
|
+
|
|
295
|
+
**If Namor and Shuri continue to overlap, Shuri will lose all of her lives too soon.**
|
|
296
|
+
|
|
297
|
+
Let's move Namor away to keep the game going.
|
|
253
298
|
|
|
254
299
|
---
|
|
255
300
|
|
|
256
|
-
- :
|
|
257
|
-
|
|
301
|
+
- :mouse pointer: Send Namor back to the corner of the screen by duplicating<br/>
|
|
302
|
+
the ``||sprites(noclick):set Namor position to x 148 y 2||`` block that's inside the<br/>
|
|
303
|
+
``||loops(noclick):on start||`` container.
|
|
304
|
+
|
|
305
|
+
~hint How do I duplicate? 💡
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
There are two great ways to duplicate a block
|
|
310
|
+
|
|
311
|
+
1) Highlight it and use the copy/paste feature on your keyboard
|
|
312
|
+
2) Right-click the block and choose **Duplicate**.
|
|
313
|
+
|
|
314
|
+
hint~
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
- :mouse pointer: Place the copy into the<br/>
|
|
318
|
+
``||sprites(onclick):on [sprite] of kind [Player] overlaps [othersprite] of kind [Enemy]||`` container already in the workspace.
|
|
258
319
|
|
|
259
|
-
- :mouse pointer: Change **3** to **2**.
|
|
260
320
|
|
|
261
321
|
```blocks
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
let Namor = sprites.create(assets.image`namor`, SpriteKind.Enemy)
|
|
269
|
-
Namor.setPosition(148, 2)
|
|
270
|
-
Namor.follow(Shuri, 30)
|
|
322
|
+
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
|
|
323
|
+
let Namor: Sprite = null
|
|
324
|
+
info.changeLifeBy(-1)
|
|
325
|
+
//% @highlight
|
|
326
|
+
Namor.setPosition(148, 2)
|
|
327
|
+
})
|
|
271
328
|
```
|
|
272
329
|
|
|
273
|
-
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
## {Step 15}
|
|
274
334
|
|
|
275
335
|
**Bring in the guards!**
|
|
276
336
|
|
|
277
|
-
Both Riri and Okoye can now join the game to
|
|
337
|
+
Both Riri and Okoye can now join the game to guard Shuri from Namor's attacks.
|
|
278
338
|
|
|
279
339
|
- :paper plane: From ``||sprites:Sprites||``, drag another<br/>
|
|
280
|
-
``||variables:set [mySprite] to sprite [ ] of kind [Player]||`` <br/>
|
|
340
|
+
``||variables(sprites):set [mySprite] to sprite [ ] of kind [Player]||`` <br/>
|
|
281
341
|
into **the end** of the<br/>
|
|
282
342
|
``||loops(noclick):on start||`` container.
|
|
283
343
|
|
|
284
|
-
- :mouse pointer: Click on ``||variables(noclick):
|
|
344
|
+
- :mouse pointer: Click on ``||variables(noclick):mySprite||`` in<br/>
|
|
285
345
|
``||variables(noclick):set [mySprite] to sprite [ ] of kind [Player]||``<br/>
|
|
286
346
|
and select ``||variables(noclick):Rename variable...||``. Rename it to **Riri**.
|
|
287
347
|
|
|
288
|
-
- :
|
|
289
|
-
|
|
348
|
+
- :mouse pointer: Click the empty grey box to open the **image editor**.
|
|
349
|
+
|
|
350
|
+
- :paint brush: Switch to **My Assets** to select the image for 'Riri'.
|
|
290
351
|

|
|
291
352
|
|
|
292
353
|
|
|
293
354
|
|
|
294
|
-
- :lightbulb: Repeat the steps you
|
|
295
|
-
``||variables(noclick):
|
|
355
|
+
- :lightbulb: Repeat the steps you took to add Riri, but this time rename<br/>
|
|
356
|
+
``||variables(noclick):mySprite||`` to **Okoye** and pick the 'okoye' image from **My Assets**
|
|
296
357
|

|
|
297
358
|
|
|
298
359
|
|
|
299
360
|
- :mouse click: Change the **kind** of both **Riri** and **Okoye** from<br/>
|
|
300
|
-
``||sprites(noclick):
|
|
361
|
+
``||sprites(noclick):Player||`` to ``||sprites(noclick):Guard||``.
|
|
301
362
|
|
|
302
363
|
|
|
303
364
|
```blocks
|
|
304
365
|
namespace SpriteKind {
|
|
305
366
|
export const Guard = SpriteKind.create()
|
|
306
367
|
}
|
|
307
|
-
|
|
368
|
+
|
|
308
369
|
scene.setBackgroundImage(assets.image`wakanda`)
|
|
309
370
|
let Shuri = sprites.create(assets.image`shuri`, SpriteKind.Player)
|
|
310
371
|
controller.moveSprite(Shuri)
|
|
@@ -316,7 +377,7 @@ let Riri = sprites.create(assets.image`riri`, SpriteKind.Guard)
|
|
|
316
377
|
let Okoye = sprites.create(assets.image`okoye`, SpriteKind.Guard)
|
|
317
378
|
```
|
|
318
379
|
|
|
319
|
-
## {Step
|
|
380
|
+
## {Step 16}
|
|
320
381
|
|
|
321
382
|
**Make the guards move**
|
|
322
383
|
|
|
@@ -341,7 +402,7 @@ into the **end of** the ``||loops(noclick):on start||`` container already in the
|
|
|
341
402
|
namespace SpriteKind {
|
|
342
403
|
export const Guard = SpriteKind.create()
|
|
343
404
|
}
|
|
344
|
-
|
|
405
|
+
|
|
345
406
|
scene.setBackgroundImage(assets.image`wakanda`)
|
|
346
407
|
let Shuri = sprites.create(assets.image`shuri`, SpriteKind.Player)
|
|
347
408
|
controller.moveSprite(Shuri)
|
|
@@ -355,43 +416,60 @@ let Okoye = sprites.create(assets.image`okoye`, SpriteKind.Guard)
|
|
|
355
416
|
controller.moveSprite(Okoye, -68, -58)
|
|
356
417
|
```
|
|
357
418
|
|
|
358
|
-
## {Step
|
|
359
|
-
|
|
360
|
-
**If one of the guards can catch Namor, add a point to the game score.**
|
|
419
|
+
## {Step 17}
|
|
361
420
|
|
|
362
|
-
|
|
421
|
+
**You need an event to tell when one of the guards overlaps with Namor.**
|
|
363
422
|
|
|
364
423
|
---
|
|
365
424
|
|
|
366
|
-
- :paper plane:
|
|
425
|
+
- :paper plane: From ``||sprites:Sprites||``, grab <br/>
|
|
367
426
|
``||sprites:on [sprite] of kind [player] overlaps [othersprite] of kind [player]||``<br/>
|
|
368
427
|
and drop it into **an empty area** of the workspace.
|
|
369
428
|
|
|
370
|
-
- :mouse pointer: Change the **sprite** kind
|
|
429
|
+
- :mouse pointer: Change the **sprite** kind to ``||sprites(noclick):Guard||`` and the **othersprite** kind to ``||sprites(noclick):Enemy||``.
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
```blocks
|
|
433
|
+
namespace SpriteKind {
|
|
434
|
+
export const Guard = SpriteKind.create()
|
|
435
|
+
}
|
|
436
|
+
sprites.onOverlap(SpriteKind.Guard, SpriteKind.Enemy, function (sprite, otherSprite) {
|
|
437
|
+
|
|
438
|
+
})
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
## {Step 18}
|
|
443
|
+
|
|
444
|
+
Award a point, then Namor should go back to his corner and start to attack again after being caught.
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
371
448
|
|
|
372
449
|
- :id card: From ``||info:Info||``, add a point to the game score by snapping <br/>
|
|
373
450
|
``||info:change score by 1||``<br/>
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
- :paper plane: Send Namor back to the corner of the screen by snapping
|
|
377
|
-
a new
|
|
378
|
-
<br/>
|
|
379
|
-
``||sprites:set [mySprite] position to x [0] y [0]||``<br/>
|
|
380
|
-
block into the same overlap event.
|
|
451
|
+
into the empty **on overlaps** container.
|
|
381
452
|
|
|
382
|
-
- :mouse pointer:
|
|
453
|
+
- :mouse pointer: Send Namor back to the corner of the screen by duplicating<br/>
|
|
454
|
+
the ``||sprites(noclick):set Namor position to x 148 y 2||`` block from<br/>
|
|
455
|
+
``||loops(noclick):on start||`` container again.
|
|
456
|
+
<br/><br/>Place the copy into the<br/>
|
|
457
|
+
``||sprites(onclick):on [sprite] of kind [Guard] overlaps [othersprite] of kind [Enemy]||`` container already in the workspace.
|
|
383
458
|
|
|
384
459
|
```blocks
|
|
385
460
|
namespace SpriteKind {
|
|
386
461
|
export const Guard = SpriteKind.create()
|
|
387
462
|
}
|
|
388
463
|
sprites.onOverlap(SpriteKind.Guard, SpriteKind.Enemy, function (sprite, otherSprite) {
|
|
464
|
+
let Namor: Sprite = null
|
|
389
465
|
info.changeScoreBy(1)
|
|
390
|
-
|
|
466
|
+
Namor.setPosition(148, 2)
|
|
391
467
|
})
|
|
392
468
|
```
|
|
393
469
|
|
|
394
|
-
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
## {Step 19}
|
|
395
473
|
|
|
396
474
|
**Let's decide when Shuri, with the help Riri and Okoye, will win against Namor's attacks.**
|
|
397
475
|
|
|
@@ -415,24 +493,19 @@ and snap it inside the new score event.
|
|
|
415
493
|
``||scene: set background image to [ ]||``<br/>
|
|
416
494
|
and drop it in at **the end** of the same event.
|
|
417
495
|
|
|
418
|
-
- :paint brush: Click the empty grey square and switch to **My Assets** to select the Boston Bridge scene
|
|
419
|
-
|
|
420
|
-
- :paper plane: From ``||game:Game||``, grab <br/>
|
|
421
|
-
``||game:game over <LOSE>||`` <br/>
|
|
422
|
-
and put it in at **the end of** the event.
|
|
423
|
-
|
|
424
|
-
- :mouse pointer: Switch `<LOSE>` to `<WIN>`.
|
|
496
|
+
- :paint brush: Click the empty grey square and switch to **My Assets** to select the **Boston Bridge scene**.
|
|
425
497
|
|
|
426
498
|
```blocks
|
|
427
499
|
let Namor: Sprite = null
|
|
428
500
|
info.onScore(20, function () {
|
|
429
501
|
Namor.destroy()
|
|
430
502
|
scene.setBackgroundImage(assets.image`boston-bridge`)
|
|
431
|
-
game.over(true)
|
|
432
503
|
})
|
|
433
504
|
```
|
|
434
505
|
|
|
435
|
-
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
## {Step 20}
|
|
436
509
|
|
|
437
510
|
**Celebrate the victory!**
|
|
438
511
|
|
|
@@ -442,21 +515,16 @@ Make defeating Namor a much more dramatic event. Add some effects and messages t
|
|
|
442
515
|
---
|
|
443
516
|
|
|
444
517
|
|
|
445
|
-
- :tree: Get a <br/>``||scene:start screen [confetti] effect||``<br/> from ``||scene:Scene||`` and place it inside at **the end** of the score event.
|
|
446
|
-
|
|
447
|
-
- :circle: From ``||game: Game||``, display a message by snapping<br/>
|
|
448
|
-
``||game:show long text " " [bottom]||``<br/>
|
|
449
|
-
in after the confetti effect.
|
|
518
|
+
- :tree: Get a <br/>``||scene:start screen [confetti] effect||``<br/> from ``||scene:Scene||`` and place it inside at **the end** of the ``||info(noclick):on score 20||`` event.
|
|
450
519
|
|
|
451
|
-
- :
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
Add the <br/>``||sprites:[mySprite] say [":)"]||``<br/>
|
|
455
|
-
block from ``||sprites:Sprites||``.
|
|
520
|
+
- :paper plane: From the ``||sprites:Sprites||`` category, drag<br/>
|
|
521
|
+
``||sprites:[mySprite] say [":)"]||``<br/>
|
|
522
|
+
into the **end of** the ``||info(noclick):on score 20||`` block already in the workspace.
|
|
456
523
|
|
|
457
524
|
- :mouse pointer: Change ``||variables(noclick):mySprite||`` to ``||variables(noclick):Shuri||``.
|
|
458
525
|
|
|
459
|
-
- :mouse pointer: Click the smiley face in the circle and enter **WAKANDA FOREVER
|
|
526
|
+
- :mouse pointer: Click the smiley face in the circle and enter **WAKANDA FOREVER!**, then click the (+) icon and set the display time to **2 seconds** (it will automatically change to 2000 ms.)
|
|
527
|
+
|
|
460
528
|
|
|
461
529
|
```blocks
|
|
462
530
|
let Shuri: Sprite = null
|
|
@@ -464,58 +532,13 @@ let Namor: Sprite = null
|
|
|
464
532
|
info.onScore(20, function () {
|
|
465
533
|
Namor.destroy()
|
|
466
534
|
scene.setBackgroundImage(assets.image`boston-bridge`)
|
|
467
|
-
game.over(true)
|
|
468
535
|
effects.confetti.startScreenEffect()
|
|
469
|
-
|
|
470
|
-
Shuri.sayText("WAKANDA FOREVER!", 5000, false)
|
|
536
|
+
Shuri.sayText("WAKANDA FOREVER!", 2000, false)
|
|
471
537
|
})
|
|
472
538
|
```
|
|
473
539
|
|
|
474
|
-
## {Step 17}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
**Instructions please!**
|
|
478
|
-
|
|
479
|
-
Now that the game is mostly complete, let's give the player some brief instructions on how to play.
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
- :circle: Grab **three more** <br/>
|
|
484
|
-
``||game(noclick):show long text " " [bottom]||``<br/>
|
|
485
|
-
blocks and snap them in at **the top** of the ``||loops(noclick):on start||`` container already in the workspace.
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
- :mouse pointer: Change ``||game(noclick):bottom||`` to ``||game(noclick):full screen||`` on each of them.
|
|
489
|
-
|
|
490
540
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
- :mouse pointer: Click the text area for the second and set the message to something like: <br/>_"When game begins, press the ARROW KEYS to move Shuri, Okoye and Riri. If Namor catches you, you will lose points!"_
|
|
494
|
-
|
|
495
|
-
- :mouse pointer: Click the text area of the third and set the message to something like: <br/>_"Earn 20 points to win and to stay alive you must keep your heart(s)."_
|
|
496
|
-
|
|
497
|
-
```blocks
|
|
498
|
-
namespace SpriteKind {
|
|
499
|
-
export const Guard = SpriteKind.create()
|
|
500
|
-
}
|
|
501
|
-
game.showLongText("Help Shuri, Okoye and Riri escape Namor. (Press the \"A\" button to go to the next screen.)", DialogLayout.Full)
|
|
502
|
-
game.showLongText("When game begins, press the ARROW KEYS to move Shuri, Okoye and Riri. If Namor catches you, you will lose points! ", DialogLayout.Full)
|
|
503
|
-
game.showLongText("Earn 20 points to win and to stay alive you must keep your heart(s).", DialogLayout.Full)
|
|
504
|
-
info.setLife(2)
|
|
505
|
-
scene.setBackgroundImage(assets.image`wakanda`)
|
|
506
|
-
let Shuri = sprites.create(assets.image`shuri`, SpriteKind.Player)
|
|
507
|
-
controller.moveSprite(Shuri)
|
|
508
|
-
Shuri.setStayInScreen(true)
|
|
509
|
-
let Namor = sprites.create(assets.image`namor`, SpriteKind.Enemy)
|
|
510
|
-
Namor.follow(Shuri, 30)
|
|
511
|
-
Namor.setPosition(148, 2)
|
|
512
|
-
let Riri = sprites.create(assets.image`riri`, SpriteKind.Guard)
|
|
513
|
-
controller.moveSprite(Riri, 34, -53)
|
|
514
|
-
let Okoye = sprites.create(assets.image`okoye`, SpriteKind.Guard)
|
|
515
|
-
controller.moveSprite(Okoye, -68, -58)
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
## {Step 18}
|
|
541
|
+
## {Step 21}
|
|
519
542
|
|
|
520
543
|
**🎉 Congratulations**
|
|
521
544
|
|
|
@@ -553,7 +576,3 @@ namespace SpriteKind {
|
|
|
553
576
|
"tilemap.g.ts": "// Auto-generated code. Do not edit.\nnamespace myTiles {\n //% fixedInstance jres blockIdentity=images._tile\n export const transparency16 = image.ofBuffer(hex``);\n\n helpers._registerFactory(\"tile\", function(name: string) {\n switch(helpers.stringTrim(name)) {\n case \"transparency16\":return transparency16;\n }\n return null;\n })\n\n}\n// Auto-generated code. Do not edit.\n"
|
|
554
577
|
}
|
|
555
578
|
```
|
|
556
|
-
|
|
557
|
-
```package
|
|
558
|
-
wakanda-palette=github:riknoll/wakanda-palette
|
|
559
|
-
```
|