Scratch 游戏 之 随机大地图生成教程

        在很多生存 / 沙盒类游戏中,地图往往是随机生成的,例如:饥荒、我的世界等。那我们该如何在scratch中实现这一点呢?

        在scratch中有两种办法可以实现——画笔和克隆体。我们这次先聊克隆体。

        我们可以先将克隆体设置为方形的,再由一个个方形相互连接形成一个方形的大地图,这些克隆体可以改变颜色来模拟不同的地形(沙漠、森林、平原......),仔细想想,这些方形是不是和我的世界中的方块很像?没错,这和我的世界原理差不多,只是我们的是2D的而已。

        提示:编写此程序需开启无限复制

下面我们进入到实践环节:


1.绘制克隆体

        我们先绘制一个没有边框的正方形,边长15格(一格4个坐标,边长也就是60个坐标)。当然,你也可以设置成其它大小,只不过这样是整数,方便计算。(正方形可以略大一点点,不然运行放大时会有一丝丝缝隙)

如图所示

如图所示

2.编写程序

        我们先设置几个变量:行数、列数、克隆数、私有克隆数(私有变量)。

        行数和列数就是指地图的尺寸,十行十列的地图就有100个格子。而克隆数和私有克隆数就是帮克隆体弄清楚自己的编号,是第几个,以此来知道自己该在第几列第几行,知道自己的坐标在哪儿。

        程序部分最开始是设置初始变量(这里尺寸设置的是10*10),然后隐藏本体,再将克隆数加一,克隆一次自己。都好理解,难的部分在克隆体的程序。

本体的程序

本体的程序

        下面再看克隆体的程序,先是显示,再将私有克隆数设置为当前的克隆数(这一步就不用多说了,私有变量是可以让克隆体自己拥有的,相当于给自己编了个号)。

        由于让本体一个个复制克隆体太慢了,不如让克隆体复制克隆体,再让被克隆的克隆体复制出一个新的克隆体......这样克隆体的数量就成倍增长,速度翻了几十倍,就连复制一万个也是眨眼间的事。只要让克隆体重复执行复制直到总数量等于行数成列数就行了。

        运行上面的程序后如果发现克隆数瞬间到了100,就成功了。下一步就是要让这些克隆体各归其位,排列成一个正方形了。(为了方便观察效果,我们先把行列数改成3*3的,另外,如果你不想让电脑卡死,最好别超过100*100)

        我们先设置两个私有变量给克隆体用,分别是x和y。这两个变量是赋予克隆体自己的坐标的。

        那怎么才能让克隆体各归其位呢?原理很简单,就跟小学学的列队做早操或排方阵的题差不多,无非就是把让你根据总人数算行列数变成了让你算是第几列第几行的。

        具体公式如下:

上面是x坐标,下面是y坐标

上面是x坐标,下面是y坐标

        前面挺简单的,但后面乘以60是什么意思呢?前面我们提到过,克隆体的边长是60个坐标,乘60就是为了让克隆体之间隔开一定距离。

        我们再将这个公式套入程序里:

        这时那两个变量便派上用场了,"移到x:x y:y"再让克隆体移到对应位置,因为地图是要实时移动的,需要再加一个重复执行。

        试着运行一下:

        没错,程序出错了。右边那一列竟然向上窜出了一格,但是问题出在哪儿呢?

        这一看就是y坐标的问题,所以我们将刚才的公式再验算一下:

        设克隆体编号为1: 1/3=0……1 (1-1)/3*60=0

        设克隆体编号为2: 2/3=0……2 (2-2)/3*60=0

        设克隆体编号为3: 3/3=1……0 (3-0)/3*60=60

        设克隆体编号为6: 6/3=2……0 (6-0)/3*60=120

        最终我们发现如果克隆体的编号是列数的倍数,他就会多出60个坐标。

        所以我们要判断这个克隆体的编号是否是列数的倍数,如果是,就要减去60个坐标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/76157.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

文章目录 2 函数的使用1.函数定义(需要带类型)2.函数声明(需要带类型)3.函数调用 3 新建文件,使用模块化编程新建xxx.c和xxx.h文件xxx.h格式:调用头文件验证代码调用:完整的文件结构如下&#x…

leetcode 198. 打家劫舍

2023.8.19 打劫问题是经典的动态规划问题。先设一个dp数组,dp[i]的含义为:前 i 个房屋能盗取的最高金额。 每间房屋无非就是偷,或者不偷这两种情况,于是可以写出递推公式: …

救生员可以戴耳机吗,救生员佩戴蓝牙耳机会影响工作吗?

对于救生员这样一种常驻在水边的职位,戴耳机可以说是比较常见的,佩戴的最主要原因就在于方便进行沟通以及接受指令,以此来确保海边以及海滩等场所的安全,而在这种场景下,对于耳机的考验也是蛮大的,毕竟会出…

如何使用自动化测试工具Selenium?

哈喽,大家好,我是小浪。那么有一段时间没有更新了,还是在忙实习和秋招的事情,那么今天也是实习正式结束啦,开始继续更新我们的学习博客,后期主要是开发和测试的学习博客内容巨多,感兴趣的小伙伴…

【VS Code插件开发】Webview面板(三)

🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋‍♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! 📢 资料领取:前端…

【bug记录】ios动画闪烁,@keyframe动画在100%的时候设置为opacity:0,最后一帧会变成opacity:1

背景 前段时间需要实现一个水波纹扩散效果,大概效果就两点:波纹逐渐扩散,半径逐渐增大;透明度逐渐降低(如下图)。本以为这就是一个简单的动画,很轻松就实现了。但是发布之后测试同学反馈&#…

探索Perfetto:开源性能追踪工具的未来之光

探索Perfetto:开源性能追踪工具的未来之光 1. 引言 A. 介绍Perfetto的背景和作用 随着移动应用、桌面软件和嵌入式系统的不断发展,软件性能优化变得愈发重要。在这个背景下,Perfetto作为一款开源性能追踪工具,日益引起了开发者…

Linux驱动开发(Day4)

思维导图: 字符设备驱动分步注册:

系统卡死问题分析

CPU模式 CPU Frequency Scaling (CPUFREQ) Introduction CPU频率调节设备驱动程序的功能。该驱动程序允许在运行过程中更改CPU的时钟频率。一旦CPU频率被更改,必要的电源供应电压也会根据设备树脚本(DTS)中定义的电压值进行变化。通过降低时钟速度,这种方法可以减少功耗…

Visual Studio 2022 你必须知道的实用调试技巧

目录 1、什么是bug? 2.调试是什么?有多重要? 2.1我们是如何写代码的? 2.2又是如何排查出现的问题的呢? ​编辑 2.3 调试是什么? 2.4调试的基本步骤 2.5Debug和Release的介绍 3.Windows环境调试介绍…

【Diffusion】李宏毅2023机器学习Diffusion笔记

文章目录 1 想法概述2 实际过程阶段1 Add Noise阶段2 Denoise 3 数学原理4 为什么推理时要额外加入noise5 一些不知道对不对的Summary 1 想法概述 从一张充满噪声的图中不断denoise,最终得到一张clear的图片。为了确定当前图片中噪声占比的大小,同时输入…

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集前言下载…