Files
fzu-product/.vitepress/dist/assets/技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.9.练习:生成代码.md.BWPCfe12.js

71 lines
7.3 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{_ as s,c as n,o as a,a4 as p}from"./chunks/framework.DtvhUNIn.js";const h=JSON.parse('{"title":"9.练习:生成代码","description":"","frontmatter":{},"headers":[],"relativePath":"技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.9.练习:生成代码.md","filePath":"技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.9.练习:生成代码.md"}'),e={name:"技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.9.练习:生成代码.md"},t=p(`<h1 id="_9-练习-生成代码" tabindex="-1">9.练习:生成代码 <a class="header-anchor" href="#_9-练习-生成代码" aria-label="Permalink to &quot;9.练习:生成代码&quot;"></a></h1><p><em>到目前为止,我们的冒险游戏有 10 个对象。每个对象由有 5 个属性组成。一个真正的文本冒险可能有数百个甚至数千个对象,并且每个对象的属性数量也可能增加(请参阅下一章)。在目前的形式下,维护如此庞大的对象和属性列表将很困难。</em></p><p>例如,当我们在添加对象 <em>wallField</em> 和 <em>wallCave</em> 时,我们必须在三个不同的位置执行此操作:一次在 <em>object.h</em> 中(作为<em>#define</em>),两次在 <em>object.c</em> 中(数组 <em>objs</em> 中的一个元素,以及一个单独的标签数组)。这显然十分笨拙并且容易出错。</p><p>我们将不再手工维护 object. h 和 object. c而是从更适合我们需要的单一源开始生成文件。这个新的源文件可以用你喜欢的任何语言 ( 典型的是某些特定领域的语言 ),只要你有工具把它转换回 C。下面是一个简单的例子考虑下列布局来组织我们的对象</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span> /* Raw C code (declarations) */</span></span>
<span class="line"><span>- ObjectName</span></span>
<span class="line"><span> AttributeName AttributeValue</span></span>
<span class="line"><span> AttributeName AttributeValue</span></span>
<span class="line"><span> ...</span></span>
<span class="line"><span>- ObjectName</span></span>
<span class="line"><span> AttributeName AttributeValue</span></span>
<span class="line"><span> AttributeName AttributeValue</span></span>
<span class="line"><span> ...</span></span>
<span class="line"><span>- ...</span></span></code></pre></div><p>根据到目前为止收集的对象,我们可以构造以下源文件。文件名并不重要;我只是简单地将其命名为<em>object.txt</em>,以明确它与<em>object.h</em>和<em>object.c</em>相关。</p><h2 id="object-txt" tabindex="-1">object.txt <a class="header-anchor" href="#object-txt" aria-label="Permalink to &quot;object.txt&quot;"></a></h2><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>#include &lt;stdio.h&gt;</span></span>
<span class="line"><span>#include &quot;object.h&quot;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>typedef struct object {</span></span>
<span class="line"><span> const char *description;</span></span>
<span class="line"><span> const char **tags;</span></span>
<span class="line"><span> struct object *location;</span></span>
<span class="line"><span> struct object *destination;</span></span>
<span class="line"><span>} OBJECT;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>extern OBJECT objs[];</span></span>
<span class="line"><span>//对象</span></span>
<span class="line"><span>- field</span></span>
<span class="line"><span> description &quot;an open field&quot;</span></span>
<span class="line"><span> tags &quot;field&quot;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- cave</span></span>
<span class="line"><span> description &quot;a little cave&quot;</span></span>
<span class="line"><span> tags &quot;cave&quot;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- silver</span></span>
<span class="line"><span> description &quot;a silver coin&quot;</span></span>
<span class="line"><span> tags &quot;silver&quot;, &quot;coin&quot;, &quot;silver coin&quot;</span></span>
<span class="line"><span> location field</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- gold</span></span>
<span class="line"><span> description &quot;a gold coin&quot;</span></span>
<span class="line"><span> tags &quot;gold&quot;, &quot;coin&quot;, &quot;gold coin&quot;</span></span>
<span class="line"><span> location cave</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- guard</span></span>
<span class="line"><span> description &quot;a burly guard&quot;</span></span>
<span class="line"><span> tags &quot;guard&quot;, &quot;burly guard&quot;</span></span>
<span class="line"><span> location field</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- player</span></span>
<span class="line"><span> description &quot;yourself&quot;</span></span>
<span class="line"><span> tags &quot;yourself&quot;</span></span>
<span class="line"><span> location field</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- intoCave</span></span>
<span class="line"><span> description &quot;a cave entrance to the east&quot;</span></span>
<span class="line"><span> tags &quot;east&quot;, &quot;entrance&quot;</span></span>
<span class="line"><span> location field</span></span>
<span class="line"><span> destination cave</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- exitCave</span></span>
<span class="line"><span> description &quot;an exit to the west&quot;</span></span>
<span class="line"><span> tags &quot;west&quot;, &quot;exit&quot;</span></span>
<span class="line"><span> location cave</span></span>
<span class="line"><span> destination field</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- wallField</span></span>
<span class="line"><span> description &quot;dense forest all around&quot;</span></span>
<span class="line"><span> tags &quot;west&quot;, &quot;north&quot;, &quot;south&quot;, &quot;forest&quot;</span></span>
<span class="line"><span> location field</span></span>
<span class="line"><span></span></span>
<span class="line"><span>- wallCave</span></span>
<span class="line"><span> description &quot;solid rock all around&quot;</span></span>
<span class="line"><span> tags &quot;east&quot;, &quot;north&quot;, &quot;south&quot;, &quot;rock&quot;</span></span>
<span class="line"><span> location cave</span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">🤔 思考题:你能否自己用 C 来实现这段伪代码?</p></div>`,9),l=[t];function o(i,c,u,r,d,q){return a(),n("div",null,l)}const m=s(e,[["render",o]]);export{h as __pageData,m as default};