Decorative image frame

Mincer

keep ardency

Mincer

在源代码与效果的对照中学习 markdown 语法

下面是一个超级全面的 markdown 语法演示文件

可以将源代码与效果进行对照,以学习 md 语法

注:
本文使用了 # 等具有 md 语法意义的字符,导致目录结构是乱的,因此目录导航没有参考价值

源代码 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# RUNOOB Markdown Test

***
## ***Hello World!***
### _Hello World!_
###### Hello World!



---



> ~~Hello World!~~
> *Hello World!*
> <u>Hello World!</u>
> 这是<sub>下角标</sub>
> 这是<sup>上角标</sup>



ctrl+shift+Q:生成以下这种quote的快捷键(其他快捷键:[自定义Typora快捷键(附带所有快捷键)](https://www.lincol29.cn/shortcutkeys))
> 1. Hello World!
> * Hello World!
> - Hello World!
> + Hello World!
> 1. Hello World!
> > Hello World!
> > > Hello World!
2. Hello World!

> Hello World![^RUNOOB]



Hello `World`!
```python
print('Hello World!')
这是一个链接 [菜鸟教程](https://www.runoob.com)
<https://www.runoob.com>  
__注:__

> 这个链接用 1 作为网址变量 [RUNOOB][1].  
> 然后在文档的结尾为变量赋(网址)
>
> [1]: https://static.jyshare.com/images/runoob-logo.png



![RUNOOB 图标](https://static.jyshare.com/images/runoob-logo.png)
![RUNOOB 图标](https://static.jyshare.com/images/runoob-logo.png "RUNOOB")



| 左对齐 | 右对齐 | 居中对齐 |
| :- | -: | :-: |
| 单元格 | *单元格(可改格式)* | 单元格 |
| 单元格 | 单元格 | 单元格 |



Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:
\   反斜线
`   反引号
*   星号
_   下划线
{}  花括号
[]  方括号
()  小括号
#   井字号
+   加号
-   减号
.   英文句点
!   感叹号



要会 Markdown 涵盖范围之内的标签
不在 Markdown 涵盖范围之内的标签,都可以直接在文档里面用 HTML 撰写。
目前支持的 HTML 元素有:\<kbd> \<b> \<i> \<em> \<sup> \<sub> \<br>等 



Markdown Preview Enhanced 使用 KaTeX 或者 MathJax 来渲染数学表达式。
1
\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)
#### hello[^RUNOOB]脚注 [^RUNOOB]:脚注内容 - [ ] Write the press release - [x] Update the website - [x] Contact the media :joy:使用emoji mermaid语法画图
1
2
3
4
5
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
<details> <!-- 需要默认打开,则换用<details open> --> <summary>折叠</summary> | Rank | Languages | |-----:|-----------| | 1| JavaScript| | 2| Python | | 3| SQL | </details> <!-- 注释,不会输出 --> 对于紧贴的文本块,行末加2个空格 可以换行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43


效果 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


# RUNOOB Markdown Test

***
## ***Hello World!***
### _Hello World!_
###### Hello World!



---



> ~~Hello World!~~
> *Hello World!*
> <u>Hello World!</u>
> 这是<sub>下角标</sub>
> 这是<sup>上角标</sup>



ctrl+shift+Q:生成以下这种quote的快捷键(其他快捷键:[自定义Typora快捷键(附带所有快捷键)](https://www.lincol29.cn/shortcutkeys))
> 1. Hello World!
> * Hello World!
> - Hello World!
> + Hello World!
> 1. Hello World!
> > Hello World!
> > > Hello World!
2. Hello World!

> Hello World![^RUNOOB]



Hello `World`!
```python
print('Hello World!')

这是一个链接 菜鸟教程
https://www.runoob.com
注:

这个链接用 1 作为网址变量 RUNOOB.
然后在文档的结尾为变量赋(网址)

RUNOOB 图标
RUNOOB 图标

左对齐 右对齐 居中对齐
单元格 单元格(可改格式) 单元格
单元格 单元格 单元格

Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:
\ 反斜线
` 反引号

  • 星号
    _ 下划线
    {} 花括号
    [] 方括号
    () 小括号

井字号

  • 加号
  • 减号
    . 英文句点
    ! 感叹号

要会 Markdown 涵盖范围之内的标签
不在 Markdown 涵盖范围之内的标签,都可以直接在文档里面用 HTML 撰写。
目前支持的 HTML 元素有:<kbd> <b> <i> <em> <sup> <sub> <br>等

Markdown Preview Enhanced 使用 KaTeX 或者 MathJax 来渲染数学表达式。

1
\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)

hello^RUNOOB脚注

  • Write the press release
  • Update the website
  • Contact the media

:joy:使用emoji

mermaid语法画图

1
2
3
4
5
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
折叠
Rank Languages
1 JavaScript
2 Python
3 SQL

对于紧贴的文本块,行末加2个空格
可以换行

入门级实用 git 指令和配置

本文从功能出发,对 git 常用指令进行了介绍,适合新手快速上手

其中夹杂几个我配置 git 时踩的坑,及解决方案

更多 git 工作流程 相关知识,在 miniob 那篇 blog 里有介绍

这里列几个学习资料:


实用 git

基本指令

git clone <git地址>

  • 克隆仓库

git init

  • 初始化仓库

git add -A

  • 添加文件到暂存区

git commit -m “提交信息”

  • 把暂存区的文件提交到仓库

git commit –amend -m “提交信息”

  • 修正本地的commit信息

git log –stat

  • 查看提交的历史记录reset

分支:

git checkout -b

  • 以当前分支为基础新建分支

git branch

  • 列举所有的分支

git checkout

  • 单纯地切换到某个分支

git branch -D

  • 删掉特定的分支

git merge

  • 把 branchname 合并到当前分支下

git push

  • 推送当前分支最新的提交到远程

git pull

  • 拉取远程分支最新的提交到本地,并与本地代码合并
  • pull = fetch + merge

冲突:

push分支时出现版本跟不上main的情况:

1
2
3
git fetch upstream
git merge upstream/main
git push

修改区间冲突:

1
2
3
4
5
git status
# 然后打开给出的冲突文件,手动修改(vscode 修改很方便,其他的 vim 等文本编辑器也行)
# 删除标记符号和不想要的内容后...
git add <fileName>
git commit -m"合并new_branch分支并解决冲突"

后悔药:

git 仓库

git checkout

  • 工作区回滚

git reset HEAD^1

  • 撤销最后一次提交

工作区代码

  • 未add:
1
git checkout <fileName>  # 原理:从暂存区回复到工作区
  • 已add未commit:
1
2
git log  # 复制最近一次 commit 的 id
git checkout commitid <复制的id> <fileName>
  • 已commit想恢复到之前的某次commit:同上

缓存:

git stash 缓存栈

1
2
3
git stash
# 切换分支工作后...
git stash apply

若想指定某次缓存的状态:

1
2
3
4
git stash
git stash list # 目的找到想恢复的状态:xxx
# 切换分支工作后...
git stash apply stash@{x}

注:
git stash 的本质:保存「工作区 / 暂存区与 HEAD(最近一次提交)的差异」,并将工作区重置为 HEAD 状态
因此 git stash 后,你的工作区代码会恢复到与 commit 的节点相同的状态,也就是说你修改的代码看起来全都没了,并保存在了stash stack中

.gitignore

不想追踪

将不想追踪的文件的路径放在里面,你的 git 就不会记录这个文件的变化

e.g. 用 * 排除 public 目录里除了 theone.txt 以外的全部的文件,则要保证该文件的父目录未排除,即:

1
2
/public/*
!/public/thatone.txt

取消追踪

以上只能忽略没有被追踪过的文件

若不想再追踪已追踪过的文件,可以追加如下操作:

1
git rm --cached <fileName>  # 若对象是目录,加上 -r 选项

检查是否成功排除:

1
git check-ignore -v <fileName>

远程 remote

git remote -v

  • 查看当前版本库对应的远程仓库

git branch -vv

  • 查看当前版分支对应的远程分支

git branch -a

  • 能额外显示远程仓库所带的分支

git push <库名称> <你想push的分支(用空格隔开)>/-all(全部push)

  • 推送到远程仓库
  • e.g. git push origin mybranch

git push <远程库名称> -d <远程分支名称>

  • 删除远程分支(github 模块里有介绍另一种方法)

git checkout -b <新分支> origin/<新分支>

  • git fetch 到新的分支后,想切换到该新分支

解决git连不上github —— 代理解决方案:

  1. 检查系统代理端口,与 v2ray 设置的 http 端口要一致,记录下来

v2ray界面
系统设置界面

我这里是 10809

  1. 设置 git 代理
1
2
3
git config --global --unset http.proxy
git config --global http.proxy http://127.0.0.1:10809
# 10808是设置的代理者监听端口,+1则是http端口

实用 github

设置

  • 设置github默认分支:
    GitHub - 库 - settings - branches - default

  • 删除远程分支:
    在GitHub上作删除操作,并在本地 git 执行 git remote prune <origin或你的远程库名称>

逛社区技巧

  • 发现开源项目:
    掘金这样的社区,
    github自带trending,
    hellogithub这样的用户,
    ranyf/weekly

  • 限定词搜索:
    search:
    in:name xxx
    in:readme xxx
    in:description xxx
    language:xxx
    stars:>10000
    pushed:>2023-09-01

  • 分类搜索:
    awesome xxx ->百科大全
    xxx sample->例子
    xxx starter->项目空架子,
    xxx tutorial->教程

miniob参赛记录与心得(OceanBase计算机系统能力大赛)

总结

本比赛的目标是完成数据库内核的编写:

  • 初赛 - 简易数据库miniob
  • 决赛 - 数据库oceanbase

完全没学过数据库系统,只会几个SQL语句的情况下,跟队友硬着头皮就上了!

按结果看,大概是一次失败的尝试……(根本没做几个题,解题记录日后再说……)

但秉着 “过程最重要的” 心态,还是决定写一篇blog记录自己学到的零零散散小知识:

  • 数据库系统知识
  • 通过 git 进行多人协作
  • 利用官方提供的 docker 镜像,获得开箱即用的工作环境

数据库系统知识

一个博客肯定是塞不下数据库如此庞大的知识体系的,等开数据库课程了再补充。这里列几个学习资料:

ps. 本来打算不管数据库知识,直接盘代码来着,结果一败涂地,断点打打打打到厌倦 —— 还是得先学点垂直知识


git 工作流(以drop-table模块为例)

以下用命令行操作,也可在vscode上用图形化界面操作

  • 每个模块另建分支,进行开发
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 1. 针对该模块,创建新的分支:
git pull origin competition-2025 # 开启新模块的开发之前,拉取远程主分支的最新代码 -666
git checkout -b drop-table


# 2. 开发过程中,不断在你的分支上提交:
git add .
git commit -m '开发阶段1的说明' # 提交到本地的 drop-table 分支

git push origin drop-table # 同步到远程的 drop-table 分支

git add .
git commit -m '开发阶段2的说明' # 提交到本地的 drop-table 分支
git add .
git commit -m '开发阶段3的说明' # 提交到本地的 drop-table 分支

git push origin drop-table # 同步到远程的 drop-table 分支


# 3. 确保完成开发后,合并分支:
git checkout competition-2025 # 返回主分支
git pull origin competition-2025 # 保证本地的 competition-2025 分支(即主分支)的代码最新
git merge --no-ff drop-table
# /*
# 若别人在 -666 处的远程仓库的基础上,抢先合并了新的模块,你可能需要处理冲突:
# 先在 vscode 内手动操作文件内容,解决冲突,然后
git add lsm_table_engine.cpp lsm_table_engine.h # 重新 add 所有冲突的文件
git commit -m "解决冲突并合并分支"
# */

git push origin competition-2025 # 将代码同步到远程


# 4. 删除已经merge过的分支
git branch -d drop-table # 删除本地的分支
git push origin --delete drop-table # 删除远程的分支
  • 随时可以检查远程仓库的状态,查看成员的开发进度
1
2
3
4
5
git fetch origin

git log origin/你想查看的分支名 # 只看远程仓库里一个分支上的commit
# 或者
git log --remotes # 看远程仓库里所有分支上的commit

git log 有用的参数:
–graph 用图描述,较直观
–oneline 仅一行描述,较简洁

  • 回滚
1
2
3
4
5
6
7
8
9
10
11
12
13
14
git log # 确定目标commit的哈希值

# 在未提交之前就要撤销所有更改:
git reset --hard HEAD

# 在模块分支上撤销一次提交:
git revert commit的哈希值

# 在模块分支上撤销多次提交(-n 参数使得最后需自行commit):
git revert -n commit1的哈希值..commit4的哈希值 # 范围左开右闭,因此为撤销3次,即代码回到commit1的状态
git commit -m "撤销多次提交"

# 在主分支上取消合并:
git revert -m 1 commit的哈希值

配置要点

  1. 安装 docker desktop
  • 配置国内镜像源:以便在国内拉取镜像
    打开 docker desktop -> 设置 -> Docker Engine -> 输入

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    "features": {
    "buildkit": true
    },
    "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker-0.unsee.tech",
    "https://docker.m.daocloud.io"
    ]
    }
  • 修改 Disk image location:防止 c 盘爆了 / 不安装到c盘——自定义路径安装docker(但我没用)

  1. Github 远程仓库操作

  2. clone miniob 在 github 上的代码

  • 设置 git bash :以防clone时错误地将换行符 LF(Unix系统的换行符) 自动转换为 CRLF(Windows系统的换行符)

    1
    git config --global core.autocrlf false
  • clone:

    1
    git clone https://github.com/MincerGitHub/miniob.git
  1. 获取 miniob 的 docker image
  • 这里选择 pull from github:

    1
    docker pull ghcr.io/oceanbase/miniob && docker tag ghcr.io/oceanbase/miniob oceanbase/miniob
  1. 基于 oceanbase/miniob 镜像创建并启动 container
1
docker run -d --name miniob --privileged -v $PWD/miniob:/root/miniob oceanbase/miniob

docker run:创建并启动一个新容器。

-d:全称 --detach,表示以“分离模式”运行容器(即后台运行)

--name fortest:为容器指定一个自定义名称“fortest”,方便后续通过名称管理容器(如启动、停止、进入容器等)

--privileged:允许容器内的进程获得接近主机的权限 , 方便调试

-v $PWD/miniob:/root/miniob:用于将主机目录与容器目录进行“绑定挂载”(bind mount),实现两者的文件实时同步。

- `$PWD` 是当前终端的“当前工作目录”(例如 `/home/user/project`)。 
    - `$PWD/miniob` 表示主机上的目录(即当前工作目录下的 `miniob` 文件夹,通常是本地克隆的 MiniOB 源代码目录)。 
    - `:/root/miniob` 表示容器内的目录(即容器中 `/root/miniob` 路径)。 
    - 效果:主机的 `$PWD/miniob` 目录与容器的 `/root/miniob` 目录完全绑定,两者的文件修改会实时同步(主机修改代码后,容器内可直接读取到;容器内编译生成的文件也会同步到主机)。 

oceanbase/miniob:指定创建容器所基于的 Docker 镜像 ( 如果本地没有该镜像,Docker 会自动从远程仓库拉取)

  1. 在 vscode 中启动 docker
  • 通过docker插件, 对刚刚创建的 container 点击 Attach Shell , 可以看到容器内的终端被创建出来

  • 安装依赖:

    1
    bash build.sh init
  • 构建:

    1
    2
    3
    ls
    cd miniob
    bash build.sh debug
  • 运行:

    • “直接执行命令”的模式:
      1
      ./bin/observer -f ../etc/observer.ini -P cli

      -f: 设置配置文件

      -P: 设置通讯协议

    • “以监听TCP端口的方式启动服务端, 再启动客户端连接服务端”的模式:
      1
      2
      3
      4
      5
      # 服务端
      ./bin/observer -f ../etc/observer.ini -p 6789

      # 客户端
      ./bin/obclient -p 6789
  1. 尝试使用此数据库
  • miniob > 后输入指令, 可输入 help 得知各个指令
  1. 尝试调试,以了解代码结构
  • 启动 debug -> 打断点 -> 输入命令 -> 单步调试

mul-dino —— 人工智能方法接入谷歌小恐龙游戏

记录

跑原项目

包都过期了,换包

盘源码逻辑

从 apps 入手,模型和游戏代码

修改 NNModel(练手)

  1. 添加下蹲预测状态
  2. 修改 Model 的损失函数:均方误差 -> 交叉熵损失,更适应多选项预测

新建 DQNModel(Deep Q-Learning Network)

  1. 优化 reward(为了方便,我直接把 reward 写在小恐龙的代码而不是 AI 的代码里,对性能可能有一丢丢影响?)
  2. 引入优先级经验回放机制,根据 TD-Error 优先采样对模型改进潜力更大的经验(后续又在 tdError 中加入 reward 的权重)
  3. 将实时状态得出的经验加入经验池,训练效率大大提升(((其实本来就该这样?我一直在模仿别的模型,只把小恐龙死亡那一刻的数据用来训练

改进方案

  1. 优化 dqn.js
  2. 加个面板,监控模型的训练情况并做可视化(之前Mnist手写识别实验的那种)
  3. 在 TrexGroup.js 里调参 —— reward 的影响因素
  4. 新建 PPO、Dueling Q-Learning…… 别的类型的模型
  5. 包装:美化界面/串联成一个教学项目

资料

Chrome自带恐龙小游戏的源码研究(一)
前端人工智能?TensorFlow.js 学会游戏通关
PPO、DQN、A2C


反思与总结

  • 借机熟悉了开源项目的学习流程:
    了解项目的前因后果 -> 本地跑原项目 -> 拆结构,盘代码 -> 在对项目的理解基础上,做出自己的修改
  • 面对这种大作业,大家各有各的做法;只需记住,投入就有回报的机会。我无疑对 AI 的代码实践有了更加深刻的理解
  • 工程和实验密不可分。我现在学习的每一点工程知识,都会对未来的研究有帮助。只要在学,在做,就没有浪费时间一说
  • 把自己的实现思路完整清晰地表达出来 —— 我缺少这种能力,有待加强即时思考的能力

meowfish —— openlab黑客松参赛记录

项目介绍

针对办公场景的摸鱼网站 —— meowfish

meowfish 网站:https://cixfjzhstlly.sealosbja.site (没钱买服务器和域名,已失效)
github 仓库:https://github.com/MincerGitHub/MeowFish

本前端项目基于 Vue 框架;word部分涉及与后端、数据库的交互,使用 nodejs + MongoDB

对本前端小白来说是一次非常好的 vue 项目实践(第一次正儿八经写 vue),也学到了搭建简易后端的一些细节

作为一个 web 项目,使用的技术较为平庸;but 其亮点真正在于完整有趣

  • 体制内群体的摸鱼需求为出发点,搜集各方建议,给出完整方案
  • 能在短短一个周末的时间内(不算上满课的白天……),上线一个能顺利跑的网站
  • 对着各种办公软件界面进行脑暴,最终融合了最适合他们的小游戏
显示具体内容
 
        word     - 随机文本阅览器
        excel    - 贪吃蛇
        ppt      - 扫雷
        ps       - dino run
        vscode   - 随机报错
        notebook - 成语接龙
    

记录

code

在本地搭建倒是没遇到什么技术难题

但在部署上线的过程中,遇到了很多实践上的问题,不停找资料,未知变已知。

下面列举几项有用的 web 上线资料(入门级):

life

记录一点片段:

  • 王老师上完晚课转身向窝点走去
  • 讨论完idea后第一件事是打开网课
  • 两个人半夜不知道在燃什么但是燃就完了
  • 武术之王熬夜后早八飘然打拳
  • 零食聚起来像在野餐
  • 看见脏东西了
  • 马上路演但是超绝有气无力
    ……

反思与心得

两天两夜,马不停蹄的周末(实则白天满课,只有通宵换来的时间)

非常好熬夜使我更加秃头👍

实践出新知 ?
实践出新知 √ (怎么学无止境啊……(抱怨))

实践的重要性不容小觑,在其中会学到更多细节,有助于得到成果

前端入门的没有想象的这么快,需要有上强度的决心(握拳)

跟大家一起干的时候,心情很高涨,但专注度较低

天问51-stm32电子桌宠制作

记录

  1. 学习B站“菜鸡专属”教程

  2. 准备零件:
    ST-LINK烧录器、ASR-LINK 烧录器、3D 打印的壳子、PCB板子、一堆杜邦线、屏幕、舵机、电池、流水灯、喇叭、ASR-PRO 语音模块、蓝牙模块等

  3. 在天问51软件中为语音模块编程,安装自定义的的问答语音

烧录教程
代码1
代码2
代码3

详细代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "myLib/asr_ws2812.h"
#include "asr_math.h"
#include "HardwareSerial.h"
#include "myLib/asr_event.h"

uint32_t snid;
void breath();
void random2();
void flowing();
void flash();
void close();
void ASR_CODE();
QueueHandle_t message1=NULL;
uint32_t rec_1 = 0;
uint32_t var = 0;
int16_t light = 0;
int16_t light_d = 1;
uint8_t random3 = random(1, 5+1);
uint8_t random22 = random(1, 5+1);
uint8_t f1 = random(1, 3+1);
void A1();
void UART2_RX();

//{speak:小萌-可爱女童,vol:10,speed:10,platform:haohaodada}
//{playid:10001,voice:}
//{playid:10002,voice:不要走汪汪汪}

WS2812 ASR_WS2812_2(2);
/*描述该功能...
*/
void breath(){
if(light == 0){
light_d = 1;
}
if(light == 150){
light_d = -1;
}
light = light + light_d;
ASR_WS2812_2.setBrightness(light);
ASR_WS2812_2.pixel_set_all_color(255,0,0);
ASR_WS2812_2.pixel_show();
delay(5);
}

/*描述该功能...
*/
void random2(){
ASR_WS2812_2.pixel_set_all_color((random(1, 256+1)),(random(1, 256+1)),(random(1, 256+1)));
ASR_WS2812_2.pixel_show();
}

/*描述该功能...
*/
void flowing(){
for (int i = 0; i < 30; i = i + 1) {
ASR_WS2812_2.setBrightness(255);
ASR_WS2812_2.pixel_set_color(i,136,255,255);
delay(50);
ASR_WS2812_2.pixel_show();
}
}

/*描述该功能...
*/
void flash(){
ASR_WS2812_2.setBrightness(150);
ASR_WS2812_2.pixel_set_all_color(255,0,0);
ASR_WS2812_2.pixel_show();
delay(500);
ASR_WS2812_2.pixel_clear();
ASR_WS2812_2.pixel_show();
delay(500);
}

/*描述该功能...
*/
void close(){
ASR_WS2812_2.pixel_clear();
ASR_WS2812_2.pixel_show();
rec_1 = 0;
}

/*描述该功能...
*/
void ASR_CODE(){
set_state_enter_wakeup(60000);
set_state_enter_wakeup(40000);
switch (snid) {
case 1:
var = xQueueSend(message1,&snid,0);
break;
case 2:
var = xQueueSend(message1,&snid,0);
break;
case 3:
var = xQueueSend(message1,&snid,0);
break;
case 4:
var = xQueueSend(message1,&snid,0);
break;
case 5:
var = xQueueSend(message1,&snid,0);
break;
case 6:
var = xQueueSend(message1,&snid,0);
break;
case 7:
var = xQueueSend(message1,&snid,0);
break;
case 8:
Serial2.print("a");
break;
case 9:
Serial2.print("b");
break;
case 11:
Serial2.print("e");
break;
case 12:
Serial2.print("d");
break;
case 13:
Serial2.print("f");
break;
case 14:
Serial2.print("g");
break;
case 15:
Serial2.print("h");
break;
case 801:
f1 = random(1, 3+1);
if(f1 == 1){
//{playid:10500,voice:在想你}
play_audio(10500);
Serial2.print("2");
}
if(f1 == 2){
//{playid:10501,voice:秘密}
play_audio(10501);
Serial2.print("a");
}
if(f1 == 3){
//{playid:10502,voice:在码字}
play_audio(10502);
Serial2.print("5");
}
break;
}
}

void A1(){
while (1) {
if(xQueueReceive(message1,&rec_1,0)){
if(rec_1 == 1){
flowing();
}
else if(rec_1 == 2){
close();
}
else if(rec_1 == 7){
random2();
}
}
if(rec_1 == 3){
breath();
}
else if(rec_1 == 4){
flash();
}
else if(rec_1 == 5){
ASR_WS2812_2.rainbowCycle(5);
}
else if(rec_1 == 6){
ASR_WS2812_2.rainbow(5);
}
if(rec_1 == 3){
breath();
}
else if(rec_1 == 4){
flash();
}
else if(rec_1 == 5){
ASR_WS2812_2.rainbowCycle(5);
}
else if(rec_1 == 6){
ASR_WS2812_2.rainbow(5);
}
}
vTaskDelete(NULL);
}

void UART2_RX(){
while (1) {
if(Serial2.available() > 0){
String rec = Serial2.readString();
if(rec == "toch"){
delay(200);
enter_wakeup(30000);
delay(200);
random3 = random(1, 5+1);
if(random3 == 1){
//{playid:10503,voice:啦啦啦}
play_audio(10503);
Serial2.print("2");
}
if(random3 == 2){
//{playid:10504,voice:喜欢摸摸}
play_audio(10504);
Serial2.print("1");
}
if(random3 == 3){
//{playid:10505,voice:陪我玩}
play_audio(10505);
Serial2.print("3");
}
if(random3 == 4){
//{playid:10506,voice:饿饿}
play_audio(10506);
Serial2.print("4");
}
if(random3 == 5){
//{playid:10507,voice:危险危险}
play_audio(10507);
Serial2.print("5");
}
}
else if(rec == "toch2"){
delay(200);
enter_wakeup(30000);
delay(200);
random22 = random(1, 5+1);
if(random22 == 1){
//{playid:10508,voice:啦啦啦}
play_audio(10508);
Serial2.print("2");
}
if(random22 == 2){
//{playid:10509,voice:喜欢摸摸}
play_audio(10509);
Serial2.print("1");
}
if(random22 == 3){
//{playid:10510,voice:陪我玩}
play_audio(10510);
Serial2.print("3");
}
if(random22 == 4){
//{playid:10511,voice:饿饿}
play_audio(10511);
Serial2.print("4");
}
if(random22 == 5){
//{playid:10512,voice:危险危险}
play_audio(10512);
Serial2.print("5");
}
}
}
delay(2);
}
vTaskDelete(NULL);
}

void hardware_init(){
message1=xQueueCreate(5,4);
xTaskCreate(A1,"A1",512,NULL,4,NULL);
vol_set(5);
setPinFun(5,FORTH_FUNCTION);
setPinFun(6,FORTH_FUNCTION);
Serial2.begin(9600);
Serial2.setTimeout(10);
xTaskCreate(UART2_RX,"UART2_RX",128,NULL,4,NULL);
vTaskDelete(NULL);
}

void setup()
{
//{ID:100,keyword:"唤醒词",ASR:"哈基",ASRTO:"主人"}
//{ID:1,keyword:"命令词",ASR:"开灯",ASRTO:"开灯了汪"}
//{ID:2,keyword:"命令词",ASR:"关灯",ASRTO:"好黑好黑"}
//{ID:3,keyword:"命令词",ASR:"呼吸",ASRTO:"呼吸灯汪"}
//{ID:4,keyword:"命令词",ASR:"闪光",ASRTO:"闪光灯汪"}
//{ID:5,keyword:"命令词",ASR:"彩虹",ASRTO:"彩虹灯汪"}
//{ID:6,keyword:"命令词",ASR:"流水灯",ASRTO:"流水灯汪"}
//{ID:7,keyword:"命令词",ASR:"随机灯",ASRTO:"随机灯光汪"}
//{ID:101,keyword:"命令词",ASR:"哈基哈基",ASRTO:"主人主人"}
//{ID:13,keyword:"命令词",ASR:"喜欢",ASRTO:"我喜欢你"}
//{ID:8,keyword:"命令词",ASR:"起来",ASRTO:"汪汪"}
//{ID:9,keyword:"命令词",ASR:"过来",ASRTO:"来力"}
//{ID:11,keyword:"命令词",ASR:"趴",ASRTO:"我要摸摸"}
//{ID:12,keyword:"命令词",ASR:"跳舞",ASRTO:"jump more jump"}
//{ID:14,keyword:"命令词",ASR:"左",ASRTO:"左边左边"}
//{ID:15,keyword:"命令词",ASR:"右",ASRTO:"右边右边"}
//{ID:801,keyword:"命令词",ASR:"在干嘛",ASRTO:""}
//{ID:802,keyword:"命令词",ASR:"早安",ASRTO:"姨姨早安"}
//{ID:803,keyword:"命令词",ASR:"晚安",ASRTO:"晚安姨姨"}
ASR_WS2812_2.pixel_init(5);
}

反思与总结

小狗萌的不行

动手尝试、玩玩未知领域很开心,当小狗能正常听指令的时候,真的很爽

这种轻松的“捣鼓”,可以在今后作为一项放松心情的方式呢

话说真的轻松吗)身体上可能熬了几个夜吃不消,但精神上一定是放松快乐的

不过,没来得及自己设计动作就送出去了,有点可惜

myblog

总结过去,迎接未来

停下来

梳理、反思、总结

希望写 blog 能让我获得片刻宁静

冒个泡 —— Global Game Jam 小游戏

记录

跟着zhitiangg、卡西沃茨大人、铠力大人,莫名其妙做了个回消息小游戏出来

资源好像删了)暂且先不在这里放了

尝试了很多与游戏和美工相关的新工具:

  • godot 游戏引擎
  • Figma UI稿(做商软挺好用,但游戏里用不太到)
  • Photoshop 上渲染
  • Aseprite 像素画轻量级工具
  • 板子(

资料

下面列几个学习 godot 和像素画时的资料:

godot 文档
Godot 4 教程《勇者传说》
42分钟内解释所有219个 Godot 节点
独立游戏像素画入门教程
从0绘制一套游戏像素画


反思与总结

比起工具,更重要的是功底

原来和大家一起做游戏这么好玩……下次还要参加开发活动!

不过济南的场地有些hhhhh,当时还停电了一段时间

中途发生了很多令人难忘的事情……该如何做?再次痛恨自己的优柔寡断……