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.mzph.cn/news/46875.shtml

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

相关文章

CentOS7安装部署Java11

文章目录 CentOS7安装部署JDK11一、前言二、正文1.卸载 Open JDK2.安装JDK11 CentOS7安装部署JDK11 一、前言 Linux 发行版:CentOS-7-x86_64-DVD-1804.isoJDK 版本:Java SE Development Kit 11.0.19 Java Archive:https://www.oracle.com/j…

打怪升级之从零开始的网络协议

序言 三个多月过去了,我又来写博客了,这一次从零开始学习网络协议。 总的来说,计算机网络很像现实生活中的快递网络,其最核心的目标,就是把一个包裹(信息)从A点发送到B点去。下面是一些共同的…

Vue开启代理服务器

~~~~~ 在Vue.js中,可以通过配置代理服务器来解决跨域请求的问题。代理服务器可以将请求转发到目标服务器,并将响应返回给Vue应用。 在Vue项目中配置代理服务器可以通过以下方法实现: 配置vue.config.js module.exports {lintOnSave:false…

Linux学习之ssh和scp

ls /etc/ssh可以看到这个目录下有一些文件,而/etc/ssh/ssh_config是客户端配置文件,/etc/ssh/sshd_config是服务端配置文件。 cat -n /etc/ssh/sshd_config | grep "Port "可以看一下sshd监听端口的配置信息,发现这个配置端口是22…

Android自定义View知识体系

View的概念、作用和基本属性 View是Android中的基本UI组件,用于构建用户界面。它可以是按钮、文本框、图像等可见元素,也可以是容器,用于组织其他View。View的作用是展示数据和接收用户的输入。它可以显示文本、图片、动画等内容&#xff0c…

ubuntu20.04升级GLIBC高版本方法,解决:version `GLIBC_2.34‘ not found

检查版本 strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_ 1 显示结果 GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 GLIBC_2…

Neo4j之CALL基础

CALL 语句用于调用 Neo4j 数据库中预定义的函数、过程或者自定义的函数。它是用来执行一些特定操作或计算的重要工具。以下是一些常用的 CALL 语句示例和解释: 调用内置函数: CALL db.labels()这个示例中,调用了内置函数 db.labels() 来获取…

git分支

一、引言 分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱、冲突等比较头疼的问题,我们将在文中阐述如何更好的管理代码分支。 二、总览 从上图可以看到主要包含下面几个分支&#xff…

【是C++,不是C艹】 手把手带你实现Date类(附源码)

💞💞欢迎来到 Claffic 的博客💞💞 👉 专栏:《是C,不是C艹》👈 前言: 恍惚间,已经两个月没更新了 (;д`)ゞ 我忏…

css实现三角形的几种方法

css实现三角形的方法:1、使用边框实现三角形,利用透明边框和实色边框的组合,可以创建不同方向和大小的三角形;2、使用伪元素实现三角形,通过使用伪元素来创建一个占据父元素一半大小的实心三角形;3、使用tr…

网络安全面试题整理

目录标题 1.你常用的渗透工具有哪些?2.xss盲打到内网服务器的利用3.鱼叉式攻击和水坑攻击是什么?4.什么是虚拟机逃逸?5.中间人攻击的原理和防御?6.TCP三次握手过程?7.七层模型有哪七层?8.对云安全的理解&am…

Redis 持久化的手段有哪些 ?RDB 和 AOF 有什么区别 ?

目录 1. Redis 持久化的手段有哪些 2. RDB 和 AOF 有什么区别 2.1 RDB 持久化 2.2 AOF 持久化 2.2.1 AOF 持久化策略有哪些 3. 混合持久化是如何执行的(了解) 1. Redis 持久化的手段有哪些 Redis 持久化的手段有三种: 快照方式&#…

开源数据库Mysql_DBA运维实战 (总结)

开源数据库Mysql_DBA运维实战 (总结) SQL语句都包含哪些类型 DDL DCL DML DQL Yum 安装MySQL的配置文件 配置文件:/etc/my.cnf日志目录:/var/log/mysqld.log错误日志:/var/log/mysql/error.log MySQL的主从切换 查看主…

OpenCV(二)——图像基本处理(四)

目录 4.图像形态学操作 4.1 图像腐蚀 4.2 图像膨胀 4.3 开运算 4.4 闭运算

什么是程序化交易接口?执行三步曲是什么?

在股市中的发展过程中,通过不断的更新迭代,从手动交易到自动交易的过程就有了历史的蜕变,那么对于程序化交易接口(Application Programming Interface, API)其实就是指为程序化交易提供的一组定义和规范,允…

物联网工程应用实训室建设方案

一、物联网工程应用系统概述 1.1物联网工程定义 物联网工程(Internet of Things Engineering)是一种以信息技术(IT)来改善实体世界中人们生活方式的新兴学科,它利用互联网技术为我们的日常生活活动提供服务和增益&am…

前端面试:【CSS】盒模型、选择器、布局、响应式设计、Flexbox 与 Grid

CSS(层叠样式表)是用于控制网页外观和布局的重要语言。在这篇文章中,我们将深入探讨CSS的基础知识,包括盒模型、选择器、布局、响应式设计,以及弹性盒子(Flexbox)和网格布局(Grid&am…

hadoop2的集群数据将副本存储在hadoop3

在 Hadoop 集群中,HDFS 副本是分布式存储的,会存储在不同的节点上。因此,如果您的 HDFS 所在路径是在 Hadoop2 集群中,您可以在 Hadoop3 集群上添加新的节点,并向 Hadoop3 集群中添加这些新节点上的数据副本。 以下是…

时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基…

【C#】关于?的用法

1、可空类型修饰符(?) 如: int? x null;//可空类型默认值都是null,而值类型如int默认值为0、bool默认值为false等 bool? result true;2、三目运算符(?:) 如: bool…