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个坐标。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python AI绘图教程

前提 1.安装python 2.安装git 步骤 下载stable-diffusion-webui项目(链接:GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI) git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 安装st…

.netcore grpc客户端工厂及依赖注入使用

一、客户端工厂概述 gRPC 与 HttpClientFactory 的集成提供了一种创建 gRPC 客户端的集中方式。可以通过依赖包Grpc.Net.ClientFactory中的AddGrpcClient进行gRPC客户端依赖注入AddGrpcClient函数提供了许多配置项用于处理一些其他事项;例如AOP、重试策略等 二、案…

azure VM完全复制

创建虚拟机,并创建linux服务,可以参考 https://blog.csdn.net/m0_48468018/article/details/132267096 , https://blog.csdn.net/m0_48468018/article/details/132267315在虚拟机中点击磁盘快照,创建磁盘快照 通过磁盘快照创建磁盘…

我的编程语言学习笔记

前言 作为一名编程初学者,我深知学习编程需要不断积累和记录。在这篇博客文章中,我将分享一些我在学习C/C编程语言过程中记录的常用代码、特定函数、复杂概念以及特定功能。希望能与大家一起切磋进步! 常用代码: 1. 输入输出操作…

vscode如何关闭受限模式

受限模式旨在实现安全地浏览代码 第一步: 第二步:输入trust,找到Security.workspace.trust,取消勾选 第三步: 重启vscode.

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.SCNGO-CNN-Attention超前24步多变量回归预测算法。 程序平台:无Attention适…

回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测(多指标,多图)效果一览基本介…

Java版 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计tbms

​ 项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…

三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:三款远程控制软件对比,5大挑选指标&#xff1…

初识网络原理(笔记)

目录 ​编辑局域网 网络通信基础 IP 地址 端口号 协议 协议分层 TCP / IP 五层网络模型 网络数据传输的基本流程 发送方的情况: 接收方的情况 局域网 搭建网络的时候,需要用到 交换机 和 路由器 路由器上,有 lan 口 和 wan 口 虽…

【Leetcode】105.从前序与中序遍历序列构造二叉树

一、题目 1、题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例1: 输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] 输出: [3,9,20,null,null,15,7]示例…

关于es中索引,倒排索引的理解

下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表,索引库就相当于我们的数据库,我们按照mapping规则会根据相应的字段(index为true默认)来创建倒排索引,这个倒排索引就相当于我们索引…

【stable-diffusion使用扩展+插件和模型资源(上】

文章目录 前言一、插件推荐1.qrcode-monster2.sd-webui-openpose-editor3.sd-webui-depth-lib4.roop(换脸插件)5.sd-webui-qrcode-toolkit(艺术二维码)5.光源控制6.二次元转真人7.动态视频转场(loopback-wave&#xff…

前馈神经网络dropout实例

直接看代码。 (一)手动实现 import torch import torch.nn as nn import numpy as np import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt#下载MNIST手写数据集 mnist_train torchvision.datasets.MN…

一百六十三、Kettle——Linux上安装Kettle9.2(亲测有效,附截图)

一、目的 由于之前发现kettle8.2和kettle9.3这两个版本,或多或少的存在问题 比如kettle8.2的本地服务没问题,但在Linux上创建共享资源库时就有问题; 比如kettle9.3由于不自带shims驱动包,目前在新的下载官网上无法找到下载路径…

PCIE 信息

PCIe(外围组件互连快件)是用于连接高速组件的接口标准。每台台式电脑主板有许多 PCIe 插槽,可用于添加通用显卡,各种外设卡,无线网卡或固态硬盘等等。PC 中可用的 PCIe 插槽类型将取决于你购买的主板. PCIe 插槽有不同…

LeetCode 542. 01 Matrix【多源BFS】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

ubuntu18.04安装keil5(踩坑)看完再享用,别直接上手

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、安装winewine的总结 二、安装Keil5总结 前言 切记看完再享用,别直接上手,不然安装的时候会和我一样踩坑的(走了很多弯路…

【汇编语言】CS、IP寄存器

文章目录 修改CS、IP的指令转移指令jmp问题分析 修改CS、IP的指令 理论:CPU执行何处的指令,取决于CS:IP应用:程序员可以通过改变CS、IP中的内容,进行控制CPU即将要执行的目标指令;问题:如何改变CS、IP中的…

数据在内存中的储存·大小端(文字+画图详解)(c语言·超详细入门必看)

前言:Hello,大家好,我是心跳sy😘,本节我们介绍c语言的两种基本的内置数据类型:数值类型和字符类型在内存中的储存方法,并对大小端进行详细介绍(附两种大小端判断方法)&am…