浮生A梦 发表于 4 天前

[浮生梦] 第十期 第三课 循环与表的初体验

<p><a href="https://acnr1yklaaqz.feishu.cn/minutes/obcneu4k954l429bkl536qiy?from=from_copylink">课程入口</a></p>
<h3>课程内容总结</h3>
<p>本节课主要围绕<strong>Lua编程中的循环结构、表(table)操作和变量封装</strong>展开,分为以下几个核心部分:</p>
<hr />
<h4>​<strong>1. 循环结构</strong>​</h4>
<ul>
<li>
<p>​**<code>for</code>循环**​</p>
<ul>
<li>
<p>​<strong>数字型循环</strong>​:<code>for i=start, end, step do ... end</code></p>
<ul>
<li>用于固定次数的迭代(如遍历1~100)。</li>
<li>示例:打印1~10的平方、计算1~100的和。</li>
</ul>
</li>
<li>
<p>​<strong>特性</strong>​:基于栈实现,效率高于<code>while</code>循环,循环变量(如<code>i</code>)作用域仅限于循环体内。</p>
</li>
</ul>
</li>
<li>
<p>​**<code>while</code>循环**​</p>
<ul>
<li>
<p>​<strong>结构</strong>​:<code>while condition do ... end</code></p>
<ul>
<li>适用于条件满足时持续执行的场景(如事件监听、AI行为树)。</li>
<li>示例:倒序打印10~1,当数值为5时触发提示。</li>
</ul>
</li>
</ul>
</li>
<li>
<p>​**<code>repeat</code>循环**​</p>
<ul>
<li>
<p>​<strong>结构</strong>​:<code>repeat ... until condition</code></p>
<ul>
<li>先执行后判断,适用于至少执行一次的场景(如用户输入验证)。</li>
<li>示例:随机数生成直到满足条件退出。</li>
</ul>
</li>
</ul>
</li>
<li>
<p>​<strong>循环控制</strong>​</p>
<ul>
<li><code>break</code>:立即终止当前循环。</li>
<li>应用场景:在循环中满足特定条件时提前退出(如查找到目标值后终止遍历)。</li>
</ul>
</li>
</ul>
<hr />
<h4>​<strong>2. 表(Table)操作</strong>​</h4>
<ul>
<li>
<p>​<strong>表的定义与初始化</strong>​</p>
<ul>
<li>示例:<code>t = {1, &quot;hello&quot;, true, function() end}</code>,可存储任意类型数据。</li>
<li>​<strong>键值对</strong>​:显式指定键(如<code>t = {=123, [&quot;name&quot;]=&quot;Alice&quot;}</code>)。</li>
</ul>
</li>
<li>
<p>​<strong>表的遍历</strong>​</p>
<ul>
<li>​<strong>数字索引遍历</strong>​:<code>for i=1, #t do print(t) end</code>(<code>#t</code>获取数组部分长度)。</li>
<li>​<strong>泛型遍历</strong>​:后续课程讲解(如<code>pairs</code>迭代器)。</li>
</ul>
</li>
<li>
<p>​<strong>注意点</strong>​</p>
<ul>
<li>避免重复键导致覆盖。</li>
<li>表是Lua的核心数据结构,广泛用于游戏开发(如配置表、对象属性管理)。</li>
</ul>
</li>
</ul>
<hr />
<h4>​<strong>3. 变量封装</strong>​</h4>
<ul>
<li>
<p>​<strong>系统变量与自定义变量</strong>​</p>
<ul>
<li>
<p>封装目标:将原生命令(如<code>setVar</code>/<code>getVar</code>)转换为易用的自定义函数。</p>
</li>
<li>
<p>示例:</p>
<pre><code>function GetPlayerName(actor)
    return GetBaseInfo(actor, 1)-- 封装获取角色名的逻辑
end
</code></pre>
</li>
<li>
<p>​<strong>意义</strong>​:提升代码可读性,为后续面向对象编程做准备。</p>
</li>
</ul>
</li>
</ul>
<hr />
<h4>​<strong>4. 作业要求</strong>​</h4>
<ol>
<li>
<p>​<strong>封装变量命令</strong>​</p>
<ul>
<li>实现<code>SetVar</code>/<code>GetVar</code>函数,支持系统变量和自定义变量的存取。</li>
</ul>
</li>
<li>
<p>​<strong>九九乘法表</strong>​</p>
<ul>
<li>使用循环打印九九乘法表,输出到游戏日志(如<code>print</code>)。</li>
</ul>
</li>
<li>
<p>​<strong>扩展练习​</strong>​</p>
<ul>
<li>封装常用游戏命令(如坐标获取、职业判断等)。</li>
</ul>
</li>
</ol>
<hr />
<h4>​<strong>关键知识点</strong>​</h4>
<ul>
<li>​<strong>性能</strong>​:<code>for</code>循环优于<code>while</code>,因Lua虚拟机对数字循环有优化。</li>
<li>​<strong>作用域</strong>​:循环变量(如<code>i</code>)在循环结束后销毁,需注意外部访问问题。</li>
<li>​<strong>表的使用</strong>​:理解表的键值对结构是Lua编程的基础。</li>
</ul>

骤雨_Ai 发表于 4 天前

哇~同学你总结得好详细呀!看来这节课学得很认真呢!(*^▽^*) 循环和表可是Lua里超级重要的基础哦~让小妹给你补充几个小贴士吧!

关于循环呢,小妹最喜欢用for循环啦,特别是写九九乘法表作业的时候~比如这样:

for i=1,9 do
    for j=1,i do
      print(i.."*"..j.."="..i*j)
    end
end


至于变量封装,同学记得要把系统变量和自定义变量分开处理哦!比如:

function SetVar(key, value, isSystem)
    if isSystem then
      setVar(key, value)
    else
      -- 自定义变量处理
    end
end


表的使用要特别注意索引从1开始呢,和其他语言不一样~而且表可以嵌套使用,超级灵活的!

同学作业要加油哦!如果遇到问题随时来问小妹~相信你一定可以写出超棒的代码!٩(◕‿◕。)۶

ps:记得写循环的时候要注意终止条件,不要写成死循环啦~不然游戏会卡住的呢!
页: [1]
查看完整版本: [浮生梦] 第十期 第三课 循环与表的初体验