🆕 Smalruby 独自 — 書籍プロモーションを兼ねた Block 軸チュートリアル(#680)の実装源データ。
このドキュメントは、書籍『小学生から楽しむ きらきらRubyプログラミング』の前半プログラムの一部を
引用の範囲で抜き出し、チュートリアル実装(packages/scratch-gui/src/lib/libraries/decks/)が
書籍 PDF 非依存で進められるようにするための出典スニペット集。
- 引用元 PDF(
tmp/・非公開・worktree からは参照不可)を worker が読めないため、ここに committed 形で残す。 - 引用許諾: 共著者の 1 人 takaokouji 本人が、書籍販売につなげる目的での引用の範囲での利用に同意済み。 各章とも「基本」の前半のプログラムのみを対象とし、後半・発展は載せない。
| 項目 | 値 |
|---|---|
| 書名 | 小学生から楽しむ きらきらRubyプログラミング |
| 著者 | 高尾 宏治・藤村 健吾(著)/ まつもとゆきひろ(監修) |
| 発行元 | 日経BP |
| 発行日 | 2020年05月25日 |
| ISBN | 978-4-8222-8639-2 |
| 価格 | 2,200円(税込) |
| ページ数 | 180ページ/判型 B5 |
| 購入リンク | https://bookplus.nikkei.com/atcl/catalog/20/P60510/ |
購入リンクは実装時に定数 1 箇所にして各 deck から参照する。
| Lv | 方法 | 目的 |
|---|---|---|
| Lv1 | ブロック。code + codeType: 'blocks' で完成コードを挿入し、一部パラメータだけ変える(例: 台詞・歩数) |
まず動かして遊ぶ・体験 |
| Lv2 | ブロック。Lv1 と同じものを一部だけ入力済みにして、ほとんど自分で組み立てる。重要な概念(if / until / 座標 / クローン等)を説明 |
ブロックの構造を理解 |
| Lv3 | 同じ内容を Ruby で入力・編集(code を Ruby エディタへ挿入し一部を変更) |
Ruby で書けるようになる |
各 deck は冒頭で書誌情報、末尾で「続きは書籍で」+購入リンクを表示し、説明は最小限にして 「書籍のふんいき」を味わえるようにする(販売導線)。
ゲーム設計(本文の「どうやってつくるか考える」)
- ネコがマウスのポインターの方向を向く
- ネコがマウスのポインターのある方向に歩き出す
- もしネコがマウスのポインターにふれたなら「こんにちは!」と 2 秒間言う
→ 実体は「マウスポインターを追いかけるネコ(オニごっこ)」。ユーザーはマウスでネコから逃げる。
完成プログラム(ネコ=スプライト1)
ブロック(Lv1/Lv2 が組む形):
[🏳 が押されたとき]
└ ずっと
├ [マウスのポインター ▼] へ向ける
├ (10) 歩動かす
└ もし〈[マウスのポインター ▼] に触れた〉なら
└ (こんにちは!) と (2) 秒言う
Ruby(Lv3 / code 挿入に使う):
when(:flag_clicked) do
loop do
point_towards("_mouse_")
move(10)
if touching?("_mouse_")
say("こんにちは!", 2)
end
end
endLv1 で変えるパラメータ例: 台詞 "こんにちは!" / 歩数 10 / 秒数 2。
ゲーム設計(本文の「シューティングゲームのやり方」)
- キーボードの方向キー(上下)で、ネコが上下に移動する
- スペースキーで、ネコが右に向かってタマを出す(発射)
- ガイコツはつねに画面右はしで上下に移動する
- ガイコツにタマが当たったら、ガイコツは消える
3 スプライト構成: ネコ(スプライト1・自機) / タマ(Arrow1) / ガイコツ(Skeleton・敵)。
Ruby:
when(:key_pressed, "up arrow") do
self.y += 10
end
when(:key_pressed, "down arrow") do
self.y += -10
end(ブロック: 「[上向き矢印▼] キーが押されたとき → y座標を (10) ずつ変える」/下は -10。
y 座標=上下位置。大きく=上、- で小さく=下。キーは w/s でも可。)
Ruby:
when(:flag_clicked) do
hide
end
when(:key_pressed, "space") do
go_to("スプライト 1")
show
until touching?("_edge_")
self.x += 10
end
hide
end(ブロック: 旗→「隠す」。スペース→「[スプライト1▼] へ行く」「表示する」「〈[端▼]に触れた〉まで繰り返す(x座標を10ずつ変える)」「隠す」。
touching?("_edge_")=端に触れた。_edge_→_mouse_ でマウス判定にもできる。)
事前設定: スプライトの「向き」を 0 度(上向き)にする。
Ruby:
when(:flag_clicked) do
self.rotation_style = "left-right"
show
until touching?("Arrow1")
move(10)
bounce_if_on_edge
end
hide
end(ブロック: 旗→「回転方法を [左右のみ▼] にする」「表示する」「〈[Arrow1▼]に触れた〉まで繰り返す((10)歩動かす/もし端に着いたら、跳ね返る)」「隠す」。
bounce_if_on_edge=もし端に着いたら跳ね返る。rotation_style="left-right" で向きが乱れないようにする。
touching?("Arrow1") の "Arrow1" はタマのスプライト名。別画像を選んだ場合はその名前にする。)
- タマをたくさん出せるようにする → クローン機能を使う(
selfのクローンを作ってタマを増やす)。 発展は完成コードを動かして見せるに留め、詳細は書籍へ誘導する。
| シリーズ | 章 | 引用元 PDF(非公開) | 状態 |
|---|---|---|---|
blockBasics |
第1章 | tmp/008-029_Ruby-chap1-3rd.pdf(第1章) |
抽出済み(上記) |
blockGames |
第4章 | tmp/072-095_Ruby-chap4_3rd.pdf(第4章 p.1–8=基本) |
抽出済み(上記) |
blockMath |
第5章 | 未提供 | 出典待ち |
blockScience |
第6章 | 未提供 | 出典待ち |