交互式玩具的制作方法

文档序号:1600843阅读:1264来源:国知局

专利名称::交互式玩具的制作方法
技术领域
:本发明涉及玩具。具体地但不排他地,本发明涉及彼此交互的玩具,如玩偶。
背景技术
:嵌入式计算机和微处理器改进了孩子们的玩具。它们大部分应用在教育玩具中,但是也已经在交互式玩具中使用了。ActiMatesBarney是交互式玩具的一个示例,该交互式玩具通过适当的发声对来自孩子的交互做出响应,并且可以给视频伴唱(sing-a-long)。PCT专利申请WO2006/114625通过引用合并于此。
发明内容创作工具根据本发明的第一方面,提供一种用于创建玩具的主题数据的创作工具,包括用于接收与特定主题有关的内容的装置;用于处理所述内容以产生指令集合的装置,该指令集合用于在所述特定主题内操作所述玩具;以及用于输出所述指令集合的装置。通过提供用于产生操作玩具的指令集合的装置,使得产生主题指令的过程更有效率。为了有效率地接收内容,优选地,所述接收装置适用于接收分别包括与特定主题有关的脚本数据以及定义所述玩具的个性的表达数据在内的内容。优选地,所述接收装置适用于接收离散部分中的内容。为了有效率地进行处理,优选地,创作工具还包括用于向每个表达数据部分分配唯一ID号的装置。优选地,所述处理装置适用于利用所述唯一ID号作为对所述指令集合中的所述表达数据的引用。优选地,所述表达数据包括下列中至少一个主题名称、玩具用于交互的玩具的名称和语句。优选地,所述脚本数据包括下列中的至少一个在主题内可以交互的玩具的数目、交互方法、主题相关参数、以及玩具相关参数。为了有效率地进行处理,优选地,创作工具还包括用于将与特定主题有关的所述脚本数据和表达数据一同存储在阵列中的装置。更优选地,所述处理装置适用于从所述阵列中产生所述指令集合。为了有效率地进行处理,优选地,所述处理装置包括用于对至少一个列表进行编译的装置,所述至少一个列表包括表达数据中的至少一些。更优选地,所述列表编译装置适用于对所述特定主题中每个玩具的相应的列表进行编译。优选地,表达数据是符号数据。这里所使用的符号数据暗示着单词、音乐或动作的书面形式。优选地,创作工具还包括用于记录符号数据的扮演数据版本的装置。这里所使用的扮演数据暗示着单词、音乐或动作的扮演的形式。优选地,创作工具还包括用于提示演员产生扮演数据的必要部分的装置。优选地,所述处理器适用于产生符号数据和扮演数据之间的查找表。优选地,所述处理装置适用于输出表达数据。更优选地,所述处理装置还适用于分别输出表达数据和指令集合。优选地,所述处理装置适用于产生包括下述的指令集合用于控制玩具的基本功能的基本指令集合;以及用于在主题中控制玩具的基本指令集合的主题指令集合。更优选地,所述处理器适用于将所述基本指令集合与所述主题指令集合组合在一起。优选地,创作工具还包括编译器。更优选地,所述编译器适用于编译所述基本指令集合以及所述主题指令集合。优选地,所述处理器包括适用于将所述指令集合变换为计算机可读代码的编码引擎。优选地,创作工具的输出适用于在这里所述的会话引擎中使用。优选地,玩具是如这里所述的玩具。根据本发明的第二方面,提供一种用于使创作工具为玩具创建主题数据的用户界面,包括用于向用户提供输入窗口的集合的装置,每个窗口对应于与主题有关的特定内容子集合的输入;以及用于发起主题数据的输出的装置。优选地,所述内容子集合包括下列中的至少一个主题相关数据、玩具相关数据以及上下文相关数据。优选地,上下文相关数据包括下列中的至少一个玩具用于交互的语句、交互方法、主题相关参数、以及玩具相关参数。根据本发明的第三方面,提供一种用于产生玩具的主题数据的系统,包括创作工具,用于访问、创建和编辑所述主题数据;以及服务器,包括用于存储所述主题数据的数据库;其中,创作工具适用于经由互联网访问该主题数据。优选地,所述创作工具适用于将主题数据处理成阵列,并且所述数据库适用于在所述阵列中存储所述主题数据。优选地,所述创作工具是如这里所述的创作工具。优选地,还包括一种用户界面。更优选地,该界面是如这里所述的界面。USB通信保护器(Dongle)根据本发明的另一方面,提供一种用于在这里所述的至少一个玩具和计算机之间提供无线通信的装置,包括通信端口,用于将该装置与计算机连接;以及用于建立计算机和该玩具或每个玩具之间的网络的装置;其中,所述装置允许计算机与该玩具或每个玩具进行通信,就好像该计算机是另一个这样的玩具。优选地,所述装置使得所述计算机能够用作虚拟玩具。优选地,所述通信端口是USB通信端口。优选地,所述网络是无线的。根据本发明的又一个方面,提供一种系统,包括至少一个这里所述的玩具;以及至少一个计算机,每个计算机具有这里所述的用于提供无线通信的装置;其中,所述计算机和装置的组合就好像它是这里所述的玩具。优选地,所述计算机包括适用于提供虚拟玩具的视觉和音频输出。更优选地,所述虚拟玩具是化身(avatar)。控制器玩偶根据本发明的又一方面,提供一种玩具,包括处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出;以及用于建立与至少一个其它这种玩具的网络连接的装置;其中,处理器包括用于控制已经与其建立网络连接的每个玩具的输出的装置。优选地,所述控制装置适用于在所述网络连接上传输指令以控制已经与其建立网络连接的每个玩具的多个输出(优选地,所有输出)。优选地,所述网络连接形成个人区域网络的一部分。优选地,所述存储器适用于存储至少一组数据,所述至少一组中的每一组代表特定主题。优选地,玩具还包括用于确定在存储器中存储的至少一个主题的装置。优选地,所述玩具适用于仅当在两个玩具中存储器中存储的至少一个主题相同时才建立与另一玩具的连接。优选地,所述控制装置适用于发送/接收控制消息以控制所述玩具中的每一个的输出,其中,优选地,控制消息包括用于玩具的玩具ID、以及命令段,并且更优选地还包括发起玩具的ID和/或消息ID。优选地,所述控制消息包括访问参考数据库并执行任务的指令。优选地,处理器包括用于发送/接收对已发送/接收的控制消息的肯定应答的装置,其中,优选地,如果所述发送/接收装置没有接收到肯定应答,则所述发送/接收装置适用于请求重发控制消息。优选地,所述发送/接收装置适用于发送与玩具根据控制消息产生输出将花费的时间相关联的参数,其中,优选地,发起玩具在发送另一控制消息之前等待与所述参数相关联的持续时间(该玩具产生该输出将花费的时间将可以根据例如玩具的主题或子主题而变化)。优选地,处理器包括用于对重发的控制消息的数目进行计数的装置,并且从而在1,000-2,000,2,000-5,000,5,000-10,000或更多次尝试重发之后停止与不对所述控制消息进行肯定应答的所述玩具的通信。优选地,所述处理器还包括适用于构建所述玩具之间的会话的会话引擎。优选地,其它这种玩具与第一个这种玩具相同或实质上相同。因此,不要求“星型拓扑(SpokeandHub)”布置。优选地,用于建立网络的所述装置是网络控制器,优选地,使用Zigbee协议的网络控制器。参数存储优选地,该玩具适用于与另一这样的玩具交互,其中,所述处理器包括用于定义与所述交互相关联的至少一个变量的装置、用于在所述存储器中存储所述变量的装置、以及用于使用所述变量以控制所述玩具的(交互式的)输出的装置。根据本发明的又一方面,提供一种玩具,适用于与另一这样的玩具交互,所述玩具包括处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出;其中,所述处理器包括用于定义与所述交互相关联的至少一个变量的装置、用于在所述存储器中存储所述变量的装置、以及用于与所述玩具的(交互式的)输出有关联地使用所述变量的装置(从而优选地,更有效率地跟踪交互)。优选地,多次(更优选地,大量次数)使用所述变量来控制所述输出。优选地,使用所述变量来确定所述交互的数目、类型或本质,其中优选地,所述变量是所述交互。优选地,随机地或伪随机地选择所述变量,并且通过加权来影响所述随机选择。优选地,玩具还包括用于产生交互的装置。用于产生交互的装置优选地适用于依赖于存储的参数来产生交互。优选地,存储装置将每个变量与玩具相关联。优选地,存储装置是位于玩具内的存储器。优选地,用于使用该变量的装置适用于从存储装置中访问变量。优选地,所述交互是玩具之间的通信。优选地,所述变量是语音中使用的单词或短语。表达个性和脚本主题优选地,所述处理器适用于在所述存储器中存储主题数据,所述主题包括脚本数据和表达数据,所述表达数据定义所述玩具的个性。根据本发明的又一方面,提供一种玩具,包括处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出;其中,所述处理器适用于在所述存储器中存储主题数据,所述主题包括脚本数据和表达数据,所述表达数据定义所述玩具的个性(从而优选地更有效率地提供多个主题的玩具个性。)。优选地,玩具适用于与至少一个其它类似玩具进行交互,其中由每个这样的玩具共享所述脚本数据,并且在每个这样的玩具之间所述表达数据是不同的。优选地,所述脚本数据独立于所述表达数据。优选地,处理器适用于向另一这样的玩具输出脚本数据作为控制消息,并且适用于利用其个人的表达数据来响应控制消息。优选地,脚本数据对于每个玩具是相同的,并且控制每个玩具的输出。优选地,处理器适用于使用脚本数据来引用表达数据,并且优选地表达数据使用不同的内容来传送相同信息。优选地,玩具的个性由通信的内容来定义。玩偶选择优选地,所述处理器包括用于基于预定规则选择进行交互的玩具的装置。根据本发明的又一方面,提供一种玩具,适用于与其它这样的玩具进行交互,所述玩具包括处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出,其中,所述处理器包括用于基于预定规则选择进行交互的玩具的装置,其中所述选择的玩具可以是发起玩具。优选地,所述选择装置适用于选择下一个进行交互的玩具。优选地,所述预定规则包括直接选择;随机选择;以及选择当前交互者以再一次进行交互。优选地,处理器适用于输出控制消息,该控制消息包括所选玩具的ID,并且优选地包括发起玩具的ID。优选地,所述交互包括通信,其中优选地,所述通信包括语音和方向。玩游戏优选地,该玩具是有生命物体的形式,适合于与其它类似玩具玩游戏,其中所述处理器包括游戏引擎,其中所述游戏引擎适用于允许所述玩具玩游戏,好像所述玩具是有生命的。根据本发明的又一方面,提供一种有生命物体形式的玩具,适合于与其它类似玩具玩游戏,包括处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出;其中所述处理器包括游戏引擎,该游戏引擎使得每个所述玩具能够玩游戏,好像所述玩具是其有关有生命物体。优选地,所述游戏引擎适用于实现人类游戏(humangame)。优选地,用游戏设备来玩所述人类游戏。优选地,所述游戏引擎适用于输出指令以使得人们能够调整所述游戏设备来玩游戏。优选地,所述玩具还包括用于与至少一个另一这样的玩具进行通信的装置。优选地,所述游戏引擎还适用于玩基于规则的游戏。优选地,所述游戏引擎适用于在所述存储器中存储与游戏相关的信息。优选地,所述信息包括游戏的规则。优选地,所述信息还包括至少一个玩板(playingboard)的布局。优选地,所述游戏引擎包括适用于作为虚拟骰子的随机数发生器。优选地,所述游戏引擎包括用于接收与游戏有关的外部输入的装置。优选地,所述外部输入与所述游戏的棋子相关联。优选地,所述外部输入是所述玩板中的至少一个传感器。优选地,所述外部输入是适用于由所述玩具的用户使用的开关。优选地,所述基于规则的游戏包括Snakes和Ladders、以及Ludo。优选地,所述输出是换能器。优选地,所述换能器是扬声器。优选地,所述换能器是致动器。根据本发明的又一方面,提供一种包括多个这样的玩具在内的组合。优选地,所述多个玩具中的每一个包括用于控制其它所述玩具的装置,从而一次只有一个玩具控制其它玩具。优选地,所述存储器适用于存储与游戏状态有关的信息。游戏状态可以是下列中的至少一个玩板的布局、玩板上至少一个计数器的位置、以及所有玩具和/或用户的玩的顺序。玩偶特定下载根据本发明的又一方面,提供一种用于向多个玩具提供主题数据的装置,包括用于存储所述主题数据的装置,其中每个所述主题包括多个子主题;用于标识特定玩具的装置;用于根据特定玩具选择子主题的装置;以及用于向所述玩具输出所述特定子主题的装置(从而优选地,更有效率地完成访问主题的下载)。优选地,玩具还包括用于存储多个不同主题的装置。优选地,玩具还包括用于允许用户选择所述多个主题中的一个的装置。优选地,所述用于标识特定玩具的装置使用所述玩具的唯一标识号。优选地,玩具还包括用于根据与所述玩具相关联的参数对每一个所述子主题进行加密的装置。优选地,所述参数是该玩具的唯一标识号。优选地,该装置包括用于存储主题数据并且标识特定玩具的处理器和关联的存储器。优选地,该装置还包括用于向玩具输出子主题的连接。优选地,该连接包括互联网和USB电缆。会话引擎根据本发明的又一方面,提供一种针对如玩具等装置的会话引擎,包括用于下列操作的装置选择会话的主题;从多个开始点中随机选择开始点;基于变量随机选择短语;以及基于变量随机选择所述下一个说话者。优选地,所述短语选择还基于加权。优选地,该玩具并入了会话引擎。优选地,该玩具或会话弓ι擎适用于接收来自用户的输入数据。优选地,该玩具或会话引擎适用于向用户输出数据。优选地,该会话引擎还适用于在随机选择过程中使用来自用户的输入数据。优选地,该会话弓I擎包括适用于执行选择操作的处理器。优选地,该玩具或会话引擎适用于实时构建会话。优选地,该玩具或会话引擎适用于对会话进行预处理。该玩具或会话引擎优选地还适用于输出预处理后的会话。优选地,该玩具或会话引擎适用于在构建会话时使用出现于所建立的网络中的其他玩具的参数作为变量。优选地,该玩具或会话引擎适用于根据加权来输出数据。优选地,该玩具适用于存储多个主题数据集合。该玩具优选地还适用于在单一会话期间使用多个主题数据集合中的至少两个。优选地,该玩具适用于使得能够与多个其它这样的玩具建立网络,优选地2、3、4或更多。优选地,该玩具适用于成为有生命的。优选地,该玩具适用于与其它这样的玩具进行通信,并且所述通信包括语音、动作以及手势。优选地,该玩具或会话引擎具有以任何方式组合的下列特征中的一个、一些或全部孩子可以与玩具交互式地玩耍实时构建的会话在开始会话之前对会话进行预处理会话基于出现于网络中的玩偶会话基于出现于网络中的玩偶的类型使用加权来控制会话长度和方向在会话中切换主题的能力两个、三个或更多玩具玩具是有生命的/人类/玩偶交互包括通信;通信的定义是广义的总之,本发明涉及下列发明创作工具_提供用于输入要编译成为玩具可读的程序代码会话数据的工具会话。·USB通信保护器_提供用于在玩具和PC之间实现通信的装置。控制器玩偶_多于两个玩偶,使用开启的第一个玩偶作为单一控制器来进行控制。个性的表达-基于玩偶的个性因素,相同的主题具有不同的表达脚本主题_主题是可下载的表达和脚本的组合/脚本和表达是整体/每个不同的主题有不同的脚本。参数存储-存储与当前会话相有关的信息的能力,例如在短语“我的狗叫Fluffy”中,玩偶存储稍后在会话中使用的信息(宠物=“狗”并且宠物的名字="fluffy“)。玩偶特定下载-网站下载仅具有与给定个性相关的特定语音作为表达/可以根据个性来下载表达。会话的构建-玩偶选择用有关语音响应、选择另一玩偶并且向它们讲话,或发表一些关于他们自己的事情。玩偶选择_控制器随机判定下一个发言玩偶;随机选择但是玩偶不可以连续讲话两次,或通过名字来选择特定玩偶。玩游戏_玩偶像人类一样玩游戏。本发明还提供一种计算机程序和计算机程序产品,包括软件代码,在数据处理设备上执行时,执行这里描述的任何方法,包括它们的组成步骤中的任何步骤或全部步骤。本发明还提供一种计算机程序和计算机程序产品,包括软件代码,在数据处理设备上执行时,包括这里描述的任何设备特征。本发明还提供一种具有操作系统的计算机程序和计算机程序产品,该操作系统支持计算机程序执行这里描述的任何方法和/或体现这里描述的任何设备特征。本发明还提供一种其上存储有前述的计算机程序的计算机可读介质。本发明还提供一种承载前述计算机程序的信号,以及一种传输该信号的方法。本发明扩展了如这里实质上参照附图描述的方法和/或设备。设备和方法特征适当地可以互换,并且可以彼此独立地提供。可以将本发明的一个方面中的特征以任何恰当的组合应用于本发明的其它方面;同样地,可以将一个发明中的任意特征以任何恰当的组合应用于任何其他发明,。例如,可以将方法方面应用于装置方面,反之亦然。同样,例如可以将任何“控制器玩偶”特征应用于任何“参数存储器”特征。此外,可以以软件来实现以硬件实现的特征,反之亦然。相应地,应当推断出对软件和硬件的任何参考。这里,术语“用于...的装置”加上功能的任何使用可以适用于执行该功能的适当硬件组件(例如处理器和/或存储器)来替代。参照附图,现在仅作为示例来描述本发明的实施例,在附图中图1示出了三种类型的玩偶;图2是玩偶的示意图;图3是具有从属(slave)玩具的控制器玩具的示意图;图4是与网站连接的玩偶的示意图,该网站具有向玩偶下载主题/子主题的功能;图5是适用于玩游戏的玩偶的示意图;图6是玩游戏的过程的流程图;图7是备选实施例的示意图;图8是处理器和关联电子元件的电路图的一个实施例;图9是处理器和关联电子元件的电路图的备选实施例;图10示出了与创作工具服务器进行通信的用户PC;图11示出了创作工具以及关联系统的概要图;图12a示出了会话设计者窗口;图12b示出了主题产生窗口;图12c示出了导出主题产生窗口;图13a示出了添加玩偶窗口;图13b示出了创建玩偶窗口;图14示出了玩偶上下文窗口;图15示出了会话条目窗口;以及图16示出了与多个玩偶进行通信的USB保护器。具体实施例方式图1示出了三种类型的玩具玩偶;10是打网球玩偶、20是芭蕾玩偶、30是正在遛狗的一般玩偶、以及40是坦克形式的玩具。一般地,玩具适用于看起来是有生命的以及看起来是具体的人,或在坦克情况下受控的人等等。所示的四个玩具是主题玩具的类型的示例。玩具适用于与主题内的其它这样的玩具无线地进行通信。下面的描述涉及玩具(比如玩具玩偶),该玩具能够与其它这样的玩具进行通信;该玩偶适用于协调玩偶之间的语音。在另一实施例中,该玩具是坦克或其他这样的车辆;同样,坦克适用于与其它这样的坦克无线地进行通信以协调坦克的行为而非玩偶之间的语曰°图2示出了玩偶的示意图,具有允许玩偶进行通信并且执行其他这样的任务所需的硬件组件。如图2所示,玩偶100包括处理器102,该处理器102包括无线模块104。处理器与存储器106、ROM108、以及RAM110进行通信。将IR/RF发射器/接收器与处理器/无线模块连接并且能够向其它这样玩偶发送或从其它这样玩偶接收信号。玩偶还与扬声器114连接。USB控制器116用于更新存储器106,并且还用于经由充电器电路118向电池120充电。备选的,玩偶适用于使用可更换电池,而非再可充电电池。存储器106存储与玩偶可以具有的并由处理器在编译语音时访问的会话有关的信息。ROM108用于存储与玩偶相关的永久性信息,比如玩偶的名字和ID号码。在建立玩偶网络时该信息在初始化过程中使用。RAM110存储与当前会话有关的信息,并且用于通过存储与例如已经使用的短语有关的信息来产生更逼真的会话。在存储器106中,每个玩偶100包含包含玩偶的名字以及在会话期间定义的其他变量在内的数据集合;产生会话的指令集合;以及音频数据的集合。仅在控制器玩偶中存储在会话期间定义的变量。在一个实施例中,处理器是如在MP3解码中使用的形式,同时具有关联的存储器接口(如SD卡)。本实施例提供大量处理能力(以及基于硬件的压缩技术)并且将因此允许玩偶之间的长时间和详细会话。控制器玩偶如图3所示,控制器单元200与多个从属单元202进行通信。控制器包括会话引擎204、语音编译器206、语音数据库208、扬声器(换能器)210、能够对从属单元发送/接收数据的发送器/接收器212。会话引擎包括随机语音选择器214、参数存储存储器216以及说话者选择器218。从属单元具有控制器单元的所有组件,在图3中没有示出从属单元的所有组件。将第一个上电的单元初始化为控制器单元。当单元上电时,其搜索现有的网络,并且当不存在网络时其创建网络并且等待其他单元加入该网络。当开启其他单元时,它们加入该网络并且被初始化为从属单元。控制器单元等待来自两个新单元的通信,该通信指示了这两个新单元要求网络细节以及会话发起消息。一旦从属单元已经加入了该网络,则它们等待来自控制器单元的指令。应当理解所有单元(玩具/玩偶)是相同的他们都能够成为控制器单元或从属单元。单元适用于在如“动物园”、“体育”、“黑帮”或“时尚”等主题内进行通信。主题允许单元在不要求极大的与所有可能会话话题有关的信息数据库的情况下具有详细的会话。可以由用户从网站向单元下载主题/子主题。下列过程用于发起玩具网络当开启玩偶时其执行检查以确定是否存在可加入的现有网络-使用发送器/接收器212来完成该检查。如果不存在可用的网络,则该玩偶变为控制器,并且自动的建立网络-无线模块104适用于在需要的地方创建网络。每个开启的后续玩偶发送他们在存储器中存储了的玩偶ID号和主题ID号-经由发送器212来发送该信息。控制器检查主题并且仅允许具有与控制器相同主题的玩偶加入-控制器单元对发送的数据与已经在存储器中存储的数据执行比较。一旦两个或更多玩偶已经加入该网络,则可能发起会话。用户通过按动按钮等发起会话,并且控制器将开始指示其它玩偶说些什么的会话。用户可以在任何时刻再次按动按钮以停止会话。控制器单元运行程序以产生会话,然后向从属单元发送信息以通知他们访问哪个音频文件(音频文件对于每个个性类型是不同的,但是对每个音频文件的引用对于每个单元是相同的)。控制器单元发送单词/短语的标识符以访问从属单元的存储器。从属单元通过发送验证要使用的短语以及该短语所需的预期时间长度的消息来对消息的接收进行肯定应答。从属单元然后使用语音编译器来编译该单词/短语,然后使用扬声器来说出该短语。一旦从属单元已经完成说出该短语,则其向控制器单元发送信号表明其已经完成了并且该会话可以继续。然后控制器单元以相同方式指示下一个说话者,并且以此类推直到该会话结束。下面提供与会话构建有关的其他细节。通信协议玩具使用通信协议来进行通信;消息的格式如下[MessagelD,SendingToy_ID,ReceivingToy_ID,MessageType,Parameters]MessagelD是标识该消息的唯一号码。从控制器玩具发送的每个消息具有唯一标识号。SendingToy_ID指示发送消息的玩具。ReceivingToy_ID指示接收消息的玩具。MessageType指示消息的类型,例如START、STOP、SAY。Parameters是与消息类型有关的任意其它所需信息。仅SAY消息具有参数,其标识要说的短语。因此,消息的范围包括[MessagelD,SendingToy_ID,ReceivingToy_ID,START][MessagelD,SendingToy_ID,ReceivingToy_ID,STOP][MessagelD,SendingToy_ID,ReceivingToy_ID,SAY,PhraseID]这些消息的中每一个将产生下列形式的肯定应答[MessagelD,SendingToy_ID,ReceivingToy_ID,Ack,Parameter]Parameter仅用于对SAY消息进行肯定应答并且其指定短语的持续时间。控制器单元使用短语持续时间参数以在发送下一个消息之前等待适当的时间长度。假定玩具1与玩具2正在进行通信,则每一个消息的正常事件序列如下[MessagelD,1,2,START][MessagelD,2,1,ACK][MessagelD,1,2,SAY,PhraseID][MessagelD,2,1,ACK,DURATION][MessagelD,1,2,STOP][MessagelD,2,1,ACK]START命令指示接收玩具预期接收其它输入消息。控制器玩偶然后发送包含从属玩具需要使用的短语的PhraseID在内的至少一个消息。分别向从属玩具发送每个phraselD,从而可以发送这种类型的多个消息以构建整个句子。STOP命令用于向从属玩具指示在该序列中不存在其它消息。在接收到消息时,从属玩具向控制器发送对消息的接收进行肯定应答的消息。对于START和STOP肯定应答,控制器立刻继续会话程序;然而对于SAY命令来说,控制器玩偶在等于SAY肯定应答的DURATION的延迟之后才继续。如果没有接收到肯定应答,则重发消息直到接收到肯定应答为止。当该重发发生很多次时,玩偶将重置并且会话将停止;例如,在1,000-2000,2000-5000,5000-10,000次或更多次之间重发送该消息。在每一个短语的结束处还附加“短语结束标志”以通知从属单元短语何时已经结束。此时,从属单元将向控制器发送指示其已经停止说话的消息。在接收到该消息时,控制器指示下一个单元说话,下一个说话者可以是控制器或另一从属单元。对于指示语音的备选,当控制器玩具是坦克时,传送至从属单元的指令采用从属单元坦克应当移动的方向的形式。因此,应当用movementID来替代PhraselD。这样,控制器坦克将模拟战争等。玩具坦克配备对网络中其它玩具坦克进行定位的装置,使得他们可以以协同的方式来移动。该装置可以采用玩板的形式,玩板具有可以与玩具进行通信的位置传感器,或其它定位装置,比如摄像机、应答器等等。会话构建会话引擎实时地构建会话。备选地,在发起会话之前构建整个会话然后存储在存储器中,并且有效率地运行该会话直到结束。然而,在两种情况中构建的会话将基于特定随机选择。会话是基于在网络中出现的单元的,因此将出现的单元的数目以及出现的单元的类型用作控制变量。每个会话的开始是固定的,比如当玩具是玩偶时“哇,我们在动物园,现在我们该做些什么?”。但是存在多个开始短语。然后从该时刻开始随机地选择会话。控制器单元选择第一单元说话然后随机地转移至任何开始短语。该系统能够使用包括下列大量不同类型命令在内的指令集合变量定义和变量设置上下文引用和切换条件流程控制无条件流程控制说出(uttering)短语定义多个语句以控制会话的流程并且,这些语句如下SELECTNEXT-选择下一个说话的单元。存在该语句的许多变型,将在下面进一步详细讨论。SWITCH-切换至下一个单元。switchspeaker-移动说话者指针到另一说话者switchfinish-该语句用于完成会话SAY-指示单元说什么SET-该语句用于设置变量,如“SETpet([1,dog])”。SET语句用于设置当前说话者的变量,或其可以用于设置全局变量。TEST-该语句用于测试是否已经设置变量,或例如是否已经使用了分支。如果TEST为真则设置标志。存在两种形式的TEST语句TESTEQ-该语句测试两个表达式是否相等,并且如果他们相等则产生正的标志;例如“TESTEQ&ME.PET&UNDEF”将测试当前说话者的宠物变量是否未定义并且如果是则将产生正标志。TESTNE-该语句测试两个表达式是否不等,并且如果他们不等则将产生正标志。BRANCH-该语句用于分支进入该会话的另一部分。例如“BRANCH大猩猩”将分支进入“动物园”主题的大猩猩部分;其中“大猩猩”是该主题部分的标签。这是无条件语句并且在程序到达分支语句时将一直使用。BRANCH_F-基于来自TEST的标志的条件性分支。因此,仅当从TEST语句产生的标志为正时,才使用分支语句。CHOOSE-该语句使得控制器随机地选择要进行的标签。该语句类似于SET语句,在该语句中可以使用权重来控制进行标签的概率。CH00SE_F-基于来自TEST的标志的条件性选择以剪辑(cropped)的形式来存储音频文件以减少存储要求,即在每个音频片断之前和之后没有静音。为了产生更逼真的语音,提供具有不同长度的许多静音音频文件,可以将它们放在剪辑的音频文件之后或放在每个短语或单词之间。通过SAY语句来与引用任何其它音频文件的方式相同的方式来引用这些音频文件。可以用SET语句来定义变量以存储与每个玩偶相关联的参数;这一点在下面将进一步详细讨论。存在可以定义的两种类型的变量局部变量_这些变量是与每个玩具/玩偶相关联的变量。在每个玩偶的数据集合中创建局部变量。通过DEFINEVARIABLE_NAME语句来创建玩偶变量。全局变量_这些变量是与“主题”相关联并且不与每个玩偶相关联的变量。通过DEFINEG_VARIABLE_NAME语句来创建全局变量。在主题内定义的变量不具有分配给它们的值,直到在会话期间才赋向它们分配值。向变量设置倌在会话期间必须向已经定义的变量设置值。这是通过SET语句来完成的。该SET语句有随机特征组成,该随机特征允许利用从如下值集合中随机选取的值来设置SETVARIABLE_NAME([wl,valuel],[w2,value2],…,[wn,valuen])该语句的操作基于随机数的输出结果将VARIABLE_NAME的值设置为value1、value2、···、valuen中的一个。选择哪个值的概率是基于权重wl、w2、...、wn的。例如语句SETCOLOUR([1,red],[1,blue],[1,green])以相等的概率将变量COLOUR设置为红、蓝或绿。在当前玩偶的上下文中设置玩偶变量。附加地,SET_F语句用于仅在TEST语句已经产生conditior^flag情况时才设置变量。在该情况中当且仅当conditioruflag有效时才设置变量。上下文引用和切换指针用于存储与说话者有关的信息,并且使得控制器玩偶能够参考其他玩偶。当构建会话时,这些指针用于创建可感觉的会话;下面是所使用的指针前一个说话者(PREV)=前一个说话者的ID号当前说话者(ME)=当前玩具的ID号下一个说话者(NEXT)=所选下一个说话者的ID号玩偶的会话引擎的重要特征是哪个玩偶是当前说话者的上下文。该上下文指代当前玩偶可访问的变量。仅前一个、下一个和当前玩偶的变量可用于访问。由如上定义的,三个引用指针来处理上下文的构思。通过使用SELECT命令和SWITCH命令来实现上下文的控制。存在SELECT命令的多个变型。它们是·SELECTNOTME-随机选择所选玩偶组中除了当前玩偶之外的任何玩偶作为下一个说话者。·SELECTNEXT-随机地选择所选玩偶组中的任何玩偶作为下一个说话者。·SELECTPREV-选择与前一个说话者相同的玩偶作为下一个说话者。·SELECTNAME-选择具有NAME名字的玩偶作为下一个说话者。该SELECT命令的变型是用于完全脚本会话的。然后通过使用SWITCH命令来改变上下文。存在该SWITCH命令的两个变型·SWITCHSPEAKERlabel-其切换说话者的上下文并且将分支进入由标签指定的指令。在切换上下文上,前一个说话者(PREV)变为等于当前说话者(ME),当前说话者(ME)变为等于与下一个说话者(NEXT),并且下一个说话者(NEXT)未定义。·SWITCHFINISH-其是用于结束会话的命令。条件件流稈控制在会话期间,流程将依赖于不同变量的值。这可以用下列命令来完成·TESTEQvaluelvalue2-如果valuel等于value2其设置condition_flag。·TESTNEvaluelvalue2_如果valuel不等于value2其设置condition_flag。通过使用&C0NTEXT.VARIABLE_NAME引用可以由valuel和/或value2来引用变量。例如如果当前说话者(ME)的名字与前一个说话者(PREV)的名字相同,则指令TESTEQ&ME.NAME&PREV.NAME设置condition_flag。·BRANCH_Flabel-如果设置C0nditi0n_flag,则其分支进入由标签指定的指令,否则使用下一个指令。·CH00SE_F([wl,labell],[w2,label2],···,[wn,labeln])-如果设置condition_flag,则其基于随机选择使用权重wl、w2.....wn来分支进入由label1、label2.....Iabeln之一指定的指令,否则使用下一个指令。每次玩偶要求了解与另一个玩偶有关的变量时,使用TEST语句来询问该变量是否未定义、或者否是是特定值。然后可以将这一点用于流程控制;例如,如果变量PET未定义,则玩偶将询问其他玩偶具有的宠物类型,并且如果设置了该变量,则该玩偶将询问其他玩偶该宠物是什么颜色,等等。无条件流程控制有时需要能够无条件地改变指令的流程。在该情况中不使用TEST语句,并且始终执行BRANCH或CHOOSE语句。使用下列语句来完成这一点·BRANCHlabel-其无条件地分支进入由标签指定的指令。·CHOOSE([wl,labell],[w2,label2],..·,[wn,labeln])-其以基于随机选择使用权重wl、w2、...、wn来分支进入由labell、label2、...、labeln之一指定的指令说出短语会话引擎的重要部分是说出短语。这是用下列语句来完成的SAY(phraSel,phrase2,...,phrasen)H。该命令使作为当前说话者(ME)的玩偶说出短语phrasel、phrase2、...、phrasen.示例脚本下面是脚本的简短示例。DEFINECOLOURDEFINEGARMENTLoopSETCOLOUR([1,red],[1,blue],[1,green])SETGARMENT([1,dress],[1,blouse],[1,hat])SAY(hellomynameis,&ME.NAME,andIhavea,&ME.COLOUR,&ME.GARMENT)SELECTNOTMESWITCHSPEAKERLoop该示例可以通过选择三种颜色之一来搭配三种外套之一来为每一个出现的玩偶说出九种不同的事情。使用多个分支来构建该会话。每个分支是与主题有关的会话的不同区域。例如,在“动物园”主题中,可用的分支是“大猩猩”、“爬行动物”以及“冰激凌”。每个分支具有与其相关联的短语/单词并且根据选择随机地对它们进行选择。玩偶的响应取决于分支、玩偶的个性类型、以及可能响应的加权。例如,当需要选择来确定要采用的下一个分支时,会话将继续直到两个(或更多)玩偶选择相同位置连续进入为止。由于在选择要采用的分支之前要求一致,这提供了更逼真的会话。会话在分支内继续,直到到达使得控制器玩偶能够选择另一要采用分支的部分为止。此时进行与要采用的分支有关的另一判定。为了限制会话的长度,仅那些还没有使用的分支可用于选择。向可以随机选择的每个变量(分支、短语、单词或下一个说话者)附着权重。当随机地选择短语/单词或分支等时,权重改变了选择短语/单词分支等的概率。例如,如果所有短语具有权重1,则它们将都具有相同被选中的概率。可以调整权重以产生更逼真的会话。如“今天我从我的自行车上掉下来”的短语比如“我今天早上吃了早饭”更不可能出现。因此,后一个短语将具有远远大于前一个的权重。因此,仅偶尔地会话引擎使单元说出“今天早上我从我的自行车上掉下来”。在另一示例中,所使用的权重可以偏向于前一个玩偶并且将因此引起两个玩偶之间的短小会话。为了限制会话长度,对主题的任何一个分支内的时间量进行控制。例如,这可以用作另一权重参数来减少在一个分支中花费的时间,并且增加在另一分支中花费的时间量。这在没有不确定继续的概率的情况下帮助达到会话结束。会话的长度可以是随机地;然而,在一些情况中,会话将继续直到已经设置所有的变量为止。例如在宠物主题中,会话将继续直到已经完全地描述了所有玩偶的宠物为止。这可以通过执行检查以确定是否定义了所有变量并且仅当定义了所有变量才允许会话结束来完成。由于当前说话者仅具有前一个说话者和下一个说话者的上下文,不能始终确定何时已经设置了所有玩偶的变量。因此,在另一示例中,会话将继续直到已经当前上下文中对所有三个玩偶(即当前玩偶、前一个玩偶和下一个玩偶)设置了所有的变量为止。备选地,会话将继续直到对于连续的两个或更多玩偶集合所有变量是已知的。会话引擎可以处理多个玩偶,并且潜在地处理相同类型的多个玩偶,例如2个Jane玩偶。当初始化网络时,每个加入网络的玩偶与网络节点相关联。然后系统使用关联的网络节点而不是用玩偶的名字来引用玩偶。这使得在不出错的情况下能够引用多个具有相同名字的玩偶。还可以预确定完整的会话并且将其直接下载至玩偶。例如,可以将Simpons的情节下载至一组Simpons玩偶中。由于会话是由人产生的,或备选地会话是由会话引擎产生并且由人编辑的,因此预确定的会话使得玩偶能够具有特别逼真的会话。当产生预定会话时使用相同的指令;然而移除随机元素使得每次被激活时的会话是相同的。上述会话引擎可以独立地用于产生会话。例如,该会话引擎可以用于电视节目(如卡通)的自动脚本书写。在一个特定实施例中,为了产生主题,将主题写成脚本,然后使用编译器来编译该脚本。执行运行时的错误检查以确保该主题不会产生永远不结束的会话或任何其它错误,然后执行合理性检查以确保会话不是完全无意义的。然后一旦已经记录了音频文件则可以能够将该主题下载至玩具。在下面进一步详细描述的备选实施例中,提供一种创作工具以简化主题脚本的产生。然而,主题内会话的基本原则依然适用。例如,在两个实施例中存在选择说些什么的相同方法。玩偶选择如图3所示,会话引擎具有说话者选择器218。说话者选择器选择下一个说话的玩具。存在选择下一个说话的玩具的三种可能性随机选择网络内的任何玩具;通过名字(ID号)来选择玩具;以及选择当前说话者再次说话。因此,选择下一个说话者的第一过程是随机选择在以上三种可能性中使用哪一种。当通过名字来选择下一个说话者时,必须执行检查以确定该玩具是否在网络中。如上所述,select语句选择下一个说话的将是谁。当对下一个说话者作出判定时,选项是用有关语音来响应,选择另一玩偶并且与它们说话,或宣布一些关于当前说话者的事情。在说话者选择器218内使用SELECT语句来发起对下一个说话者的随机选择。备选地,SELECT语句可以使用逻辑来确定对下一个说话者的引用。例如,如果选择下一个说话的玩偶是Jane,则当前说话者可以提出下列问题“Jane,你最喜欢的宠物是什么?”。将Jane设置为下一个说话者并且从而答复将来自Jane。如在下面的示例中看到的,&语句可以用于引用下一个说话者,或不知道特定参数的任何其它一般参数。例如,&NEXT.NAME引用下一个说话者变量NAME,并且可以用于说出下一个说话者的名字。其它选项是可用的,如不能有玩偶连续说两次,所以例如如果Jane宣布她有宠物狗,则之后将不再直接选择Jane说话。创作工具可以使用类似的方法来选择下一个说话的玩偶,将在下面进一步详细描述这一点。参数存储参数存储存储器216存储与当前会话有关的信息。该存储的信息包括已经使用的短语;已经使用的变量;流程控制变量;以及如网络中的玩偶等其它此类信息。仅在控制器玩偶中存储该信息。从属单元仅接收与下一个要说的内容有关的信息。存储已经在会话中使用过的变量,使得可以稍后在会话中引用它们。变量是描述玩偶的信息,并且用于区分角色。例如,根据短语“我的狗叫做Fluffy”存储的信息将是狗和fluffy。该变量可以用于设置玩偶具有的宠物的类型。可以设置该变量使得玩偶仅可以具有特定变量子集合。例如,女孩玩偶不能具有蛇作为宠物。流程控制变量用于存储与已经使用的分支有关的信息。例如,当在动物园时分支可以去看大猩猩。将存储该信息使得会话不会返回动物园。备选地,存储已经使用的短语使得会话不会永远继续下去。可以对单一会话中可以使用的特定单词/短语的次数设置限制;该限制可以是1、2、3或更多。这确保了会话不会变的过于重复。还存在可以在参数存储存储器中设置和存储的全局变量。全局变量的示例应当是影响网络内所有玩偶的任何事物,例如“外面在下雨”,或在会话中玩偶已经处于的位置。可以独立于玩偶的上下文来访问全局变量,并且可以在主题中的任何地方来使用该全局变量。还可以使用创作工具来定义参数以存储与主题/玩偶有关的属性,将在下面进一步详细描述这一点。简而言之,主题属性/全局变量存储与整个主题相关联的参数并且可以由任何玩偶在任何时刻访问,并且玩偶属性/局部变量存储与每个玩偶相关联的参数并且仅可以由前一个/当前/下一个玩偶来访问。玩偶特定下载图4示出了玩偶可以改变或更新其已经在存储器中存储的主题所使用的过程的示意图。玩偶300包含用于标识玩偶的ID号302。玩偶经由USB连接与PC304连接,并且该PC经由标准连接类型与互联网306连接。互联网向PC提供到网站308的连接,网站308包含可下载主题310。主题包含不可由用户选择的子主题312(由于它们取决于所连接的玩偶)。例如,不会向使用玩偶的ID号标识的Jack玩偶呈现Jill子主题。主题对于所有个性类型来说都是一般的。除了主题的表达是不同的并且取决于玩偶的个性类型以外,子主题与主主题是相同的。因此音频文件对于每个子主题来说是不同的-不同的声音、不同的用词(相同的意思)、等等。备选地,下载到玩偶中的第一个性可以用于将后续下载的个性限制为与第一类型相同。例如,如果将玩偶设置为Jack,当连接该玩偶时网站将识别出Jack子主题,并且仅向用户呈现Jack子主题。网站通过访问玩偶的名字变量(即,Jack)并且将其与子主题的名称的列表进行比较来识别子主题。下载的子主题包括用于所选主题的脚本(比如“动物园”)、关联的个性类型、使得玩偶能够发出会话声音的相应的音频文件、以及用于确保网络内的所有玩偶具有相同主题的主题ID。PC304适用于在玩偶300和网站310之间连接,以使得可以以有效率的方式来下载主题。此外,仅在玩偶上存储主题并且因此必须将每个要求该主题的玩偶与网站连接。因此,如果一个用户具有两个玩偶并且针对每个玩偶要求相同的主题,则用户必须将网站与每个玩偶连接,并且下载正确的子主题。备选地,玩偶可以在任一时间存储多个主题。玩偶一次使用一个主题来进行通信;然而,主题可以由控制器在任意时刻进行改变。因此,玩偶可以使用“体育”主题,然后使用“动物园”主题继续。这使得会话能够持续更长时间并且还组合以扩展玩偶的可用性。玩偶都具有缺省主题,使得当它们不具有与其它玩偶相同主题时可以简短地进行通信。缺省主题包含几个基本短语,并且可以指导用户连接至网站以下载主题。为了确保主题是安全的,可以在下载至玩偶之前使用玩偶的唯一ID号对数据进行加密。然后每个玩偶的唯一ID号可以用于对主题内的数据进行解密。这可以用于确保每个玩偶与网站连接以下载主题。例如,即使每个Jane玩偶将使用相同的子主题,对于每个特定玩偶来说对数据进行不同编码,并且因此该数据对于除了特定玩偶之外的玩偶是无用的。个性的表达和脚本主题如前所述,每个不同的主题具有能够表达不同个性的各种子主题。每个主题的脚本是不同的并且用于根据该主题产生会话。然而,每个主题中的每个子主题具有产生会话的相同的脚本,但是子主题中使用的语音是不同的。这使得多个个性能够可用于相同的主题。为了增加会话的可变性,存在可用于问相同问题的多个随机选择。所以例如存在多种方式来问简单的问题,并且这可以依赖于主题/子主题,例如“我们接下来做些什么?,,;“我们现在将做些什么”;或“接下来呢?”。每个子主题可以具有用于表示着相同事情的不同表达。例如,一个子主题可以说“喂,你好吗?”,并且另一个说“嗨,最近怎么样?”。短语的意思基本相同但是表达不同,从而个性是不同。这样,每个主题可以具有任何数目的子主题以创建多彩和有趣的会话。这样,增强了用户体验,并且允许更有变化的游戏玩法,而无需大量存储器。可以将个性特点归于一个以及相同的主题。因此可能存在相同主题的Jack版本和Jill版本。Jack版本是子主题,并且Jill版本是子主题。将玩偶的名字(即Jane)与个性类型链接,使得由Jane玩偶表达的个性对于每个主题是相同的;仅仅是主题的内容将改变。这使得玩偶保持一致并且允许玩偶在不同情形中以类似的方式作出反应。备选地,在由网站首先对玩偶进行初始化时,玩偶的用户可以选择玩偶的名字以及玩偶的个性。这使得用户能够更加与玩偶有关。然后在玩偶内的存储器中存储玩偶的名称和个性、与ID相关联的每个属性,以及在例如下载其他子主题时使用。可下载主题是表达和脚本的组合并且指示了会话的类型。还可以裁剪(tailor)玩偶的美感和词汇,使得对于目标听众来说是适合年龄的。不同的主题可以具有适合年龄的等级。这实现了例如针对青少年市场的嘻哈主题的玩偶。此外,可以提供仅允许由离散的玩偶集合(可能是单一玩偶)使用的短语。当选择该短语时,执行检查以确保其可以由当前玩偶来使用。如果该短语不能由该玩偶使用,则选择另一短语。类似地,指令的部分可以进行限于离散的玩偶集合,以将其他随机性引入会话中。备选地,玩具可以是坦克形式或其它这样的玩具。在该情况中,玩具个性的表达是与语音相对的移动形式。例如,一个玩具坦克可以具有“防御”个性并且另一玩具坦克可以具有“进攻”个性。创作工具创作工具是可以用于为多个玩偶创建会话主题的应用。由于会话可能遵循的潜在分支的数目很大,需要大量的时间来创建如上所述的会话。因此,为了让该过程更有效率,提供创作工具以协助该过程。尽管在个人计算机等(比如如图10所示的PC1000或膝上型1002)上运行客户端应用,但在服务器1004上存储数据以允许多个用户对相同的主题进行操作,或用于单一用户对来自不同位置的相同主题进行操作。在服务器上提供web服务以将数据库与客户端应用连接。客户端应用经由互联网306与服务器1004进行通信。客户端应用使用XML将对网络服务的请求,从而对数据库的请求进行格式化,并且使用SOAP协议来传输数据。创作工具的概要图11示出了创作工具的概要。提供用户界面1100以允许主题开发者简单并且有效率地输出玩具的主题。使用所提供的用户界面,开发者遵循下列步骤1、使用主题产生引擎1102创建主题2、使用玩具产生引擎1104创建玩具3、使用上下文输入窗口1106创建每个玩具的多个上下文4、使用代码产生引擎1108创建指令(“C”代码)5、使用词典产生引擎1110输出要为每个玩偶记录的短语“词典”6、使用用于在PC上测试主题的模拟引擎1111来在需要时输出主题作为模拟这里使用的术语上下文意味着主题数据内的内容子集合,例如对于主题会话中的每个位置,存在确定玩偶说些什么并且哪个玩偶将下一个说话的至少一个上下文。上下文还可以设置主题/玩偶属性。一旦已经分别使用代码产生引擎以及词典产生引擎1110输出指令和“词典”,使用记录装置记录短语并且使用记录器1112创建和保存音频文件。记录器提示演员产生创建的特定主题所需的每个表达数据。记录器然后向每个音频文件分配与适当表达数据相对应的ID号。在使用中,使用适当的ID号通过玩具的处理器操作的代码来引用音频文件并且使用玩具的扬声器来输出。将基本指令集合1114(玩具处理器的固件)与主题指令集合(由代码产生引擎1108产生的)进行组合,并且使用编译器将其编译为可由玩具的处理器使用的二进制文件,以根据该主题操作玩具。在先前实施例中,基本指令集合/固件位于玩具处理器的存储器中,并且每次改变或更新主题时仅向玩偶下载主题指令集合以及音频文件。一旦编译了指令,使用组合器引擎1120将它们与音频文件绑定在一起,使得可以将它们下载至每个玩偶(每个玩偶具有单独下载,包括相同的主题指令,但是具有个性化的音频文件)。创作工具对存储了主题的服务器1004和数据库1122进行访问。可以根据主题开发者是否已经将主题完成,来以不同格式存储主题。存储非完成的主题,使得创作工具可以容易地访问信息;这是以包含对主题名称、玩具名字、上下文等的引用在内的数据库的形式。一旦主题开发者完成该主题,非完成格式以外,还将主题存储为如上所述的指令集合。这使得能够对完成的主题进行修改,并且基于先前完成的主题来创建新的主题。提供网站1124使得玩具的用户能够向他/她的玩具/玩偶1126下载主题数据。创作工具具有包括上述那些在内的若干功能1)其可以用于使用主题产生引擎1102来创建和编辑用于多个玩偶的主题会话。2)其可以用于使用模拟引擎1111来模拟会话过程,产生获得的主题会话的文本输出。3)其可以用于使用词典产生引擎1110来组装要为每个玩偶记录的所有短语的列表。4)其可以用于使用代码产生引擎1108来产生“C”代码输出(指令集合),可以用修改的处理器固件对该“C”代码输出进行编译以及链接以产生可供下载的每个玩偶的二进制数据文件。输入会话数据图12a至15示出了创作工具应用用户界面。界面的每个窗口具有多个导航键,以与输入窗口连接或进行至下一个界面窗口。用户界面使用处理器1150以及关联的存储器1152来向主题开发者显示用户界面的各个方面,并且使用接收器1153来接收用户输入的内容。处理器1150和存储器1152位于PC1000或膝上型1002之内。这里使用的术语内容意味着脚本数据、表达数据、主题数据、玩偶数据以及可以由用户输入到创作工具中的任何其它数据。图12a是第一界面窗口,并且具有下列选项添加主题,1100其用于创建新的主题并且一般是使用的第一选项。其如图12b和12c所示打开主题表单,该主题表单要求下列输入名称主题的名称。这是spokentextstring的占位符玩偶的数目该主题中支持的玩偶总数描述该主题的描述主题属性该主题的全局属性,如位置玩偶属性玩偶的局部属性,如情绪这些输入等于如上述所述构建会话所需的输入。如参照创作工具实施例描述的,如上所述,主题和玩偶属性分别等于全局和局部变量。然而,创作工具向主题开发者提供结构化的输入窗口以使得更有效率地输入信息。更详细地,主题属性包含名称和可选的值。该值可以是用于Sp0ken_teXt_String的占位符。如下所述,在已经完成主题之后创建spoker_text_string。spoken_text_string是可以在会话期间访问的声音文件。例如,如果主题位于动物园中,可能的主题属性将是位置=“动物园”,并且可以由玩偶来使用;例如说“嗨,我觉得动物园真有趣”,其中使用主题属性“位置”来访问单词“动物园”。由于特定主题中的每个玩偶要求属性的值,在界面窗口中创建玩偶属性。例如,如果属性设置是“情绪”,则将对每个玩偶赋予该属性的值,比如“高兴”、“悲伤”、“愤怒”等。在会话期间,会话引擎可以访问任何玩偶属性(局部变量),并且在会话中使用该玩偶属性。编辑,1202其用于编辑现有的主题。例如,选择主题Alon#l,1206,并且按动编辑将允许用户编辑Alon#l主题的细节。移除,1204其用于删除所选的主题。图12a示出了在已经创建了三个主题1208、1208以及1210之后的窗口。可以看到每个主题示出了该主题细节的概要,包括主题的简要描述、主题中涉及的玩偶的数目、以及主题的ID号。在服务器1004的数据库1122中存储输入该主题表单的信息用于稍后当产生输出指令时获取。一旦已经创建了主题,用户移动至下一个窗口以在主题内创建玩偶。图13a示出了玩偶产生窗口,并且当用户按动“添加玩偶”按钮1300时,显示图13b所示的窗口。该窗口允许创建指定的玩偶并且给出简要描述。使用图13a和b所示的窗口可以创建所需的许多玩偶。然而,由先前确定的针对该特定主题的玩偶的最大数目来限制可以创建的玩偶的数目。使用这些相同窗口,还可能编辑现有的玩偶。这样创建的每个玩偶将使得产生子主题。如上所述子主题是每个特定玩偶的主题。例如,对于每个玩具来说用于记录语音的声音是不同的,并且上下文数据将不同。同样,在服务器1004的数据库1122中存储输入到玩偶中的信息,用于稍后在产生输出指令时获取。图14示出了上下文定义窗口,在该窗口中针对主题中每个玩偶输入不同上下文。如图14所示,在位置100存在两个定义的上下文,1400和1402,一个用于玩偶#1并且一个用于玩偶#2。因此,当在会话中访问位置100时,由如上所述的方法来选择玩偶,并且访问相应的上下文。每一个上下文保持与玩偶应当说些什么以及哪个玩偶应该下一个说话有关的信息。这通过向主题开发者提供创建会话的结构来简化了如上所述的会话构建的过程。不再要求主题开发者对主题本身进行编码,而是创作工具根据主题开发者的输入来产生所需的代码。图15示出了针对主题内每个位置的上下文产生窗口。在图15所示的示例中,这是针对位置100和玩偶#1的上下文。每一个上下文要求下列信息位置,1500-标记位置的文本串,当在图14所示的上下文定义窗口中创建新的上下文时由创作工具自动创建该位置。这对于每个上下文行是方便的标签。其可以是任何文本;然而,缺省的是从100开始顺序地对上下文行进行编号。在创建和编辑会话的同时,文本标签的使用是便于清楚会话。当要求输出“C”代码时,将所有位置标签转换为y0Ume_conversation_struct_t结构(用于该结构和这里描述的其他结构的C代码命名习惯)的阵列的索引,其与上下文位置相对应。语句1502-与在随机选择过程中使用的权重一起的、玩偶能够说的语句列表。该语句包含作为spokerutextjtrings的短语列表。这是在会话中该上下文点可以由具体玩偶说出的语句的列表。将每个语句用方括号括起来,并且每个语句可以用逗号分隔(例如[语句1],[语句2],[语句3]),或在如图15所示的上下文输入窗口的分开的行上输入。语句包含用于随机选择的权重以及短语的列表。在本情况中,加权以上面参照条件性流程控制描述的加权(比如SET、BRANCH或CHOOSE控制)类似的方式进行操作。每个短语是显式的的spokerutextjtrings,或者是对主题属性或玩偶属性的引用,例如语句可以引用主题的位置或玩偶的情绪。在双引号中定义显式spokerutextjtrings作为文本(例如“喂,你好吗”)。引用采用下列形式■theme,attribute用于主题/全局属性■me.attribute用于当前说话者玩偶属性■prev.attribute用于前一个说话者玩偶属性■next,attribute用于下一个说话者玩偶属性■name,attribute用于指定的玩偶/局部属性下面是对语句字段的有效输入的示例■空白_意味着在此刻该玩偶没什么可说的。■[1,“喂,你好吗”]_此刻该玩偶将仅说出定的一个语句“喂,你好吗”指。■[1,“喂”,prev.name,“你好吗”]-此刻该玩偶将仅说出一个语句“喂”后面是前一个说话者的名字,之后是“你好吗”。■[1,“喂”],[1,“嗨”]-具有相等权重的两个语句。如果使用default_Say_procedure,则此时该玩偶将有50%的时间说“喂”并且将有另外50%的时间说“嗨”。■[3,“喂”],[1,“你好”]-具有不相等权重的两个语句。如果使用default_Say_procedure,则此时该玩偶将有75%的时间说“喂”并且将有另外25%的时间说“你好”。说,1504-用于说出语句的程序。如果为空白则使用default_Say_pr0Cedure。default_say_pr0Cedure使用权重来随机地选择可用语句中的一个。备选地,可以使用下拉列表来选择提供不同行为的任何可用的内置说过程。最终,如果需要定制行为,则可以在此处输入所需说过程的“C”代码。转换,1506-用于选择下一个玩偶的过程。其可以是上述的任何过程,包括NOTME、ANY、ME、PREV、FINISH或玩偶名字之一,或者可以在此处输入的一些“C”代码。如果为空白则使用default_transition_procedure,这是NOTME转换。备选地,存在可用的转换程序下拉列表。该列表包含下列内置转换,并且在创作工具中经由下拉菜单来访问(每一个如上详细描述的)■NOTME随机选择除了当前说话者之外的任何玩偶■ANY随机选择任何玩偶■ME选择当前说话者■PREV选择前一个说话者■玩偶的名字选择该玩偶附加地,如果需要定制转换行为,则可以在此处输入所需转换过程的“C”代码。下一个,1508-与在随机选择过程中使用的权重一起的、接下来想要去哪里的分支选择的列表。这是用于下一个上下文位置的分支选择的列表。每个分支选择在方括号中括起来并且用逗号分隔。分支选择本身包含与用于随机选择的权重一起的位置标签列表。它们在格式上与以上BRANCH命令相似。以下是对该字段的有效输入的示例(每一个如以上详细描述)■[(1,label1),(1,label2)]-包含具有相等权重的两个标签选择的一个分支选择。■[(1,labell),(1,label2)],[(2,label3),(3,label4)]-两个分支选择,第一个分支包含具有相等权重的两个标签选择,第二个分支包含具有权重2和3的两个标签选择。分支,1510-用于影响分支的过程,并且格式与以上参照会话构建描述的格式相同。否则可以在此处输入一些“C”代码。该字段用于指定处理分支选择的分支过程。如果为空白,贝U使用default—branch—procedure。default—branch—procedure使用下一中的第一分支选择,并且使用提供的权重来随机选择标签之一。然后将上下文改变至具有所选标签作为其位置标签的上下文行。备选地,存在可用的内置分支程序的下拉列表。可以在该下拉列表中提供如上所述的分支过程。属性,1512-属性、Set_flag、以及值和用于随机选择的权重的列表的列表。该字段用于指定用在该上下文点处的值设置的任何属性,即,主题开发者可以将玩偶属性“情绪”设置为高兴。如果为空白,则不设置任何属性。每个要设置的属性在方括号中括起来并且用逗号分隔。在方括号中在Set_flag之后指定的属性,Set_flag指定了对该属性设置一次还是可以重置该属性,之后是值和用于随机选择的权重的列表。该属性字段等于如上所述的SET命令。以下是对属性字段的有效输入■空白不设置属性■[me.attributel,set,(1,“喂”)]如果还没设置,则将一个属性设置为spoken_text_string“喂”的值■[me.attributel,reset,(1,“喂”),(1,“嗨”)],[me.attribute〗,set,(1,“宠物”),(1,“保罗”)]设置两个属性。即使已经设置了,也将第一属性设置为“喂”或“嗨”。如果还没有设置,则将第二属性设置为“宠物”或“保罗”。设置,1514-用于影响属性值设置的过程。如果空白则使用default_Set_procedureοdefault_set_procedure将每个指定的属性设置为考虑到set_flag的值的适当选择。“设置”的Set_flag意味着仅当还没有设置属性时可以设置该属性。“重置”的Set_flag意味着可以一次又一次地设置该属性。备选的,存在可用的内置设置过程的下拉列表。最终,如果需要一些特殊的定制设置行为,则可以在此处输入所需设置过程的“C”代码。如上所述,针对每个玩偶重复下列字段、语句、说、转换、下一个、分支、属性以及设置。字段说、转换、下一个和分支是对于在玩具/玩偶之间交互的方法做出贡献的所有参数,并且全部等于以上参照会话构建描述的命令。上下文选项重复用于向会话添加上下文行直到完成会话。当已经完成主题时,包括定义每一个玩偶以及每一个上下文,创作工具提供保存功能。该选项用于保存会话,并且在一个示例中,其创建下列目录c\youme\themes\theme_namec:\youme\themes\theme_name\doll_name针对每个玩偶c:\youme\themes\theme_name\doll_name\audio针对每个玩偶因此,在主目录文件夹“themejame”中保存单一主题所需的所有文件。为每个玩偶创建子文件夹以使得有效率地管理针对每个玩偶的下载。最终,每个玩偶子文件夹具有存储该玩偶所需的音频文件的文件夹。该选项还创建下列文件c\youme\themes\theme_name\theme.txt-包含主题数据作为文本文件c\youme\themes\theme_name\do1l_name\do11.txt-包含玩偶数据作为文本文件c:\youme\themes\theme_name\doll_name\audio\A00001.wavc:\youme\themes\theme_name\doll_name\audio\A00002.wav......c:\youme\themes\theme_name\doll_name\audio\A00010.wav......c:\youme\themes\theme_name\doll_name\audio\Annnnn.wav创建的wav文件是针对每个玩偶在主题中定义的每个spoken_text_strings的占位符。从A00001.wav开始,顺序地向给spoken_text_strings分配文件名AOOOOn.wav。文件名中使用的η还用作当需要“C”代码的输出时短语的索引。在一个实施例中,记录器1112提示演员扮演所需的Sp0ken_text_String,然后在提示演员扮演下一个spoken_text_string之前用正确的文件名称来自动保存该文件。另外,创作工具适用于产生与会话相对应的“C”代码。预定义该“C”代码的主要部分(基本指令集合),并且用作玩具/玩偶处理器的操作系统。一旦输出与会话相对应的“C”代码(主题指令集合),则将其与预定“C”代码进行组合,参见图11,然后编译以创建适合于操作玩偶中的或PC中的处理器的二进制文件。每次创建新主题时将操作系统/固件并入玩偶中以允许在需要时简单并且有效率地改变玩偶的功能。可以输出“C”代码的两个变型1、用于windows的“C”代码-可以将该“C”代码保存为c:\youme\themes\theme_name\theme_simulation.c;以及c\youme\themes\theme_name\theme_simulation.h可以随后对该代码进行编译并且与基于windows的会话模拟引擎链接。可以将获得应用保存为c:\youme\themes\theme_name\simulation.exe。模拟器允许用户指定应当将哪个玩偶认为是存在且活动的。然后模拟器模拟好像在真实玩偶中发生的会话的实例。模拟器随机选择活动的玩偶之一成为当前说话者并且针对该玩偶处理第一上下文行。然后其依次执行每一个新的行,输出哪个玩偶正在说话并且他们正在说什么。模拟器继续直到会话结束ο2、用于处理器的“C”代码-可以随后对该代码进行编译且与修改的播放器链接以产生每个玩偶的二进制数据文件。可以针对每个玩偶将这些“C”代码文件保存为c\youme\themes\theme_name\doll_name\youme_chat.c;以及c:\youme\themes\theme_name\doll_name\youme_chat.h可以将获得的二进制数据文件保存为c\youme\themes\theme_name\doll_name\player,sb二进制数据文件包含在每个玩偶上运行会话所需的整个信息集合。该二进制数据文件包括针对处理器的固件,并且可以将附加特征并入玩偶的功能中,而无需更新固件的附加处理。为了将正确的短语记录为用于玩偶的wav文件,如图11所示,使用词典产生引擎1110来创建并且输出每个玩偶的所有不同短语(Sp0ken_text_StringS)的列表;这是每个玩偶所需的短语的词典。该词典产生引擎1110与服务器1004内的数据库1122进行通信,并且基于在数据库内的主题上存储的信息来编译该列表。该词典是表达/语句和分配给该表达/语句的ID号之间的有效率的查找表。在每个上下文行的语句字段和属性字段中定义每个玩偶使用的短语。这些短语可以是显式定义的spokerutextjtrings或可以是对定制属性的引用。只要定义显式的spoken_text_string,从A00001.wav开始向该显式的spoken_text_string顺序地分配诸如AOOxxx.wav的文件名。编号xxx还是短语索引。可以在下列文件中保存spoken_text_string的列表c\youme\themes\theme_name\phrases.txt-其包含在该主题中使用的所有短语的列表c:\youme\themes\theme_name\doll_name\phrases.txt-这些包含每个玩偶使用的所有短语的列表这些文件将包含下列格式的文本AOOxxx作为文本的关联短语这样,将创建大量wav文件的过程简化为可以顺序地记录短语列表、用适当的文件名来保存、以及准备用于玩偶的下载或在PC用于虚拟玩偶的情况下准备用于PC的下载。如图12a所示,通过按钮1212“产生文件”来激活产生文件的过程。用户选择已经完成的适当主题并且按动按钮1212。然后这将产生如上所述的文件。然后将整个文件包上载至玩偶;该文件包包括主题的二进制文件和随附的操作系统、针对语音的声音(wav)文件、以及处理器操作码(固件)。如上所述,youme_conversation_struct_t会话结构的阵列是会话的主控制数据。扼要地,当在控制器玩偶中操作会话时,会话引擎以针对第一玩偶的该阵列的索引1所指示的内容开始。然后其执行下列动作1、调用当前上下文的转换程序以判定下一个玩偶。2、调用当前上下文的设置过程以设置上下文中指定的任何属性的值。3、调用当前上下文的说过程以根据上下文中指定的数据来选择说出哪个语句。如果当前玩偶不是控制器玩偶,这将引起至远程玩偶的无线通信。在两种情况中,在继续进行之前引擎等待直到完成音频输出。4、调用上下文的分支过程以选择会话阵列中要使用的下一个索引。5、将前一个玩偶指针(prev)设置为等于当前玩偶指针(me)。6、将当前玩偶指针(me)设置为等于下一个玩偶指针(next)。已经在步骤1中设置了下一个玩偶指针。7、然后在步骤1以新的索引和新的玩偶再一次开始,并且继续该过程直到命中步骤4的分支之一中的FINISH分支。USB通信保护器在另一实施例中,提供一种USB通信保护器,使得PC能够与这里所述的玩具无线地进行交互。图16示出了附着至PC304并且与玩偶100进行无线通信的USB通信保护器1600的图示。该保护器包含无线模块104、IR/RF发射器/接收器212、以及接口1602。除了接口1602之外,这些组件与如上所述的玩偶100中包含的组件是相同的。然而,使用PC304作为处理器1604,而不是具有玩偶100所有的独立处理器的保护器,从而PC有效率地变为能够与物理玩偶100进行通信的虚拟玩偶。该虚拟玩偶配备在PC监视器上示出的动画化身,其可以与真实玩偶在外观上相似,并且从而化身的动画与玩偶的语音同步。为了运行该会话,PC在存储器1606中存储有仿真程序,用于仿真玩具的处理器。备选地,如上所述,创作工具输出针对基于PC的虚拟玩偶的特定代码。在两种情况中,主题会话数据用于使用在PC上运行的应用来运行会话,该应用用于仿真玩具/玩偶的固件。经由PC扬声器来输出玩具/玩偶的语音。接口1602是USB连接,并且提供将无线通信保护器1600与PC304连接的有效率的方法。保护器使用的无线通信协议与在这里所述的玩偶之间所使用的通信协议是相同的,即IEEE802.15.4。当用户连接至网站时,他/她能够使用USB通信保护器来便于在物理玩偶与网站内动画的虚拟玩偶之间的会话。这样,单一用户可以在不需要多个物理玩偶的情况下使用玩偶的会话引擎的功能。另外,虚拟玩偶可以参与与多个物理玩偶的会话。例如如果两个用户分别具有带有USB通信保护器的膝上型计算机,则虚拟玩偶还可以与其它虚拟玩偶互动。游戏玩法在另一实施例中,玩具还适用于与儿童玩游戏。例如,玩具可以玩棋盘游戏(boardgames),如Snakes和Ladders、Mousetrap、Ludo、或使用骰子玩的任何其它基于机会的游戏。该玩具配备用于模拟骰子的随机数发生器。此外,该玩具适用于对通过棋子(playingpiece)沿着棋盘前进的间隔数目进行计数。玩具向儿童发出可听的信号来使棋子移动所需数目的间隔。一旦儿童移动了棋子,儿童通过按动按钮等向玩具指示轮到下一个玩具/儿童。备选地,棋盘也可以是交互式的,并且包含传感器等以接收来自游戏棋盘的、与计数器的位置有关的信息。这样持续玩直到出现胜利者。图5提供了还包括游戏引擎400在内的控制器玩具200的示意图。其余组件与图2和3中描述的组件相同。游戏引擎400包括棋盘存储器402、随机数发生器404、位置RAM406以及肯定应答接收器408。棋盘存储器402存储与棋盘游戏(Snakes和Ladders或Ludo)的布局有关的信息。随机数发生器用于模拟骰子,并且适用于产生数字1、2、3、4、5和6(或适合于游戏的任何其它数字集合)。位置RAM用于存储与每个玩家的棋盘上的位置有关的信息,在本情况中,玩家是控制器和三个从属。该信息与棋盘存储器以及虚拟骰子的掷出结合使用,以对棋子要移动的位置的正确数目进行计数,并且了解棋子已经移动到的方格是否具有任何特殊关联性,比如是否为ladder的底部或snake的顶部。会话引擎204使用从游戏引擎获得的信息来对间隔数目进行计数,例如如果原始位置是方格13,并且虚拟骰子掷出4,则玩偶将通过扬声器210发出“我已经掷出4,14,15,16,17”的声音。在本示例中,如果方格17是蛇的顶部,则玩偶将继续发出“哦不,我已经将蛇滑到方格6!”的声音。计数机制对文本循环适当的次数,然后在位置RAM406内记住最终位置。所以例如当虚拟骰子掷出4时,访问数字列表4次以产生最终结果。附加地,玩偶具有接收来自由儿童激活的外部随机数发生器的的信息的能力。这样,儿童可以与玩偶玩,并且玩偶可以跟踪所有玩家(包括该儿童)的棋子以确定何时出现胜利者。图6示出了玩游戏的过程的流程图。由用户发起游戏(步骤500),并且控制器玩偶将执行检查(步骤502)以确定玩家的数目。控制器玩偶然后将使用随机数发生器等来判定第一玩家(步骤504)。控制器玩偶然后将针对第一玩家掷虚拟骰子(步骤506),或如果儿童是第一玩家则控制器玩偶要求儿童掷出他们的骰子。控制器玩偶然后指示玩家在棋盘上将计数器/棋子移动相应数目的方格(步骤508),然后等待儿童已经移动了计数器的肯定应答(步骤510)。在步骤512,在向儿童提示已经移动了计数器的肯定应答之前,控制器玩偶等待预定秒数,如2、3、5或8秒。一旦控制器玩偶接收肯定应答,则执行检查以确定该玩家是否已经赢得该游戏(步骤514)。如果该玩家还没有赢得游戏,则游戏继续至下一个玩家(步骤516),并且过程从步骤506继续进行直到玩家获胜(步骤518)。该游戏弓|擎适用于以上述方式来玩任何基于规则的游戏。备选地,该系统可以实现常规编程语言(如C)以运行更复杂的算法来玩更复杂的游戏(如国际象棋)。将使用上述相同语言来产生会话,并且将可以根据C程序来引用该语曰。这样的玩具和玩偶向儿童们提供不同交互时机,并且增强他们游戏。主题示例附录I中提供了玩偶之间的主题会话的四个示例。这些示例提供了构建会话的不同方法。存在两个随机产生会话的示例(动物园和宠物主题),一个完全脚本会话的示例(MrX主题)以及一个玩游戏主题的示例(Snakes和Ladders主题)。将单元的处理器102与其它模块(如语音编译器206、语音数据库208以及参数存储器216)结合使用来解释主题内的脚本。例如当定义变量时,在参数存储器中分配存储。每一次发起会话时,在参数存储器中分配变量。这使得能够改变主题(即,从动物园到宠物),并且为新的变量分配了恰当的存储资源,而不会于来自前一个会话的变量的冲突。此外,还在参数存储器中为参数(比如PREV、NEXT和ME)分配存储。这使得SELECT语句能够引用脚本内的参数。当使用SAY语句时,控制器玩偶使用上述通信协议以使用无线模块和发射器向有关玩偶发送命令,或如果控制器玩偶是当前说话者时,使用控制器玩偶的相关模块。使用要求说话的玩偶中的语音编译器206来访问语音数据库208中的适当音频文件。例如,动物园主题内的具有SAYi吾句的第一行是“SAY(Ithinkwe,veseeneverythingnow,p03,letsgohome)”。该语句包含对语音数据库内音频文件的三个引用。那些引用是“Ithinkwe,veseeneverythingnow”、“p03”以及“letsgohome”。它们都引用音频文件但是“P03”引用指代了特定长度的暂停。该暂停是用于将音频文件适当分隔开的空白音频文件。语音编译器206然后使用扬声器210来播放该音频文件。附录I内的示例主题提供使用以上定义的语句的其它示例。在每一个情况中,处理器对代码进行解释并且使用适当的模块来执行语句。在备选实施例中,如上所述处理器不使用内置解释器,而是每个主题包含二进制数据文件,该文件包括使得处理器能够正常工作的所有处理器控制指令。这有效率地在需要时能够利用新特征对处理器的固件进行更新。可以使用创作工具来产生下面提供的主题示例。然而,控制玩具/玩偶的指令将是编译的“C”代码的二进制文件。处理器和关联电子元件图8示出了图2和3中所示的示意图的潜在生产版本的电路图和部件列表的示意_附录II详述了图8中的组件。图9示出了备选电路图的示意图_附录III详述了图9的组件。存在在生产电路中包括的备选方案,并稍后讨论。电路包括Jennie无线控制器生产电路使用JennieIC,包含RF电路,并且将固件和数据组合在单一大型闪速存储器IC中。Jennie无线控制器可以例如使用Zigbee无线通信协议来在玩偶之间进行通fn°电池充电器生产电路使用特殊设计的部件来从USB端口充电并且在充电的同时也向电路供电音频放大器生产电路上的音频放大器是D类音频放大器。这是非常有效率的(80%)。技术选项本节讨论图8中的生产电路中还没有包括的可能备选方案。USB接口FTDIFT245RQ选择该组件主要由于其为包括USB驱动软件的现成IC,减少了开发工作。其主要缺点是使用了Jennie上的大部分DIOx线路。尽管这对于当前设计来说不是问题,如果其他选项(例如语音压缩IC)需要DIOx线路,则该部件将不是适合的。备选实施例下面的两个备选方案都是具有内置USB和SPI从属接口的8比特微控制器IC。尽管两个制造商都提供了参考设计、应用注意事项等等以协助开发,但这些微控制器都需要使其工作而开发的固件和软件。这些部件的优点在于它们可以与JennieSPI接口连接,并且仅需要1个DIOx线路,将其他的DIOx线路释放以作它用。玩具不具有复杂的USB要求;唯一的要求是下载可编程到闪速存储器中的数据。该设备不需要遵循任何一般的设备功能,例如记忆棒。这减少了所需的开发工作。选择下面标识的部件,这是由于它们的目的是简单、低功耗嵌入式应用并且具有SPI从属接口。然而,来自制造商家族或来自其它制造商的其它设备也可能是同样适合的。CypressCY7C63833-LFXCAtmelAT90USB82-16MU电池锂离子(Lithium-Ion)图8和9所示的电路使用锂离子(Li+)电池。出于以下三个原因选择Li+电池i)形状-可具有扁平棱柱(flatprismatic)封装,对于示范项目来说是方便的。ii)容易开发_Li+充电要求比备选方案要简单,特别是当充电器必须同时向附加电路供电时。iii)功率容量_示范项目开始时的功率要求的保守估计暗示着仅Li技术将在小的可用空间中的给出充足功率。(参见后面)备选的可再电技术是NiMH和NiCad。NiMH具有与NiCad相似的充电要求(比Li+要复杂),但是具有与Li+相似(较高)的功率密度(对于给定物理体积来说具有更多功率)和价格。NiCad/NiMH在本节中将考虑相比于Li+NiCad/NiMH电池的特性。为了简单起见,对于NiCad请阅读下面节中的NiMH。i)形状尽管其它形状是可用的,NiCad电池通常具有标准大小,比如AA和AAA。在可以使用更小组件并且制造更复杂PCB(比如两片和/或柔性电路/连接器)的成本是不可避免的生产环境中,使用标准大小的电池是可能的。ii)容易开发必须在电池充电(从USB端口)的同时向电路供电(从USB端口),使得电路可以下载新的数据。(电池不能同时地被充电和向电路供电)。因此在充电期间将电路与电池隔离或让电路保持连接。隔离电池涉及更复杂的电路。让电路保持连接意味着充电器同时监视到至其控制的电池的普通电流以及我们的电路采用的额外电流。让电路保持对于Li+电池充电器的连接不是关键。主要缺点是,一旦Li+电池完全充满,则正常关闭充电器。必须禁止该功能否则我们的电路也将关闭。结果是电池寿命更短。让电路保持对NiCad电池充电器的连接是关键的。NiCad电池具有更复杂的充电曲线,特别是在充电快结束时。如果不正确地检测该曲线,电池永远不会完全充满或对电池过充电导致对电池的损害并且过多的温度上升。电池充电器使用两种方法中的一种来检测该曲线。第一种是通过改变电池汲取的电流。不幸地是,本电路汲取的电流将使得充电器混淆,导致潜在的危险环境。第二种方法是通过检测电池温度的改变。然而,电池充电组件在正常使用期间也变热。在本应用中,难以在热上将电池充分隔离以给出可靠的结果。隔离电池是图8中电路采用的解决方案。电池充电器IC并入了精密的电源管理电路并且提供隔离。该集成电源管理不可用于现有产品中的NiCad技术。所以这将在离散的组件中或在定制的集成IC中实现。iii)功率容量在本节给出对玩偶电子元件的功率要求的讨论。在本节中使用的电池寿命是基于下列电池容量AAA碱性=1150mAhil.5V參AAANiCad=300mAhil.2V參AAANiMH=750mAhil.2VLi+棱柱=620mAhi3.7V注意Li+电池保持与相同级别的其它电池两倍的功率,这是由于其电压是两倍大。两个AAA电池必须串联使用,或这单一AAA与升压转换器一同使用,并且其容量会减半。对图9所示的电路的功率估计。估计的电流消耗=当说话时为136mA,其他情况为48mA。这是从下述中得到的Jennie模块=48mA音频驱动器250mW最大8ohm扬声器功率=175mA,但是在2个玩偶之间的会话中,每一个玩偶说一半的时间=>88mA。注意在全部时间以最大功率来驱动扬声器是不可能的,然而,音频放大不是100%效率的,因此88mA是合理的折中。电路的其余部分=可忽略基于示范估计的电池寿命<table>tableseeoriginaldocumentpage36</column></row><table>单棱柱Li+解决方案是示范的显而易见的选择。图8所示电路的功率要求由于音频功率是总功耗中最重要的因素,因此获得更精确的值是重要的。最佳方法是直接测量,但是只在完成音频执行后才可能。然而,存在多个因素,暗示音频功率将不如估计的大语音特性使得波形的平均功率比其峰值振幅要小很多。例如,语音包含大量的暂停。从电路将可能以小于最大平均功率电平来驱动。生产电路中使用的D类放大器比图9中所示的电路中的放大器更有效率,引起显著的功率节省。对示范会话的更详细地计算和分析暗示了平均音频功率在讲话时将仅为10mA,至于2个玩偶之间的会话来说给出平均5mA。这使得Jennie功率支配给出总共说话时53mA并不说话时48mA。注意该音频功率电平仅针对说出的语音,不是音乐。基于对音频功率的改进估计的电池寿命<table>tableseeoriginaldocumentpage37</column></row><table>存在降低Jennie功耗的方法。当前,Jennie在所有时间都是开启的,连续地收听消息。由于固件中的改变,以及玩偶彼此通信的方式的改变,仅一个玩偶(第一个上电的)需要连续收听。其它玩偶可以在它们需要说话是周期性地检查第一个玩偶,并且仅需要在该短时间内上电。其余时间Jennie可以处于低功率休眠模式。如果可达到10%的占空比,这将不说话时的功耗降低到十分之一。当说话时,需要对Jennie供电,但是不需要收听消息,从可以不对RF级供电。这将Jennie功耗降低到四分之一。从而能够将整体电流消耗减少到说话时14mA以及不说话时4mA。尽管大多数玩偶将具有该降低功率要求,一个玩偶(第一个打开的)不具有该功率节省。使用激活玩偶的方式的改变,也能够减少功率。需要进一步调查来确定什么是可行的。基于减少的Jennie功率要求的电池寿命<table>tableseeoriginaldocumentpage37</column></row><table><table>tableseeoriginaldocumentpage38</column></row><table>如果可以达到这些功率要求,则使用双AAA标准、NiCad或NiMH电池变为可能。自动断电功能玩偶电子元件的当前规范是0N-0FF开关控制电路的供电。与其它玩具通过,当该玩偶开启时是不明显的,这是由于其被动地坐等在任意一个激活的玩偶中按动按钮。这意味着很有可能忘记关闭玩偶。结果是下一次(例如第二天)玩玩偶时电池没电。电路能够将其自身切换至‘待机’模式,汲取非常少的电流,但是这还没有在当前功能规范中包括。当电子元件进入待机模式并且如何将其重激活暗示玩偶的总体行为和表现。语音压缩语音压缩允许在相同容量的存储器中存储更多的音频数据。当前设计不包含任何语音压缩技术。当前设计使用产生64kbps(比特每秒)的8比特8kHz音频数据,并且使用64Mbit串行闪速存储器,该存储器能够存储1000秒(17分钟)的音频数据。语音压缩可以用于将该数据速率降低至2kbps和8kbps之间,压缩越高则音频质量越低。所以对于8kbps来说,4Mbit闪速存储器可以保持大约500秒(872分钟)的音频数据。压缩的音频数据要求在播放时的解压缩。这可以用软件或专用硬件来进行。下面给出几个选项。Jennie控制器上的软件解压缩还没有广泛的调查该选项。首先,必须找到合适压缩/解压缩算法的源代码,使得可以将该算法装(port)到Jennie控制器上。其次,必须对算法所需的处理能力和在Jennie控制器上的可用性进行分析。SensoryInc语音合成ICSensoryInc具有两个微控制器族。SC_6x族具有预编程的SC-691从属合成器。其具有要求9个DIOx线路与Jermic连接的4比特MCU接口,并且可以直接驱动32-欧姆扬声器。较新的RSC-4x族不具有预编程的从属合成器,并且从而要求开发定制的固件。其将用4比特或8比特MCU接口(9或15个DOIx线路)与Jermic连接。然而,该较新的RSC_4x族具有更强大的处理器(其可以处理语音识别算法),并且可以直接驱动8-欧姆扬声器。这两个部件中的任一部件不能与USBFT245芯片一起使用,这是由于Jermic不具有同时用于上述二者的足够的DIOx线路。从属SPIUSB芯片将是必须的(参见USB节)。使用具有显著处理能力的语音合成微控制器(如RSC-4x)暗示可能备选的系统架构。取代运行主要玩偶算法的Jermic无线微控制器,并且使用合成微控制器作为从属协处理器来简单地解压缩音频,合成微控制器可以运行主要玩偶算法并且使用无线微控制器作为从属协处理器以进行无线通信。更多细节请参见无线微控制器节。无线微控制器当前设计是基于2.4GHzIEEE802.15.4个人区域网通信标准的。无线微控制器产品在于包含必须的RF硬件和固件来处理所有低级别RF通信。仅通信中的数据需要由玩偶应用来定义。当前设计已经选择Jermic无线微控制器。尽管IEEE802.15.4产品处理低级别RF通信,但是存在与玩偶应用不符合的一个方面。IEEE802.15.4是基于节点的分级结构,具有与全功能设备通信的很多简化功能的设备。玩偶应用具有对等结构,其中所有设备是相同的。在相同2.4GHz或不同的ISM频带中工作的其它RF收发器产品是可用的。它们都包含必需的RF硬件,但是没有强加特定低级别协议。这些收发器IC作为对通用微控制器或专用微控制器(如RSC-4x语音合成器)的从属来工作。使用这些部件,可以开发私有的对等通信协议。RF收发器的示例是TICC2500和AtmelATA542x族。这些部件潜在地提供比JennieIC更低的功耗和更低的单位成本。当然理解,本发明并不意在不受限于仅作为示例描述的上述实施例的细节,并且可以在本发明的范围中作出对细节的修改。可以独立地或以任何适当组合的方式来提供在说明书和(在适当的地方)权利要求书以及附图中公开的每个特征。附录I-主题示例动物园主题//VISITTHEZOOMULTI-WAYCONVERSATIONSDEFINETHEMEDEFINEG_WHERE_ARE_WEDEFINEG_BEEN_TO_INSECTSDEFINEG_BEEN_TO_REPTILESDEFINEG_BEEN_TO_PRINIATESDEFINEG_BEEN_TO_SAFARIDEFINEG_BEEN_TO_ICECREAMDEFINEMY_CH0ICEDEFINEINSECTDEFINEREPTILEDEFINEPRIMATEDEFINESAFARIDEFINEICECREAMDEFINELIKEDEFINEHATEDEFINETEMPDEFINEPHRASE1DEFINEPHRASE2DEFINEPHRASE3DEFINEPHRASE4DEFINESELF_D0NEStartSELECTNOTMEBRANCH_FOnly_one_dollTESTEQ&PREV$UNDEFBRANCH_FMain_loopTESTEQ&PREV.SELF—DONE$UNDEFBRANCH_FMain_loopGet_next_spkrSELECTNEXTTESTEQ&NEXT&PREVBRANCH_FGet_next_spkrTESTEQ&NEXT.SELF_DONE$UNDEFBRANCH_FMain_loopTESTEQ&ME.SELF_DONE$UNDEFBRANCH_FMain_loopCH00SE([3,Main_loop],[1,Finish])FinishSAY(ithinkwe'veseeneverythingnow,p03,letsgohome)SWITCHFINISHOnly_one_dollSAY(ohdearΓmallalone)SWITCHFINISHNormal_switchTESTEQ&G_BEEN_TO_INSECTS$UNDEFBRANCH_FDo_switchTESTEQ&G_BEEN_TO_REPTILES$UNDEFBRANCH_FDo_switchTESTEQ&G_BEEN_TO_PRIMATES$UNDEFBRANCH_FDo_switchTESTEQ&G_BEEN_TO_SAFARI$UNDEFBRANCH_FDo_switchSETSELF_D0NE([1,done])Do_switchSAY(p50)SWITCHSPEAKERStartMain_loopTESTEQ&G_BEEN_TO_INSECTS$UNDEFBRANCH_FDo_main_loopTESTEQ&G_BEEN_TO_REPTILES$UNDEFBRANCH_FDo_main_loopTESTEQ&G_BEEN_TO_PRIMATES$UNDEFBRANCH_FDo_main_loopTESTEQ&G_BEEN_TO_SAFARI$UNDEFBRANCH_FDo_main_loopSETSELF_D0NE([1,done])Do_main_loopTESTEQ&PREV$UNDEFBRANCH_FFirst_speakerSETPHRASE1([1,I'vehadenoughofthe],[1,I'mboredwiththe],[1,enoughofthe])SETPHRASE2([1,letsgosomewhereelse],[1,letsmoveon],[1,letsgetoutofhere])TESTEQ&G_WHERE_ARE_WEinsectsCH00SE_F([15,Insects],[1,Move_on_insects])TESTEQ&G_WHERE_ARE_WEr印tilesCH0SE_F([15,Reptiles],[1,Move_on_reptiles)]TESTEQ&G_HERE_ARE_WEprimatesCH00SE_F([15,Primates],(1,Move_on_primates])TESTEQ&G_WHERE_ARE_WEsafariCH00SE_F([15,Safari],[1,Move_on_safari])TESTEQ&G_WHERE_ARE_WEicecreamCH00SE_F([5,Icecream],(1,Move_on_icecream])Move_on_insectsTESTEQ&G_BEEN_T0_INSECTS$UNDEFBRANCH_FMain_loopSAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)BRANCHMy_choiceMove_on_reptiles;TESTEQ&G_BEEN_T0_REPTILES$UNDEFBRANCH_FMain_loopSAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)BRANCHMy_choiceMove_on_primates;TESTEQ&G_BEEN_TO_PRIMATS$UNDEFBRANCH_FMain_loopSAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)BRANCHMy_choiceMove_on_safariTESTEQ&G_BEEN_TO_SAFARI$UNDEFBRANCH_FMain_loopSAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)BRANCHMy_choiceMove_on_icecreamTESTEQ&G_BEEN_T0_ICECREAM$UNDEFBRANCH_FMain_loopSETPHRASE1([1,icecreamisgreat],[1,ummicecreamisyummy],[1,ohboyIreallyenjoyedthat])SETPHRSE2([1,letsgosomewhereelse],[1,letsmoveon],[1,whereshallwegonow])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHMy_choiceFirst_speakerSETPHPASE1([1,wellhereweareatthezoo],[1,nowwe'vearrivedatthezoo],[1,hurrahwe'reatthezoo])SETPHRASE2([1,Whereshallwestart],[1,whatshallweseefirst],[1,whatanimalswillwestartwith])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p50)My_choiceTESTEQ&ME.SELF_D0NE$UNDEFBRANCH—FDo_choiceSELECTNOTMEBRANCHNormal_switchDo_choiceCHOOSE([1,Check_insects],[1,Check_reptiles],[1,Check_primates],[1,Check_safari],[1,Check_icecream])Check_insectsTESTNE&G_BEEN_TO_INSECTS$UNDEFBRANCH—FDo_choiceSETMY—CHOICE([1,insects])BRANCHMade_choiceCheck_rsptilesTESTNE&G_BEEN_TO_REPTILES$UNDEFBRANCH_FDo_choiceSETMY—CH0ICE([1,r印tiles])BRANCHMade_choiceCheck_primatesTESTNE&G_BEEN_TO_PRIMATES$UNDEFBRANCH—FDo_choiceSETMY_CHOICE([1,primates])BRANCHMade_choiceCheck_safariTESTNE&G_BEEN_TO_SAFARI$UNDEFBRANCH—FDo_choiceSETMY—CHOICE([1,safari])BRANCHMade_choiceCheck_icecreamTESTNE&G_BEEN_TO_ICECREAM$UNDEFBRANCH_FDo_choiceSETMY—CHOICE([1,icecream])SAY(howabout,p03,wegetsome,p03,&ME.MY—CHOICE)BRANCHGet_nextMade一choiceSAY(howabout,p03,weseethe,p03,&ME.MY_CH0ICE)Get_nextSELECTNOTMETESTNE&NEXT.SELF_D0NE$UNDEFBRANCH_FNormal_switchSAY(p50)SWITCHSPEAKERNext—choiceNext_choiceTESTEQ&PREV.MY_CH0ICEicecreamCH00SE_F([1,Select_icecream])CHOOSE([1,Check_next_insects],[1,Check_next_reptiles],[1,check_next_primates],[1,Check_next_safari],[1,Check_next_icecream])Check_next_insectsTESTNE&G_BEEN_TO_INSECTS$UNDEFBRANCH_FNext_choiceSETMY_CH0ICE([1,insects])BRANCHCheck_agreementCheck_next_reptilesTESTNE&G_BEEN_TO_REPTILES$UNDEFBRANCH_FNext_choiceSETMY_CH0ICE([1,reptiles])BRANCHCheck_agreementCheck_next_primatesTESTNE&G_BEEN_TO_PRIMATES$UNDEFBRANCH_FNext_choiceSETMY_CH0ICE([1,primates])BRANCHCheck_agreementCheck_next_safariTESTNE&G_BEEN_TO_SAFARI$UNDEFBRANCH_FNext_choiceSETMY_CH0ICE([1,safari])BRANCHCheck_agreementCheck_next_icecreamTESTNE&G_BEEN_T0_ICECREAM$UNDEFBRANCH_FNext_choiceSETMY_CH0ICE([1,icecream])SAY(howabout,p03,wegetsoma,p03,&ME.MY_CH0ICE)BRANCHGet_nextSelect_icecreamSETMY_CH0ICE([1,icecream])SETPHRASE1([1,greatidea],[!,goodthinking],[!,totallyagree])SETPHRASE2([1,letsgetsome],[1,Iwant],[1,yippee])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.MY_CH0ICE)BRANCHChange_locationCheck_agreementTESTEQ&ME.MY_CH0ICE&PREV.MY_CH0ICEBRANCH_FAgreementTESTNE&ME.MY_CH0ICE&NEXT.MY_CH0ICEBRANCH_FNo_agreementAgreementSETPHRASE1([1,greatidea],[1,OK],[1,yes])SETPHRASE2([1,letsgoseethe],[1,offwegotothe])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.MY_CH0ICE,p50)BRANCHChange_locationNo_agreementSETPHRASEl([l,nolets],[1,1wouldrather],[1,1'dpreferto),[1,howaboutwe])SETPHRASE2([1,seethe],[1,gotothe])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.MY—CHOICE)BRANCHGet一nextChange—locationSETG_WHERE_ARE_WE([1,&ME.MY_CH0ICE])SETPHRASE1([1,hereweareatthe],[1,nowwe'vearrivedatthe],[1,hurrahwe'reatthe])SETPHRASE2([1,_])TESTEQ&G_WHERE_ARE_WEicecreamSET_FPHRASE2([1,shop])SAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)Change_location_switchSELECTNEXTBRANCHNormal_switchIcecreamSETG_BEEN_T0_ICECREAM([1,done])TESTNE&ME,ICECREAM$UNDEFBRANCH_FIcecream_get_nextSETICECREAM([1,chocice],[1,rasberry_ripple],[1,lolly],[1,ninety_nine])CHOOSE([1,$L_NEXT],[1,Ask_icecream])SETPHRASE1([1,myfavouriteisa],[1,Ijustlovea])SAY(&ME.PHRASE1,p03,&ME.ICECREAM)Ask_icecreamSETPHRASE1([1,I'11havea],[1,canIhavea])SAY(&ME.PHRASE1,p03,&ME.ICECREAM,p03,please)Icecream_get_nextSELECTNOTMEBRANCHNormal_switchInsectsSETG_BEEN_TO_INSECTS([1,done])CHOOSE([3,Prev_insect],[3,Self_insect],[3,Next_insect])Prev_insectTESTEQ&ME&PREVCH00SE_F([1,Self_insect],[1,Next_insect])TESTEQ&PREV.INSECT$UNDEFCH00SE_F([1,Self_insect],[1,Next_insect])SELECTPREVContinue_prev_insectSETINSECT([1,&PREV.INSECT])SETPHRASE1([1,ooh],[1,ohmygod],[1,ugh],[1,-])TESTEQ&PREV.INSECTspidersCH00SE_F([1,Spiders_not_insects],[3,Prev_spider_talk])TESTEQ&PRIV.INSECTscorpionsCH00SE_F([1,Prev_scorpion_talk])SETPHRASE1([1,ooh],[1,ohmygod],[1,-])TESTEQ&PREV.INSECTcentipedesCH00SE_F([1,Prev_centipede_talk])TESTEQ&PREV.INSECTmillipedesCH00SE_F([1,Prev_millipede_talk])TESTEQ&PREV.INSECTbeetlesCH00SE_F([1,Prev_beetle_talk])TESTEQ&PREV.INSECTantsCH00SE_F([1,Prev_ant_talk])TESTEQ&PREV.INSECTbeesCH00SE_F([1,Prev_bee_talk])Spiders_not_insectsSAY(funnyhow,p03,&PREV.INSECT,p03,areintheinsecthouse,p03,seeingas,p03,&PREV.INSECT,p03,aren'tinsects)BRANCHNormal_switchPrev_spider_talkCHOOSE([1,Prev_spider_talk_l],[1,Prev_spider_talk_2])Prev_spider_talk_lSETPHRASE2([1,lookatthat),[1,canyouseethat],[1,whata])SETPHRASE3([1,bigtarantula],[1,hairyuglyspider])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3)BRAMCHPrev_spider_talk一endPrev_spider_talk_2SETPHRASE2([1,spidersarecreepy],[1,tarantulaseatcrickets],[1,tarantulasdon'tseemtodoverymuchdothey])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHPrev_spider_talk一endPrev_spider_talk_endCHOOSE([1,Prev_spider_talk_switch],[1,$L_NEXT])SAY(lookat,p03,allthosecricketsinwiththetarantula)Prev_spider_talk_switchBRANCHNormal_switchPrev一scorpion_talkCHOOSE([1,Prev_scorpion一talk_l],[1,Prev_scorpion_talk_2])Prev一scorpion_talk_lSETPHRASE2([1,lookatthat],[1,canyouseethat],[1,whata])SETPHRASE3([1,bigblack],[1,scaryyellow])SAY(&ME.PHRSEl,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,scorpion)BRANCHNormal_switchPrev一scorpion_talk_2SETPHRASE2([1,Scorpionshaveanastypoigonousstingintheirtails],[1,Idon'tlikescorpions])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHNormal_switchPrev_centipede_talkCHOOSE([1,Prev_centipede_talk_l],[1,Prev_centipede_talk_2])Prev_centipede_talk_lSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,itcanmoveveryquickly],[1,—])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,centipede,p03,&ME,PHRASE3)BRANCHNormal_switchPrev_centipede_talk_2SETPHRASE2([1,hasanyonecountedthecentipede'slegsdoesn'tlooklike100tome])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHNormal_switchPrev_mi11ipede_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,lookatallitslegs],[1,millipedesareboring],[1,-])SAY(&ME.PHPASE1,p03,&ME.PHRASE2,p03,millipede,p03,&ME.PHRASE3])BRANCHNormal_switchPrev_beetle_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,biggreen],[1,bigblackstag],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,beetle)BRANCHNormal_switchPrev_ant_talkCHOOSE([1,Prev_ant_talk一1],[1,Prev_ant_talk_2])Prev_ant_talk_lSAY(&ME.PHRASEl,p03,lookat,p03,allthose,p03,ants,p03,inthatantnest)BRANCHNormal_switchPrev_ant_talk_2SAY(&ME.PHRASE1,p03,ants,p03,areverybusy,p03,theyarealwaysonthemove)BRANCHNormal_switchPrev_bee_talkCHOOSE([1,Prev_bee_talk_l],[1,Prev一bee_talk_2])Prev_bee_talk_lSAY(&ME.PHRASE1,p03,canyousee,p03,allthehoneycombs,p03,inthebeehive)BRANCHNormal_switchPrev_bee_talk_2SAY(&ME.PHRASE1,p03,canyousee,p03,thequeen,p03,sheismuchbiggerthantheworkers)BRANCHNormal_switchSelf_insectTESTNE&ME.INSECT$UNDEFCH00SE_F([4,Continue_self_insect],[3,Select_self_insect])Select_self_insectSETTEMP([1,spiders],[1,scorpions],[1,centipedes],[1,millipedes],[1,beetles],[1,ants],[1,bees])TESTEQ&ME.TEMP&ME.INSECTBRANCH_FSelect_self_insectSETINSECT([1,&ME.TEMP])SETPHRASE1([1,wow],[1,Isay],[1,cor],[1,comeand])SETPHRASE2([1,lookatthose])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.INSECT)CHOOSE([2,Self_insect_notme],[1,Self_insect_next])Self_insect_notmeSELECTNOTMEBRANCHNormal_switchSelf_insect_nextSELECTNEXTBRANCHNormal_switchContinue_self_insectSELECTNOTMECHOOSE([1,Like_self_insect],[1,Dislike_self_insect])Like_self_insectTESTEQ&ME.HATE&ME.INSECTBRANCH_FLike_self_insect_endSETLIKE([1,&ME.INSECT])SETPHRASE1([1,I])SETPHRASE2([1,like],[1,rsallylike])SETPHRASE3([1,theyarefascinating],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.INSECT,p03,&ME.PHRASE3)Like_self_insect_endBRANCHNormal_switchDislike_self_insectTESTEQ&ME.LIKE&ME.INSECTBRANCH_FDislike_self_insect_endSETHATE([1,&ME,INSECT])SETPHRASE1([1,I])SETPHRASE2([1,don'tlike],[1,hate])SETPHRASE3([1,they'recreepycrawly],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.INSECT,p03,&ME.PHRASE3)Dislike_self_insect_endBRANCHNormal_switchNext_insectSELECTNOTMETESTNE&NEXT.INSECT$UNDEFBRANCH_FContinue_next_insectBRANCHTell_next_insectContinue_next_insectCHOOSE([3,Tell_next_insect],[4,Respond_next_insect])Respond_next_insectSETINSECT([1,&NEXT.INSECT])TESTEQ&NEXT.INSECTspidersCH00SE_F([3,Next_spider—talk])TESTEQ&NEXT.INSECTscorpionsCH00SE_F([1,Next_scorpion_talk])TESTEQ&NEXT.INSECTcentipedesCH00SE_F([1,Next_centipede_talk])TESTEQ&NEXT.INSECTmillipedesCH00SE_F([1,Next_millipede_talk])TESTEQ&NEXT.INSECTbeetlesCH00SE_F([1,Next_beetle—talk])TESTEQ&NEXT.INSECTantsCH00SE_F([1,Next_ant_talk])TESTEQ&NEXT.INSECTbeesCH00SE_F([1,Next_bee_talk])Tell_next_insectSETINSECT([1,spiders],[1,scorpions],[1,centipedes],[1,millipedes],[1,beetles],[1,ants],[1,bees])TESTEQ&ME.INSECT&NET.INSECTBRANCH_FTell_next_insectSETPHRASE2([1,lookatthose],[1,canyouseethose])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.INSECT)BRANCHNormal_switchNext_spider_talkSETPHRASE2([1,canyouseethat],[1,lookatthat])SETPHRASE3([1,bigblack],[1,hairyugly])SETPHRASE4([1,spinningaweb],[1,eatingacricket],[1,moltingitsskin],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,spider,p03,&ME.PHRASE4)BRANCHNormal_switchNext_scorpion_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,bigblack],[1,scaryyellow])SETPHRASE4([1,fighting],[1,runningaround],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,scorpion,p03,&ME,PHRASE4)BRANCHNormal_switchNext_centipede_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,itcanmoveveryquickly],[1,howmanyIagedoeaithave],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,centipede,p03,&ME.PHRASE3)BRANCHNormal_switchNext_millipede_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,lookatallitslegs],[1,millipedesareboring],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,millipede,p03,&ME.PHRASE3)BRANCHNormal_switchNext_beetle_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,biggreen],[1,bigblackstag])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,beetle)BRANCHNormal_switchNext_ant_talkCHOOSE([1,Next_ant_talk一1],[1,Next_ant_talk_2])Next_ant_talk_lSAY(&NEXT.NAME,p03,lookat,p03,allthose,p03,ants,p03,inthatantnest)BRANCHNormal_switch[1013]Next_ant_talk_2SAY(&NEXT.NAME,p03,ants,p03,areverybusy,p03,thayarealwaysonthemove)BRANCHNormal_switchNext_bee_talkCHOOSE([1,Next_bee_talk_l],[1,Next_bee_talk_2])Next_bee_talk_lSAY(&NEXT.NAME,p03,canyousee,p03,allthehoneycombs,p03,inthebeehive)BRANCHNormal_switchNext_bee_talk_2SAY(&NEXT.NAME,p03,canyousee,p03,thequeen,p03,sheismuchbiggerthanthewotkers)BRANCHNormal_switchReptilesSETG_BEEN_T0_REPTILES([1,done])CHOOSE([3,Prev_reptile],[3,Self_reptile],[3,Next_reptile])Prev_reptileTESTEQ&ME&PREVCH00SE_F([1,Self_reptile],[1,Next_ri5ptile])TESTEQ&PREV.REPTILE$UNDEFCH00SE_F([1,Self_reptile],[1,Next_ri5ptile])SELECTPREVContinue_prev_reptilesSETREPTILE([1,&PREV,REPTILE])SETPHRASE1([1,ooh],[1,cor],[1,-])TESTEQ&PREV.REPTILEsnakesCH00SE_F([5,Prev_snake_talk])TESTEQ&PREV.REPTILElizardsCH00SE_F([1,Prev_lizard_talk])TESTEQ&PREV.REPTILEcrocodilesCH00SE_F([1,Prev_crocodile_talk])Prev_snake_talkCHOOSE([1,Prev_snake_talk_l],[1,Prev_snake_talk_2])Prev_snake_talk_lSAY(&ME.PHRASE1,p03,lookatthat,p03,bigpython)BRANCHNormal_switchPrev_snake_talk_2[1049]SAY(&ME.PHRASEl,p03,lookatthat,p03,cobra,p03,cobrasareverypoisonous)BRANCHNormal_switchPrev_lizard_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,iguana],[1,littlegreengeko])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3)BRANCHNormal_switchPrev_crocodile_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,huge],[1,biggreen],[1,enormous],[1,—])SETPHPASE4([l,seeitsteeth],[1,itsgotbulgyeyes],[l,itsgotbignostrils])SAY(&ME.PHRASE1,ρ03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,crocodile,p03,&ME.PHRASE4)BRANCHNormal_switchSelf_reptileTESTNE&ME.REPTILE$UNDEFCH00SE_F([4,Continue_self_reptile],[3,Select_self_reptile])Select—self_r印tileSETTEMP([1,snakes],[1,lizards],[1,crocodiles])TESTEQ&ME.TEMP&ME.RBPTILEBRANCH_FSelect_self_reptileSETREPTILE([1,&ME.TEMP])SETPHRASE1([1,wow],[1,cor],[1,Isay],[1,comeand])SETPHRASE2([1,lookatthose])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03.&ME.REPTILE)CHOOSE([2,Self_reptile_notme],[1,Self_reptile_next])Self_reptile_notmeSELECTNOTMEBRANCHNormal_switchSelf_reptile_nextSELECTNEXTBRANCHNormal_switchContinue_self_reptileSELECTNOTMECHOOSE([1,Like_self_reptile],[1,Dislike_self_reptile])Like_self一reptileTESTEQ&ME.HATE&ME.REPTILE[1085]BRANCH_FLike_self_reptile_endSETLIKE([1,&ME.REPTILE])SETPHRASE1([1,I])SETPHRASE2([1,like],[1,reallylike])SETPHRASE3([1,they'reawsome],[1,theyarefascinating])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.REPTILE,p03,&ME.PHRASE3)Like_self_reptile_endBRANCHNormal_switchDislike_self_reptileTESTEQ&ME.LIKE&ME.REPTILEBRANCH_FDislike_self_ri5ptile_endSETHATE([1,&ME.REPTILE])SETPHRASE1([1,I])SETPHRASE2([1,don'tlike],[1,hate])SETPHRASE3([1,they'rewriggly])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.REPTILE,p03,&ME.PHRASE3)Dislike_self_reptile_endBRANCHNormal_switchNext_reptileSELECTNOTMETESTNE&NEXT.REPTILE$UNDEFBRANCH一FContinue—next一reptilesBRANCHTell_next_reptileContinue_next_reptilesCHOOSE([3,Tell_next_reptile],[4,Respond_next_reptile])Respond_next_reptileSETREPTILE([1,&NEXT.REPTILE])TESTEQ&NEXT.REPTILEsnakesCHOOSE_F([1,Next_snake_talk])TESTEQ&MEXT.REPTILElizardsCH00SE_F([1,Next_lizard_alk])TESTEQ&NEXT.REPTILEcrocodilesCH00SE_F([1,Next_croeodile_talk])Tell_next_reptileSETREPTILE([1,snakes],[1,lizards],[1,crocodiles])TESTEQ&ME.REPTILE&NEXT.REFTILEBRANCH_FTell_next_reptile.[1122]SETPHRASE2([1,lookatthose],[1,canyouseethose])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.REPTILE)BRANCHNormal_switchNext_snake_talkCHOOSE([1,Next_snake_talk_l],[1,Next_snake_talk_2])Next_snake_talk_lSAY(&NEXT.NAME,p03,lookatthat,p03,bigpython)BRANCHNormal_switchNext_snake_talk_2SAY(&NEXT.NAME,p03,lookatthat,p03,cobra,p03,cobrasareverypoisonous)BRANCHNormal_switchNext_lizard_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,iguana],[1,littlegreengeko])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3)BRANCHNormal_switchNext_crocodile_talkSETPHRASE1([1,lookatthat],[1,canyouseethat])SETPHRASE2([1,huga],[1,biggreen],[1,enormous],[1,-])SETPHRASE3([l,seeitsteeth],[1,itsgotbulgyeyes],[l,itsgotbignostrils])SAY(&NEXT.NAME,p03,&ME.PHRASE1,p03,&ME.PHRASE2,p03,crocodile,p03,&ME.PHRASE3)BRANCHNormal_switchPrimatesSETG_BEEN_TO_PRIMATES([1,done])CHOOSE([3,Prev_primate],[3,Self_primate],[3,Next_primate])Prev_primateTESTEQ&ME&PREVCH00SE_F([1,Self_primate],[1,Next_primate])TESTEQ&PREV.PRIMATE$UNDEFCH00SE_F([1,Self_primate],[1,Next_primate])SELECTPREVContinue_prev_primatesSETPRIMATE([1,&PREV.PRIMATE])SETPHRASE1([1,ooh],[1,cor],[1,-])TESTEQ&PREV,PRIMATEgorillasCH00SE_F([1,Prev_gorilla_talk])[1158]TESTEQ&PREV.PRIMATEchimpanzeesCH00SE_F([1,Prev_chimp_talk])TESTEQ&PHEV.PRIMATEmonkeysCH00SE_F([1,Prev_monkey一talk])Prev_gorilla_talkSETPHRASE2([l,canyouseethat],[l,seethat],[1,lookatthat])SETPHRASE3([1,big],[1,fat],[1,hairy])SETPHRASE4([1,eatingabanana],[1,scratchingitself],[1,withthebaby],[1,_])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,gorilla,p03,&ME.PHRASE4)BRANCHNormal_switchPrev_chimp_talkSETPHRASE2([l,canyouseethat],[l,seethat],[1,lookatthat])SETPHRASE3([1,pokingastickintothathole],[1,eatingabanana],[1,groomingtheotherone],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,chimp,p03,&ME.PHRASE3)BRANCHNormal_switchPrev_monkey_talkSETPHRASE2([1,lookatall],[1,canyouseeall])SETPHRASE3([1,climbinginthattree],[1,jumpingallovertheplace],[1,fighting],[1,playing],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,those,p03,monkeys,p03,&ME.PHRASE3)BRANCHNormal_switchSelf_primateTESTNE&ME.PRIMATE$UNDEFCH00SE_F([4,Continue_self_primate],[3,Select_self_primate])Select_self_primateSETTEMP([1,gorillas],[1,chimpanzees],[1,monkeys])TESTEQ&ME.TEMP&ME.PRIMATEBRANCH_FSelect_self_primateSETPRIMATE([1,&ME.TEMP])SETPHRASE1([1,wow],[1,cor],[1,Isay],[1,comeand])SETPHRASE2([1,lookatthose])SAY(&ME.PHRASE1_ρ03,&ME.PHRASR2,p03,&ME.PRIMATE)CHOOSE([2,Self_primate_notme],[1,Self_primate_next])Self_primate_notme[1193]SELECTNOTMEBRANCHNormal_switchSelf_primate_nextSELECTNEXTBRANCHNormal_switchContinue_self_primateSELECTNOTMESETPHRASE1([1,I])SETPHRASE2([1,like],[1,reallylike])SETPHRASE3([1,they'refunny],[1,_])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME,PRIMATE,p03,&ME.PHRASE3)BRANCHNormal_switchNext_primateSELECTNOTNETESTNE&NEXT.PRIMATE$UDEEFBRANCH_FContinue_next_primatesBRANCETell_next_primateContinue_next_primatesCHOOSE([3,Tell_next_primate],[4,Respond_next_primate])Respond_next_primateSETPRIMATE([1,&NEXT.PRIMATE])TESTEQ&NEXT.PRIMATEgorillasCH00SE_F([1,Next_gorilla_talk])TESTEQ&NEXT.PUMATEchimpanzeesCH00SE_F([1,Next_chimp_talk])TESTEQ&NEXT.PRIMATEmonkeysCH00SE_F([1,Next_monkey一talk])Tell_next_primateSETPRIMATE([1,gorillas],[1,chimpanzees],[1,monkeys])TESTEQ&ME.PRIMATE&NEXT.PRIMATEBRANCH_FTell_next_primateSETPHRASE2([1,lookatthose],[1,canyouseethose])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PRIMATE)BRANCHNormal_switchNext_gorilla_talkSETPHRASE1([l,canyouseethat],[l,seethat],[1,lookatthat])SETPHRASE2([1,big],[1,hairy])SETPHRASE3([1,eatingabanana],[1,scratchingitself],[1,withthebabygorilla],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE1,p03,&ME.PHRASE2,p03,gorilla,p03,&ME.PHRASE3)BRANCHNormal_switchNext_chimp_talkSETPHRASE1([l,canyouseethat],[1,seethat],[1,lookatthat])SETPHRASE2([1,chimp],[1,chimpanzee])SETPHRASE3([1,pokingastickintothathole],[1,eatingabanana],[1,groomingtheotherone],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE1,p03,&ME,PHRASE2,p03,&ME.PHRRAE3)BRANCHNormal_switchNext_monkey_talkSETPHRASE2([1,seeall],[1,lookatall])SETPHRASE3([1,climbinginthattree],[1,jumpingallovertheplace],[1,fighting],[1,playing],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,thosemonkeys,p03,&ME.PHRASE3)BRANCHNormal_switchSafariSETG_BEEN_TO_SAFARI([1,done])CHOOSE([3,Prev_safari],[3,Self_safari],[3,Next_safari])Prev_safariTESTEQ&ME&PREVCH00SE_F([1,Self_safari],[1,Next_safari])TESTEQ&PREV.SAFARI$UNDEFCH00SE_F([1,Self_safari],[1,Next_safari])SELECTPREVContinue_prev_safariSETSAFARI([1,&PREV.SAFARI])SETPHRASE1([1,ooh],[1,cor],[1,-])TESTEQ&PREV.SAFARIlionsCH00SE_F([5,Prev_lion_talk],[5,Prev_lion_talk_l)TESTEQ&PREV.SAFARIzebrasCH00SE_F([1,Prev_zebra_talk])TESTEQ&PREV.SAFARIgiraffesCH00SE_F([1,Prev_giraffe_talk])[1265]TESTEQ&PREV.SAFARIrhinosCH00SE_F([1,Prev_Rhino_talk])TESTEQ&PREV.SAFARIcheetahsCHOOSE_F([l,Prev_cheetah_talk])Prev_lion_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,withthebigmane],]1,-])SAY(&ME.PHRASE1,p03,&ME,PHRASE2,p03,lion,p03,&ME.PHRASE3)BRANCHNormal_switchPrev_lion_talk_lSETPHRASE2([1,lookatthose],[1,canyouseethose])SETPHRASE3([1,playinghowcute],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,lion,p03,cubs,p03,&ME.PHRASE3)BRANCHNormal_switchPrev_zetra_talkSETPHRASE29([1,lookatthose],[1,canyouseethose])SETPHRASE3([1,theylooklikestripydonkeys],[2,-])SAY(&ME.PHRASE1,p03,&ME.PHEASE2,p03,zebras,p03,&ME.PHRASE3)BRANCHNormal_switchPrev_giraffe_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,_],[1,baby])SETPHRASE4([1,whatalongneck],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,giraffe,p03,&ME.PHRASE4)BRANCHNormal_switchPrev_rhino_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,_],[1,baby])SETPHRASE4([1,lookatitshorn],[2,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,rhino,p03,&ME.PHRASE4)BRANCHNormal_switchPrev_cheetah_talkSETPHRASE2([1,lookatthat],[1,canyouseethay])SETPHRASE3([l,seeitsspots],[1,theycanrunveryfast],[2,-])SAY(&ME.PHRASE1,p03,&ME.PHRSE2,p03,cheetah,p03,&ME.PHRASE3)BRANCHNormal_switch[1301]Self_safariTESTNE&ME.SAFARI$UNDEFCH00SE_F([4,Continue_self_safari],[3,Select_self_safari])Select一self_safariSETTEMP([1,lions],[1,zebras],[1,giraffes],[1,rhinos],[1,cheatahs])TESTEQ&ME.TEMP&ME.SAFARIBRANCH_FSelect一self_safariSETSAFARI([1,&ME.TRMP])SETPHRASE1([1,wow],[1,cor],[1,Isay],[1,comeand])SETPHRASE2([1,lookatthose])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.SAFARI)CHOOSE([2,Self_safari_notme],[1,Self_safari_next])Self_safari_notmeSELECTNOTMEBRANCHNormal_switchSelf_safari_nextSELECTNEXTBRANCHNormal_switchContinue_self_safariSELECTNOTMESETPHRASE1([1,I])SETPHRASE2([1,like],[1,reellylike])SETPHRASE3([1,they'reawsome],[1,theyarefascinating])SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.SAFARI,p03,&ME.PHRASE3)BRANCHNormal_switchNext_safariSELECTNOTMETESTNE&NEXT.SAFARI$UDEFBRANCH_FContinue_next_safariBRANCHTell_next_safariContinue—next—safariCHOOSE([3,Tell_next_safari],[4,Respond_next_safari])Respond_next_aafariSETSAFARI([1,&NEXT.SAFARI])TESTEQ&NEXT.SAFARIlionsCH00SE_F([1,Next_lion_talk],[1,Next_lion_talk_l])TESTEQ&NEXT.SAFARIzebras[1338]CH00SE_F([1,Next_zebra_talk])TESTEQ&NEXT.SAFARIgiraffesCH00SE_F([1,Next_giraffe_talk])TESTEQ&NEXT.SAFARIrhinosCH00SE_F([1,Next_rhino_talk])TESTEQ&NEXT.SAFARIcheetahsCH00SE_F([1,Next_cheetah_talk])Tell_next_safariSETSAFARI([1,lions],[1,zebras],[1,giraffes],[1,rhinos],[1,cheetahs])TESTEQ&ME.SAFARI&NEXT.SAFARIBRANCH_FTell_next_safariSETPHRASE2([1,lookatthose],[1,canyouseethose])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.SAFARI)BRANCHNormal_switchNext_lion_talkSETPHRASE2([1,lookattbat],[1,canyouseethat])SETPHRASE3([l,withthebigmane],[1,listentoitroar],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,lion,p03,&ME.PHRASE3)BRANCHNormal_switchNext_lion_talk_lSETPHRASE2([1,lookatthose],[1,canyouseethose])SETPHRASE3([1,playinghowcute],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,lion,p03,cubs,p03,&ME.PHRASE3)BRANCHNormal_switchNext_zebra_talkSETPHRASE2([1,lookatthose],[1,canyouseethose])SETPHRASE3([1,theylooklikestripydonkeys],[1,一])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,zebras,p03,&ME.RHRASE3)BRANCHNormal_switchNext_giraffe_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,_],[1,baby])SETPHRASE4([1,whatalongneck],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,giraffe,p03,&ME.PHRASE4)[1372]BRANCHNormal_switchNext_rhino_talk[1374]SETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([1,_],[1,baby])SETPHRASE4([1,lookatitshorn],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,rhino,p03,&ME.PHRASE4)BRANCHNormal_switchNext_cheetah_talkSETPHRASE2([1,lookatthat],[1,canyouseethat])SETPHRASE3([l,seeitsspots],[1,theycanrunveryfast],[1,-])SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,cheetah,p03,&ME.PHRASE3)BRANCHNormal_switch宠物主题//PETMULTI-WAYCONVERSATIONSDEFINEIDDEFINEG_THEMEDEFINEPETDEFINEPET_NAMEDEFINECOLOURDEFINEBREEDDEFINEPREFERENCEDEFINESELF_D0NEDEFINEPHRASE1DEFINEPHRASE2DEFINEPHRASE3StartSELECTNOTMEBRANCH_FOnly_one_dollTESTEQ&PREV$UNDEF//Firstspeaker?CH00SE_F([1,Say_about_self],[1,Ask_next_spkr])TESTEQ&PREV.SELF—DONE$UNDEFBRANCH_FMain_loopGet_nextSELECTNEXTTESTEQ&NEXT&PREVBRANCH_FGet_nextTESTEQ&NEXT.SELF_D0NE$UNDEFBRANCH_FMain_loopTESTEQ&ME.SELF_D0NE$UNDEFBRANCH_FMain_loop[1412]CH00SE([3,Main_loop],[1,Finish])FinishSAY(talkingaboutpetshasbeenfun,p50)SAY(weshoulddoitagainsoon)SWITCHFINISHOnly_one_dollSAY(ohdearI'mallalone)SWITCHFINISHNormal_switchTESTEQ&ME.PET$UNDEFBRANCH_FDo_switchTESTEQ&ME.PET_NAME$UNDEFBRANCH_FDo_switchTESTEQ&ME.COLOUR$UNDEFBRANCH_FDo_switchTESTNE&ME.PETpuppySET_FSELF_D0NE([1,done])TESTNE&ME.BREED$UNDEFSET_FSELF_D0NE([1,done])Do_switchSAY(p50)SWITCHSPEAKERStartMain_loopCHOOSE([20,Respond_prev_spkr],[5,Say_about_self],[15,Ask_next_spkr])Respond_prev_spkrTESTEQ&ME&PREVBRANCH_FStartTESTEQ&PREV.SELF_D0NEdoneCH00SE_F([3,Start],[1,Compare_prev])TESTEQ&PREV.PET$UNDEFBRANCH_FAsk一about_petCHOOSE([3,Prev_pet_questions],[2,Compare_prev])Prev_pet_queationsCHOOSE([1,Ask_about_name],[1,Ask_about_colour],[1,Ask_about_breed])Ask_about_nameTESTNE&PREV.PET_NAME$UNDEFBRANCH_FPrev_pet_questions[1449]SETPHRASE1([1,fantastic],[1,wow],[1,cor],[1,howwonderful],[1,-])CHOOSE([1,Ask_about_name_l],[1,Ask_about_name_2],[1,Ask_about_name_3])Ask_about_name_lSAY(&ME.PHRASE1,p03,whatdoyoucallyour,p03,&PREV.PET)BRANCHAsk_about_name_switchAsk_about_name_2SAY(&ME.PHRASE1,p03,whatsyour,p03,&PREV,PET,s,p03,name)BRANCHAsk_about_name_switchAsk_about_name_3SAY(&ME.PHRASE1,p03,hasyour,p03,&PREV.PET,p03,gotaname)BRANCHAsk_about_name_switchAsk_about_name_switchSELECTPREVSAY(p50)SWITCHSPEAKERReply_to_nameReply一to_nameTESTNE&ME.PET_NAME$UNDEFBRANCH_FSay_nameTESTEQ&ME.PETpuppySET_FPET_NAME([1,boris],[1,fred],[1,scruffy],[1,rex])BRANCH_FSay_nameTESTEQ&ME.PETkittenSET_FPET_NAME([1,tinks],[1,bo],[1,felix],[1,tigger])BRANCH_FSay_nameTESTEQ&ME.PEThamsterSET_FPET_NAME([1,roger],[1,hammy],[1,bart])BRANCH_FSay_nameSETPET_NAME([1,peter],[1,bunnikins],[1,roger],[1,bugsy])Say_nameSETPHRASE1([1,-])TESTEQ&ME&PREVBRANCH_FSay_name_doTESTEQ&ME.PET_NAME&PREV.PET_NAMESET_FPHRASE1([1,too],[1,aswell],[1,also])Say_name_doSAY(my,p03,&ME.PET,p03,iscalled,p03,&ME.PET_NAME,p03,&ME.PHRASE1)[1485]SELECTNEXTBRANCHNormal_switchAsk_about_colourTESTNE&PREV.COLOUR$UNDEFBRANCH_FPrev_pet_questionsSETPHRASE1([1,wow],[1,-])[1491]SAY(&ME.PHRASE1,p03,whatcolourisyour,p03,&PREV.PET)SELECTPREVSAY(p50)SWITCHSPEAKERReply_to_colourReply_to_colourTESTNE&ME.COLOUR$UNDEFBRANCH_FSay一colourTESTEQ&ME.PETpuppySET_FCOLOUR([1,blackandwhite],[1,allblack],[1,brown])BRANCH_FSay—colourTESTEQ&ME.PETkittenSET_FCOLOUR([1,ginger],[1,blackandwhite],[1,black])BRANCH_FSay—colourTESTEQ&ME.PEThamsterSET_FCOLOUR([1,allblack],[1,brown],[1,allwhite])BRANCH_FSay—colourSETCOLOUR([1,blackandwhite],[1,brown],[1,allwhite],[1,black])Say_colourSAY(my,p03,&ME.PET,p03,is,p03,&ME.COLOUR)SELECTNEXTBRANCHNormal_switchAsk_about_breed:TESTNE&PREV.PETpuppyBRANCH_FPrev_pet_questionsTESTNE&PREV.BREED$UNDEFBRANCH_FPrev_pet_questionsSETPHRASE1([1,wow],[1,-])SAY(&ME.PHRASE1,p03,whattypeofdogisyour,p03,&PREV.PET)SELECTPREVSAY(P50)SWITCHSPEAKERR印ly_to—breedReply_to_breed:[1523]TESTNE&ME.PETpuppyBRANCH_FSay_breed_switchTESTNE&ME.BREED$UNDEF[1526]BRANCH_FSay_breedSETBREED([1,spaniel],[1,Labrador],[1,terrier],[1,retriever],[1,scottie],[1,collie])Say_breed:SAY(my,p03,&ME.PET,p03,isa,p03,&ME.BREED)Say_breed_switchSELECTNEXTBRANCHNormal_switchAsk_about_petTESTEQ&PREV.PREFERENCE$UNDEFBRANCH_FNo_preferenceSAY(doyouhavea,p03,&PREV.PREFERENCE)BRANCHPet_switchNo_preferenceSAY(doyouhavea,p03,pet)Pet_switchSELECTPREVSAY(p50)SWITCHSPEAKERReply_to_petReply_to_petSETPET([1,puppy],[1,kitten],[1,hamster],[1,bunny])SETPHRASE1([1,-])TESTEQ&ME.PET&PREV.PETSET_FPHRASE1([1,too],[1,aswell],[1,aleo])TESTEQ&ME.PREFERENCE$UNDEFBRANCH_FReply_no一preferenceTESTNE&ME.PREFERENCE&ME.PETBRANCH_FReply_different_petReply_no_preferenceSAY(yes,p03,wehavea,p03,&ME.PET,p03,&ME.PHRASE1)BRANCHReply_pet_switchReply_different_petSAY(No,p03,wehavea,p03,&ME.PET,p03,&ME.PHRASE1)Reply_pet_switchSELECTNEXT[1561]BRANCHNormal_switchCompare_prevTESTEQ&ME.PET$UNDEFBRANCH_FRespond_prev_epkrTESTEQ&ME.PET&PREV.PETCHOOSE_F([1,Prev_same_pet_l],[1,Prev_same_pet_2],[1,Prev_same_friends],[1,Prev_same_play])CHOOSE([1,Prev_friends],[1,Prev_play],[2,Prev_diff_pet])Prev_same_pet_lSAY(thetsgreat,p03,webothhave,p03,&ME.PET,s)BRANCHCompare_switchPrev_same_pet_2SAY(webothhave,p03,&ME.PET,s,p03,howwonderful)BRANCHComPare_switchPrev_friendsSAY(Ihode,p03,my,p03,&ME.PET,p03,andyour,p03,&PREV.PET,p03,willbefriends)BRANCHPrev_friends_switchPrev_same_friendsSAY(Ihope,p03,our,p03,&ME.PET,s,p03,willbefriends)BRANCHPrev_friends_switchPrev_friends_switchSELECTPREVSAY(p50)SWITCHSPEAKERPrev_friende_replyPrev_frierds_replySAY(thatwouldbegareat)CHOOSE([1,Prev_friends_reply_l],[1,Prev_friends_reply_2])Prev_friends_reply_lSETPHRASE1([1,Thentheycouldplaytogether],[1,Itwouldbefuntoseethemtogether])SAY(&ME.PHRASE1)BRANCHCompare_switchPrev_friends_reply_2SETPHRASE1([1,youshouldbringyour],[1,onedaybringyour])SETPHRASE2([1,tomyhouse],[1,overtomyplace])SAY(&ME.PHRASE1,p03,&PREV.PET,p03,&ME.PHRASE2)[1597]BRANCHCompare_switchPrev_playSAY(doyouthinkyour,p03,&PREV.PET,p03,andmy,p03,&ME.PET,p03,willplaytogether)BRANCHPrev_play_switchPrev_same_playSAY(doyouthinkour,p03,&PREV.PET,s,p03,willplaytogether)[1604]BRANCHPrev_play_switchPrev_play_switchSELECTPREVSAY(p50)SWITCHSPEAKERPrevj3lay_replyPrev_play_replySETPHRASE1([1,Ihopeso],[1,Iwouldlikethat])SETPHRASE2([1,Theycanbefriends],[1,Thatwouldbefun],[1,wemustbringthemtogether],[1,-])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHCompare_switchPrev_diff_petTESTEQ&PREV.PETkittenBRANCH_FPrev_predatorTESTEQ&PREV.PETpuppyBRANCH_FPrev_predatorTESTEQ&PREV.PEThamsterBRANCH_FPrev_preyTESTEQ&PREV.PETbunnyBRANCH_FPrev_preyBRANCHCompare_prevPrev_predatorTESTEQ&ME.PEThamsterBRANCH_FPrev_predator_statementTESTNE&ME.PETbunnyBRANCH_FPrev_predator_statementBRANCHCompare_prevPrev_predator_statementSAY(doyouthinkyour,p03,&PREV.PET,p03,willeatmy,p03,&ME.PET)[1633]SELECTPREVSAY(p50)SWITCHSPEAKERPrev_predator_replyPrev_predator_replySETPHRASE1([1,Ihopenot],[1,Iwouldn'tlikethat])SETPHRASE2([l,Thatwouldbeterrible],[1,perhapsweshouldkeepthemapart],[1,_])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHCompare_switchPrev_preyTESTEQ&ME.PETkittenBRANCH_FPrev_prey_statementTESTEQ&ME.PETpuppyBRANCH_FPrev_prey_statementBRANCHCompare_prevPrev_prey_statementSAY(Ihopemy,p03,&ME.PET,p03,won'teatyour,p03,&PREV.PET)SELECTPREVSAY(p50)SWITCHSPEAKERPrev_prey_i^plyPrev_prey_replySETPHRASE1([1,Ihopenot],[1,ohdear])SETPHRASE2([1,Thatwouldbeterrible],[1,perhapsweshouldkeepchemapart])SAY(&ME.PHRASE1,p03,&ME.PHRASE2)BRANCHCompare_switchCompare_switchSELECTNEXTBRANCHNormal_switchSay_about_selfTESTEQ&ME.SELF_D0NEdoneCH00SE_F([3,Start],[1,Cute_response],[1,Love_response],[1,Preference—response])TESTNE&ME&PREVCH00SE_F([2,Cute_response],[2,Love_response],[2,Preference_response],[3,My_pet])[1668]CHOOSE([2,Preference_response],[3,My—pet])CUte_responseTESTEQ&PREV.PET$UNDEFBRANCH_FSay_about_selfSAY(&PREV.PET,s,p03,aresocute)BRANCHCute_switchCute_SwitchSELECTNEXTTESTEQ&NEXT&MECH00SE_F([1,Continue_self],[2,Cute_switch])BRANCHNormal_switchLove_responseTESTEQ&PREV.PET$UNDEFBRANCH_FSay_about_selfSETPHRASE1([1,ooh],[1,_])SAY(&ME.PHRASE1,p03,Ilove,p03,&PREV.PET,s)BRANCHLove_switchLove_switchSELECTNEXTTESTEQ&NEXT&MECH00SE_F([1,Continue—self],[2,Love_switch])BRANCHNormal_switchPreference_responseTESTEQ&ME.PET$UNDEFBRANCH_FState_preferenceBRANCHPreference—switchStabe_preferenceSETPHRASE1([1,ooh],[1,_])Set_preferenceTESTEQ&ME.PREFERENCE$UNDEFSET_FPREFERENCE([1,puppy],[1,kitten],[1,hamster],(1,bunny])TESTEQ&PREV.PET$UNDEFCH00SE_F([1,Preference_response_l],[1,Preference_response_2])TESTEQ&PREV.PET&ME.PREFERENCECH00SE_F([1,Preference_response_3],[1,Preference_response_4])SAY(Iprefer,p03,&ME.PREFERENCE,s)BRANCHPreference—switchPreference_response_lSAY(&ME.PHRASE1,p03,Ithink,p03,&ME.PREFERENCE,s,p03,aresocute)BRANCHPreference_switchPreference_response_2SAY(&ME.PHRASE1,p03,Ilove,p03,&ME.PREFERENCE,s)BRANCHPreference_switchPreference_response_3SAY(&ME.PHRASE1,p03,&PREV.PET,s,p03,aresocute)[1713]BRANCHPreference_switchPreference_response_4SAY(&ME.PHRASE1,p03,Ilove,p03,&PREV.PET,s)BRANCHPreference_switchPreference_switchSELECTNEXTTESTEQ&NEXT&MECH00SE_F([1,Continue—self],[2,Preference—switch])BRANCHNormal—switchMy_petTESTEQ&ME.PET$UNDEFBRANCH_FDeclare_petCHOOSE([1,Declare_name],[1,Declare_colour],[1,Declare_breed])Declare_petSETPET([1,puppy],[1,kitten],[1,hamster],[1,bunny])SETPHRASE1([1,_])TESTEQ&PREV.PET&ME.PETSET_FPHRASE1([1,too],[1,aswell],[1,also])SAY(Ihavea,p03,&ME,PET,p03,&ME.PHRASE1)Declare_pet_switchSELECTNEXTTESTEQ&NEXT&MECH00SE_F([1,Continue—self],[2,Declare_pet_switch])BRANCHNormal_switchDeclare_nameTESTEQ&ME.PET_NAME$UNDEFBRANCH_FR印ly_to_nameBRANCHMy_petDeclare_colourTESTEQ&ME.COLOUR$UNDEFBRANCH_FR印ly_to_colourBRANCHMy_pet[1745]Declare_breedTESTNE&ME.PETpuppyBRANCH_FMy_petTESTEQ&ME.BREED$UNDEFBRANCH_FReply_to_breedBRANCHMy_petContinue_selfBRANCHStartAsk_next_spkrSELECTNOTMETESTEQ&NEXT&PREVCH00SE_F([1,Start],[2,Ask_next_spkr])TESTEQ&NEXT.SELF一DONEdoneCH00SE_F([3,Start],[2,Compare_next],[1,3party_statements])TESTEQ&NEXT.PET$UNDEFBRANCH_FAsk_next_petCHOOSE([3,Next_pet_questions],[2,Compare_next],[1,3party_statements])Next一pet_questionsCHOOSE([1,Ask_next_name],[1,Ask_next_colour],[1,Ask_next_breed])Ask_next_nameTESTNE&NEXT.PET_NAME$UNDSFBRANCH_FNext_pet_questionsSAY(&NEXT.NAME,p03,whatdoyoucallyour,p03,&NEXT.PET,p50)SWITCHSPEAKERReply_to_nameAsk_next_colourTESTNE&NEXT.COLOUR$UNDEFBRANCH_FNext_pet_questionsSAY(&NEXT.NAME,p03,whatcolourisyour,p03,&NEXT.PET,p50)SWITCHSPEAKERReply_to_colourASk_next_breedTESTNE&NEXT.PETpuppyBRANCH_FNext_pet_questionsTESTNE&NEXT.BREED$UNDEFBRANCH_FNext_pet_questionsSAY(&NEXT.NAME,p03,whattypeofdogisyour,p03,&NEXT.ΡΕΤ,ρδΟ)SWITCHSPEAKERReply_to_breedAsk_Next_pet[1782]TESTEQ&NEXT.PREFERENCE$UNDEFBRANCH_FNext_no_preferenceSAY(&NEXT.NAME,p03,doyouhavea,p03,&NEXT.PREFERENCE)BRANCHNext_pet_switchNext_no_preferenceSAY(&NEXT.NAME,p03,doyouhavea,p03,pet)Next_pet—switch:SAY(p50)SWITCHSPEAKERReply_to_petCompare_nextTESTEQ&ME.PET$UNDEFBRANCH_FAsk一next_spkrTESTEQ&NEXT.PET$UNDEFBRANCH_FAsk一next_spkrTESTEQ&ME.PET&NEXTT.PETCH00SE_F([1,Next_same_pet_l],[1,Next_same_pet_2])CHOOSE([l,Next_diff_pet_l],[1,Next_diff_pet_2],[1,Next_diff_pet_3],[2,Next_diff_pet_4])Next_same_pet_lSAY(Hay,p03,&NEXT.NAME,p03,webothhave,p03,&ME.PET,s)BRANCHCompare_next_switchNext_same_pet_2SAY(&NEXT.NAME,p03,youandmehave,p03,&ME.PET,s,p03,isn'tthatgreat)BRANCHCompare_next_switchNext_diff_pet_lSAY(&NEXT.NAME,p03,Ihopemy,p03,&ME.PET,p03,andyour,p03,&NEXT.PET,p03,willbefriends)BRANCHCompare_next_switchNext_diff_pet_2SAY(&NEXT.NAME,p03,doyouthinkyour,p03,&NEXT.PET,p03,andmy,p03,&ME.PET,p03,willplaytogether)BRANCHCompare_next_switchNext_diff_pet_3SAY(&NEXT.NAME,p03,itwouldbefuntoseeyour,p03,&NEXT.PET,p03,andmy,p03,&ME.PET,p03,playingtogether)[1817]BRANCHCompare_next_switchNext_diff_pet_4TESTEQ&NEXT.PETkittenBRANCH_FNext_predatorTESTEQ&NEXT,PETpuppyBRANCH_FNext_predatorTESTEQ&NEXT.PEThamster[1824]BRANCH_FNext_preyTESTEQ&NEXT.PETbunnyBRANCH_FNext_preyCHOOSE([1,Next_diff_pet_l],[1,Next_diff_pet_2])Next_predatorTESTEQ&ME.PEThamsterBRANCH_FNext_predator_statementTESTEQ&ME.PETbunnyBRANCH_FNext_pedator_statementCHOOSE([1,Next_diff_pet_l],[1,Next_diff_pet_2])Next_predator_statementSAY(&NEXT.NAME,p03,doyouthinkyour,p03,&NEXT.PET,p03,wi11eatmy,p03,&ME.PET,p50)SWITCHSPEAKERNext_predator_replyNext_predator_replyCHOOSE([1,Next_predator_reply_l],[1,Next_predator_reply_2])Next_predator_reply_lSAY(Idon'tthinkso,p03,my,p03,&ME.PET,p03,isverygentle)SELECTNEXTBRANCHCompare_next_switchNext_predator_reply_2SAY(Ihopenot,p03,perhapsweshouldkeepthemapart)SELECTNEXTBRANCHCompare_next_switchNext_preyTESTEQ&ME.PETkittenBRANCH_FNext_prey_statementTESTEQ&ME.PETpuppyBRANCH_FNext_prey_statementCHOOSE([1,Next_diff_pet_l],[1,Next_diff_pet_2])Next_prey_statementSAY(Ihopemy,p03,&ME.PET,p03,won'teat,p03,&NEXT.NAME,s,p03,&NEXT.PET,p50)SWITCHSPEAKERNext_prey_replyNext_prey_replyCHOOSE([1,Next_prey_reply_l],[1,Next_rey_reply_2])Next_prey_reply_lSAY(Ihopenot,p03,thatwouldbeawful)SELECTNEXTBRANCHCompare_next_switchNext_prey_reply_2SAY(Ihopenot,p03,perhapsweshouldkeepthemapart)SELECTNEXTBRANCHCompare_next_switchCompare_next_switchBRANCHNormal_switch3party_statementsTESTEQ&ME.PET$UNDEFBRANCH一FAsk_next_spkrTESTEQ&ME&PREVCHOOSE—F([1,Ask_next_spkr],[1,Compare_next])TESTEQ&PREV.PET$UNDEFCHOOSE—F([1,Ask_next_spkr],[1,Compare_next])TESTEQ&NEXT.PET$UNDEFCHOOSE一F([1,Ask_next_spkr],[1,Compare_next])TESTEQ&PREV.PET&NEXT.PETBRANCH—FP_eq_NTESTEQ&ME.PET&NEXT.PETBRANCH—FM_eq_N_ne_PTESTEQ&ME.PET&PREV.PETBRANCH一FM_eq_P_ne_NP_ne_N_ne_MSAY(wow,p03,&PREV.NAME,p03,&NEXT.NAME,p03,andme,p03,havethreedifferentpets)BRANCH3party_switcnP_eq_NTESTEQ&ME.PET&NEXT.PETBRANCH一FM_eq_P_eq_NP_eq_N_ne_MSAY(&PREV.NAME,p03,and,p03,&NEXT.NAME,p03,bothhave,p03,&PREV.PET,s,p03,but,Ihavea,p03,&ME.PET)BRANCH3party_switchM_eq_N_ne_PSAY(both,p03,&NEXT.NAME,p03,andmehave,p03,&ME.PET,s,p03,but,p03,&PREV.NAME,p03,hasa,p03,&PREV.PET)BRANCH3party_switchM_eq_P_ne_NSAY(both,p03,&PREV.NAME,p03,andmehae,p03,&ME.PET,s,p03,but,p03,&NEXT.NAME,p03,hasa,p03,&NEXT.PET)BRANCH3party_switchM_eq_P_eq_NSAY(&PREV.NAME,p03,and,p03,&NEXT.NAME,p03,andmeallhave,p03,&ME.PET,s)3party_switchBRANCHNormal_switch预定会话主题//MrXDEFINEG_THEMEDEFINESELF_D0NEStartSELECThomerBRANCH_FNo_homerSELECTsalesmanBRANCH_FNo_salesmanSELECTIisaBRANCH—FNo_lisaSELECThomerSWITCHSPEAKERBeginNo_homerSAY(nohomer)SWITCHFINISHNo_salesmanSAY(nosalesman)SWITCHFINISHNo_lisaSAY(nolisa)SWITCHFINISHBegin[1930]SAY(homer1)SAY(homer2)SELECTsalesmanSWITCHSPEAKER$L_NEXTSAY(SMl)SAY(SM2)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer3)SAY(homer4)SAY(homer5)SELECTsaleemanSWITCHSPEAKER$L_NEXTSAY(SM3)SAY(SM4)SAY(SM5)SAY(SM6)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer6)SELECTsalesmanSWITCHSPEAKER$L_NEXTSAY(SM7)SAY(SM8)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer7)SELECTsalesmanSWITCHSPEAKER$L_NEXTSAY(SM9)SAY(SMlO)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer8)SELECTsalesmanSWITCHSPEAKER$L_NEXTSAY(SMll)SELECThomerSWITCHSPEAKER$L_NEXT[1969]SAY(homer9)SELECTsalesmanSWITCHSPEAKER$L_NEXTSAY(SMI2)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer10)SELECTsalesmanSWITCHSPEAKER$L_NEXTSAY(SMI3)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer11)SELECTIisaSWITCHSPEAKER$L_NEXTSAY(Iisal)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer12)SAY(homer13)SAY(homer14)SELECTIisaSWITCHSPEAKER$L_NEXTSAY(lisa2)SAY(lisa3)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer15)SAY(homer16)SAY(homer17)SELECTIisaSWITCHSPEAKER$L_NEXTSAY(lisa4)SAY(lisa5)SELECThomerSWITCHSPEAKER$L_NEXTSAY(homer18)SAY(homer19)SWITCHFINISH[2008]Snakes禾口Ladders//snakesandladdersDEFINESQUAREDEFINE0LD_SQUAREDEFINEDICEDEFINEDICE_C0UNTERDEFINEINTRODEFINEDICE_INC_RETURNDEFINESQUARE_INC—RETURNStartSELECTaliceBRANCH_FNo_aliceSWITCHSPEAKER$L—NEXTSETSQUARE([1,zero])No_aliceSELECTjoeBRANCH_FNo_joeSWITCHSPEAKER$L_EXTSETSQUARE([1,zero])No_joeSELECTzoeBRANCH_FNo_zoeSWITCHSPEAKER$L_NEXTSETSQUARE([1,zero])No_zoeTESTEQ&ME.NAMEaliceBRANCH_FInit_select_joeTESTEQ&ME.NAMEjoeBRANCH_FInit_select_zoeTESTEQ&ME.NAMEzoeBRANCH_FInit_select_aliceInit_select_aliceSELECTaliceBRANCH_FInit_select_joeBRANCHContinueInit_select_joeSELECTjoeBRANCH_FInit_select_zoeBRANCHContinue[2047]Init_select_zoeSELECTzoeBRANCH_FInit_select_aliceBRANCHContinueContinueCHOOSE([1,Introduce_next],[1,No_intro])Introduce_nextTESTEQ&ME.INTRO$UNDEFBRANCH_FNo_introTESTEQ&ME&NEXTBRANCH_FNo_introSETINTRO([1,yes])SAY(nowitsyourturn,&NEXT.NAME)BRANCHDo_roll—switchNo_introSETINTRO([1,no])Do一roll_switchSAY(p50)SWITCHSPEAKER$L_NEXTTESTEQ&ME.NAMEaliceBRANCH_FSelect_joeTESTEQ&ME.NAMEjoeBRANCH_FSelect_zoeTESTEQ&ME.NAMEzoeBRANCH_FSelect_aliceSelect_aliceSELECTaliceBRANCH_FSelect_joeBRANCHRoll_diceSelectJoeSELECTjoeBRANCH_FSelect_zoeBRANCHRoll_diceSelect_zoeSELECTzoeBRANCH_FSelect_aliceBRANCHRoll_diceRoll_diceTESTEQ&PREV.INTROyes[2086]BRANCH_FSet_diceSAY(It'smyturn,p50)Set_diceSETDICE([1,one],[1,two],[1,three],[1,four],[1,five],[1,six])SETDICE_C0UNTER([1,zero])TESTNE&ME.SQUARE$UNDEFSET_FOLD_SQUARE([1,&ME.SQUARE])SAY(I'verolleda,&ME.DICE,p50)Move_my_squareTESTEQ&ME.DICE&ME.DICE_COUNTERBRANCH_FMovedSETDICE_INC_RETURN([1,one])BRANCHIncrement_my_dice_counterDice_counter_incremented_oneBRANCHIncrement_my_squareSquare—incrementedTESTNE&ME.SQUARE&PREV.SQUAREBRANCH_FTest_nextTESTEQ&ME&PREVBRANCH_FTest_nextTESTNE&ME.DICE&ME.DICE_COUNTERBRANCH_FPassed_prevSAY(hurray,Ivecaughtupwithyou,&PREV.NAME,p075)BRANCHTest_nextPassed一prev:SAY(hurray,Iveovertakenyou,&PREV.NAME,p075)BRANCHTest_nextTest_nextTESTNE&ME.SQUARE&NEXT.SQUAREBRANCH_FDone_testingTESTEQ&ME&NEXTBRANCH_FDone_testingTESTNE&ME.DICE&ME.DICE_COUNTERBRANCH_FPassed—nextSAY(hurray,Ivecaughtupwithyou,&NEXT.NAME,p075)BRANCHDone_testingPassed一nextSAY(hurray,Iveovertakenyou,&NEXT.NAME,p075)BRANCHDone_testing[2125]Done_testingBRANCHMove_my_squareMovedTESTNE&ME.SQUAREonehundredandoneBRANCH_FCheck_new_squareSETSQUARE([1,&ME.OLD_SQUARE])SAY(OhdearI'verolledtoomuch,Ihavetostayonsquare,&ME.SQUARE,p075)BRANCHContinueCheck_new一squareSAY(nowI'matsquare,&ME.SQUARE,p075)TESTEQ&ME.SQUAREonehundredBRANCH_FI_have_wonTESTEQ&ME.SQUAREfourSET_FSQUARE([1,thirtynine])BRANCH_FUp_ladderTESTEQ&ME.SQUAREtwentysixSET_FSQUARE([1,seventyfive])BRANCH_FUp_ladderTESTEQ&ME.SQUAREthirtythreeSET_FSQUARE([1,fiftytwo])BRANCH_FUp_ladderTESTEQ&ME.SQUAREfiftynineSET_FSQUARE([1,sixtythree])BRANCH_FUp_ladderTESTEQ&ME.SQUAREseventythreeSET_FSQUARE([1,ninetythree])BRANCH_FUp_ladderTESTEQ&ME.SQUAREninetynineSET_FSQUARE([1,fortytwo])BRANCH—FDown—snakeTESTEQ&ME.SQUAREeightysixSET_FSQUARE([1,fiftyseven])BRANCH_FDown_snakeTESTEQ&ME.SQUAREseventySET_FSQUARE([1,fifty])BRANCH_FDown_snakeTESTEQ&ME.SQUAREthirtysixSET_FSQUARE([1,eight])[2163]BRANCH_FDown—snakeTESTEQ&ME.SQUAREthirtySET_FSQUARE([1,twelve])BRANCH_FDown—snakeBRANCHContinueUp_ladderSAY(hurray,upaladdertosquare,&ME.SQUARE,p075);BRANCHContinueDown_snakeSAY(Boo,downasnaketosquare,&ME.SQUARE,p075);BRANCHContinueI_have_wonSAY(hurrahIhavewon)SWITCHFINISHIncrement一my_dice_counterTESTEQ&ME.DICE_C0UNTERzeroBRANCH_FDice—counter—zeroTESTEQ&ME.DICE_C0UNTERoneBRANCH_FDice_counter_oneTESTEQ&ME.DICE_C0UNTERtwoBRANCH_FDice_counter_twoTESTEQ&ME.DICE_C0UNTERthreeBRANCH_FDice_counter_threeTESTEQ&ME.DICE_C0UNTERfourBRANCH_FDice_counter_fourTESTEQ&ME.DICE_C0UNTERfiveBRANCH_FDice_counter_fiveDice_counter_zeroSETDICE_C0UNTER([1,one])BRANCHDice_inc_returnDice_counter_oneSETDICE_C0UNTER([1,two])BRANCHDice_inc_returnDice_counter_twoSETDICE_C0UNTER([1,three])BRANCHDice_inc_returnDice_counter_threeSETDICE_COUNTER([1,four])BRANCHDice_inc_return[2202]Dice_counter_fourSETDICE_C0UNTER([1,five])BRANCHDice_inc_returnDice_counter_fiveSETDICE_C0UNTER([1,six])BRANCHDice_inc_returnDice_inc_returnSAY(&ME.DICE一COUNTER,p50)TESTEQ&ME.DICE_INC_RETURNoneBRANCH_FDice_counter_incremented_oneIncrement_my_squareTESTEQ&ME.SQUAREzeroBRANCH_FNot一startedTESTEQ&ME.SQUAREoneBRANCH_FAt_oneTESTEQ&ME.SQUAREtwoBRANCH_FAt_twoTESTEQ&ME.SQUAREthreeBRANCH_FAt_threeTESTEQ&ME.SQUAREfourBRANCH_FAt_fourTESTEQ&ME.SQUAREfiveBRANCH_FAt_fiveTESTEQ&ME.SQUAREsixBRANCH_FAt_sixTESTEQ&ME.SQUAREsevenBRANCH_FAt_sevenTESTEQ&ME.SQUAREeightBRANCH_FAt_eightTESTEQ&ME.SQUAREnineBRANCH_FAt_nineTESTEQ&ME.SQUAREtenBRANCH_FAt_tenTESTEQ&ME.SQUAREelevenBRANCH_FAt_elevenTESTEQ&ME.SQUAREtwelveBRANCH_FAt_twelveTESTEQ&ME.SQUAREthirteenBRANCH_FAt_thirteen[2241]TESTEQ&ME.SQUAREfourteenBRANCH_FAt—fourteenTESTEQ&ME.SQUAREfifteenBRANCH_FAt_fiveteenTESTEQ&ME.SQUAREsixteenBRANCH_FAt一sixteenTESTEQ&ME.SQUAREseventeenBRANCH_FAt—seventeenTESTEQ&ME.SQUAREeighteenBRANCH_FAt—eighteenTESTEQ&ME.SQUAREnineteenBRANCH_FAt一nineteenTESTEQ&ME.SQUAREtwentyBRANCH_FAt—twentyTESTEQ&ME.SQUAREtwentyoneBRANCH_FAt—twentyoneTESTEQ&ME.SQUAREtwentytwoBRANCH_FAt—twentytwoTESTEQ&ME.SQUAREtwentythreeBRANCH_FAt_twentythreeTESTEQ&ME.SQUAREtwentyfourBRANCH_FAt—twentyfourTESTEQ&ME.SQUAREtwentyfiveBRANCH_FAt_twentyfiveTESTEQ&ME.SQUAREtwentysixBRANCH_FAt_twentysixTESTEQ&ME.SQUAREtwentysevenBRANCH_FAt_twentysevenTESTEQ&ME.SQUAREtwentyeightBRANCH_FAt_twentyeightTESTEQ&ME.SQUAREtwentynineBRANCH_FAt_twentynineTESTEQ&ME.SQUAREthirtyBRANCH_FAt—thirtyTESTEQ&ME.SQUAREthirtyoneBRANCH_FAt_thirtyoneTESTEQ&ME.SQUAREthirtytwoBRANCH_FAt_thirtytwoTESTEQ&ME.SQUAREthirtythree[2280]BRANCH_FAt_thirtythreeTESTEQ&ME.SQUAREthirtyfourBRANCH_FAt_thirtyfourTESTEQ&ME.SQUAREthirtyfiveBRANCH_FAt_thirtyfiveTESTEQ&ME.SQUAREthirtysixBRANCH一FAt_thirtysixTESTEQ&ME.SQUAREthirtysevenBRANCH_FAt_thirtysevenTESTEQ&ME.SQUAREthirtyeightBRANCH一FAt_thirtyeightTESTEQ&ME.SQUAREthirtynineBRANCH一FAt_thirtynineTESTEQ&ME.SQUAREfortyBRANCH_FAt_fortyTESTEQ&ME.SQUAREfortyoneBRANCH_FAt_fortyoneTESTEQ&ME.SQUAREfortytwoBRANCH_FAt_fortytwoTESTEQ&ME.SQUAREfortythreeBRANCH_FAt_fortythreeTESTEQ&ME.SQUAREfortyfourBRANCH_FAt_fortyfourTESTEQ&ME.SQUAREfortyfiveBRANCH_FAt_fortyfiveTESTEQ&ME.SQUAREfortysixBRANCH_FAt_fortysixTESTEQ&ME.SQUAREfortyseven,BRANCH_FAt_fortysevenTESTEQ&ME.SQUAREfortyeightBRANCH_FAt_fortyeightTESTEQ&ME.SQUAREfortynineBRANCH_FAt_FortynineTESTEQ&ME.SQUAREfiftyBRANCH_FAt_fiftyTESTEQ&ME.SQUAREfiftyoneBRANCH_FAt_fiftyoneTESTEQ&ME.SQUAREfiftytwoBRANCH_FAt_fiftytwo[2319]TESTEQ&ME.SQUAREfiftythreeBRANCH_FAt_fiftythreeTESTEQ&ME.SQUAREfiftyfourBRANCH_FAt_fiftyfourTESTEQ&ME.SQUAREfiftyfiveBRANCH_FAt_fiftyfiveTESTEQ&ME.SQUAREfiftysixBRANCH_FAt_fiftysixTESTEQ&ME.SQUAREfiftysevenBRANCH_FAt_fiftyaevenTESTEQ&ME.SQUAREfiftyeightBRANCH_FAt_fiftyeightTESTEQ&ME.SQUAREfiftynineBRANCH_FAt_fiftynineTESTEQ&ME.SQUAREsixtyBRANCH_FAt_sixtyTESTEQ&ME.SQUAREsixtyoneBRANCH_FAt_sixtyoneTESTEQ&ME.SQUAREsixtytwoBRANCH_FAt_sixtytwoTESTEQ&ME.SQUAREsixtythreeBRANCH_FAt_sixtythreeTESTEQ&ME.SQUAREsixtyfourBRANCH_FAt_sixtyfourTESTEQ&ME.SQUAREsixtyfiveBRANCH_FAt_sixtyfiveTESTEQ&ME.SQUAREsixtysixBRANCH_FAt_sixtysixTESTEQ&ME.SQUAREsixtysevenBRANCH_FAt_sixtysevenTESTEQ&ME.SQUAREsixtyeightBRANCH一FAt_sixtyeightTESTEQ&ME.SQUAREsixtynineBRANCH一FAt_sixtynineTESTEQ&ME.SQUAREseventyBRANCH_FAt_seventyTESTEQ&ME.SQUAREseventyoneBRANCH_FAt_seventyoneTESTEQ&ME.SQUAREseventytwo[2358]BRANCH一FAt_seventytwoTESTEQ&ME.SQUAREseventythreeBRANCH—FAt_seventythreeTESTEQ&ME.SQUAREseventyfourBRANCH一FAt_seventyfourTESTEQ&ME.SQUAREseventyfiveBRANCH一FAt_seventyfiveTESTEQ&ME.SQUAREseventysixBRANCH一FAt_seventysixTESTEQ&ME.SQUAREseventysevenBRANCH一FAt_seventysevenTESTEQ&ME.SQUAREseventyeightBRANCH—FAt_seventyeightTESTEQ&ME.SQUAREseventynineBRANCH一FAt_seventynineTESTEQ&ME.SQUAREeightyBRANCH—FAt_eightyTESTEQ&ME.SQUAREeightyoneBRANCH一FAt_eightyoneTESTEQ&ME.SQUAREeightytwoBRANCH一FAt_eightytwoTESTEQ&ME.SQUAREeightythreeBRANCH一FAt_eightythreeTESTEQ&ME.SQUAREeightyfourBRANCH一FAt_eightyfourTESTEQ&ME.SQUAREeightyfiveBRANCH_FAt_eightyfiveTESTEQ&ME.SQUAREeightysixBRANCH一FAt_eightysixTESTEQ&ME.SQUAREeightysevenBRANCH一FAt_eightysevenTESTEQ&ME.SQUAREeightyeightBRANCH_FAt_eightyeightTESTEQ&ME.SQUAREeightynineBRANCH一FAt_eightynineTESTEQ&ME.SQUAREninetyBRANCH一FAt_ninetyTESTEQ&ME.SQUAREninetyoneBRANCH一FAt_ninetyone[2397]TESTEQ&ME.SQUAREninetytwoBRANCH_FAt_ninetytwoTESTEQ&ME.SQUAREninetythreeBRANCH_FAt_ninetythreeTESTEQ&ME.SQUAREninetyfourBRANCH_FAt_ninetyfourTESTEQ&ME.SQUAREninetyfiveBRANCH_FAt_ninetyfiveTESTEQ&ME.SQUAREninetysixBRANCH_FAt一ninetysixTESTEQ&ME.SQUAREninetysevenBRANCH_FAt_ninetysevenTESTEQ&ME.SQUAREninetyeightBRANCH一FAt一ninetyeightTESTEQ&ME.SQUAREninetynineBRANCH一FAt一ninetynineTESTEQ&ME.SQUAREonshundredBRANCH_FAt_onehundredBRANCHSquare_incrementedNot_startedSETSQUARE([1,one])BRANCHSquare_incrementedAt一oneSETSQUARE([1,two])BRANCHSquare_incrementedAt—twoSETSQUARE([1,three])BRANCHSquare_incrementedAt—threeSETSQUARE([1,four])BRANCHSquare_incrementedAt—fourSETSQUARE([1,five])BRANCHSquare_incrementedAt—five:SETSQUARE([1,six])BRANCHSquare_incrementedAt—sixSETSQUARE([1,seven])[2436]BRANCHSquare_incrementedAt_sevenSETSQUARE([1,eight])[2439]BRANCHSquare_incrementedAt_eightSETSQUARE([1,nine])BRANCHSquare_incrementedAt_nineSETSQUARE([1,ten])BRANCHSquare_incrementedAt_tenSETSQUARE([1,eleven])BRANCHSquare_incrementedAt_elevenSETSQUARE([1,twelve])BRANCHSquare_incrementedAt_twelveSETSQUARE([1,thirteen])BRANCHSquare_incrementedAt_thirteenSETSQUARE([1,fourteen])BRANCHSquare_incrementedAt_fourteenSETSQUARE([1,fifteen])BRANCHSquare_incrementedAt_fiveteenSETSQUARE([1,sixteen])BRANCHSquare_incrementedAt_sixteenSETSQUARE([1,seventeen])BRANCHSquare_incrementedAt_seventeenSETSQUARE([1,eighteen])BRANCHSquare_incrementedAt_eighteenSETSQUARE([1,nineteen])BRANCHSquare_incrementedAt_nineteenSETSQUARE([1,twenty])[2475]BRANCHSquare—incrementedAt_twentySETSQUARE([1,twentyone])BRANCHSquare—incrementedAt_twentyoneSETSQUARE([1,twentytwo])BRANCHSquare一incremented[2482]At_twentytwoSETSQUARE([1,twentythree])BRANCHSquare—incrementedAt_twentythreeSETSQUARE([1,twentyfour])BRANCHSquare一incrementedAt_twentyfourSETSQUARE([1,twentyfive])BRANCHSquare—incrementedAt_twentyfiveSETSQUARE([1,twentysix])BRANCHSquare—incrementedAt_twentysixSETSQUARE([1,twentyseven])BRANCHSquare_incrementedAt_twentysevenSETSQUARE([1,twentyeight])BRANCHSquare_incrementedAt_twentyeightSETSQUARE([1,twentynine])BRANCHSquare_incrementedAt_twentynineSETSQUARE([1,thirty])BRANCHSquare_incrementedAt_thirtySETSQUARE([1,thirtyone])BRANCHSquere_incrementedAt_thirtyoneSETSQUARE([1,thirtytwo])BRANCHSquare_incrementedAt_thirtytwoSETSQUARE([1,thirtythree])[2514]BRANCHSquare_incrementedAt_thirtythreeSRTSQUARE([1,thirtyfour])BRANCHSquare_incrementedAt_thirtyfourSETSQUARE([1,thirtyfive])BRANCHSquare_incrementedAt_thirtyfiveSETSQUARE([1,thirtysix])BRANCHSquare_incrementedAt_thirtysixSETSQUARE([1,thirtyseven])BRANCHSquare_incrementedAt_thirtysevenSETSQUARE([1,thirtyeight])BRANCHSquare_incrementedAt_thirtyeightSETSQUARE([1,thirtynine])BRANCHSquare_incrementedAt_thirtynineSETSQUARE([1,forty])BRANCHSquare_incrementedAt_fortySETSQUARE([1,fortyone])BRANCHSquare_incrementedAt_fortyoneSETSQUARE([1,fortytwo])[2541]BRANCHSquare_incrementedAt_fortytwoSETSQUARE([1,fortythree])BRANCHSquare_incrementedAt_fortythreeSETSQUARE([1,fortyfour])BRANCHSquare_incrementedAt_fortyfourSETSQUARE([1,fortyfive])BRANCHSquare_incrementedAt_fortyfiveSETSQUARE([1,fortysix])[2553]BRANCHSquare_incrementedAt_fortysixSETSQUARE([1,fortyseven])BRANCHSquare_incrementedAt_fortyseven[2558]SETSQUARE([1,fortyeight])BRANCHSquare_incrementedAt_fortyeightSETSQUARE([1,fortynine])BRANCHSquare_incrementedAt_fortynineSETSQUARE([1,fifty])BRANCHSquare_incrementedAt_fiftySETSQUARE([1,fiftyone])BRANCHSquare_incrementedAt_fiftyoneSETSQUARE([1,fiftytwo])BRANCHSquare_incrementedAt_fiftytwoSETSQUARE([1,fiftythree])BRANCHSquare_incrementedAt_fiftythreeSETSQUARE([1,fiftyfour])BRANCHSquare_incrementedAt_fiftyfourSETSQUARE([1,fiftyfive])BRANCHSquare_incrementedAt_fiftyfiveSETSQUARE([1,fiftysix])BRANCHSquare_incrementedAt_fiftysixSETSQUARE([1,fiftyseven])BRANCHSquare_incrementedAt_fiftysevenSETSQUARE([1,fiftyeight])BRANCHSquare_incrementedAt_fiftyeightSETSQUARE([1,fiftynine])[2592]BRANCHSquare_incrementedAt_fiftynineSETSQUARE([1,sixty])BRANCHSquare_incrementedAt_sixtySETSQUARE([1,sixtyone])BRANCHSquare_incrementedAt_sixtyoneSETSQUARE([1,sixtytwo])BRANCHSquare_incrementedAt_sixtytwoSETSQUARE([1,sixtythree])BRANCHSquare_incrementedAt_sixtythreeSETSQUARE([1,sixtyfour])BRANCHSquare_incrementedAt_sixtyfourSETSQUARE([1,sixtyfive])BRANCHSqUare_incrementedAt_sixtyfiveSETSQUARE([1,sixtysix])BRANCHSquare_incrementedAt_sixtysixSETSQUARE([1,sixtyseven])BRANCHSquare_incrementedAt_sixtysevenSETSQUARE([1,sixtyeight])BRANCHSquare_ncrementedAt_sixtyeightSETSQUARE([1,sixtynine])BRANCHSquare_incrementedAt_sixtynineSETSQUARE([1,seventy])BRANCHSquare_incrementedAt_seventySETSQUARE([1,seventyone])BRANCHSquare_incrementedAt_seventyoneSETSQUARE([1,seventytwo])[2631]BRANCHSquare_incrementedAt_seventytwoSETSQUARE([1,seventythree])BRANCHSquare_incrementedAt_seventythreeSETSQUARE([1,seventyfour])BRANCHSquare_incrementedAt_seventyfourSETSQUARE([1,seventyfive])BRANCHSquare_incrementedAt_seventyfiveSETSQUARE([1,seventysix])BRANCHSquare_incrementedAt_seventysixSETSQUARE([1,seventyseven])BRANCHSquare_incrementedAt_seventysevenSETSQUARE([1,seventyeight])BRANCHSquare_incrementedAt_seventyeightSETSQUARE([1,seventynine])BRANCHSquare_incrementedAt_seventynineSETSQUARE([1,eighty])BRANCHSquare_incrementedAt_eightySETSQUARE([1,eightyone])BRANCHSquare_incrementedAt_eightyoneSETSQUARE([1,eightytwo])BRANCHSquare_incrementedAt_eightytwoSETSQUARS([1,eightythree])BRANCHSquare_incrementedAt_eightythreeSETSQUARE([1,eightyfour])BRANCHSquare_incrementedAt_eightyfourSETSQUARE([1,eightyfive])[2670]BRANCHSquare一incrementedAt_eightyfiveSETSQUARE([1,eightysix])BRANCHSquare—incrementedAt_eightysixSETSQUARE([1,eightyseven])BRANCHSquare—incrementedAt_eightysevenSETSQUARE([1,eightyeight])BRANCHSquare—incrementedAt_eightyeightSETSQUARE([1,eightynine])BRANCHSquare_incrementedAt_eightynineSETSQUARE([1,ninety])BRANCHSquare_incrementedAt_ninetySETSQUAFE([1,ninetyone])BRANCHSquare_incrementedAt_ninetyoneSETSQUARE([1,ninetytwo])BRANCHSquare_incrementedAt_ninetytwoSETSQUARE([1,ninetythree])BRANCHSquare_incrementedAt_ninetythreeSETSQUARE([1,ninetyfour])BRANCHSquare_incrementedAt_ninetyfourSETSQUARE([1,ninetyfive])BRANCHSquare_incrementedAt一ninetyfive:SETSQUARE([1,ninetysix])BRANCHSquare_incrementedAt_ninetysixSETSQUARE([1,ninetyseven])BRANCHSquare_incrementedAt_ninetysevenSETSQUARE([1,ninetyeight])[2709]BRANCHSquare_incrementedAt_ninetyeightSETSQUARE([1,ninetynine])BRANCHSquare_incrementedAt_ninetynineSETSQUARE([1,onehunered])BRANCHSquare_incremented[2716]At_onehundredSETSQUARE([1,onehundredandone])BRANCHSquare_incremented附录II-与图8有关的组件的细节<table>tableseeoriginaldocumentpage98</column></row><table>IC364Mb串行闪存AT45DB642www.at_____mel.comIC4Micropowerop放大MCP607www.mi器crochip.c____om_IC5D类音频驱动器TPA2005www.ti.c____om_IC6LDOreg3v3,200mAMAX882CSA+www.maw关闭xim-ic.c____om_ICl电池充电器、USB和BQ24032Awww.ti.c_功率管理__^m_Ql数字FET开关/反相器FDV301Nwww.fairchildsem____i.comm_信号二极管_TS4148__Jl陶瓷天线备选印_2.45GHz50R___刷电路TlBalun变压器例如Murata天线2.45GHzLDB182G4520C-110_200R(diff):50R(unbal)___XTALl__晶体谐振器__16.0MHz__SWl__按钮开关__START__JPl迷你BUSB连接器例如Molexwww.mo__54819-0519__lex.comJP5TEST连接___可选JP6JENNIC连接可选用___于调试SW2(JP2)SPST开关_ON-QFF__Bl(JP3)!Li+电池620mAh丨Olympus摄像机电池丨_■‘I<table>tableseeoriginaldocumentpage100</column></row><table>附录III-与图9有关的组件的细节<table>tableseeoriginaldocumentpage101</column></row><table><table>tableseeoriginaldocumentpage102</column></row><table>权利要求一种玩具,包括处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出;以及用于与至少一个其它这样的玩具建立网络连接的装置;其中,所述处理器包括用于控制已经建立网络连接的每个玩具的输出的装置。2.根据权利要求1所述的玩具,其中所述控制装置适用于在所述网络连接上发送指令以控制已经建立网络连接的每个玩具的多个输出(优选地,所有输出)。3.根据权利要求1或2所述的玩具,其中所述网络连接形成个人区域网的一部分。4.根据权利要求1、2或3中任一项所述的玩具,其中,所述存储器适用于存储至少一组数据,所述至少一组中的每一组代表特定主题。5.根据权利要求4所述的玩具,还包括用于确定在所述存储器中存储的至少一个主题的装置。6.根据权利要求5所述的玩具,其中,所述玩具适用于仅当两个玩具中所述存储器中存储的至少一个主题相同时才与另一玩具建立连接。7.根据权利要求1至6中任一项所述的玩具,其中,所述控制装置适用于发送/接收控制消息来控制每个所述玩具的输出,其中,优选地所述控制消息包括所针对玩具的ID、以及命令段,并且更选优地还包括发起玩具的ID和/或消息ID。8.根据权利要求7所述的玩具,其中,所述控制消息包括访问参考数据库和执行任务的指令。9.根据权利要求1至8中任一项所述的玩具,其中,所述处理器包括用于发送/接收对发送/接收的控制消息的肯定应答的装置,其中,优选地如果所述发送/接收装置没有接收到肯定应答,则所述发送/接收装置适用于请求重发所述控制消息。10.根据权利要求9所述的玩具,其中,所述发送/接收装置适用于发送与玩具根据所述控制消息来产生输出花费的时间相关联的参数,其中,优选地所述发起玩具在发送另一控制消息之前等待与所述参数相关联的持续时间(这样的玩具产生这样的输出花费的时间能够根据例如所述玩具的主题或子主题而变化)。11.根据权利要求8、9或10所述的玩具,其中,所述处理器包括用于对重发的控制消息的数目进行计数的装置,从而在1,000-2,000,2,000-5,000,5,000-10,000或更多次尝试重发之后停止与不对所述控制消息进行肯定应答的所述玩具的通信。12.根据权利要求1至11中任一项所述的玩具,其中,所述处理器还包括适用于构建所述玩具之间的会话的会话引擎。13.一种用于创建玩具的主题数据的创作工具,包括用于接收与特定主题有关的内容的装置;用于处理所述内容以产生指令集合的装置,所述指令集合用于在所述特定主题中操作所述玩具;以及用于输出所述指令集合的装置。14.根据权利要求13所述的创作工具,其中,所述接收装置适用于接收分别包括与所述特定主题有关的脚本数据以及定义所述玩具的个性的表达数据在内的内容。15.根据权利要求14所述的创作工具,其中,所述接收装置适用于接收离散部分中的内容。16.根据权利要求15所述的创作工具,还包括用于向每个表达数据部分分配唯一ID号的装置。17.根据权利要求16所述的创作工具,其中,所述处理装置适用于利用所述唯一ID号作为对所述指令集合中所述表达数据部分的引用。18.根据权利要求14至17中任一项所述的创作工具,其中,所述表达数据包括下列中的至少一个主题名称、玩具用于交互的玩具的名称和语句。19.根据权利要求14至18中任一项所述的创作工具,其中,所述脚本数据包括下列中的至少一个在主题内能够交互的玩具的数目、交互方法、主题相关参数、以及玩具相关参数。20.根据权利要求14至19中任一项所述的创作工具,还包括用于将与特定主题有关的所述脚本数据和表达数据存储在阵列中的装置。21.根据权利要求20所述的创作工具,其中,所述处理装置适用于从所述阵列中产生所述指令集合。22.根据权利要求14至21中任一项所述的创作工具,其中,所述处理装置包括用于对包括至少一些表达数据在内的至少一个列表进行编译的装置。23.根据权利要求22所述的创作工具,其中,所述列表编译装置适用于在所述特定主题中对每个玩具的相应的列表进行编译。24.根据权利要求14至25中任一项所述的创作工具,其中,所述表达数据是符号数据。25.根据权利要求24所述的创作工具,还包括用于记录符号数据的扮演数据版本的直ο26.根据权利要求25所述的创作工具,还包括用于提示演员产生扮演数据的必备部分的装置。27.根据权利要求25或26所述的创作工具,其中,所述处理器适用于产生符号数据和扮演数据之间的查找表。28.根据权利要求14至27中任一项所述的创作工具,其中,所述处理装置适用于输出表达数据。29.根据权利要求28所述的创作工具,其中,所述处理装置还适用于分别输出表达数据和指令集合。30.根据权利要求13至29中任一项所述的创作工具,其中,所述处理装置适用于产生指令集合,所述指令集合包括用于控制玩具的基本功能的基本指令集合;以及用于在主题中控制玩具的针对基本指令集合的主题指令集合。31.根据权利要求30所述的创作工具,其中,所述处理器适用于将所述基本指令集合与所述主题指令集合组合在一起。32.根据权利要求30或31所述的创作工具,还包括编译器。33.根据权利要求32所述的创作工具,其中,所述编译器适用于编译所述基本指令集合和所述主题指令集合。34.根据前述权利要求中任一项所述的创作工具,其中,所述处理器包括适用于将所述指令集合变换为计算机可读代码的编码引擎。35.根据权利要求13至34中任一项所述的创作工具,其中,所述创作工具的输出适用于根据权利要求1至12或46至82中任一项在会话引擎中使用。36.根据权利要求1至23中任一项所述的创作工具,其中,所述玩具是根据权利要求1至12或46至82中任一项所述的玩具。37.一种针对创建玩具的主题数据的创作工具的用户界面,包括用于向用户提供输入窗口集合的装置,每个窗口对应于与主题有关的特定内容子集合的输入;以及用于发起主题数据的输出的装置。38.根据权利要求37所述的用户界面,其中,所述内容子集合包括下列中的至少一个主题相关数据、玩具相关数据以及上下文相关数据。39.根据权利要求38所述的用户界面,其中,所述上下文相关数据包括下列中的至少一个玩具用于交互所使用的语句、交互方法、主题相关参数、以及玩具相关参数。40.一种用于产生玩具的主题数据的系统,包括创作工具,用于访问、创建和编辑所述主题数据;以及服务器,包括用于存储所述主题数据的数据库;其中,所述创作工具适用于经由互联网访问主题数据。41.根据权利要求40所述的系统,其中,所述创作工具适用于将所述主题数据处理成阵列,并且所述数据库适用于在所述阵列中存储所述主题数据。42.根据权利要求41所述的系统,其中,所述创作工具是根据权利要求13至36中任一项所述的创作工具。43.根据权利要求41或42所述的系统,其中,所述玩具是根据权利要求1至12或46至82中任一项所述的玩具。44.根据权利要求41至43中任一项所述的系统,还包括用户界面。45.根据权利要求44所述的系统,其中,所述界面是根据权利要求25至27中任一项所述的界面。46.根据权利要求1至12中任一项所述的玩具,适用于与另一个这样的玩具进行交互,其中,所述处理器包括用于定义与所述交互相关联的至少一个变量的装置、用于在所述存储器中存储所述变量的装置、以及用于使用所述变量来控制所述玩具的(交互式的)输出的装置。47.一种适用于与另一个这样的玩具进行交互的玩具,包括处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出;其中,所述处理器包括用于定义与所述交互相关联的至少一个变量的装置、用于在所述存储器中存储所述变量的装置、以及用于与所述玩具的(交互式的)输出相关联地使用所述变量的装置。48.根据权利要求46或47所述的玩具,其中,所述变量多次(更优选地大量次数)使用来控制所述输出。49.根据权利要求46、47或48所述的玩具,其中,所述变量用于确定所述交互的数目、类型或本质,其中,优选地所述变量是所述交互。50.根据权利要求46至49中任一项所述的玩具,其中,所述变量是随机或伪随机选择的,其中,所述随机选择受权重的影响。51.根据权利要求34至50中任一项所述的玩具,其中,所述处理器适用于在所述存储器中存储主题数据,所述主题包括脚本数据和表达数据,所述表达数据定义所述玩具的个性。52.一种玩具,包括处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出;其中,所述处理器适用于在所述存储器中存储主题数据,所述主题包括脚本数据和表达数据,所述表达数据定义所述玩具的个性。53.根据权利要求51或52所述的玩具,适用于与至少一个其它类似玩具进行交互,其中,所述脚本数据由每个这样的玩具来共享,并且所述表达数据在每个这样的玩具之间是不同的。54.根据权利要求51、52或53所述的玩具,其中,所述脚本数据独立于所述表达数据。55.根据权利要求53或54所述的玩具,其中,所述处理器适用于向另一个这样的玩具输出脚本数据作为控制消息,并且适用于利用其个人的表达数据来响应控制消息。56.根据权利要求1至12或46至55中任一项所述的玩具,其中,所述处理器包括用于基于预定规则选择要交互的玩具的装置。57.一种适用于与其它这样的玩具进行交互的玩具,包括处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出,其中,所述处理器包括用于基于预定规则选择要交互的玩具的装置,其中,所选玩具可以是发起玩具。58.根据权利要求56或57所述的玩具,其中,所述选择装置适用于选择下一个要交互的玩具。59.根据权利要求58所述的玩具,其中,所述预定规则包括直接选择;随机选择;以及选择当前交互者再一次进行交互。60.根据权利要求56至59中任一项所述的玩具,其中,所述处理器适用于输出控制消息,所述控制消息包括所选玩具的ID并且优选地包括发起玩具的ID。61.根据权利要求56至60中任一项所述的玩具,其中,所述交互包括通信,其中优选地所述通信包括语音和方向。62.根据权利要求1至12或46至61中任一项所述的玩具,具有有生命物体的形式,适合于与其它类似玩具玩游戏,其中,所述处理器包括游戏引擎,其中所述游戏引擎适用于允许所述玩具玩游戏,就好像该玩具是有生命的。63.一种玩具,具有有生命物体的形式,适合于与其它类似玩具玩游戏,包括处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出;其中所述处理器包括游戏引擎,所述游戏引擎使得每个所述玩具能够玩游戏,好像所述玩具是其相关的有生命物体。64.根据权利要求62或63所述的玩具,其中,所述游戏引擎适用于实现人类游戏。65.根据权利要求64所述的玩具,其中,利用游戏设备来玩所述人类游戏。66.根据权利要求65所述的玩具,其中,所述游戏引擎适用于输出指令以使得人类能够调整所述游戏设备来玩游戏。67.根据权利要求62至66中任一项所述的玩具,其中,所述玩具还包括用于与至少一个其他这样的玩具进行通信的装置。68.根据权利要求62至67中任一项所述的玩具,其中,所述游戏引擎还适用于玩基于规则的游戏。69.根据权利要求62至68中任一项所述的玩具,其中,所述游戏引擎适用于在所述存储器中存储与游戏有关的信息。70.根据权利要求69所述的玩具,其中,所述信息包括游戏的规则。71.根据权利要求69或70所述的玩具,其中,所述信息还包括至少一个游戏棋盘的布局。72.根据权利要求62至71中任一项所述的玩具,其中,所述游戏引擎包括适用于作为虚拟骰子的随机数发生器。73.根据权利要求62至72中任一项所述的玩具,其中,所述游戏引擎包括用于接收与游戏有关的外部输入的装置。74.根据权利要求73所述的玩具,其中,所述外部输入与游戏的棋子相关联。75.根据权利要求73或74所述的玩具,其中,所述外部输入是所述游戏棋盘内的至少一个传感器。76.根据权利要求73、74或75所述的玩具,其中,所述外部输入是适用于由所述玩具的用户使用的开关。77.根据权利要求68至76中任一项所述的玩具,其中,所述基于规则的游戏包括Snakes禾口Ladders、以及Ludo078.根据前述权利要求中任一项所述的玩具,其中所述输出是换能器。79.根据权利要求78所述的玩具,其中,所述换能器是扬声器。80.根据权利要求78或79所述的玩具,其中,所述换能器是致动器。81.—种包括多个玩具在内的组合,每个玩具是根据权利要求1至12或46至80中的任一项所述的玩具。82.根据权利要求81所述的组合,其中,所述多个玩具中的每一个包括用于控制其它所述玩具的装置,从而一次仅有一个玩具控制其它所述玩具。83.一种用于向多个玩具提供主题数据的设备,包括用于存储所述主题数据的装置,其中每个所述主题包括多个子主题;用于标识特定玩具的装置;用于根据所述特定玩具选择子主题的装置;以及用于向所述玩具输出所述特定子主题的装置。84.根据权利要求83所述的设备,还包括用于存储多个不同主题的装置。85.根据权利要求84所述的设备,还包括用于允许用户选择所述多个主题中的一个的装置。86.根据权利要求83、84或85中任一项所述的设备,其中,用于标识特定玩具的装置使用所述玩具的唯一标识号。87.根据权利要求83至86中任一项所述的设备,包括用于根据与所述玩具相关联的参数对每个所述子主题进行加密的装置。88.根据权利要求87所述的设备,其中,所述参数是玩具的唯一标识号。89.一种用于诸如玩具等设备的会话引擎,包括用于下列操作的装置选择所述会话的主题;从多个开始点中随机选择开始点;基于变量随机选择短语;以及基于变量随机选择下一个说话者。90.根据权利要求89所述的会话引擎,其中,所述短语选择还基于权重。91.一种并入了根据权利要求89或90所述的会话引擎的玩具。92.根据权利要求91所述的玩具,其中,所述玩具是根据权利要求1至12或46至82中任一项所述的玩具。93.一种用于在根据权利要求1至12或46至82中任一项所述的至少一个玩具和计算机之间提供无线通信的设备,包括通信端口,用于将所述设备与所述计算机连接;以及用于在计算机和所述玩具或每个玩具之间建立网络的装置;其中,所述设备允许计算机与所述玩具或每个玩具进行通信,就好像所述计算机是另一个这样的玩具。94.根据权利要求93所述的设备,其中,所述设备使得所述计算机能够用作虚拟玩具。95.根据权利要求93或94所述的设备,其中,所述通信端口是USB通信端口。96.根据权利要求93、94或95所述的设备,其中,所述网络是无线的。97.一种系统,包括至少一个根据权利要求1至12或46至82中任一项所述的玩具;以及至少一个计算机,每个计算机具有根据权利要求93至96中任一项所述的设备;其中,所述计算机和所述设备的所述组合就好像其是根据权利要求1至12或46至82中任一项所述的玩具一样操作。98.根据权利要求97所述的系统,其中,所述计算机包括适用于提供虚拟玩具的视觉、以及音频输出。99.根据权利要求98所述的系统,其中,所述虚拟玩具是化身。全文摘要本发明提供一种玩具,包括处理器(200)、与所述处理器耦合的存储器(202);与所述处理器耦合的输出(210);以及用于与至少一个其它这样的玩具建立网络连接的装置(212);其中所述处理器包括用于控制已经建立网络连接的每个玩具的输出的装置。此外,所述控制装置适用于在所述网络连接上发送指令以控制已经建立网络连接的每个玩具的多个所述输出(优选地,所有所述输出)。文档编号A63H3/28GK101801485SQ200880106641公开日2010年8月11日申请日期2008年7月18日优先权日2007年7月19日发明者伊恩·格里尔,史蒂文·李普曼,杰弗里·海因,罗伯特·弗雷德里克·基尔布赖德-纽曼,阿隆·什穆埃尔申请人:史蒂文·李普曼
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1