点击蓝字 关注我们

哈喽,朋友们,又见面了!今天我们来学习一个超级有趣的游戏——魔方!相信很多小朋友都玩过魔方吧?今天我们就用Scratch来实现一个虚拟的魔方游戏!

真正的课程导入语:同学们!有没有想过自己也能在电脑上做出一个可以旋转的魔方?今天的Scratch课堂,我们就要解锁超酷的"魔方"游戏开发!想象一下:你亲手设计的魔方在屏幕上旋转,每个面都有不同的颜色,你可以通过按键来控制它旋转。这一切都能在Scratch里实现!通过这节课,我们会学会3D坐标转换、矩阵运算、角色协作这些核心编程技巧,更能锻炼逻辑思维和空间想象力。接下来,就让我们一起化身小小程序员,用积木搭建属于自己的魔方世界,看看谁能最快还原它!准备好开启这场编程冒险了吗?现在,Let's code!
我希望你能通过作品效果,总结作品的关键操作步骤。

(扫码体验后按照提示获取下载链接)
旋转魔方的各个面(前、后、左、右、上、下)
观察魔方的颜色变化
尝试还原魔方
通过箭头键调整视角
通过加减键缩放魔方
你总结的可能跟我不一样,但是大差不差,也许你的更好。
思考时间
运动模块:移到x:x,y:y、将X坐标增加、将Y坐标增加
外观模块:隐藏、显示、切换造型、将大小设置为
事件模块:当绿旗被点击、当按下空格键、当接收到广播、当作为克隆体启动时
控制模块:重复执行、重复x次、如果xxx那么、等待x秒
侦测模块:碰到对象、按下键
变量模块:新建变量、将变量设置为、将变量增加
画笔模块:清除画笔、设置画笔大小、设置画笔颜色、画笔落下、画笔抬起
运算模块:加减乘除、三角函数、平方根
数据模块:新建列表、添加项目到列表、删除列表项目、替换列表项目
魔方游戏逻辑├── 游戏初始化│ ├── 设置初始变量(XRot、YRot、Size等)│ ├── 隐藏不需要显示的变量│ └── 准备游戏场景├── 核心角色(make the colour example)│ ├── 处理用户输入(方向键、加减键)│ ├── 3D坐标转换和投影│ ├── 绘制魔方的各个面│ └── 处理魔方旋转├── 数据角色(Creat the original data)│ ├── 生成魔方的初始数据│ ├── 创建魔方的各个面和块│ └── 初始化颜色数据├── 旋转控制角色(Sprite1-12)│ ├── 处理不同面的旋转│ ├── 执行旋转动画│ └── 更新魔方状态└── 视角控制角色(Arrow1-4) ├── 调整魔方的视角 └── 控制魔方的显示大小
我希望你在看下面过程之前,你自己能根据作品效果做出至少80%(做不出来的话,你要清楚的知道自己哪里不会哪里不清晰)。这样你在看下面的操作之后才能真正学到一些"知识",不经过自己思考就得到的答案,不深刻,逻辑思维也不会得到提升。
舞台上有很多重要的变量,它们就像游戏的"小黑板",记录着各种重要信息:
3D坐标变量:
3DX、3DY、3DZ:记录3D空间中的坐标
XRot、YRot:记录魔方的旋转角度
XVel、YVel:记录旋转的速度
位置和大小变量:
XPos、YPos:记录魔方在舞台上的位置
Size:记录魔方的大小
SVel:记录大小变化的速度
魔方状态变量:
R_act、L_ACT、F_ACT、B_ACT、U_ACT、D_ACT:记录各个面是否被激活旋转
R‘_ACT、L‘_ACT、F'_ACT、B'_ACT、U'_ACT、D'_ACT:记录各个面是否被激活反向旋转
其他变量:
Color:记录当前画笔颜色
Points:可能记录得分或其他信息
为什么要用这些变量呢?因为魔方是一个3D物体,我们需要用变量来记录它的位置、角度、大小等信息,就像我们在现实中玩魔方时需要观察它的状态一样。

【角色:make the colour example】代码截图
这个角色是游戏的核心,负责处理用户输入、3D坐标转换和绘制魔方。
详细程序讲解:
这个角色的代码主要分为几个部分:游戏初始化、用户输入处理、3D坐标转换、绘制魔方。
游戏初始化:当绿旗被点击时,角色会广播消息,清除画笔,隐藏自己,然后开始重复执行主循环。
用户输入处理:在主循环中,角色会检测用户的键盘输入:
方向键:调整魔方的视角(XRot和YRot)
加减键:调整魔方的大小(Size)
3D坐标转换:角色使用三角函数(sin、cos)来实现3D坐标到2D屏幕的转换,这是让魔方看起来有立体感的关键。
绘制魔方:角色使用画笔模块来绘制魔方的各个面,根据3D坐标计算出每个面在屏幕上的位置,然后填充颜色。
为什么要这样编写?
使用变量记录魔方的状态
三角函数实现3D效果
画笔模块绘制魔方的各个面
响应式设计让用户可以交互

【角色:Creat the original data】代码截图
这个角色负责生成魔方的初始数据,包括各个面的坐标和颜色。
详细程序讲解:
这个角色的代码主要是一些自定义积木,用于生成魔方的各个面和块。
生成数据:角色使用循环和列表来生成魔方的各个面(前、后、左、右、上、下)的坐标数据,并为每个块分配颜色。
初始化列表:角色创建了多个列表来存储魔方的坐标、颜色等数据,这些列表会被其他角色使用。
为什么要这样设计?
使用列表存储大量数据
循环生成重复的结构
模块化设计让代码更清晰

【角色:Sprite1】代码截图
这个角色负责处理魔方右侧面的旋转。
详细程序讲解:
当接收到"R"广播时,角色会执行右侧面的旋转操作:
设置旋转角度(Phi、Theta、Psi)
遍历右侧面的所有块
对每个块执行3D旋转计算
更新块的坐标和颜色
播放旋转动画
为什么要这样编写?
使用广播机制触发旋转
三角函数实现3D旋转
动画效果让旋转更直观

【角色:Sprite2】代码截图
这个角色负责处理魔方右侧面的反向旋转。
详细程序讲解:
当接收到"R''"广播时,角色会执行右侧面的反向旋转操作,逻辑与Sprite1类似,但旋转方向相反。
为什么要这样设计?
分离不同方向的旋转逻辑
代码复用,简化整体结构

【角色:Sprite3】代码截图
这个角色负责处理魔方左侧面的旋转。
详细程序讲解:
当接收到"L"广播时,角色会执行左侧面的旋转操作,逻辑与右侧面类似,但针对左侧面的块。
为什么要这样编写?
为每个面创建专门的旋转逻辑
保持代码的一致性

【角色:Sprite4】代码截图
这个角色负责处理魔方左侧面的反向旋转。
详细程序讲解:
当接收到"L''"广播时,角色会执行左侧面的反向旋转操作,逻辑与Sprite3类似,但旋转方向相反。

【角色:Sprite5】代码截图
这个角色负责处理魔方前面的旋转。
详细程序讲解:
当接收到"F"广播时,角色会执行前面的旋转操作,逻辑与其他面类似,但针对前面的块。

【角色:Sprite6】代码截图
这个角色负责处理魔方前面的反向旋转。
详细程序讲解:
当接收到"F''"广播时,角色会执行前面的反向旋转操作,逻辑与Sprite5类似,但旋转方向相反。

【角色:Sprite7】代码截图
这个角色负责处理魔方上面的旋转。
详细程序讲解:
当接收到"U"广播时,角色会执行上面的旋转操作,逻辑与其他面类似,但针对上面的块。

【角色:Sprite8】代码截图
这个角色负责处理魔方上面的反向旋转。
详细程序讲解:
当接收到"U''"广播时,角色会执行上面的反向旋转操作,逻辑与Sprite7类似,但旋转方向相反。

【角色:Sprite9】代码截图
这个角色负责处理魔方后面的旋转。
详细程序讲解:
当接收到"B"广播时,角色会执行后面的旋转操作,逻辑与其他面类似,但针对后面的块。

【角色:Sprite10】代码截图
这个角色负责处理魔方后面的反向旋转。
详细程序讲解:
当接收到"B''"广播时,角色会执行后面的反向旋转操作,逻辑与Sprite9类似,但旋转方向相反。

【角色:Sprite11】代码截图
这个角色负责处理魔方下面的旋转。
详细程序讲解:
当接收到"D"广播时,角色会执行下面的旋转操作,逻辑与其他面类似,但针对下面的块。

【角色:Sprite12】代码截图
这个角色负责处理魔方下面的反向旋转。
详细程序讲解:
当接收到"D''"广播时,角色会执行下面的反向旋转操作,逻辑与Sprite11类似,但旋转方向相反。

【角色:Arrow1-4】代码截图
这些角色负责处理视角调整的按钮点击事件。
详细程序讲解:
当角色被点击时,会设置对应的变量(Arr_down、Arr_up、Arr_left、Arr_right)为1,通知核心角色调整视角。
为什么要这样设计?
使用可视化按钮让用户更容易操作
分离输入处理和核心逻辑
现在让我来讲解一下各个角色之间是如何协作的:
游戏启动流程:
玩家点击绿旗
舞台初始化变量并隐藏不需要的变量
make the colour example角色广播初始化消息
Creat the original data角色生成魔方数据
所有角色准备就绪
旋转流程:
玩家点击旋转按钮或按下对应按键
对应的旋转角色(Sprite1-12)被激活
旋转角色广播旋转消息
其他角色响应旋转操作
make the colour example角色更新绘制
视角调整流程:
玩家按下方向键或点击箭头按钮
make the colour example角色检测到输入
make the colour example角色调整XRot和YRot变量
make the colour example角色重新计算3D坐标并绘制
为什么要这样设计?
使用广播机制实现角色间通信
模块化设计让代码更清晰
分工明确,每个角色负责特定功能
响应式设计提供良好的用户体验
通过分析这个"魔方"游戏,我们学到了以下重要的编程概念:
1. 3D坐标转换:使用三角函数将3D空间坐标转换为2D屏幕坐标,这是实现3D效果的关键。就像我们在纸上画立体图形一样,需要通过透视来表现深度。
2. 矩阵运算:使用旋转矩阵来计算魔方块的旋转,这是实现魔方各个面旋转的核心。就像我们在现实中旋转魔方一样,每个块的位置都会发生变化。
3. 角色协作:多个角色分工合作,共同完成复杂的游戏逻辑。就像一个团队一样,每个成员都有自己的职责。
4. 数据管理:使用列表来存储大量数据,比如魔方的坐标、颜色等。就像我们整理书包一样,把不同的东西放在不同的口袋里。
5. 用户交互:通过键盘和鼠标输入来控制游戏,提供良好的用户体验。就像我们玩其他游戏一样,需要通过输入来与游戏互动。
6. 动画效果:通过切换造型和等待时间来实现旋转动画,让游戏看起来更生动。就像我们看动画片一样,连续的画面变化形成了动画。
如果想让游戏更有趣,你可以尝试添加一些新功能:
计时器:添加一个计时器,记录还原魔方所用的时间
步数统计:记录旋转魔方的步数,挑战最少步数还原
预设图案:添加一些预设的魔方图案,让玩家尝试还原
3D视角切换:添加更多视角切换方式,比如自由旋转视角
声音效果:为旋转魔方添加声音效果,提升游戏体验
难度级别:设置不同的难度级别,比如2x2x2、3x3x3、4x4x4的魔方
保存功能:添加保存功能,让玩家可以保存当前的魔方状态
你能尝试实现这些功能吗?
好了,今天的"魔方"游戏就讲到这里啦!希望你们都能做出自己的"魔方"游戏,成为小小程序员!如果有什么问题,欢迎在评论区留言哦!我们下期再见~拜拜~
喜欢这篇文章的话,记得点赞、收藏、转发给你的小伙伴们哦!我们下期再见!👋

。即使下载了,也要上传,不是特别方便,尤其是不好查找。

关注即可领取,下载不限速,方便快捷。



微信号|scratch-coco