用scratch编写游戏2048(印章法)

用印章法编写游戏2048,是以克隆法编写游戏2048为基础,修改部分脚本而完成的。如果读者未看过我的上一篇博文:用scratch编写游戏2048(克隆法),请先读一读。印章法和克隆法,在处理数据的思路是基本相同的。印章法思路如下。游戏由16个正方体组成4*4矩阵,每个位置可显示空白或下列数字中的一个:2、4、8…1024、2048和4096。为每个位置编号,位号从第1行开始为1、2、3、4,第2行5、6、7、8,同样处理第3行和第4行。建立对象:带数字块,其有13个造型,一个造型名称为0,显示空白,其余12个造型名称分别为:2、4、8…1024、2048和4096,选择那个造型名称,该角色就显示该造型对应的数字,例如选造型2048,角色显示2048。建立列表:各位置造型。该列表的项号对应4行4列矩阵位号,列表每项所存数据为该项对应的位置应显示的数字。玩家使用上下左右键使数字4行或4列向一侧移动,数字可移到空位上,如两个相邻数字相等则合并成1位,数值翻倍,得分增加两数和,最终使数字都移到一侧,数字之间无空位,末位移出数字的位为空白。程序并不移动数字,而是按游戏移动规则处理列表“各位置造型”中数据,处理后的列表数据是移动后4行4列矩阵每位应显示的数字。例如,矩阵第1行要显示的数字存在列表“各位置造型”的第1、2、3和4项中,如移动前数据为2022,0代表空,矩阵第1行左移,就是使列表数据变为2400。最后需要把列表“各位置造型”中的数据显示在4行4列矩阵中,印章法不同于克隆法。印章法是移动对象“带数字块”到4行4列矩阵到位置1,从列表“各位置造型”项号1取出该位应显示的数字,转换为造型名称,修改造型,使对象“带数字块”显示从列表取出的数字,利用脚本印章,把该数字固定在位置1上;然后角色移动位置2,从列表项号2取出该位要显示的数字,根据这个数字修改角色造型,使其显示其应显示的数字,用印章固定数字;…重复16次,可使4行4列矩阵所有位置显示正确数字。
本游戏设计步骤如下。首先建立2个角色:提示和带数字块。如下图。“提示”有两个造型。“带数字块”有13个造型,块0造型是空白,其余12个造型是数字,其造型名称后的编号分别为:2、4、8、16、32、64、128、256、512、1024、2048和4096。请注意,角色显示的数字和造型名称后的数字相同。对象“带数字块”有正方形框,每次重新显示所有数字时,这些正方形框也要重画,而多个印章脚本运行要花费一些时间,能看到正方形逐个出现的过程,使眼睛很不舒服。另外,显示数字时,和上一次相同的数字不处理,保存原来数字,初始时,前次和本次有些位为空,都不处理,就可能看不到正方形框。为解决这两个问题,为背景增加一个由正方形组成的4行4列矩阵的造型,这个正方形和角色“带数字块”的正方形相同。
在这里插入图片描述
建立8个变量:K、L、M、N、得分(要显示在屏幕上)、当前项、循环次数。建立两个列表:各位置造型和上次各位置造型。该列表的项号对应4行4列矩阵位号,列表每项所存数据为该项对应的位置应显示的数字。所有对4行4列矩阵的数字的移动,实际上都是对这个列表数据的处理。
“当绿旗被点击”的主程序及其相关程序如下。这里只解释和克隆法不同的脚本,完全相同的不做解释。先看主程序,角色“带数字块”隐藏,得分清0,两个列表都填入16个0,表示这次和上次4行4列矩阵都是空白。清除以前用印章所画所有图像。在列表“各位置造型”中填入2个2或4。调用函数“显示数字”,把列表“各位置造型”中保存的数字显示在4行4列矩阵中。函数“显示数字”是和克隆法的最大不同。其基本思路是,角色“带数字块”移到4行4列矩阵X号位置,从列表“各位置造型”的第X项取出在该位置要显示的数字,根据这个数字,改变角色“带数字块”造型,使其显示这个数字,用印章把数字固定在这个位置上。角色“带数字块”再移到其他位置做同样的工作,可完成4行4列矩阵的所有位置的数字显示。这里有个问题,执行16次印章脚本,是很费时间的,能看到数字逐个出现。实际上在移动前后,并不是所有位置数据都发生改变。列表“各位置造型”和“上次各位置造型”记录了移动前后要显示的数字,可比较两个列表对应项的值,只有不相等,才用印章固定数据,这样可使程序速度变快。印章法不在主程序中检查上下左右键状态来决定如何处理移动数据,而是在它们的事件函数处理移动数据。以左移4行为例,首先备份当前数据,以备和移动后数据对比。然后循环处理4行左移数据,最后调用函数“数字排列改变加2或4并显示”。该函数首先检查移动前后数据是否发生变化,如发生变化,增加2或4。如移动前后数据完全相同,再检查4行4列矩阵中是否有空,如无空要检查游戏是否结束。函数“在空白处随机插入2或4”有些变化。函数开始不再检查移动前后数据是否发生变化,最后也不用广播“显示列表指定造型”消息了。另外还删除了一些函数,可以和克隆法的博文对照一下。
在这里插入图片描述
函数“数字上下左右移动”及相关脚本,见下图。这些和克隆法完全相同,不做解释。
在这里插入图片描述
角色“提示”脚本如下。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Scratch 是一种易于学习的编程语言,但在编写工程问题时需要注意一些事项。以下是一些可能有用的提示: 1. 规划你的项目:在开始编写代码之前,最好先规划你的项目。考虑你想要实现的功能和每个组件如何交互。这有助于确保你的代码能够实现你的预期效果,并且可以更容易地维护和更新。 2. 保持代码简洁和可读性:尽可能地保持你的代码简洁易懂,这样其他人也能更容易地理解和修改它。使用有意义的变量名称和注释,以便更容易理解你的代码。 3. 重用代码:在编写代码时,尽可能地利用已有的组件和代码块。这样可以避免重复编写相似的代码,同时也可以减少出错的可能性。 4. 测试你的代码:在编写代码之后,一定要测试你的代码,以确保它能够正常工作。这可以通过手动测试和使用 Scratch 内置的测试工具来完成。 5. 学习 Scratch 的高级功能:Scratch 有许多高级功能,例如变量、列表、广播等等。学习这些功能可以让你的代码更加复杂和功能更加强大。 总之,在编写工程问题时,需要注重规划、简洁、可重用和测试性。这些技巧可以帮助你更好地编写 Scratch 代码。 ### 回答2: 用Scratch编写工程问题是指使用Scratch这个图形化编程工具来解决或探索与工程相关的问题。Scratch是一种非常适合初学者的编程语言,它通过拖拽积木式代码块来实现程序的编写,使得编程变得更加简单和有趣。 使用Scratch编写工程问题可以帮助学生学习和了解工程的基本概念和原理。例如,可以使用Scratch来模拟一个机器人的动作,让学生了解工程中机器人运动的基本原理和控制方。学生可以编写一个程序,通过控制机器人的移动、旋转和传感器的使用来完成不同的任务。 此外,Scratch还可以用于模拟工程中的物理现象和实验。学生可以使用Scratch来模拟弹簧的伸缩、小车的运动、桥梁的承重等工程中常见的物理问题,并通过编写程序来观察和分析不同参数对物理现象的影响。 另外,Scratch还可以用于解决一些实际工程问题。学生可以尝试编写程序来模拟和优化电路中的电流流动、热量传递等问题,或是通过编写程序来探索和改进生产线的运作效率等工程问题。 总之,使用Scratch编写工程问题可以帮助学生通过实践来加深对工程原理和实际问题的理解,并培养他们的创新思维和解决问题的能力。 ### 回答3: 在使用Scratch编写工程问题时可能会遇到一些挑战。首先是如何将现实世界中的问题转化为适合在Scratch中解决的问题。这可能需要一些创造力和思考,以找到合适的方来模拟和解决实际问题。 另一个挑战是确定使用Scratch的哪些功能和特性来解决问题。Scratch提供了许多不同的积木和功能,但并不是所有的都适用于每个问题。因此,需要通过仔细分析问题的特点和要求来选择使用哪些积木和功能。 此外,编写工程问题还需要一些计划和组织能力。在Scratch编写大型工程问题时,需要事先规划好整个项目的结构和功能,以确保各个部分能够协调工作。这可能需要一些时间和思考,但可以避免后期调整和重构代码的麻烦。 最后,与团队合作也是一个重要的因素。如果有多个人一起编写工程问题,需要有一个清晰的沟通和合作机制,以确保各个部分能够协调工作。可能需要定期进行会议和讨论,以确保大家都理解和遵循相同的编码标准和项目规范。 总的来说,使用Scratch编写工程问题可能会面临一些挑战,但合理的计划和组织能力,创造力和思考能力以及良好的团队合作机制都可以帮助克服这些困难,并成功地完成工程问题的编写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值