游戏数字华容道的改进

news/2024/11/23 2:09:44/

在“用scratch编写游戏-数字华容道”(以后简称“前文”)一文中仅介绍了3行3列数字块的设计方法。本文介绍克隆法,该法在设计更多行和列的数字华容道时,使所有数字块都使用相同的脚本,极大减少了工作量。两方法采用的数据结构基本相同。首先给每一个可放置“数字块”的位置一个编号,叫“位置编号”,从第1行开始从左到右顺序编号1、2…,然后第2行,直到最后一行,“位置编号”顺序就是胜利完成游戏后所有数字块上的数字所排列的顺序。建立两个列表:“块可放位置X”和“块可放位置Y”,分别记录所有位置的X和Y坐标,列表的项号对应“位置编号”。建另一列表“块所在位置编号”(前文称为“块初始位置”),用来记录每个数字块和空白块放在几号位置上,列表项号对应数字块上的数字(即块号),所存数据是“位置编号”,即列表“块可放位置X”和“块可放位置Y”的项号。和前文不同的是,“块所在位置编号”的第一项是空白块(块0),然后块1、块2…。这样排列是因为关卡不同,块数量也不同,按前文那样放在最后,不同关卡的空白块编号不同,而程序中每一块都要判断和空白块的关系,如使空白块编号在任意关卡都保持不变会更加方便,所以采用以上排列顺序。现用例子说明程序运行步骤。如希望块号为1的数字块移到“位置编号”为9的位置上(即9号位置),只需将9保存到列表“块所在位置编号”的第2项(对应块号1,第一项是块0)中,然后发送移动消息,1号数字块接到移动消息,从列表“块所在位置编号”的第2项中取出数据9,再分别从列表“块可放位置X”和“块可放位置Y”的第9项取出9号位置的X和Y坐标,然后移动到9号位置。有关列表的脚本如下,这些脚本由于必须在选定关卡之后运行,因此未放到背景中。游戏有三关,块数分别为9、16、25。为了能摆放下25个方块,将左上角1号位置坐标设置为:-90,140,将方块边长改为70,因此上下和左右相邻块之间中心距离都为70。变量“块数9或16或25”是不同关卡的块数。“填入块可放位置坐标”脚本块将所有可放置数字块的位置坐标填入列表“块可放位置X”和“块可放位置Y”,注意关卡不同,可放置数字块的位置数量也不同。首先删除列表以前所有数据,根据块数决定行列数,先填位置的X坐标到列表“块可放位置X”,再填位置的Y坐标到列表“块可放位置Y”。“使块随机摆放”脚本块是为了程序初始时所有数字块随机摆放。首先删除列表以前所有数据,然后把“块数9或16或25”个数用循环方法从大到小顺序填入到列表“块所在位置编号”中,例如关卡1,把9、8、7…1这9个数顺序填入到列表。然后用随机数发生器从1到“块数9或16或25”中生成随机数作为项号,把最后一项的数据取出插入到该项号数据前边,然后删除最后一项。重复“块数9或16或25”次。在主程序发送“移动块到指定位置”消息后,所有数字块和空白块移动到列表“块所在位置编号”中指定的随机位置。
。“填入块可放位置坐标”脚本
。“使块随机摆放”脚本
程序只有两个角色:“带数字的块”和“提示”。角色“提示”,有两个造型,一个造型用来提示用户如何玩游戏:单击数字移动数字块,另一造型在玩家胜利后提示:你赢了。角色“带数字块”有25个造型,一个空白块造型上无数字,块号为0,其余24个块上面有数字,分别从1到24,块号从1到24。
两个角色及它们的造型
单击绿旗所执行的脚本(主程序)、“当作为克隆启动时”脚本、“接收到移动块到指定位置”消息脚本和“选择关卡”脚本如下。由于不使用角色“带数字的块”,主程序开始将其隐藏。主程序然后选关卡,根据所选关卡为3个前边提到的列表填入数据。根据关卡不同,克隆不同数量的角色“带数字的块”的克隆体。最后广播“移动块到指定位置”消息,由于主程序运行后列表“块所在位置编号”中位置编号是随机的,因此玩家看到随机摆放的数据块。在角色“带数字的块”中建立变量:克隆体编号,建立这个变量时,必须选择:仅适用于当前角色,这样每个克隆体都有一个名称为“克隆体编号”变量,用来记录克隆的数字块的块号。主程序中,使用变量N记录当前克隆体的“克隆体编号”,首先克隆空白块,其“克隆体编号”是0,因此首先设置N=0。每克隆一次,“当作为克隆启动时”脚本运行,首先令“克隆体编号”=N,修改造型,将N增加1为下一克隆体的“克隆体编号”,显示本克隆体。当各个数字块和空白块收到“移动块到指定位置”消息,“接收到移动块到指定位置”脚本运行,根据自己“克隆体编号”,在列表“块所在位置编号”找到自己要移动目的位置号,根据位置号,在列表“块可放位置X”和“块可放位置Y”找到位置的坐标,移动到新位置。
主程序及相关脚本
下边是“角色被点击”脚本、“被点击块和空白块交换位置”脚本块和“计算排列是否正确”脚本块。当数字块被点击时,程序首先判断数字块能否移动。前文是用检测被点击数字块是否碰到空白块方法。但本例中克隆体之间无法检测碰撞,只能另想它法。现在判断能移动的数学式为:绝对值(被点击块坐标X-空白块坐标X)+绝对值(被点击块坐标Y-空白块坐标Y)=70。这是因为只有和空白块相邻的数字块被点击时才能移动,换句话讲,被点击数字块必须和空白块在同一行或列,也就是说两者坐标X或Y相同,所以数学式加号两侧表达式必定有一个为0,相邻的意思就是两者中心点距离为70,即不为0的另一项为70。顺便说一下,点击空白块,数学式值为0,因此空白块不会移动。“被点击块和空白块交换位置”脚本块中,由于被点击数字块脚本无法移动空白块,因此采用间接方法,交换两者在列表“块所在位置编号”中各自的位置号,然后广播“移动块到指定位置”消息,令每个块按照列表“块所在位置编号”移动到新位置。移动块后要判断排列是否正确,方法和前文基本相同,只是列表“块所在位置编号”第1项是空白块,它的正确位置编号是最大的位置编号,关卡1是9,关卡2是16,关卡3是25,它要单独判断。第2项是块号为1的数字块所在位置编号,其正确位置为1,以此类推。因此判断是否正确的表达式为:列表“块所在位置编号”第N项内容=N-1是否成立。
在这里插入图片描述
角色“提示”的脚本如下。
在这里插入图片描述
运行效果图如下。
运行效果图


http://www.ppmy.cn/news/550160.html

相关文章

用scratch编写游戏-数字华容道

由于疫情,只能在家,外孙女要学scratch,先学了南海出版社的“编程真好玩”,然后和外孙女一起用scratch编了一些游戏,想把编写步骤和设计思想写出来,和大家交流。刚编了“数字华容道”,就先说它吧…

NOIP2013华容道

NOIP2014华容道 说起来这道题还挺有难度的,我用了两个小时才把它AC,要是在赛场上的话。。。。这种题就果断放弃了 下面步入正题 题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到…

CreateJS实现【益智类数字华容道小游戏】

系列文章 微信小程序(游戏)----拖拽拼图(图片分块和打乱顺序)微信小程序(游戏)----五子棋【taro react】(游戏) ---- 类2048游戏,看看在秦朝,功勋爵位你能到哪一级【taro react】(游戏) ---- 小游戏 2048 的实现1. 预览 1.1 在线h5 益智类数字华容道小游戏 在线h5 益…

最强大脑之《数字华容道》游戏Android端的具体实现

项目地址:https://github.com/ming723/NumberHrd 游戏效果: 前提摘要: 前两天粘贴出来了地址,不知道大家下载了没有,如果玩的话,是不是发现了几个潜在的问题,如果按完开始键后,不停…

python实现华容道游戏(v0.1)

#!python import copy ##Author: Lijun # #History: #V0.1 2021-12-15 #实现基础功能:一种初始化图形,可以人工操作游戏,游戏成功有提示 # # # # #Guanyu11 (*1) ;关羽2*1(水平*竖直,下同) 横条,1个 #zh…

JAVA开发的华容道游戏

import java.awt.*;import java.applet.*;import java.awt.event.*; class People extends Button implements FocusListener //代表华容道人物的类。 { Rectangle rectnull; int left_x,left_y;//按扭的左上角坐标. int width,height; //按扭的宽和高. String name; int num…

Qt小游戏之数字华容道(百行代码搭雏形,可玩;含源码+注释)

文章目录 一、数字华容道,样图如下二、废话少说直接上代码1、首先是代码文件分析2、CLabel的源码3、CMainWindow的源码4、main文件 总结 一、数字华容道,样图如下 相信大家都知道华容道吧,数字华容道与其类似,源码在本文第二节&a…

Java游戏开发——华容道

游戏介绍: “华容道”是一款比较古老的游戏,其源于三国时期著名的历史故事。华容道作为一个经典游戏,各部分的设计都恰到好处,非常巧妙,因此成为世界游戏界的三大不可思议。 “华容道”游戏初始时曹操被围在华容道最…