制作一款打飞机游戏22:表格导出

编辑器功能扩展

今天,我想让编辑器能够处理一个数组,这是编辑器将要编辑的东西,它只编辑数组。这些区域在后续的不同版本的编辑器中会有不同的含义,但现在我想创建一个模板,能够加载一个二维数组,并将二维数组写回文件。

好吧,让我们马上开始。首先,我想把一个数组放到我们的东西里面,就像这样:0, 1, 2, 3,这些只是一些数字。这里有个小问题,这是一个字符串,里面包含了一些数字,我们将使用split函数将它拆分成一个数组。我觉得这样更好,尽管我们也可以直接放一个数组在这里,但这是不可行的。

关于导入功能,有一个重要的事情我没有提到,那就是这并不能绕过令牌限制。当你把这个文本文件的内容粘贴到你的 PICO-8 卡上时,你会失去那些令牌。如果现在选择这个,它显示是0个令牌,但一旦执行并且测试内容等于某些东西,你就会支付那些令牌。如果代码超过了令牌限制(比如8100个令牌),那么你的卡就不会运行。

所以,我不能把所有的令牌密集型的东西都放到一个文本文件中然后导入,那样是行不通的。有其他方法可以做到这一点,但不是这种方法。

实现细节与优化

无论如何,我们在这个文本文件里的东西最好已经是令牌优化过的,尤其是因为这里有很多数据。所以,我们想保存一个字符串,然后把它拆分成一个数组。但如果我们这样做,我们需要对导入的数据运行split函数,为什么不直接把这个split写在我们的文本文件里呢?

好吧,我来保存这个并看看会发生什么。现在,我们不能再把这个数据打印到屏幕上了,因为现在这个数据在我们的文本文件里是一个数组,我们不能直接打印它。现在我们需要做的是遍历这些数据,我们可以通过一个循环来实现,比如for i = 1, #data do,然后使用bgprint(datai])来打印每个数据。

但是,问题是我们把所有的数字都画在了同一个地方,所以我们需要让它们稍微下移一点。我们可以这样做:y = 2 + 7 * i,这样随着我们在屏幕上绘制下一个项目,y值就会增加。现在我们有了一个像表格一样的项目列表,很好。

接下来,我们在PICO-8(或Lua)中有一个技巧,如果你运行一个函数,而这个函数只接受一个字符串作为参数,你可以省略引号和括号。这也会执行,我们将利用这一点。

导出功能实现

现在,我想实现导出功能。稍后我们将为多维数组实现导出功能,但现在我想先写一个简化版的,为一维数组实现导出功能。为此,我想做一些小的改动。比如,我们想要编辑器能够处理不同的变量名,但内部的变量名应该始终保持不变。

所以,我想创建一个地方,你可以自定义编辑器来编辑不同类型的数据。我想在文本文件中保存要写入的文件名,以及从哪个文件名写入。但是,include语句不接受变量,你必须拼写出文件名,比如include "text.txt",我们不能这样做。所以,我们需要在文本文件中保存要写入的文件名,这样我们的导出函数就可以使用它。

我们还想有一个叫data的变量,我们将把这个变量设置为test,在这个例子中,test是我们从文件中获取的变量。每次在编辑器中工作时,我们都会使用这个data变量。

现在,让我们去实现导出功能。我们肯定要保留这个print()语句,我们只是想编辑这个局部变量s。我们想把所有的数据格式化成字符串,然后把它写入s,再把s写出来。

哦,对了,我们还需要在字符串中包含数组的名字,因为导出时需要知道应该把哪个数组写入导出文件。

接下来,我们要遍历所有的数据,并把它们写入字符串。我们可以使用与在屏幕上打印数据相同的逻辑。但是,我们还需要在数字之间添加逗号,而且最后一个数字后面不应该有逗号。我们可以通过在添加数字之前检查是否是第一个数字来解决这个问题。

现在,我们保存并运行它,看看是否有效。我们需要找一种方法把调试代码从我们的主程序中引入到这里,这样我们就可以调试导出功能是否工作正常。但现在,我们先看看记事本是否有任何变化。看起来没有变化,这实际上是件好事,因为如果我们没有对底层数据进行任何更改,我们希望代码导出的是相同的东西。

现在,这个导出功能已经可以使用一维数组了。接下来,我想让它能够处理二维数组。为此,我们需要添加一些东西,我想复制粘贴我们的split2d函数到这里。这个函数很重要,因为它将把一个字符串拆分成二维数组,就像我们在主程序中做的那样。

我们要使用split2d函数,并用管道符|来分隔数据。现在,我们要把数据绘制到屏幕上,所以我们需要一个嵌套的循环。但是,我们之前遇到的问题是所有的数字都重叠在一起,所以我们需要添加一些偏移量来让它们分开显示。

现在,我们需要实现二维数组的导出功能。这基本上与一维数组的导出相同,但我们需要在数组之间插入管道符|,在数组内的元素之间插入逗号。而且,我们需要确保第一个数组和每个数组的第一个元素前面没有额外的分隔符。

现在,我们保存并导出数据,看看是否一切正常。看起来一切正常,数据已经成功导出。现在,我想看看这是否能与我们实际的数据一起工作,所以我把之前的一些数组数据复制粘贴到这里,并进行了一些小的调整。现在,我们可以运行它,看看是否能成功导入和导出这些数据。

看起来一切正常,数据已经成功导入和导出。现在,我们可以把这个编辑器集成到我们的工作流程中。我们有一个完整的导入导出循环,现在我想开始着手编辑器的UI设计。

pico-8 cartridge // http://www.pico-8.com
version 41
__lua__function _init()--- customize here ---#include shmup_myspr.txtfile="shmup_myspr.txt"arrname="myspr"data=myspr----------------------debug={}_drw=draw_table_upd=update_tablemenuitem(1,"export",export)reload(0x0,0x0,0x2000,"cowshmup.p8")
endfunction _draw()_drw()-- debug --cursor(4,4)color(8)for txt in all(debug) doprint(txt)end
endfunction _update60()_upd()
end
-->8
--drawfunction draw_table()cls(2)--spr(0,0,0,16,16)for i=1,#data dofor j=1,#data[i] dobgprint(data[i][j],2+18*j,2+8*i,7)endend
end
-->8
--updatefunction update_table()end
-->8
--toolsfunction bgprint(txt,x,y,c)print("\#0"..txt,x,y,c)
endfunction split2d(s)local arr=split(s,"|",false)for k, v in pairs(arr) doarr[k] = split(v)endreturn arr
end
-->8
--i/o
function export()local s=arrname.."=split2d\""for i=1,#data doif i>1 thens..="|"endfor j=1,#data[i] doif j>1 thens..=","ends..=data[i][j]endends..="\""printh(s,"test.txt",true)debug[1]="exported!"
end
__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

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

相关文章

AI数据分析的利器:解锁BI工具的无限潜力

在数字化浪潮席卷全球的今天,数据已成为企业最宝贵的资产之一。如何高效、准确地分析这些数据,挖掘其中的价值,成为企业决策的关键。AI数据分析,作为新时代的数据分析利器,正逐渐改变着企业的决策方式。而BI&#xff0…

【每天一个知识点】IPv4(互联网协议版本4)和IPv6(互联网协议版本6)

IPv4(互联网协议版本4)和IPv6(互联网协议版本6)是用于在互联网上标识和定位设备的两种主要协议。它们的主要区别在于地址空间、结构、以及一些附加功能。以下是两者的对比: 1. 地址长度 IPv4: 地址长度为32位&#xf…

numpy.random.normal与numpy.random.randn的区别与联系

先说结论: numpy.random.normal 对应的是 正态分布,numpy.random.randn 对应的是标准正态分布,所以 numpy.random.randn 是 numpy.random.normal 的一个特例。 1. numpy.random.normal 从正态(高斯)分布中抽取随机样…

基于 EFISH-SBC-RK3588 的无人机智能巡检终端方案‌

一、硬件架构设计‌ ‌核心算力平台(EFISH-SBC-RK3588)‌ ‌异构计算能力‌:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多传感器数据并…

软测面经(私)

测试流程 分析需求——>制定测试计划——>设计测试用例——>执行测试——>编写测试报告 黑盒测试 等价类划分、边界值分析法、猜错法、随机数法、因果图。 白盒测试 代码检查法、程序变异、静态结构分析法、静态质量度量法、符号测试法、逻辑覆盖法、域测试、…

那些年踩过的坑之Arrays.asList

一、前言 熟悉开发的兄弟都知道,在写新增和删除功能的时候,大多数时候会写成批量的,原因也很简单,批量既支持单个也支持多个对象的操作,事情也是发生在这个批量方法的调用上,下面我简单说一下这个事情。 二…

通过VIN车辆识别代码查询_精准版API,获取车辆精准参数

通过17位VIN码的精准匹配,帮助用户快速获取车辆的品牌、型号、出厂日期、排量、外观、车辆型号等详细参数。这一API广泛应用于二手车交易、车辆租赁、配件采购和车辆维修等领域,为用户提供一个高效、准确的解决方案。 代码示例 返回格式:js…

Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法

在ADE仿真中错误问题如下: ERROR (CMI-2440): "xxx.scs" 46338: I2.M1: The length, width, or area of the instance does not fit the given lmax-lmin, wmax-wmin, or areamax-areamin range for any model in the I2.M3.nch_hvt group. The channel w…

LeetCode hot 100—最长有效括号

题目 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 示例 1: 输入:s "(()" 输出:2 解释:最长有效括号子串是 "()"示例 2&#xf…

Vue3集成sass

安装依赖 pnpm add -D sass-embedded配置全局变量 新建文件 src/styles/variables.scss配置Vite 修改 vite.config.ts variables.scss $base-color: bluevite.config.ts // https://vite.dev/config/ export default defineConfig({plugins: [vue(),],resolve: {alias: {:…

【力扣题目分享】栈专题(C++)

目录 关于栈的题目: 1. 最小栈: 思路: 实现代码(最终): 2. 栈的压入、弹出序列: 思路: 实现代码: 3. 逆波兰表达式求值: 思路: 实现代码: 深入了解…

Office 2019 (含Visio+Project)官方IOS 下载

Microsoft Office 2019 是微软公司推出的一款办公软件套装, 主要包括Word、Excel、PowerPoint、Outlook、Visio、Access、Publisher、OneDrive for Business 和Skype for Business等组件。 这些组件适用于Windows和MacOS平台,支持多种语言&#xff0c…

遥测终端机,推动灌区流量监测向数据驱动跃迁

灌区范围那么大,每一滴水怎么流都关系到粮食够不够吃,还有生态能不能平衡。过去靠人工巡查、测量,就像拿着算盘想算明白大数据,根本满足不了现在水利管理的高要求。遥测终端机一出现,就像给灌区流量监测安上了智能感知…

P4017 最大食物链计数-拓扑排序

P4017 最大食物链计数 题目来源-洛谷 题意 要求最长食物链的数量。按照题意,最长食物链就是指有向无环图DAG中入度为0到出度为0的不同路径的数量(链数) 思路 在计算时,明显:一个被捕食者所…

Xmind快捷键大全

常规 插入主题和元素(常用) 编辑主题文本和样式 选择和移动 调整画布和视图 工具和其他

四. 以Annoy算法建树的方式聚类清洗图像数据集,一次建树,无限次聚类搜索,提升聚类搜索效率。(附完整代码)

文章内容结构: 一. 先介绍什么是Annoy算法。 二. 用Annoy算法建树的完整代码。 三. 用Annoy建树后的树特征匹配聚类归类图像。 一. 先介绍什么是Annoy算法 下面的文章链接将Annoy算法讲解的很详细,这里就不再做过多原理的分析了,想详细了解…

什么是电容?

什么是电容? 电荷与电压的比值就是电容量C。电容单位为法拉(F)。1法拉电容器在电压为1V时储存的电荷量为1库伦(C)。图1.1中的球体表面电压与储存的电荷Q关联。电压V等于。Q/V等于。如果球体位于电介质媒介中,电压V降低倍,Q/V等于。在电介质媒…

Linux服务器上mysql8.0+数据库优化

1.配置文件路径 /etc/my.cnf # CentOS/RHEL /etc/mysql/my.cnf # Debian/Ubuntu /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian检查当前配置文件 sudo grep -v "^#" /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "^$&q…

MQTT学习资源

MQTT入门:强烈推荐

第十二章 Python语言-大数据分析PySpark(终)

目录 一. PySpark前言介绍 二.基础准备 三.数据输入 四.数据计算 1.数据计算-map方法 2.数据计算-flatMap算子 3.数据计算-reduceByKey方法 4.数据计算-filter方法 5.数据计算-distinct方法 6.数据计算-sortBy方法 五.数据输出 1.输出Python对象 (1&am…