---
tags: 2022 iThome 鐵人賽
title: 10/6 Arcade再進化-虛擬鍵盤的妙用(4)
AUTHOR: 蔡宇倫
---
## 第四篇 虛擬鍵盤-如何妙用在遊戲中
### 你想將你遊戲最棒的成就記錄下來嗎?
>* 本篇將帶領大家透過```虛擬鍵盤```套用在遊戲中,讓```遊戲得分最高者```可以顯示在遊戲的成就上,並顯示其分數。
>* 本篇將用[**Chase The Pizza**](https://arcade.makecode.com/S16441-99761-07357-96738)專案來演示
<br>
## 成品效果

<br>
* ### 原先(破紀錄前)

<br>
* ### 後來(破紀錄後)

```
```
---
## 製作教學
### 前置操作(非常重要!!):
* 點選[**此處**](https://arcade.makecode.com/S16441-99761-07357-96738)後按下```edit code```即可下載並編輯此專案
* 複製```https://github.com/riknoll/arcade-custom-menu```來擴充功能
(↑↑↑如何擴充功能? 在[**第三篇**](https://ithelp.ithome.com.tw/articles/10302290)這裡有教學)
<br>
---
<br>
### 使用積木 + Javascript
積木雖可讓我們能更簡單了解程式的內容,卻無法完整呈現我們想使用的功能,需要搭配Javascript來補積木編排的不足,因此本篇將會用**積木和 Javascript**兩部分來完成
<br>
---
* ### Part1 : 積木部分
積木部分主要是先完成```選單功能```以及```紀錄最高分數```
<Br>
1.選擇擴展**BlockMenu中**的```on menu option selected```積木,並將```當啟動時```積木裡的所有積木移動到裡面

---
2.選擇擴展**BlockMenu中**的```show grid menu fullscreen with option``` 積木 放入到 ```當啟動時 ```積木中,並將fullsceen改成bottom half、grid改為list ,並在後面的陣列輸入```新遊戲、成就```

---
3.建立**3個變數**分別為```name、high、record```將```變數record設為0```積木放入到```當啟動時 ```積木,並將**資訊類別**中```最高得分```積木放入到```變數record設為0```積木的裡面

---
4.使用**資訊類別**中```當倒數結束```積木,然後在裡面將積木組合成```如果(得分>變數record)那麼變數record設為得分```,最後在```如果()那麼()```積木外放入**遊戲類別**中```遊戲結束 結果( )```積木,並在( )內放入**BlockMenu中**放入```is menu open```積木

---
5.在```on menu option selected```積木中放入積木並組合成```如果(option = 新遊戲)那麼( )```,並將原本在```on menu option selected```裡的所有積木移動到裡面

---
6.放入一組積木```如果(option = 成就)那麼( )```在```on menu option selected```積木中,並將**BlockMenu中**```close menu```積木放入到```如果( )那麼( )```的裡面。(**兩組積木都要放入**)

---
7.在```如果(option = 成就)那麼( )```積木中再放入一組積木```如果(A鍵被按住)那麼( )```,然後在裡面放入```show list menu bottom half with option (新遊戲) (成就)```

---
8.在```當角色sprite類別player重疊角色othersprite類別Food```積木中放入```變數high改變"1"```積木

↑↑↑**積木部分已結束**↑↑↑
<br>
---
* ### Part2 : Javascript部分
Javascript部分主要是完成```紀錄名字的功能```
<Br>
---
9.將```變數name```的文字初始為沒有值的,讓```變數high```每次遊戲開始時都會歸零
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
---
10.做三個function並自己命名 ```writePlayerInfo```、```showPlayerInfo```、```readPlayerInfo```
**補充:function不能在任何一個功能區塊內,此才能為全域功能使所有區塊內使用都能識別**
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
///定義三個function
function writePlayerInfo () {
}
function showPlayerInfo () {
}
function readPlayerInfo () {
}
///
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
---
11.```settings.writeString( )```可將輸入的名字寫入到**Arcade的內建記憶體**上
**補充:存儲上限為16KB**
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
///定義三個function
function writePlayerInfo () {
name = game.askForString("What is your name?")
settings.writeString('Name', name)
}
function showPlayerInfo () {
}
function readPlayerInfo () {
}
///
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
---
12.```settings.readString( )```可將記憶體存儲的資料進行讀取
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
///定義三個function
//將資料寫入記憶體
function writePlayerInfo () {
settings.writeString('Name', name)
}
function showPlayerInfo () {
}
//讀取寫入記憶體的資料
function readPlayerInfo () {
name = settings.readString('Name')
}
///
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
name = game.askForString("What is your name?")
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
---
13.```function showPlayerInfo ()```為讀取存儲的資料並顯示出來
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
///定義三個function
//將資料寫入記憶體
function writePlayerInfo () {
settings.writeString('Name', name)
}
//讀取存儲的資料並顯示出來
function showPlayerInfo () {
game.splash("Name:" + name + " HIGH Score:" + record)
}
//讀取寫入記憶體的資料
function readPlayerInfo () {
name = settings.readString('Name')
}
///
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
name = game.askForString("What is your name?")
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
---
14.```在if (option == "新遊戲"){ }```裡輸入```name = game.askForString("What is your name?")```讓遊戲開始時會要求輸入名字,然後在```if (info.score() > record) {}```裡輸入```writePlayerInfo ()```使如果破紀錄會將名字寫入記憶體
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
///定義三個function
//將資料寫入記憶體
function writePlayerInfo () {
settings.writeString('Name', name)
}
//讀取存儲的資料並顯示出來
function showPlayerInfo () {
game.splash("Name:" + name + " HIGH Score:" + record)
}
//讀取寫入記憶體的資料
function readPlayerInfo () {
name = settings.readString('Name')
}
///
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
writePlayerInfo () //如果破紀錄會將名字寫入記憶體
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
name = game.askForString("What is your name?")
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
---
15.在```if (option == "成就") {}```裡輸入```readPlayerInfo()```讀取已寫入的名字、```showPlayerInfo()```將讀取到的名字顯示出來。
```javascript=
//定義初始變數值
let high = 0
let name: string = null
//
///定義三個function
//將資料寫入記憶體
function writePlayerInfo () {
settings.writeString('Name', name)
}
//讀取存儲的資料並顯示出來
function showPlayerInfo () {
game.splash("Name:" + name + " HIGH Score:" + record)
}
//讀取寫入記憶體的資料
function readPlayerInfo () {
name = settings.readString('Name')
}
///
info.onCountdownEnd(function () {
if (info.score() > record) {
record = info.score()
writePlayerInfo () //如果破紀錄會將名字寫入記憶體
}
game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
record += 1
info.changeScoreBy(1)
info.startCountdown(10)
otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
if (option == "新遊戲") {
blockMenu.closeMenu()
name = game.askForString("What is your name?")
scene.setBackgroundColor(7)
smiley = sprites.create(img`
. . . . 5 5 5 5 5 5 5 . . . . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
. 5 5 5 5 5 5 5 5 5 5 5 5 5 . .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .
5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 .
. 5 5 5 f f 5 5 5 f f 5 5 5 . .
. 5 5 5 5 5 f f f 5 5 5 5 5 . .
. . 5 5 5 5 5 5 5 5 5 5 5 . . .
. . . . 5 5 5 5 5 5 5 . . . . .
. . . . . . . . . . . . . . . .
`, SpriteKind.Player)
controller.moveSprite(smiley, 100, 100)
smiley.setStayInScreen(true)
pizza = sprites.create(img`
. . . . . . b b b b . . . . . .
. . . . . . b 4 4 4 b . . . . .
. . . . . . b b 4 4 4 b . . . .
. . . . . b 4 b b b 4 4 b . . .
. . . . b d 5 5 5 4 b 4 4 b . .
. . . . b 3 2 3 5 5 4 e 4 4 b .
. . . b d 2 2 2 5 7 5 4 e 4 4 e
. . . b 5 3 2 3 5 5 5 5 e e e e
. . b d 7 5 5 5 3 2 3 5 5 e e e
. . b 5 5 5 5 5 2 2 2 5 5 d e e
. b 3 2 3 5 7 5 3 2 3 5 d d e 4
. b 2 2 2 5 5 5 5 5 5 d d e 4 .
b d 3 2 d 5 5 5 d d d 4 4 . . .
b 5 5 5 5 d d 4 4 4 4 . . . . .
4 d d d 4 4 4 . . . . . . . . .
4 4 4 4 . . . . . . . . . . . .
`, SpriteKind.Food)
info.startCountdown(10)
info.setScore(0)
}
if (option == "成就") {
blockMenu.closeMenu()
readPlayerInfo() //讀取已寫入的名字
showPlayerInfo() //將讀取到的名字顯示出來
if (controller.A.isPressed()) {
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
}
}
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()
```
#### [完成範例連結](https://arcade.makecode.com/S19515-72827-68136-21086)
##### 作者:蔡宇倫