搜索

Scratch 教程

基本介绍

使用 Scratch 3 注册与登录 操作界面 我的东西

图形与声音

绘制造型&背景 编辑音效

程序积木

积木种类 动作 外观 音效 事件 控制 侦测 运算 变数 清单 函数积木

扩充功能

音乐 画笔 视频侦测 文字转语音 翻译

技巧&观念

全域变数、区域变数 深入理解区域变数 控制指定分身 控制所有分身的方法 云端变数 云端变数记录文字 变数串接文字 判断英文字母大小写 中断与停止程序 广播消息并等待 键盘与鼠标 鼠标点击与长按 侦测所有键盘按键 点击隐藏的角色 突破角色尺寸限制 角色与舞台边界 重复积木的等待时间 音乐暂停与继续播放 使用造型名称建立清单 使用造型代替变数 文字转清单 清单合并为文字 判断两个清单是否相同 复制清单、反转清单 清单数字排序 清单最大值最小值

入门范例

键盘控制猫咪 指向中间的箭头 水果音乐钢琴 猫咪的影分身之术 猫咪的细胞分裂 螃蟹跑来跑去 吃水果 摸蝴蝶 小狗追棒球 鱼儿水中游 小鸟往前飞 舞棍阿伯 小时钟 摇骰子 转动的眼球 抽奖轮盘 大乐透电脑选号 卡牌抽签 ( 20 中 1 ) 移动到边缘切换场景 人物依序跳舞 ( 广播 ) 按钮控制猫咪 ( 广播 )

进阶范例

猫咪跑步 ( 连续背景 ) 猫咪跑步 ( 超长背景 ) 大型数字 ( 图形数字 ) 拖拉怪兽碰撞墙壁 键盘钢琴 ( 记录音符 ) 中文字逐字稿 英文字逐字稿 计算机 1 ( 显示数字 ) 计算机 2 ( 加减乘除 ) 云端聊天室 音乐播放器 推猫咪 ( 视频侦测 ) 围捕小鱼 ( 视频侦测 ) 戳泡泡 ( 视频侦测 )

视觉特效范例

视差效果 水中吐泡泡 雪花随风飘 键盘钢琴 ( 音符动画 ) 无限循环画中画 水底探照灯 狙击望远镜 ( 两倍变焦 ) 猫咪万花筒 仙女棒 ( 光迹效果 ) 骇客任务背景特效 放烟火 1 ( 往上发射 ) 放烟火 2 ( 爆炸效果 )

绘图范例

镜射画图 ( 对称图形 ) 小画家 ( 舞台上画图 ) 记录画图轨迹 绘制圆形 绘制椭圆形 绘制立方体 ( 会动 ) 绘制正多边形 绘制正多角星形 ( 单纯 ) 绘制正多角星形 ( 多线 ) 绘制抛物线 绘制折线图 绘制圆饼图 绘制圆饼图 ( 指示线 ) 蜘蛛结网 ( 八边形网 ) 绘制舞台方格 绘制正弦波形 ( sin ) 正弦波毛毛虫动画 显示声波图形

物理&模拟范例

钟摆运动 简单磁铁效果 两个磁铁的磁力线 立体空间 ( 三度空间 ) 循迹移动 抛物线发射炮弹 地球绕着太阳转 弹跳的篮球 电风扇 ( 控制强度 ) 拉不走的弹力球 惯性移动 ( 鼠标 ) 惯性移动 ( 键盘 )

入门游戏范例

猴子接香蕉 打地鼠 打地鼠 ( 体感视频侦测 ) 刮刮乐 吹风机吹头发 太空狗闪躲陨石 九九乘法测验 英文单字测验 钓鱼游戏 拍西瓜 ( 储存最高分 ) 宝可梦猜猜我是谁 ( 基本 ) 形状配对拼图 台湾地图拼图 英文打字机 英文打字机 ( 判断大小写 ) 射击外星人 猜数字 ( 猜大小 ) 猜数字 ( 几 A 几 B ) 连连看 ( 产生器 ) 连连看

进阶游戏范例

青蛙过河 青蛙过马路 反弹球 ( 乒乓球 ) 打砖块 狙击气球 ( 两倍变焦 ) Flappy Bird Flappy Bird ( 声控版 ) 走迷宫 ( 基本 ) 大型迷宫 ( 键盘控制 ) 大型迷宫 ( 鼠标控制 ) 翻卡记忆游戏 翻卡记忆游戏 ( 改良版 ) 井字棋 ( 圈圈叉叉 ) 九宫格拼图 九宫格拼图 ( 改良版 ) 音阶记忆 贪吃蛇 ( 分身版 ) 贪吃蛇 ( 画笔版 ) 小鸡下楼梯 拉霸机

团康游戏范例

摇骰子 ( 1~3 个 ) 比手画脚 ( 猜动物 ) 音乐传球游戏 大声公 ( 比赛谁的气长 ) 抽签 ( 可调整中签数量 ) 转盘指针 ( 指到谁就当鬼 ) 倒数计时器 ( 基本版 ) 倒数计时器 ( 大数字版 )

游戏设计技巧

角色 ( 地上移动 ) 角色 ( 蹲下、左右转 ) 角色 ( 跳耀、两段跳 ) 角色 ( 墙壁、爬墙 ) 地图 ( 清单转换 ) 地图 ( 二维数组 ) 地图 ( 控制移动 ) 地图 ( 墙壁碰撞侦测 ) 地图 ( 吃东西侦测 ) 俄罗斯方块 ( 角色与背景 ) 俄罗斯方块 ( 移动与碰撞 ) 俄罗斯方块 ( 放置方块 ) 俄罗斯方块 ( 消除完成方块 ) 俄罗斯方块 ( 下个形状 )

井字棋 ( 圈圈叉叉 )

这篇文章使用 Scratch 的清单、分身、画笔,搭配全域变数和区域变数的概念,实作俗称“圈圈叉叉、Tic-Tac-Toe、OOXX”的“井字棋”游戏。

快速导览:

绘制角色和背景

背景的“井字形”会画在舞台的背景中,点击画面右下角的“舞台”,使用“直线”在背景中绘制“井”的形状,范例中的井字尺寸为 270x270。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 使用“直线”在背景中绘制“井”的形状

回到角色面板,使用绘画方式建立新角色“bg”,这个角色是背景方块,负责侦测玩家“点击了哪个格子”,绘制正方形后对齐画布中心点,尺寸根据背景井字形做调整,bg 的颜色可以自订,范例中使用灰色 77x77 的正方形。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 侦测玩家“点击了哪个格子”

下图呈现 bg 背景方块和背景井字的相对尺寸与位置。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 背景方块和背景井字的相对尺寸与位置

建立第二个角色“ooxx”,这个角色是玩家要摆放的 O 或 X,角色有两个造型,造型红色“O”的名称是 o,造型绿色“X”的名称是 x。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 玩家要摆放的 O 或 X,角色有两个造型

下图呈现 ooxx 圈叉图案方块和背景井字的相对尺寸与位置。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 圈叉图案方块和背景井字的相对尺寸与位置

建立第三个角色“ok”,这个角色是当 O 或 X 连成一线时,要出现的连接线段,该角色使用橘色直线绘制,共有四种造型,分别是垂直、水平、左上右下和右下左上。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 圈叉图案方块和背景井字的相对尺寸与位置

下图呈现 ok 完成线段和背景井字的相对尺寸与位置。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 圈叉图案方块和背景井字的相对尺寸与位置

井字棋胜利原理

井字棋只要三个 O 或三个 X 排成一直线就获得胜利,根据这个胜利原理,如果将井字棋的九宫格分成 1~9 九个数字,可以产生“八组”胜利的清单项目,只要玩家点击后,符合胜利清单里的项目,玩家就获得胜利。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 符合胜利清单里的项目,玩家就获得胜利

程序原理 ( bg 背景方块 )

编辑“bg 背景方块”角色的程序,建立 play_list 清单,使用重复九次积木建立九个“空项目”,负责记录玩家点击的位置,接着建立 ok_list 清单,加入八个胜利的清单项目:123、456、789、147、258、369、159、357。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 加入八个胜利的清单项目

建立“分身侦测方块”函数,勾选“执行完毕再更新画面”。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 建立“分身侦测方块”函数

函数内容主要负责“建立九个分身”,将分身份别定位在井字形的九宫格里,并新增 pos 变数纪录玩家点击的位置。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 建立九个分身

建立“pos_local”变数,设定变数为“仅适用当前角色”的区域变数。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 仅适用当前角色

当分身产生时,显示分身并将分身设定为全透明,接着运用全域变数 pos 和区域变数 pos_local 互相搭配,让每个分身的 pos_local 都纪录不同的数值,如此一来就能在点击分身时,透过广播传送不同的 pos_local 内容。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 透过广播传送不同的 pos_local 内容

程序原理 ( ooxx 圈叉图案 )

编辑“ooxx 圈叉图案”角色程序,点击绿旗时,将角色设定到最前方 ( 避免被遮住 ) 并使用重复循环让角色跟随鼠标。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 使用重复循环让角色跟随鼠标

新增“点击盖章”函数,函数具有 pos、x 和 y 三个参数,并勾选“执行完毕再更新画面”。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - “点击盖章”函数,函数具有 pos、x 和 y 三个参数

当收到广播 1~9 的信号时,分别执行对应参数的函数,函数内容根据 x 和 y 参数,将角色瞬间移动到指定的位置并盖章,接着将 play_list 清单里的指定位置,替换成目前玩家的造型,举例来说,使用 O 的玩家在第 2 格点击,play_list 的第二个项目就会变成 o。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 分别执行对应参数的函数,函数内容根据 x 和 y 参数

下图显示进行到这一步的效果。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 显示进行到这一步的效果

新增“判断胜利”函数,勾选“执行完毕再更新画面”。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - 新增“判断胜利”函数

“判断胜利”函数内容使用变数 y 依序取出 play_list 和 ok_list 的八个项目,使用变数 x 取出 ok_list 特定项目三个数字的每个数字。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - “判断胜利”函数内容

透过重复八次依序取得 play_list 和 ok_list 清单中的项目,再透过重复三次循环,将 ok_list 的胜利位置对照 play_list 的项目,如果胜利的位置都是 O 或都是 X,表示某一方胜利,此时就发送胜利的位置以及 win 的广播信号。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - “判断胜利”函数内容

回头编辑“点击盖章”函数,使用逻辑判断如果 play_list 某个项目如果是空的,才能点击,点击时执行“判断胜利”函数。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - “判断胜利”函数内容

程序原理 ( ok 完成线段 )

编辑“ok 完成线段”角色程序,点击绿旗的时候隐藏角色,接着根据收到不同的胜利消息,切换成不同的造型以及位置,并设定为半透明,就能在某一方胜利时,在图案上方加上直线。

注意,因为使用“停止全部”会造成半透明效果失效,因此此处使用盖章的方式显示直线。

Scratch 教学 - 井字棋 ( 圈圈叉叉 ) - “判断胜利”函数内容

完成效果

完成后,点击绿旗,就可以和别人一起进行井字棋游戏啰。

Scratch 教学 - 井字棋 ( 圈圈叉叉 )

范例解答

范例解答:井字棋 ( 圈圈叉叉 )

意见反馈

微信二维码 微信扫码关注 抖音二维码 抖音扫码关注