From 07d81eb43ba8acf6478b93238f78513d8a401da5 Mon Sep 17 00:00:00 2001 From: xingluo Date: Sun, 21 Dec 2025 05:30:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20lib?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/1.lua | 313 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/ys.lua | 53 +++++++++ 2 files changed, 366 insertions(+) create mode 100644 lib/1.lua create mode 100644 lib/ys.lua diff --git a/lib/1.lua b/lib/1.lua new file mode 100644 index 0000000..bac075e --- /dev/null +++ b/lib/1.lua @@ -0,0 +1,313 @@ +local f1 = { + { + "\159\143\159\143\139\143", + "ffffff", + "000000", + }, + { + "\128\149\159\137\143\155", + "00ffff", + "ff0000", + }, + { + "\130\151\128\148\148\148", + "000000", + "ffffff", + }, + { + "\136\135\159\133\149\138", + "00f00f", + "ff0ff0", + }, +} + +local f2 = { + { + "\159\143\159\143\139\143", + "ffffff", + "000000", + }, + { + "\128\149\151\157\153\151", + "00ffff", + "ff0000", + }, + { + "\130\151\157\140\136\140", + "00ffff", + "ff0000", + }, + { + "\136\135\149\142\134\145", + "00f00f", + "ff0ff0", + }, +} + +local f3 = { + { + "\159\143\132\159\128\148", + "ff0f00", + "00f0ff", + }, + { + "\159\133\144\144\129\149", + "ff0000", + "00ffff", + }, + { + "\128\129\144\130\143\157", + "0f00f0", + "f0ff0f", + }, + { + "\130\149\128\131\128\149", + "0f0000", + "f0ffff", + }, +} + +local f4 = { + { + "\128\148\128\128\148\128", + "000000", + "ffffff", + }, + { + "\130\151\130\131\151\131", + "000000", + "ffffff", + }, + { + "\136\151\149\131\131\149", + "00f000", + "ff0fff", + }, + { + "\159\149\143\153\153\143", + "f0f0ff", + "0f0f00", + }, +} + +local n = {" ","ffffff","ffffff"} + +-- 创建 img 表结构 +local img = {} +for i1 = 1, 8 do + img[i1] = {} + for i2 = 1, 4 do + img[i1][i2] = {} + end +end + +-- ✅ 关键修复:将 logon 改为函数,每次返回新表 +local function logon() + return { + " ", + "fffffffffffffffffffffffff", + "fffffffffffffffffffffffff" + } +end + +-- 定义 logo 为普通表(不是函数) +local logo = { + { + " \139 ", + "fffffff0000000f000fffffff", + "ffffffffffffff0ffffffffff" + }, + { + " \143\129\149 \132 ", + "fffffff0000ff00000fffffff", + "fffffffffff00f00fffffffff" + }, + { + " \159\135 \149\143\158\135\149 ", + "fffffff0ff00000ff0fffffff", + "ffffffff00000ff00ffffffff" + }, + { + " \149 \143\150\144 \131\133 ", + "ffffffff00000f0000fffffff", + "fffffff00000f0fffffffffff" + }, + { + " \149 \136 \149 \131\144 ", + "ffffffff00f00f0f00fffffff", + "fffffff0000ff000fffffffff" + }, + { + " \138 \131\133 \149 ", + "fffffff00000ff0000fffffff", + "ffffffff00000000fffffffff" + }, + { + " \130\139\144 \149 ", + "fffffff000f0000000fffffff", + "ffffffffff000000fffffffff" + }, + { + " \143\131 \135 ", + "fffffff00ff0000000fffffff", + "fffffffff000000ffffffffff" + }, + { + " \143\131 ", + "fffffff00000000000fffffff", + "fffffffff000fffffffffffff" + }, + { + " \143\135\129 ", + "fffffff00000000000fffffff", + "fffffffffffffffffffffffff" + }, +} + +local logo1 = {{},{},{},{}} + +-- 第一组 +for i = 1, 3 do + table.insert(logo1[1], logon()) +end +-- 插入 logo 的每一帧 +for _, frame in ipairs(logo) do + table.insert(logo1[1], frame) +end +for i = 1, 2 do + table.insert(logo1[1], logon()) +end +logo1[1].duration = 1 + +-- 第二组 +for i = 1, 2 do + table.insert(logo1[2], logon()) +end +for _, frame in ipairs(logo) do + table.insert(logo1[2], frame) +end +for i = 1, 3 do + table.insert(logo1[2], logon()) +end + +-- 第三组 +table.insert(logo1[3], logon()) +for _, frame in ipairs(logo) do + table.insert(logo1[3], frame) +end +for i = 1, 4 do + table.insert(logo1[3], logon()) +end + +-- 第四组 +for _, frame in ipairs(logo) do + table.insert(logo1[4], frame) +end +for i = 1, 5 do + table.insert(logo1[4], logon()) +end + +-- 填充 img 前 4 行 +for i = 1, 4 do + img[i] = logo1[i] +end + +-- 清理临时变量 +logo1 = nil +logo = nil + +-- 构建 img[5] 到 img[8] +for i=1,3 do + img[5][1][i] = n[i] .. f2[4][i] .. n[i] .. f4[4][i] +end +for i=1,3 do + img[5][2][i] = n[i] .. n[i] .. n[i] .. n[i] +end +for i=1,3 do + img[5][3][i] = n[i] .. n[i] .. n[i] .. n[i] +end +for i=1,3 do + img[5][4][i] = f1[1][i] .. n[i] .. f3[1][i] .. n[i] +end + +for i=1,3 do + img[6][1][i] = n[i] .. f2[3][i] .. n[i] .. f4[3][i] +end +for i=1,3 do + img[6][2][i] = n[i] .. f2[4][i] .. n[i] .. f4[4][i] +end +for i=1,3 do + img[6][3][i] = f1[1][i] .. n[i] .. f3[1][i] .. n[i] +end +for i=1,3 do + img[6][4][i] = f1[2][i] .. n[i] .. f3[2][i] .. n[i] +end + +for i=1,3 do + img[7][1][i] = n[i] .. f2[2][i] .. n[i] .. f4[2][i] +end +for i=1,3 do + img[7][2][i] = f1[1][i] .. f2[3][i] .. f3[1][i] .. f4[3][i] +end +for i=1,3 do + img[7][3][i] = f1[2][i] .. f2[4][i] .. f3[2][i] .. f4[4][i] +end +for i=1,3 do + img[7][4][i] = f1[3][i] .. n[i] .. f3[3][i] .. n[i] +end + +for i=1,3 do + img[8][1][i] = f1[1][i] .. f2[1][i] .. f3[1][i] .. f4[1][i] +end +for i=1,3 do + img[8][2][i] = f1[2][i] .. f2[2][i] .. f3[2][i] .. f4[2][i] +end +for i=1,3 do + img[8][3][i] = f1[3][i] .. f2[3][i] .. f3[3][i] .. f4[3][i] +end +for i=1,3 do + img[8][4][i] = f1[4][i] .. f2[4][i] .. f3[4][i] .. f4[4][i] +end + +-- 清理 +f1 = nil +f2 = nil +f3 = nil +f4 = nil +n = nil + +img.animation = true +img.secondsPerFrame = 0.1 + +-- ✅ 现在可以安全序列化 +print(textutils.serialize(img[1])) + + +local function drawFrame(frame, term) + for y, row in ipairs(frame) do + term.setCursorPos(1, y) + term.blit(table.unpack(row)) + end + if frame.palette then for i = 0, #frame.palette do + local c = frame.palette[i] + if type(c) == "table" then term.setPaletteColor(2^i, table.unpack(c)) + else term.setPaletteColor(2^i, c) end + end end + if img.multiMonitor then term.setTextScale(img.multiMonitor.scale or 0.5) end +end + + + +term.clear() +for i, frame in ipairs(img) do + drawFrame(frame, term) + if img.animation then sleep(frame.duration or img.secondsPerFrame or 0.05) + else read() break end +end +read() +term.setBackgroundColor(colors.black) +term.setTextColor(colors.white) +term.clear() +term.setCursorPos(1, 1) +for i = 0, 15 do term.setPaletteColor(2^i, term.nativePaletteColor(2^i)) end + diff --git a/lib/ys.lua b/lib/ys.lua new file mode 100644 index 0000000..4a6450c --- /dev/null +++ b/lib/ys.lua @@ -0,0 +1,53 @@ +-- 压缩函数 +function rleCompress(str) + local result = {} + local i = 1 + while i <= #str do + local char = str:sub(i, i) + local count = 1 + while i + count <= #str and str:sub(i + count, i + count) == char do + count = count + 1 + end + if count > 2 then + table.insert(result, ("[%d]%s"):format(count, char)) + else + table.insert(result, char:rep(count)) + end + i = i + count + end + return table.concat(result) +end + +-- 解压函数 +function rleDecompress(str) + local result = {} + local i = 1 + while i <= #str do + if str:sub(i, i) == "[" then + local j = str:find("]", i) + local num = tonumber(str:sub(i+1, j-1)) + local char = str:sub(j+1, j+1) + table.insert(result, char:rep(num)) + i = j + 2 + else + table.insert(result, str:sub(i, i)) + i = i + 1 + end + end + return table.concat(result) +end + +-- 测试 +file = fs.open("1.bimg","r") +original = file.readAll() +file.close() + + +local compressed = rleCompress(original) +print("原始:", original) +print("压缩:", compressed) +print("解压:", rleDecompress(compressed)) +file = fs.open("12.bimg","w") +file.write(compressed) +file.close() +