零基础入门,用Excel 编写人工智能程序:老鼠走迷宫

零基础入门,用Excel 编写人工智能程序:老鼠走迷宫

首页休闲益智老鼠迷宫中文版更新时间:2024-04-20

本文是全网少见的从两个零基础快速入门教程,面向编程小白,从头开始学习“软件编程 人工智能”,以便让更多的非专业人士从核心层面了解人工智能的实现方式。本文会少讲理论,直接切入最核心的语句和算法应用。

由于内容较多,计划用三篇讲完。本文是第一篇:软件编程的快速入门,同时完成走迷宫程序的基础工作。

学习的最低要求是电脑中装有微软的Office办公软件,版本不限。只要你会Excel表格的基本操作,就OK了。不用安装任何编程语言和开发系统。

如果电脑中只有WPS Office,理论上也可以,但需要下载一个插件才能用VBA编程。有需要请留言。

我们会从VBA编程语言的入门讲起,让大家用最短的时间编写出自己的第一个计算机程序。然后开始编写真实的人工智能程序,采用强化学习算法。

强化学习是谷歌的围棋AI阿尔法狗、OpenAI的红蓝小人捉迷藏以及ChatGPT等都用到的人工智能算法。

我们会在Excel表格中画一个小型迷宫,构造三个表格作为人工智能的“参数”,老鼠要学会走迷宫,就是通过这些参数得到“智能”的。

这个教程也非常适合假期中的学生们,学习编程语言和人工智能编程。

下面我们开始:

01 在Excel中编写和运行程序

微软的表格软件Excel自带编程语言:VBA,这是一种可视化的BASIC语言,特别适合初学者学习编程。

第一步:打开Excel的编程窗口

打开Excel软件,新建一个空白表格。然后按 Alt F11 组合键,打开编程窗口。组合键的按法是先按住Alt键不放,再按功能键F11。结果如下图:

右侧的窗口就是用来编写程序的界面,请按照上图所示,适当调整编程窗口的大小,使其在占据屏幕的一半,同时露出一半的表格。

然后按照图中标示①②的顺序,点开小框中的“ ”号变为“-”号,再双击“Sheet1”,把光标移到③处,就可以在里面写程序代码了。

第二步:编写第一个程序代码

每一个程序必须由“Sub”开头,空格,接『程序名称』及一对空括号,然后回车。『程序名称』可以用英文及汉字。用“End Sub”结束这段程序。例如:

Sub 初始化() End Sub

如下图:

特别要强调的是,在程序中除了名称可以用汉字以外,其他的字符以及标点符号,都必须在英文状态下输入。否则会提示“无效字符”。最容易出错的是标点符号,如逗号『,』、句点『.』、单引号『'』、双引号『""』、括号『()』等,都必须是英文符号

在一个程序中,可以写多个以“Sub”开头,并以“End Sub”结尾的程序,这段程序称为一个“过程”或“子程序”

在“Sub”与“End Sub”之间,写入自编的程序代码。

第三步:在过程内写程序代码

把光标移到Sub过程内部,写入第一条语句:

Cells(1,1)=1

这条语句的功能是,向指定的单元格中填写指定内容。格式如下:

例如:Cells(1,1)=1,这句话的意思是,向第1行第1列的单元格中写入数字1。

我们在这个Sub过程里写三个Cells()语句:

Sub 初始化() Cells(1,1)=1 Cells(1,2)=2 Cells(1,3)=3 End Sub

注意,程序语句通常要比Sub向右缩进4个空格,这样使程序看起来层次分明。按一下Tab键即可实现缩进功能。完整代码如下图:

下面我们看看怎么运行这段程序。

第四步:运行程序

把光标移到Sub过程内部,然后按功能键F8,可以看到 Sub语句的背景变成黄色,代表程序将从此处开始执行。

如果运行程序时提示错误。请跳到第五步 设置安全级别。

F8键的功能是按顺序执行一句程序,专业名称叫“单步执行”。

再按F8键,让黄色背景移到下一句 Cells(1,1)=1 上,代表此句将被执行。

再按F8键,黄色背景又下移一行。此时上一句已经执行完毕,我们看看结果是什么:

我们看到表格中的第1行第1列的单元格中被填入数字1。

我们的第一句程序执行成功了。

再按两次F8键,让后两条语句也执行完毕。我们看到,表格的第1行第2列和第3列中分别被填入数字2和3,如下图:

至此,这段小小的程序全部执行完毕。我们编写的第一个程序大功告成了。

不过,这么一下一下地按F8执行程序也太累了吧,能不能一键执行到底呢?

当然可以!

按功能键F5可以一键执行程序。

之所以先讲F8单步执行,是为了能让大家能够直观看到程序的执行顺序。以后在调试程序时,用单步执行也会非常方便。

注意,如果我们编写了多个Sub过程,一定要把光标移到想要运行的Sub过程内部,再按F5,这个过程才会被执行。而其它过程则不会被执行,如下图:

最后总结一下,VBA编程常用的功能键如下图所示:

以上就是在Excel中用VBA语言编写和运行程序的全部步骤。一点儿也不难吧?

第五步:设置安全级别

如果前四步一切正常,可以跳过这一步不看。

如果程序无法运行,提示程序被“禁止”,这是由于Excel的安全级别设置过高,不允许运行任何程序。需要重新设置“宏安全性”

请按下图4个步骤,将安全级别设置为:“禁用所有宏,并发出通知”。

如果在Excel主菜单找不到步骤①中的“开发工具”选项,不要着急。

点击主菜单的“文件”→“选项”→“自定义功能区”,在“主选项卡”下,选中“开发工具”复选框,“开发工具”即可出现。如下图所示4个步骤:

有些较低版本的Excel软件,安全性设置在:“工具”→“宏”→“安全性”选项下,请把安全级别设为“中”即可。

02 编程基本操作

我们已经写了3句代码,在表格第1行前三列填入了1、2、3三个数字。下面接着在后面依次填入4、5、6、……,直到20,一列填一个数字。

如果还用上面的方法,就得傻傻地写20条Cells()语句才能完成。我们使用循环语句,几句代码就可以实现。步骤如下:

(1)定义变量。

我们在中学就学过代数,可用字母表示数字,如x=8,y=0.5等,这些字母在程序中称为变量

在使用变量前,需要先定义变量的类型,方法如下:

例如:(注:以下程序代码显示不全时,可左右滑动)

Dim 列号 As Integer '把变量『列号』定义为整型,只能表达整数 Dim x As Single '把变量『x』定义为浮点型,可表达带小数点的数 Dim 姓名 As String '把变量『姓名』定义为字符串,可表达“张三”等单词或汉字

通常把所有的定义变量的语句都集中在一起,放在Sub过程内的上方

另外,我们看到在上面的Dim语句后面,还跟着一段由英文的单引号『‘ 』开头的一段话,这是注释语句,显示为绿色。它是给阅读者看的,用于说明程序的功能,以方便理解。这种由单引号开头的注释语句不是程序,不会被执行。

(2)For循环语句

For循环语句由For开头,Next结束。中间是循环体,如下图:

例如:

Dim 列号 As Integer '把变量 列号 定义为整型 For 列号 = 1 To 20 '列号从1到20循环 Cells(1, 列号) = 列号 '循环体,向指定单元格写入数据 Next 列号 '每循环一次,列号加1,大于20后退出循环

这段程序从『列号=1』开始执行,执行到『Next』语句后,自动给『列号』 加1,然后跳回到『For』语句重新判断『列号』。

如果『列号』没有超过20,则再次执行循环体中的代码。

一直重复循环以上过程,直到当列号超过20后,退出循环,执行Next后的下一句程序。

完整的代码如下图。请把光标移到Sub过程内部,按F5执行这段程序

结果是:在表格第1行的每一列,依次从1写到20,见下图。

这一串连续的数字就是表格的列号,我们留着它供以后使用。

如果你还没有搞明白循环语句的用法,建议按 F8键单步执行上面的程序,可以直观看到循环语句是如何工作的,还能看到循环变量『列号』的值的变化过程。如下图:

(3)保存程序

程序编好后,要保存起来,以便下次使用。方法是:

点选主菜单的“文件”→“另存为”→“其他格式”

然后点选“文件格式”,选择“Excel 启用宏的工作簿(*.xlsm)”,输入文件名“老鼠走迷宫.xlsm”,再点“保存”按钮即可。如下图:

注意,必须选用后缀为.xlsm的文件格式存盘,选用其他文件格式会导致程序丢失

有些较低版本的Excel 没有*.xlsm文件类型选项,那么就按照正常方式存盘即可。

(4)打开已保存的程序

在Excel中点选主菜单的“文件”→“打开”,选择刚才保存的“老鼠走迷宫.xlsm”。文件打开后,通常会有一个安全警告,如下图黄色背景部分:

这是为了防止未知文件中的宏病毒。我们已知这个文件是安全的,所以点击“启用内容”按钮即可。

对于较低版本的Excel,安全警告可能是个对话框,同样选择“启用宏”按钮

启用后,请按组合键 Alt F11 打开编程窗口,即可看到上次编写的程序了。尝试运行一下程序,检查是否正常。

如果打开程序或运行程序出现问题,请跳回到上面的第五步:设置安全级别。

以上是Excel VBA编程的基本入门。下面我们进入实质编程阶段。

03 画迷宫

首先在Excel表格中,画一个三行三列的迷宫。

我们把迷宫的左上角,也就是起点,放在整张表格的第4行,第2列。

因为这两个数字在后面的程序中会经常用到,我们定义两个常量代表这两个数字。定义常量的方法如下:

Const 迷宫头行 = 4 '迷宫左上角的行号 Const 迷宫头列 = 2 '迷宫左上角的列号

这样定义完以后,只要在程序中使用[『迷宫头行』,就代表数字4,使用『迷宫头列』 就代表数字2。

我们把定义常量的代码放在Sub过程外面,编程窗口的最顶端。如下图所示。

这样做的原因是:在Sub过程外面定义的常量或变量,所有Sub过程都可以使用。

然后,我们开始编写第二个过程“画迷宫”,写在第一个Sub 初始化()过程的下面(如上图):

Sub 画迷宫() End Sub

接着在这个新的Sub过程里面,写入以下代码:

Dim 迷宫行号 As Integer '迷宫内部的相对行号 Dim 迷宫列号 As Integer '迷宫内部的相对列号 Dim 迷宫编号 As Integer '迷宫内单元格的编号

这三条语句定义了三个变量,写在Sub过程内部,称为“局部变量”。它们与定义在Sub过程外部的变量不同,局部变量只在Sub过程内有效,别的Sub过程不能使用。另一方面,在不同的Sub过程内可以定义的相同名字的变量,它们之间互不影响。

变量的含义在后面的注释语句中已经写了。我们以后用到它们的时候再详细解释。

接着写入以下代码:

'以下画迷宫边框,并设置迷宫区域的字体属性 With Range(Cells(迷宫头行, 迷宫头列), Cells(迷宫头行 2, 迷宫头列 2)) .BorderAround LineStyle:=xlDouble '在迷宫四周画出双线边框 .HorizontalAlignment = xlCenter '设字符居中显示 .Font.ColorIndex = 15 '设字体为灰色 .Font.FontStyle = "Bold" '设字体为粗体 End With

以With开头的第一个语句中,Range()语句的功能是定义一个矩形区域,括号里的两个Cells()分别为矩形区域的左上角和右下角的单元格。

Cells()里使用了我们刚定义的两个常量『迷宫头行』和『迷宫头列』,分别代表4和2。也就是说,它的实际含义是:

Range(Cells(4, 2), Cells(6, 4))

即以第4行第2列的单元格为左上角,以第6行第4列的单元格为右下角,组成的3行3列的矩形方块。如下图:

可以看出,Cells()语句内的行号,列号可以写成数字、常量、变量或表达式,非常灵活。这就是编程的特点,大部分代码都可以这样用。

有人会问:为什么在程序里不直接写Cells(4, 2), Cells(6, 4),而要用那么长的名字呢?

这样做是为了以后需要改变数字时,便于修改。

接着看With语句下面的4句代码,功能是画出这个矩形四个边框,并设置字体属性。其中的英文字符,都是Excel手册规定的,查出来使用即可,没必要记。

代码的开头或中间有一个或多个小句点,其含义是:小句点后面的对象属于前者

比如,中国.北京,含义是:中国的北京。

如果写成“中国.华盛顿”,就是错的,因为中国没有这个对象

每个对象还可以有自己的子对象,因此,可以用多个句点连着写多级。比如:

中国.北京.清华大学.法学院.某某班.某某人.年龄=20。

最后一级的对象通常是前面对象的属性,比如某人的年龄、身高、体重、学习成绩等等都是属性。

在VBA 中,单元格、矩形块、表格等都称为对象。这种“面向对象”的表达方式,使归属关系非常清晰,即使有重名的对象也不会造成混乱。

通常,当一个对象有多个属性需要设置或使用时,就可以用With语句。

以With开头,以End With结束。用法如下:

把以上的代码复制或录入到Sub 画迷宫()过程内,然后按F5键运行,看看是否画出一个矩形边框。

再强调一遍,按F5键运行前,要把光标移到Sub过程内,才能运行该过程

如果光标在Sub过程外部,按F5键后会弹出菜单,让你选择要运行哪个过程。如下图:

选择“画迷宫”,点击“运行”按钮即可执行。

下面4句代码画迷宫的内部的墙,方法是用Cells(行号,列号)语句指定某个单元格,然后画该单元格某一边的边框,一次画一条。

'以下画迷宫内部墙 Cells(迷宫头行 0, 迷宫头列 0).Borders(xlEdgeRight).LineStyle = xlDouble '指定单元格右边画双线边框 Cells(迷宫头行 1, 迷宫头列 0).Borders(xlEdgeBottom).LineStyle = xlDouble '指定单元格下边双线边框 Cells(迷宫头行 1, 迷宫头列 2).Borders(xlEdgeBottom).LineStyle = xlDouble '指定单元格下边双线边框 Cells(迷宫头行 1, 迷宫头列 1).Borders(xlEdgeTop).LineStyle = xlDouble '指定单元格上边双线边框

其中的行号,列号都是以常量『迷宫头行』和『迷宫头列』为基准的,即以第4行第2列为基准,分别 0、 1、 2来指定对应的单元格。

下一步画迷宫内部单元格的编号。

此处需要使用在Sub过程开头定义的三个局部变量。

其中『迷宫行号』和『迷宫列号』是迷宫内部相对于左上角的行号和列号,取值分别为0、1、2。即在迷宫内部的第0行、1行和2行,或第0列、1列或2列。

迷宫左上角的位置由常量『迷宫头行』和『迷宫头列』决定。

例如:迷宫内的第0行第1列,即:迷宫行号=0,迷宫列号=1。该单元格表示为:Cells(迷宫头行 迷宫行号, 迷宫头列 迷宫列号)

'以下画迷宫内部单元格的编号 迷宫编号 = 0 '设迷宫编号的初始值为0 For 迷宫行号 = 0 To 2 '迷宫当前行号=0,1,2 For 迷宫列号 = 0 To 2 '迷宫当前列号=0,1,2 Cells(迷宫头行 迷宫行号, 迷宫头列 迷宫列号) = 迷宫编号 '画迷宫内单元格的编号 迷宫编号 = 迷宫编号 1 '修改迷宫编号变为当前值 1 Next 迷宫列号 Next 迷宫行号

这是两个嵌套在一起的For循环语句。

外圈的For循环语句,一共循环三轮,『迷宫行号』分别取值0、1、2。

外圈的For语句每循环一轮,都要进入内圈For循环语句,并循环三轮,『迷宫列号』的取值分别为:0、1、2。

总共进行3x3=9轮循环。

『迷宫编号』初值为0,每循环一次加1,在9轮循环后,其值从0加到8 。

这两个For循环语句完整执行过程如下图的箭头所示:

蓝色箭头是内圈的列号循环,红色箭头是外圈的行号循环。9次循环后。迷宫内的9个单元格依次被写入0~8。

最后,我们在迷宫左上角写“老鼠”,右下角写“食物”。

注意,在单元格中所写的字符,必须用英文的双引号括起来,不能用中文的双引号

'以下写"老鼠"和"食物" Cells(迷宫头行, 迷宫头列) = "老鼠" '在迷宫0号单元格写“老鼠” Cells(迷宫头行, 迷宫头列).Font.ColorIndex = 1 '字体设为黑色 Cells(迷宫头行 2, 迷宫头列 2) = "食物" '在迷宫8号单元格写“食物” Cells(迷宫头行 2, 迷宫头列 2).Font.ColorIndex = 3 '字体设为红色

结尾 End Sub,画迷宫结束。

请把光标移到Sub 画迷宫() 的内部,按F5键运行此程序。

一个Sub过程除了可以直接运行之外,在别的Sub过程内部,写这个过程的名字,也可以调用此过程。调用时,不用写Sub,一般也不用写括号。

例如,我们在Sub 初始化()内部,加入俩行,如下所示:

Sub 初始化() Dim 列号 As Integer '把变量 列号 定义为整型 For 列号 = 1 To 20 '列号从1到20循环 Cells(1, 列号) = 列号 '循环体,向指定单元格写入数据 Next 列号 '每循环一次列号加1,大于20后退出循环 Range(Cells(2, 1), Cells(26, 12)).Clear '清空指定矩形区域 画迷宫 '调用“画迷宫()”过程 End Sub

最后两句是新增的,第一句用于清空一块矩形区域,区域大小由左上角和右下角的单元格确定。第二句调用『画迷宫』过程。

这样,当我们运行『初始化』过程时,即可自动运行『画迷宫』过程。运行结果如下图:

请把上面的代码复制或录入到编程窗口中,按F5键运行一下,看看是否能画出同样的迷宫。

如果对这段程序有不明白的地方,建议按F8键单步执行,观看程序的执行流程,可以帮助理解。

04 画参数表

迷宫画好后,我们要做的工作是让老鼠动起来。

怎么动呢?假设老鼠在迷宫内某一个单元格中,有上、下、左、右4个方向可以移动。但是,迷宫中有墙,被墙挡住的方向不能移动。

所以,需要让老鼠知道,往哪个方向可以移动,哪个方向不能移动。否则它可能会随意穿墙乱走。

为此,我们建一张表,把迷宫中每个单元格的4个方向都列出来,在有墙的方向写0,没有墙的方向写1。这样,老鼠根据表中的数值是1还是0,就知道这个方向是能走还是不能走

迷宫一共有9个单元格,每个格有4个方向。所以我们建一张9行4列的表,就可以把所有可能的情况表示出来。这个表称为“动作参数表”

在人工智能中,直接建表是处理参数最简单的方式。然而,不是所有的应用都可以直接建表的,或者是直接建表的参数过于巨大,不经济。这种情况下,通常用神经网络模型来表达,例如在处理文字、图形、语言等复杂情况时。ChatGPT处理自然语言时,就使用了神经网络技术,其中包含大量的参数。

我们把动作参数表的左上角,放在表格的第4行,第8列,我们定义两个常量代表这两个数字。定义常量的代码如下:

Const 参数表头行 = 4 '动作参数表左上角行号 Const 参数表头列 = 8 '动作参数表左上角列号

这两句代码与之前定义的两个迷宫常量要放在一起,放在整个程序的最上方,如下图:

然后我们创建一个新的过程:画动作参数表,并定义内部使用的局部变量。如下:

Sub 画动作参数表() '画动作参数表(θ) Dim 迷宫行号 As Integer '迷宫内部行号 Dim 迷宫列号 As Integer '迷宫内部列号 Dim 迷宫编号 As Integer '迷宫位置编号 Dim 参数表行号 As Integer '动作参数表当前行号 Dim 参数表列号 As Integer '动作参数表当前列号 End Sub

接着,在Dim语句下面写“画表头”的语句,如下:

'画动作参数表表头 Cells(参数表头行 - 2, 参数表头列 1).Value = "动作参数表θ(动作表格化)" Cells(参数表头行 - 2, 参数表头列 - 1) = "迷宫编号/" Cells(参数表头行 - 1, 参数表头列 - 1) = "移动方向" Cells(参数表头行 - 1, 参数表头列 0) = "上" Cells(参数表头行 - 1, 参数表头列 1) = "右" Cells(参数表头行 - 1, 参数表头列 2) = "下" Cells(参数表头行 - 1, 参数表头列 3) = "左" '画动作参数表边框 With Range(Cells(参数表头行, 参数表头列), Cells(参数表头行 8, 参数表头列 3)) .BorderAround LineStyle:=xlContinuous '画参数表四边单线边框 End With

然后,我们向动作参数表中填数据。

方法是从『迷宫编号』为0的单元格开始,一直到第8个迷宫单元格,依次判断该单元格的上、右、下、左四个方向有没有边框。

如果没有边框,代表可以通行,则向对应的参数表中填数字1 。

如果有边框,代表不能通行,则向对应的参数表中填数字0 。

如下图:

实现判断比较的功能需要使用IF分支语句,用法如下:

其中的『条件表达式』通常要比较两个常量或变量的大小,常用的比较运算符有:

比较运算符

描述

=

等于:前者的值是否等于后者的值?是则表达式为真。

<

小于:前者的值是否小于后者的值?是则表达式为真。

>

大于:前者的值是否大于后者的值?是则表达式为真。

<=

小于等于:前者的值是否小于等于后者的值?是则表达式为真。

>=

大于等于:前者的值是否大于等于后者的值?是则表达式为真。

<>

不等于:前者的值是否不等于后者的值?是则表达式为真。

表达式中也可以使用算数运算符,常用的如下:

算术运算符

描述

加:将两数相加,如a b。

-

:将两数相减,如a-b。

*

乘:将两数相乘,如a*b。

/

除:将两数相除,如a/b。

^

幂:进行幂运算,如a^2表示a的2次方。

使用举例:

Sub 测试() '这是一个测试程序 Dim x As Integer '定义一个整型变量x x = 11 '给x赋值 If x <= 2 * 5 Then '如果x小于等于2乘以5(即10) Cells(2, 1) = "小" '则在第2行1列单元格中填入“小” 。 Else '其他情况,即x大于10 Cells(2, 1) = "大" '则在第2行1列单元格中填入“大”。 End If 'If语句结束 End Sub

把这段代码复制或录入到编程窗口中,按F5或F8执行一下,看看结果如何。

试着修改 x=7 这句代码,把数字改成7以下的值,看看程序运行结果是否改变?

下面我们看往动作参数表中填写参数的代码:

'向表内填写动作参数 迷宫编号 = 0 For 迷宫行号 = 0 To 2 For 迷宫列号 = 0 To 2 参数表行号 = 参数表头行 迷宫编号 Cells(参数表行号, 参数表头列 - 1) = 迷宫编号 '动作参数表中左侧写迷宫编号 With Cells(迷宫头行 迷宫行号, 迷宫头列 迷宫列号) '指定迷宫某个单元格 '以下检查单元格上方有无边框 If .Borders(xlEdgeTop).LineStyle = -4142 Then '如果上方无边框 Cells(参数表行号, 参数表头列 0) = 1 '动作参数值填1 Else Cells(参数表行号, 参数表头列 0) = 0 '动作参数值填0 End If '以下检查单元格右方有无边框 If .Borders(xlEdgeRight).LineStyle = -4142 Then '如果右方无边框 Cells(参数表行号, 参数表头列 1) = 1 '动作参数值填1 Else Cells(参数表行号, 参数表头列 1) = 0 '动作参数值填0 End If '以下检查单元格下方有无边框 If .Borders(xlEdgeBottom).LineStyle = -4142 Then '如果下方无边框 Cells(参数表行号, 参数表头列 2) = 1 '动作参数值填1 Else Cells(参数表行号, 参数表头列 2) = 0 '动作参数值填0 End If '以下检查单元格左方有无边框 If .Borders(xlEdgeLeft).LineStyle = -4142 Then '如果左方无边框 Cells(参数表行号, 参数表头列 3) = 1 '动作参数值填1 Else Cells(参数表行号, 参数表头列 3) = 0 '动作参数值填0 End If End With 迷宫编号 = 迷宫编号 1 '迷宫编号 1 Next 迷宫列号 Next 迷宫行号

程序看起来很长,其实结构很简单。

程序的主体结构依然是两个嵌套在一起的For循环语句,用With语句依次选中迷宫中编号0到8的单元格,然后用4个IF分支语句分别判断该单元格的上、右、下、左四个方向有没有边框。

查手册得知,属性.LineStyle = -4142代表“无边框”。

把以上代码复制或录入到“Sub 画动作参数表()”过程中,完成该过程。

我们把调用“画动作参数表”的语句也加入到“Sub 初始化()”过程中。如下:

Sub 初始化() Dim 列号 As Integer '把变量 列号 定义为整型 For 列号 = 1 To 20 '列号从1到20循环 Cells(1, 列号) = 列号 '循环体,向指定单元格写入数据 Next 列号 '每循环一次列号加1,大于20后退出循环 Range(Cells(2, 1), Cells(26, 12)).Clear '清空指定矩形区域 画迷宫 '调用“画迷宫()”过程 画动作参数表 '调用“画动作参数表()”过程 End Sub

最后一句是新增的。然后运行“初始化()”过程,结果如下图:

图中左上部分为迷宫,右上部分为动作参数表。动作参数表共有9行4列。

其中,行的编号为0~8,每行代表迷宫内的一个单元格。每列代表一个移动方向,共4列,分别代表“上、右、下、左”。

我们看表中红色方框圈住的第0行,它的四个参数值分别为:“0、0、1、0”,即“上、右、左”三个方向的参数为0 ,即不可移动。而向“下”方向的参数为1,可以移动。

这四个参数与左下方的红色方框中“老鼠”的移动方向参数相同,如蓝色字所示。

迷宫中每个单元格的动作参数,以相同方式填入动作参数表中。

有了这张表,老鼠就知道往哪个方向能走,哪个方向不能走了。

下一篇我们讲如何编写代码让老鼠移动起来,请关注我,以便及时得到推送。

编程中有什么问题请在下面留言。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved