制作一款打飛機游戲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.pswp.cn/news/902874.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902874.shtml
英文地址,請注明出處:http://en.pswp.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…