---
# System prepended metadata

title: 10/6 Arcade再進化-虛擬鍵盤的妙用(4)
tags: [2022 iThome 鐵人賽]

---

---
tags: 2022 iThome 鐵人賽 
title: 10/6 Arcade再進化-虛擬鍵盤的妙用(4)
AUTHOR: 蔡宇倫
---

## 第四篇 虛擬鍵盤-如何妙用在遊戲中

### 你想將你遊戲最棒的成就記錄下來嗎?
>* 本篇將帶領大家透過```虛擬鍵盤```套用在遊戲中，讓```遊戲得分最高者```可以顯示在遊戲的成就上，並顯示其分數。
>* 本篇將用[**Chase The Pizza**](https://arcade.makecode.com/S16441-99761-07357-96738)專案來演示

<br>

## 成品效果

![圖片](https://drive.google.com/u/0/uc?id=1WFaqQitLRMQmHmzg3VVsvKesStDDPLRT&export=download)

<br>

* ### 原先(破紀錄前)
![圖片](https://drive.google.com/u/0/uc?id=18WtOVr2V5jkblyHAs7qESPPpHqJZtKaf&export=download)

<br>

* ### 後來(破紀錄後)
![圖片](https://drive.google.com/u/0/uc?id=1A5o-CgXFsaTipdNDKU_aPqqvG6AcOxOF&export=download)

```

```
---
## 製作教學

### 前置操作(非常重要!!):
* 點選[**此處**](https://arcade.makecode.com/S16441-99761-07357-96738)後按下```edit code```即可下載並編輯此專案
* 複製```https://github.com/riknoll/arcade-custom-menu```來擴充功能
(&uarr;&uarr;&uarr;如何擴充功能? 在[**第三篇**](https://ithelp.ithome.com.tw/articles/10302290)這裡有教學)
<br>
---

<br>

### 使用積木 + Javascript

積木雖可讓我們能更簡單了解程式的內容，卻無法完整呈現我們想使用的功能，需要搭配Javascript來補積木編排的不足，因此本篇將會用**積木和 Javascript**兩部分來完成
<br>

---
* ### Part1 : 積木部分
   積木部分主要是先完成```選單功能```以及```紀錄最高分數```

<Br>

1.選擇擴展**BlockMenu中**的```on menu option selected```積木，並將```當啟動時```積木裡的所有積木移動到裡面
![圖片](https://drive.google.com/u/0/uc?id=19OsyfM_AFPzAlac72rjWSTcDqItgssSW&export=download)

---
2.選擇擴展**BlockMenu中**的```show grid menu fullscreen with option``` 積木 放入到 ```當啟動時 ```積木中，並將fullsceen改成bottom half、grid改為list ，並在後面的陣列輸入```新遊戲、成就```
![圖片](https://drive.google.com/u/0/uc?id=1m-cPfO-1m9xlKOSlnQhMUIPcLvxBogyT&export=download)

---
3.建立**3個變數**分別為```name、high、record```將```變數record設為0```積木放入到```當啟動時 ```積木，並將**資訊類別**中```最高得分```積木放入到```變數record設為0```積木的裡面
![圖片](https://drive.google.com/u/0/uc?id=1LcEPabgryTJ8ESEZPPgvzOmmURo-_es2&export=download)

---
4.使用**資訊類別**中```當倒數結束```積木，然後在裡面將積木組合成```如果(得分>變數record)那麼變數record設為得分```，最後在```如果()那麼()```積木外放入**遊戲類別**中```遊戲結束 結果( )```積木，並在( )內放入**BlockMenu中**放入```is menu open```積木
![圖片](https://drive.google.com/u/0/uc?id=1ymZkhQq55TGCsHIN7jtE4SmxhtFNyhIk&export=download)

---
5.在```on menu option selected```積木中放入積木並組合成```如果(option = 新遊戲)那麼( )```，並將原本在```on menu option selected```裡的所有積木移動到裡面
![圖片](https://drive.google.com/u/0/uc?id=1dsE50-uG7AhZtrUO5hvX2_eiAb7vaZiz&export=download)

---
6.放入一組積木```如果(option = 成就)那麼( )```在```on menu option selected```積木中，並將**BlockMenu中**```close menu```積木放入到```如果( )那麼( )```的裡面。(**兩組積木都要放入**)
![圖片](https://drive.google.com/u/0/uc?id=1MOwtfiY9zqWwCP1Hex4XvKZMmyzPwvaz&export=download)

---
7.在```如果(option = 成就)那麼( )```積木中再放入一組積木```如果(A鍵被按住)那麼( )```，然後在裡面放入```show list menu bottom half with option (新遊戲) (成就)```
![圖片](https://drive.google.com/u/0/uc?id=16t1OqD6yRmVbqIAbMsJQrqiA3aYj8T8U&export=download)

---
8.在```當角色sprite類別player重疊角色othersprite類別Food```積木中放入```變數high改變"1"```積木
![圖片](https://drive.google.com/u/0/uc?id=1aWspKm-pLgL5x60MOxcrxQxgz6qA1o4o&export=download)

&uarr;&uarr;&uarr;**積木部分已結束**&uarr;&uarr;&uarr;
<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)


##### 作者:蔡宇倫

