From aae0e4b407d8a4a1a38b45526621569232edbb52 Mon Sep 17 00:00:00 2001 From: Eltrac Date: Mon, 17 Feb 2025 09:49:56 +0800 Subject: docs(blog): post weekly --- ...\344\272\272\345\221\250\345\210\212-vol-16.md" | 61 +++++++++++++++++++--- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git "a/content/posts/\347\250\273\350\215\211\344\272\272\345\221\250\345\210\212-vol-16.md" "b/content/posts/\347\250\273\350\215\211\344\272\272\345\221\250\345\210\212-vol-16.md" index dad74410..a0a9ba20 100644 --- "a/content/posts/\347\250\273\350\215\211\344\272\272\345\221\250\345\210\212-vol-16.md" +++ "b/content/posts/\347\250\273\350\215\211\344\272\272\345\221\250\345\210\212-vol-16.md" @@ -1,11 +1,14 @@ --- title: 稻草人周刊 Vol.16 -subtitle: -description: -tags: -date: 2025-02-10 22:23:01 +subtitle: 为什么你说话别人不爱听 +description: 黑客与画家、卡夫卡的判决、丧偶与新生、没人看写什么博客、赞美 Lua 语言、蛋挞 +tags: + - 编程 + - 游戏开发 + - 写作 +date: 2025-02-17 09:49:48 categories: 稻草人周刊 -draft: true +draft: false toc: true --- @@ -13,9 +16,9 @@ toc: true ## 🏃 这周做了什么? -正在制作一款名叫 Heart Hunter 的电子游戏,因为画面过于简陋所以就先不放出来了。大致玩法是带有收集要素的射击游戏,玩家的生命条、子弹和物品栏都是同一个东西,攻击敌人的方式就是射出心脏,玩家能收集到的道具也是不同种类、有不同效果的心脏。 +正在制作一款名叫 Heart Hunter 的电子游戏,因为画面过于简陋所以就先不放出来了。这个游戏使用 [LÖVE 引擎](https://love2d.org) 和 Lua 语言开发,如果你有编程基础,相信我,这个框架非常容易上手,Lua 语言也十分简单。 -这个游戏使用 [LÖVE 引擎](https://love2d.org) 和 Lua 语言开发,如果你有编程基础,相信我,这个框架非常容易上手,Lua 语言也十分简单。 +{{< img src="https://image.guhub.cn/uPic/2025/02/image-20250217092215040.png" >}} ## 📚 这周读了什么? @@ -118,7 +121,47 @@ toc: true ### Lua 语言的表 -…… +Lua 语言不直接支持面向对象编程,对象是用 `table` 和它的元表实现的;Lua 也没有数组,数组就是索引为数字的 `table`(而且不是从 0 开始,是从 1 开始的);Lua 没有枚举类型,枚举是索引为字符串,值为数字的 `table`。使用下来,我感觉 `table` 的易用性差点可以媲美 JSON。 + +`table` 的写法如下: + +```lua +array = { "I", "am", "an", "array" } +-- 这等价于 +-- array = { +-- 1 = "I", +-- 2 = "am", +-- ... +-- } + +enums = { + TOP = 1, BOTTOM = 2, LEFT = 3, RIGHT = 4 +} +``` + +要遍历 `table` 也非常方便。 + +```lua +for k, v in tbl do + -- ... +end +``` + +`table` 可以用来写模块,Lua 的模块几乎不需要用太多的代码来定义。 + +```lua +local module1 = {} + +module1.variable = 1 + +function module1.doSomething() + -- ... +end + +return module1 +``` + +元表(metatable)是一个有点难理解的概念,它是附属于 `table` 存在的,可以用 `setmetatable()` 函数为一个表设置它的元表,元表也可以是这个表自己。元表可以用来修改算数操作(如果你用表定义了一个向量,那么你可以用元表来定义向量的 `+` 加法运算)、自定义索引规则(例如在访问一个不存在的索引时,返回一个默认值)、自定义字符串表示(类似 Java 的 `toString()` 方法),还有一些其他的控制行为。 ## 🗣️ 碎碎念 @@ -132,6 +175,8 @@ toc: true ## 🐈 +{{< img src="https://image.guhub.cn/uPic/2025/02/IMG_2612%E5%A4%A7.jpeg" title="巧克力和火腿味的蛋挞…… 不敢恭维" >}} + [^1]: 书中有一篇文章是《防止垃圾邮件的一种方法》,通篇都在介绍一种算法,或者说解决问题的思路,我读起来也觉得相当无聊,大概是因为我不是黑客吧。 [^2]: 其实还有一次是我差点溺死,但那次只是纯粹的恐惧。 [^3]: 读书也要看人,如果你身边有不怎么爱看书,也不会说话的长辈,我其实相当推荐你让他们去读这本书。不过,这大概是不太可能的。¯\_(ツ)_/¯ \ No newline at end of file -- cgit v1.2.3