粉丝997获赞7509

这是你的键盘灯光?普通,这是我的键盘灯光贪吃蛇好玩,太经典的游戏了!追着小球跑,越吃越长,越吃越长!打砖块 这个更有趣,砖块真的会被打掉,下面的灯光地板还能反弹。小球还有 love 的 爱心灯效,趁着别人还不知道,快跟着我在驱动里一起设置。首先插上电源线,打开脉冲的驱动,直接点开灯光,设置 开灯光效果。常规灯效旁边有一个自定义灯效,就可以看到厂家已经提前准备好的贪吃蛇 打砖块儿还有 love 灯效了。如果我们动手能力强的话,我们可以在这幅灯效这一栏里啊点击添加上传自己喜欢的这幅图,生成自己喜欢的灯效,你学会了吗?


哈喽,大家好,我是居然今天来给大家讲一个贪吃蛇的小游戏啊,那我们还是先来看一下它的实现的一个主要的思路啊,首先我们要安装一个 pygame 这个模块啊,我们通过 python 去安装就可以了, 那安装完成之后的话,我们首先要导入这个模块,然后并出使画游戏引擎啊,这块给了一个势利的代码,当我们真正在做这个游戏的时候,肯定不会代码就这么简单,对吧?包括我们最后一个这代码比较多,我就没有给大家放。 然后呢我们接下来要定义游戏的窗口大小和其他一些参数啊,这都是些视力,咱们那接下来就是创建窗口并设置一些标题,然后呢定一些颜色啊,还有就是我们要抽象贪吃蛇的一个触食位置和长度啊,还有我们的食物,对吧?因为大家知道贪吃蛇是什么, 就是一个蛇一个食物是吧?比如说这个是你的蛇,是不是这是你的食物啊?你要把它的位置啊, 大小啊,我们一开始初始化的时候要把它定义出来,然后最主要的其实是我们这里啊,编辑游戏的主要循环,包括时间处理啊,对不对?当你按下了这个方向键,上下左右是不是?然后包括我们要会制一些游戏元素, 你的这个食物啊,然后还有更新我们贪吃蛇的一些位置,包括碰撞检测啊,就是你的蛇如果撞墙了啊,我们就认为这个游戏呢就结束了,是不是? 那我们来看一下具体代码实现啊,这个具体代码呢,大家看啊,嗯,比较多,对吧?但是我教大家怎么去看啊?如果大家是刚刚学习的时候啊,在面对代码比较多的时候,我们怎么去看啊? 来啊,大家可以把所有代码都先收起来,把所有的代码你都先收起来,我们就看主要的业务逻辑啊,从上往下看,往下找,找一个什么呢?找他最下面这个, 找到最下面这个,这就是一个主函数啊,这就是一个主函数。那我们来看这个主函数啊,通过主函数来什么来看上面的代码?如果大家一行行看起来的话,其实是比较困难的,对不对?我们通过主函数往下去看, 首先出水话啊,这个我们刚才在笔记里面给大家看了一下,对不对?这出水话,然后接下来呢,设置了一下什么屏幕的啊?这个大小对不对?这个是上面定义的一个两个什么全局变量啊,我们也可以认为它是常量。 然后接下来的话,他把设置的什么,通过这个 display site model 啊,把这个窗口大小设置了一下,然后呢他又设置一下什么?应该是窗口的一个标题,对不对?那我们回头看一眼,是不是设置的应该是窗口的一个标题啊? 那接下来呢?这个 clock 是 时钟的意思,对不对? pygame 点 time 点 clock, 这什么意思呢?我们暂时先放在这里啊,暂时先放在这里,对不对?我们知道它是一个跟时间有关系的,是不是?然后这个呢?这是抽象的一个分数,这是定义了一个变量啊,抽象等于 false, 那 我们也不知道干嘛的,我们继续往下看,对吧? 接下来大家注意看他实力化了两个类,一个是什么?一个是蛇的,一个类,一个什么?一个是食物的,是不是?那实力化的时候,他如果没有调用内里面的方法的时候,我们也不需要去看内里面这个具体的,那写了什么,是不是如果大家想看的话,看一下以内的方法就可以了 啊?看一下他的以内的方法就可以了。其他的方法我们其实不用去看,因为他并没有调用,是不是?他在没有调用的时候,我们先暂时不用看里面方法,看一下出水话就可以了。 首先他定义了一个什么,一个这个变量啊,一些变量,然后去做了一些循环,是不是啊?然后接下来呢?接下来我们看实物这个量,看他注的话做了什么,这块其实也是设置一些什么 一个变量,对不对啊?他是做什么呢?我们一会再来说啊,来看完触手画方法的话,我们就可以把这个什么泪给合上,你就不用看了。那接下来的话,这是一个死循环,是不是?然后呢?这个死循环他一定是有推出的,大家不用这个不用担心啊,首先我们去循环获取,对不对啊?获取什么呢? 获取啊,这个 type q 的 pi game 点 q 的, 这肯定是退出,是不是?如果这个啊,他的事件是什么是退出的话,那我们 system 就是 相当于把这个游戏给退掉了,是不是?如果说他按的是什么键盘啊等等,那现在的话他要什么? 他要移动,是不是?这个时候他调用了蛇里面的一个什么一个方法,这个方法干什么呢?改变方向的对不对?他是怎么改变呢? 来啊,他是通过什么?他最后啊,其实跟我们返回是不是 c f 点,然后等于什么? caron, 是 不是?他这个是什么 能改变左右啊?但是不能上下改变,这是啥意思啊?我给大家来看一下,我们实际演示一下这游戏啊,大家注意看,当我现在按上的时候,其实是没有用的,也就是我们的这个蛇啊,他只能怎么走呢?这样往上他不能直接掉头啊,这样不能直接掉头。好吧,这是我们这个游戏的一个业务逻辑啊, 他只能这样,就是你如果往上的话,只能拐个弯,然后他不能直接的啊,这样回去,好吧,所以说他这里这个方法是做这个的, 那我们接下来的话继续往后看啊,他又判断了一下 k 等于什么?空格,是不是这个空格?什么意思?当我们这个游戏啊,当你挂了之后啊,他会有个,比如说你按空格,是不是按空格,然后揣个根,你就说再来一次吗?当我们按空格的时候,这个游戏是不是又再来了一次,对不对 啊?那就是这个啊,他如果是空格的话,如果你的摁下的键子是空格的话,并且是什么,他是什么?他是处的情况下,对不对?那大家现在知道他是干什么?这个变量应该是有关什么? 应该是有关这个折折了,就是这个游戏啊,你的挂了之后,对不对?然后呢?他应该是把这个变量赋,为什么赋为一个处,对不对?然后接下来再重新的调用这个漫画,就是重新再来一次, 对吧?那接下来呢?这是设置这个背景颜色,这二五五,二五五啊,他是这个 rgb 啊,颜色 rgb, 来,那我们接下来再往上看啊,如果说他 note 对 不对啊? note 的 话就是吗?没挂对不对?没挂的话就是每走一步啊,这是分是不是?那我们刚才看到他出出发定一个变量,这是每走一分,每走一步就加一分,然后呢调用里面的木这个方法是不是?你看现在我们去 看这个木方法,那木方法里面它调用了一个什么 a, d, d, one, 然后呢又调用了一个 delete one, 那 我们一个一个看,首先看 a, d, d, one 这个方法, a, d, d, one 这个方法来 left, 首先定一个什么?一个圆组,然后呢? bode, 对吧?他把这个绑定呢? left 和什么 top 啊?放进去是不是定义了什么?相当于一个负值,然后接下来的话来去画,对不对?这个呢?这个方法就是画的意思啊,在屏幕上显示出来啊,你的这个具体位置是不是?然后呢?二十五,二十五啊?这 接下来的话,如果大家看明白的话,可以看一下它的一个注示啊,等于这个,然后呢它里面有一些这个方法,我们可以看一下 是不是它这个方法。你看啊,我们现在传的是什么?四个参数,那这四个参数是什么呢? left, top, 然后宽,然后呢?宽高是不是?那也就这四个参数,这后面俩是宽高呗,前面是吗?左和上是不是? left, top, 然后接下来的话他又去什么啊?又去判断对不对?如果说判断他相等的话,就是摁的是上下左右,对吧?然后呢分别把四个方向的位置啊,进行什么加或者减,对不对?然后呢把这个 body, 这个 body 呢是一个列表,是不是?然后呢? insert 啊?零 把这个 node 添加进去,添进去之后呢?他后面一定是有什么有对这个 body 啊,这个位置做什么?做处理, 对不对?那也就是说他这个蛇啊,当我们在移动的时候,他是怎么进行这个增加呢?就是你看他是当我们移动的时候,他是把最后一个去掉,然后把头上给他加上一个 这种方式啊,让我们整个蛇显示出来,好吧?这是指示在移动的时候,然后移动的时候你不能光增加,对不对?如果你四个就是在你移动的时候,你的蛇身光增加的话,那个蛇是很长的,是吧?然后呢?你还有什么?你还要把最后一个踢出去,是不是啊?把最后一个踢出去, 那现在的话,我们来逻辑看到这里,看到这里之后的话,哎,他接下来紧接着就循环这个包队了,是不是?他后面往这个包队里面添加,添加元素的话,他一定是为了什么 用,是吧?然后接下来这里会制矩形啊,这个是往哪个对象往这个屏幕上会制一个矩形,这是一个颜色 rgb, 对 吧?然后这个呢,就是这个矩形的宽高,然后这是线条,那个矩形的线条的一个这个宽高,是吧? 那接下来显示死亡啊,就是如果说你已经挂了,对不对啊?这个方法就是 a 字,什么 a 字带的,对吧?就是你挂了,是不是 挂了之后呢?然后我们看它的业务逻辑处理啊?来这里如果挂了之后呢,就显示啊,这个 show text 的 话,它不是咱们 pygame 里面,而是自己定义的啊,而是自己定义的这么一个方法,然后呢它显示啊,把一些这个字体显示上去,对吧?你看 在屏幕上,然后这是位置,这是文本,这是颜色,剩下都有一些默认参数,我们就不用管了,对不对?那来这是什么?你如果大家不知道的话,就看咱们这个方法,这是位置,是不是?他在屏幕上哪个位置显示的是什么?然后呢这个是颜色啊,等等, 那接下来还有什么?还有就是当我们吃掉,就是你把那个食物吃掉之后,是不是来看这里啊?等于对不对?吃掉之后呢要移动对不对?然后舌身呢?要增加, 对吧?蛇身的长度呢?你要去增加一个,然后接下来呢这个食物的位置呢?你要把它重新的去定一下,然后呢再去让它显示出来,是不是把这个食物啊重新显示到屏幕上,然后接下来显示分数,对吧?这是更新啊,这是更新你的游戏画面的话,要实时更新的, 接起来 clock, 哎,这时候看到我们刚才在上面看到那个 clock 了,这什么意思啊?就是他要更新画面,每十毫秒去更新一下我们的画面啊, 那整体的优逻辑我们就看完了,对不对?我们是不是通过查看慢方法,然后把整个贪吃蛇的游戏来给大家说了一下啊?当然这个大家还要回去自己练习啊。

教大家用 c 语言写一个贪吃蛇小游戏,那我们该怎么写呢?我直接讲啊,从第一条看,第一条定义蛇的对象,食物对象,那我们想一下你首先蛇的样子,你要想一下什么样子,对吧?就比如说我们用艾特 当做蛇头星号,蛇身体,那我们颈还有一个食物,对吧?那我们用颈号当做食物, ok, 那 么蛇的大个样子我们就已经知道了, 对吧?那现在可以开始定义了,首先定义蛇身体吧,蛇的身体,那么要怎么定义?用用结构体封装, 那蛇的身体英文是 ok, 那 么蛇的身体到底有多大?多长?放在哪?那我们细想一下,这个游戏开始玩的话, 那么我们整个蛇是不是都在动?都在动的话,那是不是取决于坐标,那坐标我们就用 x 和 y 代替,对吧?然后蛇就是就是定义的 蛇的地,蛇的身体, body 身体,然后定义完了,我们再定义下一条蛇头,对吧?蛇整个大小有多少呢?这些我们都不知道,那怎么定义呢?首先 这个蛇游走在哪个范围,那我们要想一下,对吧?那我们到底要用多大的内存来装这个蛇?那游戏的大小到底是多少?那么我们就要定一个数组,数组 我得,对吧?装他的身体,那这个身体到底是多少?我们不知道,那总不能是无限吧,对吧?我们要用多少的内存呢?我们可以用一个 for 一 句,我们来看一下呢, 好 不好意思, 需要身体,身体,对吧?用新号 有点遮挡住了, 好了,那我们已经写好了,看一下,这太大了呀,应该宽一点,对吧?然后太长了,嗯,再换一个开始吧。好,又行, 哎,这个可以,那我们看一下蛇游戏范围是不是就这么长,对吧?我们就需要占用这么长的范围,然后那这个是多少乘多少?二十乘六十,外面的这个循环就是是行, 我写一下吧,作为行,然后里面的这个循环呢?就是力。 ok, 那 我们已经知道了占用多少行多少列,对吧?行就是高嘛,行就是有多高,那我们就可以先注十掉, 好,继续回到我们这里。那刚才已经算出来了,等于多少?是二十乘以六十,对吧?我们大概要用到这个, 但是我们可以在上面写一个直接定义等于多少长宽高,因为它是固定的呀,后面肯定还会用到,对不对?你想一下英文是这个吧,二十, 哦,宽已经写好了,还有高 是这样吧,长高,然后我们这样就可以改了,改成乘以高,因为前面已经写好了数字,对吧? ok, 那 我们舌头大小占了多少范围我们就知道了,那舌头大小我们肯定还要用一个东西辨别,确定谁的舌头大小,对吧? ok, 定好了之后我们还做什么?实物对象?定义实物对象还是同样的操作,实物负的嘛? 那么实物是放在哪里?首先肯定还是要刚才这一个范围的坐标,对吧?那我们定义 x 还是 x 和 y, 但是它是实物坐标,肯定是随机的,对吧? 随机实物好,实物坐标已经定好了,那我们再想想封装对象,蛇的对象,这个蛇在我们这个范围内至始至终都有几个,都就肯定只有一个,对吧? 嗯,把它装进去,然后食物这其中你吃掉了一个,他要擦才会出现后面的一个,对吧?那也还是只有一个,就是一样的概念嘛。 ok, 然后我们下一步你出手已经定完了,对吧?接下来该出石化,那怎么出石化呢?首先蛇在哪个位置你不知道吧?你我们可以自己定义在哪里啊? 那我们再预一下,看这个程序,就比如说我们把蛇放在正中间这个位置,那么是不是就是这个行除以二,宽也不是列也除以二,是不是就得到中间一个信号的位置是多少了? 那么怎么实现呢?先注死掉, 那我们要首先要封装这个函数,对吧? 好了,我们先说蛇的这个对象初识化的时候有多大?长什么样子? 首先我刚才说了,艾特等于蛇头星号等于蛇身体,那蛇长什么样子?这样,对吧?用了两个,用了两个占位符, 用了两个位置,那我们肯定要这里就是他的所需要的位置,就是等于二,大小等于二,对吧?然后下面我们还需要定义什么?他的位置在哪里,对吧?那么蛇在哪里?蛇的身体在哪里呢? 它的 x 坐标, x 坐标,那我们就直接写高呀,哦,不是宽度除以二,对吧?宽度除以二,那宽就知道了。那同样的操作, 呃,十 已经超过十分钟了,把这个讲完就不讲了。然后一样的操作,对吧?既然上面是,嗯宽,那就是高除以二,是不是就定义好了他的具体坐标,然后宽在哪里呢? 好,那我们再定义什么呢?他的舌是舌头,你定义好了,对吧?那舌身体呢?也没有定义,对吧? 舌头艾特你定义好了,那舌身体怎么定义都是和上面一样的啊,对吧?不对, x 的 坐标 除以二,对吧?那我们就要想一想了。那我们除以二,那不还是跟舌头在一个位置吗?在一个高度吗? 哦,不对不对,我有点说混了呀。那,那肯定不能在一个位置,对吧?高度肯定是一样的,但是裂它不是一个裂,对吧?那我们在蛇的后面,那我们就要减一,对吧? 那么高肯定是一样的除以二,对吧?很简单。 ok, 那 我们整个粗化就完成了。 好,接下来的出使化实物对象也是跟这个出使化是一样的。先不讲了,下期再讲。大家可以回去想想这个出使化实物对象怎么出使化。

嗨,大家好,这里是每天都在努力学习 ai 的 喵芬奇,欢迎回到 webcode 的 入门课程,这节课我们将讲解一个比较流行的 webcode 工具 opencode。 我 们将会对 opencode 进行初步的认识,包括如何下载安装,如何将 opencode 连接到不同的大模型以及 opencode 的 几个重要概念。那么二话不说,让我们开始吧。 首先我们进入 opencode 的 官方网站,其主页就提供了安装命令,我们将其复制并粘贴到我们 wsl 微斑图的终端,回车后 opencode 就 已自动开始安装。当我们看见这个 logo 的 时候, opencode 就 已经安装完成。 但这个时候我们直接使用 open code 的 命令是不行的,我们需要重新打开一个终端进行刷新。再次尝试。 ok, 现在我们成功进入了 open code 的 界面。 在开始使用 open code 之前,我们需要将其连接到一个大模型提供商,我们输入一个斜杠,可以看见其弹出了很多自带的命令。我们先选择 connect 命令。 opencode 作为开源的 webcode 工具,其提供了超过八十个 api 服务商接口。我们将分别演示如何连接 openai 的 codex 以及 deepsea。 openai 的 codex 工具只需要有下载 gpt 的 plus 订阅就可以使用,而不需要额外再对 api 进行付费。首先我们在这里搜索 openai 回车,然后选择 browser, 其会提供一个网页链接, 在 open 格式中,我们只需要选中就会自动复制。我们将这个链接复制,然后在浏览器进行粘贴, 我们的浏览器会自动跳转到 open ai 的 登录界面。我们使用订阅了 china gpt 的 账号进行登录,登录之后会提示我们是否使用 china gpt 登录 codex。 我 们选择 content, 当看见这个页面的时候,我们就已经完成了登录。回到 opencode 中,我们可以看见 openai 的 模型选项。 接下来我将演示如何将 deepsafe 接入 opencode。 我 们来到 deepsafe 的 平台进行登录。进入界面后可以选择 apikey 并创建一个新的 key, 创建完之后可以复制到一个临时文档中,防止被其他复制给覆盖。我们接下来回到 open code, 在 connect 下选择 deep seek, 粘贴我们刚刚得到的 api key。 回车我们就可以看见 deep seek 的 模型。 本次教程将全程采用 codex 进行,不过其他的模型效果是相同的。对于没有 api 以及没有音乐的人,可以尝试使用 open code 提供的免费模型,即 open code then。 下面这些模型。 open code 原生提供两个 agent, 分 别为 plan 和 build, 两者可以通过 type 按键进行切换。 在 plan 模式下, agent 被限制了修改文件的权限,所有文件都是在只读模式。我们通常会在 plan 模式下对于我们要执行的任务进行规划,并和 agent 反复讨论,制定出可行的方案。而在得到方案后,我们可以使用 build agent 让模型开始具体的执行。 如果现在没有太理解也没有关系,之后我们会在开始项目的时候反复用到这套工作流程, 那么本节课程到此为止。我们下载并安装了 opencode, 并将其连接到大模型的 a p i。 在 下一节课程中,我们将学习 opencode 的 一个重要概念,筛选并且粗制化我们的项目。

昨天昨天本来想录来着,但是,但是发现录了半小时,结果结果一点没,不是讲的话一句没录进去,开静音了,结果录半小时是没发现,可能是半夜录着太累了, 然后我直接开奖,昨天写到了加分,对吧?加分是不是还要加速?加速取魔武,取鱼取 鱼。那我是不是还要这边给他定一个加速啊?加速的那个 三百吧。那你等会还要定一个那个延迟的函数,对吧? 如果取魔五,然后并且速度还是在三百,在一百以上的话,那就减去减去一百的延迟,跑得快一点。然后,然后,然后是不是你前面吃了还要给蛇付值,对吧? 你蛇的坐标你要给他负呀?就比如说这是一个蛇头蛇尾蛇尾,他的坐标是三十,这是中心点吧, 那他就是二十九一十,他就是二十八位,然后如果说他往前走一步往前,那就头在这身体身体,那是不是他的坐标就变成了三十一一十? 那他的坐标是不是就三十一十了?那是不是就说前面的一节给后面的一节复制了?就是这个等于这个了,对吧?那这个又等于这个了,是不是给他后面的这个复制了呀? 那是不是就有规律的?我们是不是就可以用负二循环来实现?然后我们要倒着负值啊?为什么要倒着负值?因为你舌头前面根本没东西了呀。你舌头空气给那个舌头负值吗?对吧? 然后既然没没东西给舌头负值,是不?我们等会要单独负值, 然后舌头单独复制。出完这期我可能就不知道出啥了呀,因为最近比较忙,每次录东西都是在半夜录,因为寒假就准备一个比赛。 那就舌头的坐标,我们是不是要单独去给它定义一个呀?舌头的坐标就是你要获取的,就是用户按下的按键,就是 v、 s, v, a、 s, d 这几个坐标的位置,对吧?才是舌头的转向。那就 我这里为什么要做 x 这个等于一啊?等会我写着写着你应该就知道了,是不是就加了就是我们获取用户的坐标,这样吧, 然后我们是不是要写那个获取坐标了呀?我们就可以用到这个函数了呀?昨天做的那个大前天说的那个不读书的接收用户输入,对吧?如果你收到了,那你就传下来,然后我们再控制十个方向,但是你传下来之前是不是要先验证一下?就是 就是你按 a 的 时候,舌头是不是往左边转?但是那正是就你在舌头在左边的时候,你就不能按右了吧,对吧?那是不是要经过这一层验证你再往后面坐呀?不然万一,不然你不可能说你在右边的时候舌头突然就转向了,对吧? 这个应该也要打下发现,因为有些变细还是会错, 那我们这儿先写 if, if 就 说二,如果等于等于按的是 a 的 话,那么这个就不能等于 这样吧。复制复制, 不好意思啊,刚才,刚才,刚才有一段比较。嗯,反正就是我按了个暂停吧,然后重新讲一下,我还没打完就说你按 a 的 时候不能按 d, 然后你按 d 的 时候不能按 a, 按 w 的 时候不能按 s, 按 s 不 能按 w 吧。然后经过这一层验证,然后你再把这个值付给他,那我们现在是不是可以开始真正的 真正的我们接受按键了?那么按键就四个选项,可以用 switch, switch 去哈接收的这个 king 我 我定义了,不要说我这是凭空来的哟。 然后这条用户输入的是 w, 那 k s 就 等于零,我上期,哎,不对,想了没有想象 好像没讲,就是我刚才讲的那个前一节给后一节复制的那个概念,就是你你按 d 的 话,那前进就是 x, 它会变化吧,对吧?按 d 的 话,那 x 就是 加一呗,就是这样来的。 复制复制 w e s k d 吧。嗯,按 w 负一二,然后这个就是 e 吧, 都能想得通吧,都能想得过来。我为啥这里是 e 吧?你看那我刚才负的这段值就是按 d 啊,按 d 啊,因为我们现在这个界面, 是不是我舌头就是朝这边,朝这边,是不是就是说那刚开始舌头要往 d 这边走了,要往右边这边走,是吧? 然后我们在在 play 里面,我们在 play 里面再写一个延迟函数运运行开始它始终就是这个速度吧,然后你吃到食物了,你才会变化。 还有个操作,你要清除舌尾,对吧?就是你不能说你这个时候动起来以后你一直一直走,你要吃到了食物,然后再再增加吧。如果你让他就是刚才 这边一直一直负值的话,我们我没打注式啊,就是一直一直负值的话,那是不是他就会后面的一直加加加就不会剪掉放在这副局吧。是如果 蛇的尾坐标, 并且 小鱼它,你要保证在这个范围你才能消除这个蛇尾巴, 直接复制这一截吧。 那蛇尾的坐标是不是我们还没取呀?还没取到呢,好像 你在开始游戏的姿势。去吧,到循环里面去,就是蛇的大小减一倍 好了吧。运行看看啊,没动看看, 那是不是说要还要,就是你写完这些还要在这个循环里面更新一下界面啊,是不是 没定义?哦,我说呢, 哎,好了,那现在是不是要清除蛇尾呀?它只有你吃到食物了才会加,对吧?你让它正常走,它是不能加的。那我们在定义蛇身这里开始写, 因为你刚开始你就要开始清除,开始清除呀,它只要开始动,你就要清除,它是 x 坐标, y 坐标。哎,我这写的啥呀?哎,少了个这个 秒大于零,并且这符号是并且的意思啊,我就记得第一期好像解释了,大家都知道吧, 然后把这个光标坐标移到那个,其实这样它就其实并不是删掉蛇尾巴,它是覆盖了看看。 哎,是不能走了。那不是还有墙没画,还有提示制服多少分也没写,用墙,在最开始这里写墙,这是墙英文吧。 那就写一个循环,就像打印差不多打印星号一样的逻辑。 哎,快去。 哎,我这点错了,点到点到零旁边久了,然后就说如果 或者 然后我们就可以开始了,是 i 的, 如果 i 等于等于这个是高,并且 j 也等于 j 也等于,但是就是就是到了边界,然后 边界他们两个共同的位置就可以写一个加号。为啥要写加号?因为就是你比如说用减号,你一个一个这样过去,那可能最后那个怎么说呢? 就说如果用减号一个一个这样铺过去,然后这里是不是就可能这个减号是不可能敲敲出?我话太多了。 就是,是不是可能超出这一节?那最后这个就直接用加号代替啊,比较好看,对吧? 然后当 j 等于等于到达这个边界的时候,那是不是输出的就是竖线呀? 或者当 a 到这个最大高的时候,最下面嘛, 那是不是就是横线?哎呀,然后还有一种,然后内部其实都是空格覆盖的,对吧? 然后最后的放行,放行就放行,啥意思都知道吧。 ok, 我 们来看看 在 man, man 还是里面没写吧。嗯,哎,这做事都乱了呀。没事,相信你们也能看懂。 又错了 哦,这里错了,给整整差了。哎,还是有条, 哎,字又写错了, 这,哎,错误还是太低级了哈。哎,那是不是能玩了? 重来一下,可能按到大写了,没反应加速,看看有没有用到。哎,用到了吧。那就是还差提示制服没写了, 那是不是就差提示制服了?刚才再看一下呢。好,那再再显示个分数就写完了呀。那么在最下面就是之前加二的那个位置敲出光标的,这我们在这给他写一个得分吧。 这个前面自己打个分数啊,因为我等会剪辑太难剪了,我就想省下一点时间给大家测试一下这个有没有成功。 这个五分迟到了一个,对吧?然后又十分,哎呀,这个加速太明显了哈,迟不到。好,就这样了。

嗨,大家好,这里是每天都在努力学习 ai 的 喵芬奇。这节课我们将进入游戏基本功能的制作环节,主要包括游戏窗口的生成,所有的基本控制,游戏结束的条件等。 同时我们会第一次尝试使用 open code 来对于突然出现的 bug 进行修复。我们首先切换到昨天创建的游戏目录,并在下面打开 open code, 将 agent 切换为 play 模式,准备开始今天的规划。 我们可以详细的输入自己的需求。我们正在使用 pygame 完成一个贪吃蛇小游戏, 现在项目已经基本完成创建,请你进行 agent 初识化。 由于我们是第一次开始在这个项目内进行具体的代码工作,我们可以在开头加上斜杠 i n i t 来对于整个项目的工作环境进行初识化。 在使用了这个命令后, open code 会在目录下自动创建一个 agent dot md 文档, 这个文档中会根据我们的目标来为 agent 生成一些基本的指导和限制。在后续的使用中规范 agent 的 行为。其中大部分是标准格式,比如说需要阅读配置文件来参考依赖,需要进行自动化的测试等。 关于这个文件的细节这里就不再多讲,大家之后可以自己读一下。现在我们切换为 build 模式来让 agent 执行文件的创建。 ok, 现在 agent dot md 文件已经创建完成,并在我们的目录下写入。我们切换回 plan 模式,开始进一步的精细规划。我们可以告诉 agent, 我们接下来需要开始完善具体的游戏项目。请你先完成如下内容,生成游戏窗口 生成一条可以 w a s d 上下左右控制的蛇 回车,我们可以看见 agent 给出了一个具体的方案, 我们向上翻一下,可以发现 agent 在 状态更新这一部分询问了我们一个问题,是让蛇穿墙还是撞墙结束?我们可以在这里让它选择穿墙环绕的方法。另外我们还可以增加一些规划, 比如说蛇不允许直接反向以及游戏的结束条件。 我们保持 plan 模式继续向 agent 进行询问。 我们可以看见 opencode 现在给出了很多代码的执行细节,我们其实可以不用管整体的氛围来说, agent 没有进一步的问题,我们可以将其切换为 build 模式选择执行。 我们可以看到 agent 已经开始完善代码,并且它还根据我们前面的 agent 点 md 文件要求进行了测试,包括语法的正确性检查以及启动的验证。 运行完毕,现在 agent 给了我们可以运行的命令,我们将其复制回到终端环境运行该命令。 如果是 macos 或者微软图的用户,这里应该可以看到游戏窗口,但是对于和我一样使用 wsl 的 用户来说,可能看不到窗口,这是一个非常令人困惑的 bug, 我 们可以继续让 agent 来修复这个问题。我们可以回到 open code 中向 agent 询问, 在 wsl 中运行没有窗口弹出, 我们看见 agent 向我们进行了提问,询问我们的具体环境。那么我这里使用的是 windows 十一加上 wsl 二的版本,我们可以直接告诉 agent, 目前使用 win 十一加上 wsl 二,请你确认。 现在我们可以看到 agent 进行了很多的测试以及环境的查找,在 web code 的 情况下,我们不用太关心这些细节。 我们可以看到现在 agent 给出了具体的修复方案。由于这个方案需要回到 windows 系统中进行,我们将其截图,然后切换到新的 windows power shell。 根据第一条指示,我们可以输入 wsl 更新, wsl 关闭, 然后我们再一次打开我们的 wsl 终端,这个时候我们的 wsl 会自动重启, 按照第二步的内容输入 vlan, display 和 display 环境变量,并且查看 wsl 记下的内容。 其实这些我们没看懂也没事,我们把它复制下来。在目标导向的驱动下,我们可以先把内容推进下去。我们进入游戏目录,运行游戏的启动命令, 我们可以看见现在窗口已经弹出,并且我们可以操纵本节课的内容。到此结束,我们熟悉了 open code 的 initiate 命令,促使化了游戏,并且生成了可以操纵的蛇。最后我们还尝试使用 open code 来修复令人困惑的 bug。 其实在做 web code 的 过程中,很多细节我们是可以忽略的,我们可以让 agent 自行处理。 在下一节课中,我们会进一步的完善我们的游戏,让其拥有更多更丰富的功能。如果这节课内容有帮助的话,欢迎三连以及关注我,我后面还会更加努力的更新更多课程。