[Scratch] 佛地魔顛倒字謎 (Voldemort Anagram)

[Scratch] 佛地魔顛倒字謎 (Voldemort Anagram)

最近在家裡看完了哈利波特電影版全集~

其中第二集「消失的密室」裡,

湯姆瑞斗展示了自己名字與佛地魔的關聯,

從 Tom Marvolo Riddle 轉換成 I am Lord Voldemort,

看到這個的時候,就想說能不能用 Scratch 做出相同的效果呢?

 

以這 Scratch 程式來說,

程式本身不難,倒是在設定每個字母的坐標時很麻煩…

先來看一下執行效果吧:

 

1. 程式主體

程式裡只有一個角色,但它有 16 個裝扮 (costume),

就是 Tom Marvolo Riddle 這 16 個字母。

我用兩個陣列 List1 和 List2 分別來存

Tom Marvolo Riddle 與 I am Lord Voldemort 每個字母的坐標

(事實上每個 List 都分成兩個,如 List1X 和 List1Y,

分別存 X 與 Y 坐標,因為 Scratch 的陣列實在不好處理…)

 

2. 初始化陣列

這邊就是將每個字母的預定座標存成陣列:

 

如前所述,X 與 Y 坐標分別存在兩個陣列裡面,

因為 Scratch 不能在陣列內存 tuple 或物件,

也很難將 XY 坐標組合成如 “X,Y” 的方式再解開使用,

所以只好用兩個陣列:

 

因為角色裝扮原本就是以 Tom Marvolo Riddle 來排列,

所以要取 List1 的坐標比較容易,

可以移動字母,再看 Scratch 編輯器上的坐標。

 

但 List2 就比較麻煩…

同樣索引值代表的是同一個字母,

例如在 List1 的第一個值,代表的是 Tom 的 T 的坐標。

在 List2 的第一個值,代表的則會是這個 T 變成 Voldemort 的 T 的坐標。

所以一樣用 Scratch 編輯器看到 I am Lord Voldemort 每個字母的坐標後,

要仔細對應,看這坐標應該是從哪個字母來,

再標到那字母原本在 List1 中的索引值上。

 

至於有些重覆的字母像是 O 或 M,

就可以自己決定是要移動到對應的哪一個 O 或 M,

我是盡量讓它選移動距離遠的,比較有移動的效果~

(當然如果你很堅持電影的原汁原味,

可以去重看電影,看看湯姆到底是怎麼弄的… :P)

 

3. 顯示字母

顯示字母很簡單,全部有 16 個字母,

我產生了 15 個分身代表第 1~15 個字母,本體則代表第 16 個字母。

字母一開始都集中在 (0, 0) 的位置,

這樣待會它們移動到 Tom Marvolo Riddle 位置時,

就會有一個展開的效果:

 

當字母被產生出來之後,它們就會開始朝向目標位置前進:

 

4. 移動字母到目標位置

移動字母這個動作在一開始會做一次

(從正中央移動到 Tom Marvolo Riddle),

在使用者按下空白鍵時也會做一次。

 

我這邊的設計是,用一個 TargetList (一樣分成 X 和 Y 陣列) 來儲存目標位置的坐標,

同時用一個變數代表現在是往 List1 或 List2 前進。

當按下空白鍵時,會改變前往的陣列,

做法就是將 List1 或 List2 的值存到 TargetList 裡面去:

 

上述做法的好處是,隨時可以按空白鍵改變方向,

反正字母就是一直朝 TargetList 的坐標前進就對了~

 

在移動每個字母時,為了有點隨機效果,

會計算目標坐標與現在位置的差距,然後在範圍裡隨機移動一個距離。

舉例來說,假設 X 坐標與目的地相差 100 像素,

則目前的公式會取 1~10 點來移動,

越遠的話,移動的距離就有可能越大:

 

有興趣的人可以到 佛地魔顛倒字謎 (Voldemort Anagram) 來玩玩看囉~

(本頁面已被瀏覽過 61 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料