CN101801485B - 交互式玩具 - Google Patents

交互式玩具 Download PDF

Info

Publication number
CN101801485B
CN101801485B CN200880106641.8A CN200880106641A CN101801485B CN 101801485 B CN101801485 B CN 101801485B CN 200880106641 A CN200880106641 A CN 200880106641A CN 101801485 B CN101801485 B CN 101801485B
Authority
CN
China
Prior art keywords
branch
toy
doll
test
square
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN200880106641.8A
Other languages
English (en)
Other versions
CN101801485A (zh
Inventor
史蒂文·李普曼
罗伯特·弗雷德里克·基尔布赖德-纽曼
伊恩·格里尔
杰弗里·海因
阿隆·什穆埃尔
Original Assignee
HYDOR Oy
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by HYDOR Oy filed Critical HYDOR Oy
Publication of CN101801485A publication Critical patent/CN101801485A/zh
Application granted granted Critical
Publication of CN101801485B publication Critical patent/CN101801485B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63HTOYS, e.g. TOPS, DOLLS, HOOPS OR BUILDING BLOCKS
    • A63H3/00Dolls
    • A63H3/28Arrangements of sound-producing means in dolls; Means in dolls for producing sounds
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63HTOYS, e.g. TOPS, DOLLS, HOOPS OR BUILDING BLOCKS
    • A63H30/00Remote-control arrangements specially adapted for toys, e.g. for toy vehicles
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63HTOYS, e.g. TOPS, DOLLS, HOOPS OR BUILDING BLOCKS
    • A63H30/00Remote-control arrangements specially adapted for toys, e.g. for toy vehicles
    • A63H30/02Electrical arrangements
    • A63H30/04Electrical arrangements using wireless transmission
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63HTOYS, e.g. TOPS, DOLLS, HOOPS OR BUILDING BLOCKS
    • A63H2200/00Computerized interactive toys, e.g. dolls
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/566Grouping or aggregating service requests, e.g. for unified processing

Abstract

本发明提供一种玩具,包括:处理器(200)、与所述处理器耦合的存储器(202);与所述处理器耦合的输出(210);以及用于与至少一个其它这样的玩具建立网络连接的装置(212);其中所述处理器包括用于控制已经建立网络连接的每个玩具的输出的装置。此外,所述控制装置适用于在所述网络连接上发送指令以控制已经建立网络连接的每个玩具的多个所述输出(优选地,所有所述输出)。

Description

交互式玩具
技术领域
本发明涉及玩具。具体地但不排他地,本发明涉及彼此交互的玩具,如玩偶。
背景技术
嵌入式计算机和微处理器改进了孩子们的玩具。它们大部分应用在教育玩具中,但是也已经在交互式玩具中使用了。 是交互式玩具的一个示例,该交互式玩具通过适当的发声对来自孩子的交互做出响应,并且可以给视频伴唱(sing-a-long)。
PCT专利申请WO 2006/114625通过引用合并于此。
发明内容
创作工具
根据本发明的第一方面,提供一种用于创建玩具的主题数据的创作工具,包括:用于接收与特定主题有关的内容的装置;用于处理所述内容以产生指令集合的装置,该指令集合用于在所述特定主题内操作所述玩具;以及用于输出所述指令集合的装置。通过提供用于产生操作玩具的指令集合的装置,使得产生主题指令的过程更有效率。
为了有效率地接收内容,优选地,所述接收装置适用于接收分别包括与特定主题有关的脚本数据以及定义所述玩具的个性的表达数据在内的内容。优选地,所述接收装置适用于接收离散部分中的内容。
为了有效率地进行处理,优选地,创作工具还包括用于向每个表达数据部分分配唯一ID号的装置。优选地,所述处理装置适用于利用所述唯一ID号作为对所述指令集合中的所述表达数据的引用。
优选地,所述表达数据包括下列中至少一个:主题名称、玩具用于交互的玩具的名称和语句。
优选地,所述脚本数据包括下列中的至少一个:在主题内可以交互的玩具的数目、交互方法、主题相关参数、以及玩具相关参数。
为了有效率地进行处理,优选地,创作工具还包括用于将与特定主题有关的所述脚本数据和表达数据一同存储在阵列中的装置。更优选地,所述处理装置适用于从所述阵列中产生所述指令集合。
为了有效率地进行处理,优选地,所述处理装置包括用于对至少一个列表进行编译的装置,所述至少一个列表包括表达数据中的至少一些。更优选地,所述列表编译装置适用于对所述特定主题中每个玩具的相应的列表进行编译。
优选地,表达数据是符号数据。这里所使用的符号数据暗示着单词、音乐或动作的书面形式。
优选地,创作工具还包括用于记录符号数据的扮演数据版本的装置。这里所使用的扮演数据暗示着单词、音乐或动作的扮演的形式。
优选地,创作工具还包括用于提示演员产生扮演数据的必要部分的装置。
优选地,所述处理器适用于产生符号数据和扮演数据之间的查找表。
优选地,所述处理装置适用于输出表达数据。更优选地,所述处理装置还适用于分别输出表达数据和指令集合。
优选地,所述处理装置适用于产生包括下述的指令集合:用于控制玩具的基本功能的基本指令集合;以及用于在主题中控制玩具的基本指令集合的主题指令集合。更优选地,所述处理器适用于将所述基本指令集合与所述主题指令集合组合在一起。
优选地,创作工具还包括编译器。更优选地,所述编译器适用于编译所述基本指令集合以及所述主题指令集合。
优选地,所述处理器包括:适用于将所述指令集合变换为计算机可读代码的编码引擎。
优选地,创作工具的输出适用于在这里所述的会话引擎中使用。
优选地,玩具是如这里所述的玩具。
根据本发明的第二方面,提供一种用于使创作工具为玩具创建主题数据的用户界面,包括:用于向用户提供输入窗口的集合的装置,每个窗口对应于与主题有关的特定内容子集合的输入;以及用于发起主题数据的输出的装置。
优选地,所述内容子集合包括下列中的至少一个:主题相关数据、玩具相关数据以及上下文相关数据。
优选地,上下文相关数据包括下列中的至少一个:玩具用于交互的语句、交互方法、主题相关参数、以及玩具相关参数。
根据本发明的第三方面,提供一种用于产生玩具的主题数据的系统,包括:创作工具,用于访问、创建和编辑所述主题数据;以及服务器,包括用于存储所述主题数据的数据库;其中,创作工具适用于经由互联网访问该主题数据。
优选地,所述创作工具适用于将主题数据处理成阵列,并且所述数据库适用于在所述阵列中存储所述主题数据。
优选地,所述创作工具是如这里所述的创作工具。
优选地,还包括一种用户界面。更优选地,该界面是如这里所述的界面。
USB通信保护器(Dongle)
根据本发明的另一方面,提供一种用于在这里所述的至少一个玩具和计算机之间提供无线通信的装置,包括:通信端口,用于将该装置与计算机连接;以及用于建立计算机和该玩具或每个玩具之间的网络的装置;其中,所述装置允许计算机与该玩具或每个玩具进行通信,就好像该计算机是另一个这样的玩具。
优选地,所述装置使得所述计算机能够用作虚拟玩具。
优选地,所述通信端口是USB通信端口。
优选地,所述网络是无线的。
根据本发明的又一个方面,提供一种系统,包括:至少一个这里所述的玩具;以及至少一个计算机,每个计算机具有这里所述的用于提供无线通信的装置;其中,所述计算机和装置的组合就好像它是这里所述的玩具。
优选地,所述计算机包括适用于提供虚拟玩具的视觉和音频输出。更优选地,所述虚拟玩具是化身(avatar)。
控制器玩偶
根据本发明的又一方面,提供一种玩具,包括:处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出;以及用于建立与至少一个其它这种玩具的网络连接的装置;其中,处理器包括:用于控制已经与其建立网络连接的每个玩具的输出的装置。
优选地,所述控制装置适用于在所述网络连接上传输指令以控制已经与其建立网络连接的每个玩具的多个输出(优选地,所有输出)。
优选地,所述网络连接形成个人区域网络的一部分。
优选地,所述存储器适用于存储至少一组数据,所述至少一组中的每一组代表特定主题。
优选地,玩具还包括:用于确定在存储器中存储的至少一个主题的装置。
优选地,所述玩具适用于仅当在两个玩具中存储器中存储的至少一个主题相同时才建立与另一玩具的连接。
优选地,所述控制装置适用于发送/接收控制消息以控制所述玩具中的每一个的输出,其中,优选地,控制消息包括用于玩具的玩具ID、以及命令段,并且更优选地还包括发起玩具的ID和/或消息ID。
优选地,所述控制消息包括访问参考数据库并执行任务的指令。
优选地,处理器包括用于发送/接收对已发送/接收的控制消息的肯定应答的装置,其中,优选地,如果所述发送/接收装置没有接收到肯定应答,则所述发送/接收装置适用于请求重发控制消息。
优选地,所述发送/接收装置适用于发送与玩具根据控制消息产生输出将花费的时间相关联的参数,其中,优选地,发起玩具在发送另一控制消息之前等待与所述参数相关联的持续时间(该玩具产生该输出将花费的时间将可以根据例如玩具的主题或子主题而变化)。
优选地,处理器包括用于对重发的控制消息的数目进行计数的装置,并且从而在1,000-2,000、2,000-5,000、5,000-10,000或更多次尝试重发之后停止与不对所述控制消息进行肯定应答的所述玩具的通信。
优选地,所述处理器还包括适用于构建所述玩具之间的会话的会话引擎。
优选地,其它这种玩具与第一个这种玩具相同或实质上相同。因此,不要求“星型拓扑(Spoke and Hub)”布置。
优选地,用于建立网络的所述装置是网络控制器,优选地,使用Zigbee协议的网络控制器。
参数存储
优选地,该玩具适用于与另一这样的玩具交互,其中,所述处理器包括:用于定义与所述交互相关联的至少一个变量的装置、用于在所述存储器中存储所述变量的装置、以及用于使用所述变量以控制所述玩具的(交互式的)输出的装置。
根据本发明的又一方面,提供一种玩具,适用于与另一这样的玩具交互,所述玩具包括:处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出;其中,所述处理器包括:用于定义与所述交互相关联的至少一个变量的装置、用于在所述存储器中存储所述变量的装置、以及用于与所述玩具的(交互式的)输出有关联地使用所述变量的装置(从而优选地,更有效率地跟踪交互)。
优选地,多次(更优选地,大量次数)使用所述变量来控制所述输出。
优选地,使用所述变量来确定所述交互的数目、类型或本质,其中优选地,所述变量是所述交互。
优选地,随机地或伪随机地选择所述变量,并且通过加权来影响所述随机选择。
优选地,玩具还包括用于产生交互的装置。用于产生交互的装置优选地适用于依赖于存储的参数来产生交互。
优选地,存储装置将每个变量与玩具相关联。
优选地,存储装置是位于玩具内的存储器。
优选地,用于使用该变量的装置适用于从存储装置中访问变量。
优选地,所述交互是玩具之间的通信。
优选地,所述变量是语音中使用的单词或短语。
表达个性和脚本主题
优选地,所述处理器适用于在所述存储器中存储主题数据,所述主题包括脚本数据和表达数据,所述表达数据定义所述玩具的个性。
根据本发明的又一方面,提供一种玩具,包括:处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出;其中,所述处理器适用于在所述存储器中存储主题数据,所述主题包括脚本数据和表达数据,所述表达数据定义所述玩具的个性(从而优选地更有效率地提供多个主题的玩具个性。)。
优选地,玩具适用于与至少一个其它类似玩具进行交互,其中由每个这样的玩具共享所述脚本数据,并且在每个这样的玩具之间所述表达数据是不同的。
优选地,所述脚本数据独立于所述表达数据。
优选地,处理器适用于向另一这样的玩具输出脚本数据作为控制消息,并且适用于利用其个人的表达数据来响应控制消息。
优选地,脚本数据对于每个玩具是相同的,并且控制每个玩具的输出。
优选地,处理器适用于使用脚本数据来引用表达数据,并且优选地表达数据使用不同的内容来传送相同信息。
优选地,玩具的个性由通信的内容来定义。
玩偶选择
优选地,所述处理器包括用于基于预定规则选择进行交互的玩具的装置。
根据本发明的又一方面,提供一种玩具,适用于与其它这样的玩具进行交互,所述玩具包括:处理器;与所述处理器耦合的存储器;以及与所述处理器耦合的输出,其中,所述处理器包括用于基于预定规则选择进行交互的玩具的装置,其中所述选择的玩具可以是发起玩具。
优选地,所述选择装置适用于选择下一个进行交互的玩具。
优选地,所述预定规则包括:直接选择;随机选择;以及选择当前交互者以再一次进行交互。
优选地,处理器适用于输出控制消息,该控制消息包括所选玩具的ID,并且优选地包括发起玩具的ID。
优选地,所述交互包括通信,其中优选地,所述通信包括语音和方向。
玩游戏
优选地,该玩具是有生命物体的形式,适合于与其它类似玩具玩游戏,其中所述处理器包括游戏引擎,其中所述游戏引擎适用于允许所述玩具玩游戏,好像所述玩具是有生命的。
根据本发明的又一方面,提供一种有生命物体形式的玩具,适合于与其它类似玩具玩游戏,包括:处理器;与所述处理器耦合的存储器;与所述处理器耦合的输出;其中所述处理器包括游戏引擎,该游戏引擎使得每个所述玩具能够玩游戏,好像所述玩具是其有关有生命物体。
优选地,所述游戏引擎适用于实现人类游戏(human game)。
优选地,用游戏设备来玩所述人类游戏。
优选地,所述游戏引擎适用于输出指令以使得人们能够调整所述游戏设备来玩游戏。
优选地,所述玩具还包括用于与至少一个另一这样的玩具进行通信的装置。
优选地,所述游戏引擎还适用于玩基于规则的游戏。
优选地,所述游戏引擎适用于在所述存储器中存储与游戏相关的信息。
优选地,所述信息包括游戏的规则。
优选地,所述信息还包括至少一个玩板(playing board)的布局。
优选地,所述游戏引擎包括适用于作为虚拟骰子的随机数发生器。
优选地,所述游戏引擎包括用于接收与游戏有关的外部输入的装置。
优选地,所述外部输入与所述游戏的棋子相关联。
优选地,所述外部输入是所述玩板中的至少一个传感器。
优选地,所述外部输入是适用于由所述玩具的用户使用的开关。
优选地,所述基于规则的游戏包括Snakes和Ladders、以及Ludo。
优选地,所述输出是换能器。优选地,所述换能器是扬声器。优选地,所述换能器是致动器。
根据本发明的又一方面,提供一种包括多个这样的玩具在内的组合。
优选地,所述多个玩具中的每一个包括用于控制其它所述玩具的装置,从而一次只有一个玩具控制其它玩具。
优选地,所述存储器适用于存储与游戏状态有关的信息。游戏状态可以是下列中的至少一个:玩板的布局、玩板上至少一个计数器的位置、以及所有玩具和/或用户的玩的顺序。
玩偶特定下载
根据本发明的又一方面,提供一种用于向多个玩具提供主题数据的装置,包括:用于存储所述主题数据的装置,其中每个所述主题包括多个子主题;用于标识特定玩具的装置;用于根据特定玩具选择子主题的装置;以及用于向所述玩具输出所述特定子主题的装置(从而优选地,更有效率地完成访问主题的下载)。
优选地,玩具还包括用于存储多个不同主题的装置。
优选地,玩具还包括用于允许用户选择所述多个主题中的一个的装置。
优选地,所述用于标识特定玩具的装置使用所述玩具的唯一标识号。
优选地,玩具还包括用于根据与所述玩具相关联的参数对每一个所述子主题进行加密的装置。优选地,所述参数是该玩具的唯一标识号。
优选地,该装置包括用于存储主题数据并且标识特定玩具的处理器和关联的存储器。
优选地,该装置还包括用于向玩具输出子主题的连接。优选地,该连接包括互联网和USB电缆。
会话引擎
根据本发明的又一方面,提供一种针对如玩具等装置的会话引擎,包括用于下列操作的装置:选择会话的主题;从多个开始点中随机选择开始点;基于变量随机选择短语;以及基于变量随机选择所述下一个说话者。
优选地,所述短语选择还基于加权。
优选地,该玩具并入了会话引擎。
优选地,该玩具或会话引擎适用于接收来自用户的输入数据。
优选地,该玩具或会话引擎适用于向用户输出数据。
优选地,该会话引擎还适用于在随机选择过程中使用来自用户的输入数据。
优选地,该会话引擎包括适用于执行选择操作的处理器。
优选地,该玩具或会话引擎适用于实时构建会话。
优选地,该玩具或会话引擎适用于对会话进行预处理。该玩具或会话引擎优选地还适用于输出预处理后的会话。
优选地,该玩具或会话引擎适用于在构建会话时使用出现于所建立的网络中的其他玩具的参数作为变量。
优选地,该玩具或会话引擎适用于根据加权来输出数据。
优选地,该玩具适用于存储多个主题数据集合。该玩具优选地还适用于在单一会话期间使用多个主题数据集合中的至少两个。
优选地,该玩具适用于使得能够与多个其它这样的玩具建立网络,优选地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、ROM 108、以及RAM 110进行通信。将IR/RF发射器/接收器与处理器/无线模块连接并且能够向其它这样玩偶发送或从其它这样玩偶接收信号。玩偶还与扬声器114连接。USB控制器116用于更新存储器106,并且还用于经由充电器电路118向电池120充电。备选的,玩偶适用于使用可更换电池,而非再可充电电池。
存储器106存储与玩偶可以具有的并由处理器在编译语音时访问的会话有关的信息。ROM 108用于存储与玩偶相关的永久性信息,比如玩偶的名字和ID号码。在建立玩偶网络时该信息在初始化过程中使用。RAM 110存储与当前会话有关的信息,并且用于通过存储与例如已经使用的短语有关的信息来产生更逼真的会话。
在存储器106中,每个玩偶100包含:包含玩偶的名字以及在会话期间定义的其他变量在内的数据集合;产生会话的指令集合;以及音频数据的集合。仅在控制器玩偶中存储在会话期间定义的变量。
在一个实施例中,处理器是如在MP3解码中使用的形式,同时具有关联的存储器接口(如SD卡)。本实施例提供大量处理能力(以及基于硬件的压缩技术)并且将因此允许玩偶之间的长时间和详细会话。
控制器玩偶
如图3所示,控制器单元200与多个从属单元202进行通信。控制器包括会话引擎204、语音编译器206、语音数据库208、扬声器(换能器)210、能够对从属单元发送/接收数据的发送器/接收器212。会话引擎包括随机语音选择器214、参数存储存储器216以及说话者选择器218。从属单元具有控制器单元的所有组件,在图3中没有示出从属单元的所有组件。
将第一个上电的单元初始化为控制器单元。当单元上电时,其搜索现有的网络,并且当不存在网络时其创建网络并且等待其他单元加入该网络。当开启其他单元时,它们加入该网络并且被初始化为从属单元。控制器单元等待来自两个新单元的通信,该通信指示了这两个新单元要求网络细节以及会话发起消息。一旦从属单元已经加入了该网络,则它们等待来自控制器单元的指令。应当理解所有单元(玩具/玩偶)是相同的:他们都能够成为控制器单元或从属单元。
单元适用于在如“动物园”、“体育”、“黑帮”或“时尚”等主题内进行通信。主题允许单元在不要求极大的与所有可能会话话题有关的信息数据库的情况下具有详细的会话。可以由用户从网站向单元下载主题/子主题。
下列过程用于发起玩具网络:
●当开启玩偶时其执行检查以确定是否存在可加入的现有网络-使用发送器/接收器212来完成该检查。
●如果不存在可用的网络,则该玩偶变为控制器,并且自动的建立网络-无线模块104适用于在需要的地方创建网络。
●每个开启的后续玩偶发送他们在存储器中存储了的玩偶ID号和主题ID号-经由发送器212来发送该信息。
●控制器检查主题并且仅允许具有与控制器相同主题的玩偶加入-控制器单元对发送的数据与已经在存储器中存储的数据执行比较。
●一旦两个或更多玩偶已经加入该网络,则可能发起会话。
●用户通过按动按钮等发起会话,并且控制器将开始指示其它玩偶说些什么的会话。
●用户可以在任何时刻再次按动按钮以停止会话。
控制器单元运行程序以产生会话,然后向从属单元发送信息以通知他们访问哪个音频文件(音频文件对于每个个性类型是不同的,但是对每个音频文件的引用对于每个单元是相同的)。控制器单元发送单词/短语的标识符以访问从属单元的存储器。从属单元通过发送验证要使用的短语以及该短语所需的预期时间长度的消息来对消息的接收进行肯定应答。从属单元然后使用语音编译器来编译该单词/短语,然后使用扬声器来说出该短语。一旦从属单元已经完成说出该短语,则其向控制器单元发送信号表明其已经完成了并且该会话可以继续。
然后控制器单元以相同方式指示下一个说话者,并且以此类推直到该会话结束。下面提供与会话构建有关的其他细节。
通信协议
玩具使用通信协议来进行通信;消息的格式如下:
[MessageID,SendingToy_ID,ReceivingToy_ID,MessageType,Parameters]
MessageID是标识该消息的唯一号码。从控制器玩具发送的每个消息具有唯一标识号。
SendingToy_ID指示发送消息的玩具。
ReceivingToy_ID指示接收消息的玩具。
MessageType指示消息的类型,例如START、STOP、SAY。
Parameters是与消息类型有关的任意其它所需信息。仅SAY消息具有参数,其标识要说的短语。
因此,消息的范围包括:
[MessageID,SendingToy_ID,ReceivingToy_ID,START]
[MessageID,SendingToy_ID,ReceivingToy_ID,STOP]
[MessageID,SendingToy_ID,ReceivingToy_ID,SAY,PhraseID]
这些消息的中每一个将产生下列形式的肯定应答:
[MessageID,SendingToy_ID,ReceivingToy_ID,Ack,Parameter]
Parameter仅用于对SAY消息进行肯定应答并且其指定短语的持续时间。控制器单元使用短语持续时间参数以在发送下一个消息之前等待适当的时间长度。
假定玩具1与玩具2正在进行通信,则每一个消息的正常事件序列如下:
[MessageID,1,2,START] [MessageID,2,1,ACK]
[MessageID,1,2,SAY,PhraseID][MessageID,2,1,ACK,DURATION]
[MessageID,1,2,STOP]  [MessageID,2,1,ACK]
START命令指示接收玩具预期接收其它输入消息。控制器玩偶然后发送包含从属玩具需要使用的短语的phraseID在内的至少一个消息。分别向从属玩具发送每个phraseID,从而可以发送这种类型的多个消息以构建整个句子。STOP命令用于向从属玩具指示在该序列中不存在其它消息。
在接收到消息时,从属玩具向控制器发送对消息的接收进行肯定应答的消息。对于START和STOP肯定应答,控制器立刻继续会话程序;然而对于SAY命令来说,控制器玩偶在等于SAY肯定应答的DURATION的延迟之后才继续。如果没有接收到肯定应答,则重发消息直到接收到肯定应答为止。当该重发发生很多次时,玩偶将重置并且会话将停止;例如,在1,000-2000,2000-5000,5000-10,000次或更多次之间重发送该消息。
在每一个短语的结束处还附加“短语结束标志”以通知从属单元短语何时已经结束。此时,从属单元将向控制器发送指示其已经停止说话的消息。在接收到该消息时,控制器指示下一个单元说话,下一个说话者可以是控制器或另一从属单元。
对于指示语音的备选,当控制器玩具是坦克时,传送至从属单元的指令采用从属单元坦克应当移动的方向的形式。因此,应当用movementID来替代PhraseID。这样,控制器坦克将模拟战争等。玩具坦克配备对网络中其它玩具坦克进行定位的装置,使得他们可以以协同的方式来移动。该装置可以采用玩板的形式,玩板具有可以与玩具进行通信的位置传感器,或其它定位装置,比如摄像机、应答器等等。
会话构建
会话引擎实时地构建会话。备选地,在发起会话之前构建整个会话然后存储在存储器中,并且有效率地运行该会话直到结束。然而,在两种情况中构建的会话将基于特定随机选择。
会话是基于在网络中出现的单元的,因此将出现的单元的数目以及出现的单元的类型用作控制变量。每个会话的开始是固定的,比如当玩具是玩偶时“哇,我们在动物园,现在我们该做些什么?”。但是存在多个开始短语。然后从该时刻开始随机地选择会话。控制器单元选择第一单元说话然后随机地转移至任何开始短语。
该系统能够使用包括下列大量不同类型命令在内的指令集合:
●变量定义和变量设置
●上下文引用和切换
●条件流程控制
●无条件流程控制
●说出(uttering)短语
定义多个语句以控制会话的流程并且,这些语句如下:
SELECT NEXT-选择下一个说话的单元。存在该语句的许多变型,将在下面进一步详细讨论。
SWITCH-切换至下一个单元。
switch speaker-移动说话者指针到另一说话者
switch finish-该语句用于完成会话
SAY-指示单元说什么
SET-该语句用于设置变量,如“SET pet([1,dog])”。SET语句用于设置当前说话者的变量,或其可以用于设置全局变量。
TEST-该语句用于测试是否已经设置变量,或例如是否已经使用了分支。如果TEST为真则设置标志。存在两种形式的TEST语句:
TEST EQ-该语句测试两个表达式是否相等,并且如果他们相等则产生正的标志;例如“TEST EQ &ME.PET &UNDEF”将测试当前说话者的宠物变量是否未定义并且如果是则将产生正标志。
TEST NE-该语句测试两个表达式是否不等,并且如果他们不等则将产生正标志。
BRANCH-该语句用于分支进入该会话的另一部分。例如“BRANCH大猩猩:”将分支进入“动物园”主题的大猩猩部分;其中“大猩猩:”是该主题部分的标签。这是无条件语句并且在程序到达分支语句时将一直使用。
BRANCH_F-基于来自TEST的标志的条件性分支。因此,仅当从TEST语句产生的标志为正时,才使用分支语句。
CHOOSE-该语句使得控制器随机地选择要进行的标签。该语句类似于SET语句,在该语句中可以使用权重来控制进行标签的概率。
CHOOSE_F-基于来自TEST的标志的条件性选择
以剪辑(cropped)的形式来存储音频文件以减少存储要求,即在每个音频片断之前和之后没有静音。为了产生更逼真的语音,提供具有不同长度的许多静音音频文件,可以将它们放在剪辑的音频文件之后或放在每个短语或单词之间。通过SAY语句来与引用任何其它音频文件的方式相同的方式来引用这些音频文件。
可以用SET语句来定义变量以存储与每个玩偶相关联的参数;这一点在下面将进一步详细讨论。存在可以定义的两种类型的变量:
●局部变量-这些变量是与每个玩具/玩偶相关联的变量。在每个玩偶的数据集合中创建局部变量。通过DEFINEVARIABLE_NAME语句来创建玩偶变量。
●全局变量-这些变量是与“主题”相关联并且不与每个玩偶相关联的变量。通过DEFINE G_VARIABLE_NAME语句来创建全局变量。
在主题内定义的变量不具有分配给它们的值,直到在会话期间才赋向它们分配值。
向变量设置值
在会话期间必须向已经定义的变量设置值。这是通过SET语句来完成的。该SET语句有随机特征组成,该随机特征允许利用从如下值集合中随机选取的值来设置:
SET VARIABLE_NAME([w1,value1],[w2,value2],...,[wn,valuen])
该语句的操作基于随机数的输出结果将VARIABLE_NAME的值设置为value1、value2、...、valuen中的一个。选择哪个值的概率是基于权重w1、w2、...、wn的。
例如语句
SET COLOUR([1,red],[1,blue],[1,green])
以相等的概率将变量COLOUR设置为红、蓝或绿。在当前玩偶的上下文中设置玩偶变量。
附加地,SET_F语句用于仅在TEST语句已经产生condition_flag情况时才设置变量。在该情况中当且仅当condition_flag有效时才设置变量。
上下文引用和切换
指针用于存储与说话者有关的信息,并且使得控制器玩偶能够参考其他玩偶。当构建会话时,这些指针用于创建可感觉的会话;下面是所使用的指针:
前一个说话者(PREV)=前一个说话者的ID号
当前说话者(ME)=当前玩具的ID号
下一个说话者(NEXT)=所选下一个说话者的ID号
玩偶的会话引擎的重要特征是哪个玩偶是当前说话者的上下文。该上下文指代当前玩偶可访问的变量。仅前一个、下一个和当前玩偶的变量可用于访问。由如上定义的,三个引用指针来处理上下文的构思。
通过使用SELECT命令和SWITCH命令来实现上下文的控制。存在SELECT命令的多个变型。它们是:
●SELECT NOTME-随机选择所选玩偶组中除了当前玩偶之外的任何玩偶作为下一个说话者。
●SELECT NEXT-随机地选择所选玩偶组中的任何玩偶作为下一个说话者。
●SELECT PREV-选择与前一个说话者相同的玩偶作为下一个说话者。
●SELECT NAME-选择具有NAME名字的玩偶作为下一个说话者。该SELECT命令的变型是用于完全脚本会话的。
然后通过使用SWITCH命令来改变上下文。存在该SWITCH命令的两个变型:
●SWITCH SPEAKER label-其切换说话者的上下文并且将分支进入由标签指定的指令。在切换上下文上,前一个说话者(PREV)变为等于当前说话者(ME),当前说话者(ME)变为等于与下一个说话者(NEXT),并且下一个说话者(NEXT)未定义。
●SWITCH FINISH-其是用于结束会话的命令。
条件性流程控制
在会话期间,流程将依赖于不同变量的值。这可以用下列命令来完成:
●TEST EQ value1 value2-如果value1等于value2其设置condition_flag。
●TEST NE value1 value2-如果value1不等于value2其设置condition_flag。
●通过使用&CONTEXT.VARIABLE_NAME引用可以由value1和/或value2来引用变量。例如如果当前说话者(ME)的名字与前一个说话者(PREV)的名字相同,则指令TEST EQ&ME.NAME&PREV.NAME设置condition_flag。
●BRANCH_F label-如果设置condition_flag,则其分支进入由标签指定的指令,否则使用下一个指令。
●CHOOSE_F([w1,label1],[w2,label2],...,[wn,labeln])-如果设置condition_flag,则其基于随机选择使用权重w1、w2、...、wn来分支进入由label1、label2、...、labeln之一指定的指令,否则使用下一个指令。
每次玩偶要求了解与另一个玩偶有关的变量时,使用TEST语句来询问该变量是否未定义、或者否是是特定值。然后可以将这一点用于流程控制;例如,如果变量PET未定义,则玩偶将询问其他玩偶具有的宠物类型,并且如果设置了该变量,则该玩偶将询问其他玩偶该宠物是什么颜色,等等。
无条件流程控制
有时需要能够无条件地改变指令的流程。在该情况中不使用TEST语句,并且始终执行BRANCH或CHOOSE语句。使用下列语句来完成这一点:
●BRANCH label-其无条件地分支进入由标签指定的指令。
●CHOOSE([w1,label1],[w2,label2],...,[wn,labeln])-其以基于随机选择使用权重w1、w2、...、wn来分支进入由label1、label2、...、labeln之一指定的指令
说出短语
会话引擎的重要部分是说出短语。这是用下列语句来完成的SAY(phrase1,phrase2,...,phrasen)命令。
该命令使作为当前说话者(ME)的玩偶说出短语phrase1、phrase2、...、phrasen。
示例脚本
下面是脚本的简短示例。
    DEFINE COLOUR
    DEFINE GARMENT
    Loop:
       SET COLOUR([1,red],[1,blue],[1,green])
       SET GARMENT([1,dress],[1,blouse],[1,hat])
       SAY(hello my name is,&ME.NAME,and I have a,
&ME.COLOUR,&ME.GARMENT)
       SELECT NOTME
       SWITCH SPEAKER Loop
该示例可以通过选择三种颜色之一来搭配三种外套之一来为每一个出现的玩偶说出九种不同的事情。
使用多个分支来构建该会话。每个分支是与主题有关的会话的不同区域。例如,在“动物园”主题中,可用的分支是“大猩猩”、“爬行动物”以及“冰激凌”。每个分支具有与其相关联的短语/单词并且根据选择随机地对它们进行选择。玩偶的响应取决于分支、玩偶的个性类型、以及可能响应的加权。
例如,当需要选择来确定要采用的下一个分支时,会话将继续直到两个(或更多)玩偶选择相同位置连续进入为止。由于在选择要采用的分支之前要求一致,这提供了更逼真的会话。
会话在分支内继续,直到到达使得控制器玩偶能够选择另一要采用分支的部分为止。此时进行与要采用的分支有关的另一判定。为了限制会话的长度,仅那些还没有使用的分支可用于选择。
向可以随机选择的每个变量(分支、短语、单词或下一个说话者)附着权重。当随机地选择短语/单词或分支等时,权重改变了选择短语/单词分支等的概率。例如,如果所有短语具有权重1,则它们将都具有相同被选中的概率。可以调整权重以产生更逼真的会话。如“今天我从我的自行车上掉下来”的短语比如“我今天早上吃了早饭”更不可能出现。因此,后一个短语将具有远远大于前一个的权重。因此,仅偶尔地会话引擎使单元说出“今天早上我从我的自行车上掉下来”。
在另一示例中,所使用的权重可以偏向于前一个玩偶并且将因此引起两个玩偶之间的短小会话。
为了限制会话长度,对主题的任何一个分支内的时间量进行控制。例如,这可以用作另一权重参数来减少在一个分支中花费的时间,并且增加在另一分支中花费的时间量。这在没有不确定继续的概率的情况下帮助达到会话结束。
会话的长度可以是随机地;然而,在一些情况中,会话将继续直到已经设置所有的变量为止。例如在宠物主题中,会话将继续直到已经完全地描述了所有玩偶的宠物为止。这可以通过执行检查以确定是否定义了所有变量并且仅当定义了所有变量才允许会话结束来完成。
由于当前说话者仅具有前一个说话者和下一个说话者的上下文,不能始终确定何时已经设置了所有玩偶的变量。因此,在另一示例中,会话将继续直到已经当前上下文中对所有三个玩偶(即当前玩偶、前一个玩偶和下一个玩偶)设置了所有的变量为止。备选地,会话将继续直到对于连续的两个或更多玩偶集合所有变量是已知的。
会话引擎可以处理多个玩偶,并且潜在地处理相同类型的多个玩偶,例如2个Jane玩偶。当初始化网络时,每个加入网络的玩偶与网络节点相关联。然后系统使用关联的网络节点而不是用玩偶的名字来引用玩偶。这使得在不出错的情况下能够引用多个具有相同名字的玩偶。
还可以预确定完整的会话并且将其直接下载至玩偶。例如,可以将SimponsTM的情节下载至一组SimponsTM玩偶中。由于会话是由人产生的,或备选地会话是由会话引擎产生并且由人编辑的,因此预确定的会话使得玩偶能够具有特别逼真的会话。当产生预定会话时使用相同的指令;然而移除随机元素使得每次被激活时的会话是相同的。
上述会话引擎可以独立地用于产生会话。例如,该会话引擎可以用于电视节目(如卡通)的自动脚本书写。
在一个特定实施例中,为了产生主题,将主题写成脚本,然后使用编译器来编译该脚本。执行运行时的错误检查以确保该主题不会产生永远不结束的会话或任何其它错误,然后执行合理性检查以确保会话不是完全无意义的。然后一旦已经记录了音频文件则可以能够将该主题下载至玩具。在下面进一步详细描述的备选实施例中,提供一种创作工具以简化主题脚本的产生。然而,主题内会话的基本原则依然适用。例如,在两个实施例中存在选择说些什么的相同方法。
玩偶选择
如图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连接与PC 304连接,并且该PC经由标准连接类型与互联网306连接。互联网向PC提供到网站308的连接,网站308包含可下载主题310。主题包含不可由用户选择的子主题312(由于它们取决于所连接的玩偶)。例如,不会向使用玩偶的ID号标识的Jack玩偶呈现Jill子主题。主题对于所有个性类型来说都是一般的。除了主题的表达是不同的并且取决于玩偶的个性类型以外,子主题与主主题是相同的。因此音频文件对于每个子主题来说是不同的-不同的声音、不同的用词(相同的意思)、等等。
备选地,下载到玩偶中的第一个性可以用于将后续下载的个性限制为与第一类型相同。例如,如果将玩偶设置为Jack,当连接该玩偶时网站将识别出Jack子主题,并且仅向用户呈现Jack子主题。网站通过访问玩偶的名字变量(即,Jack)并且将其与子主题的名称的列表进行比较来识别子主题。
下载的子主题包括用于所选主题的脚本(比如“动物园”)、关联的个性类型、使得玩偶能够发出会话声音的相应的音频文件、以及用于确保网络内的所有玩偶具有相同主题的主题ID。
PC 304适用于在玩偶300和网站310之间连接,以使得可以以有效率的方式来下载主题。此外,仅在玩偶上存储主题并且因此必须将每个要求该主题的玩偶与网站连接。因此,如果一个用户具有两个玩偶并且针对每个玩偶要求相同的主题,则用户必须将网站与每个玩偶连接,并且下载正确的子主题。
备选地,玩偶可以在任一时间存储多个主题。玩偶一次使用一个主题来进行通信;然而,主题可以由控制器在任意时刻进行改变。因此,玩偶可以使用“体育”主题,然后使用“动物园”主题继续。这使得会话能够持续更长时间并且还组合以扩展玩偶的可用性。
玩偶都具有缺省主题,使得当它们不具有与其它玩偶相同主题时可以简短地进行通信。缺省主题包含几个基本短语,并且可以指导用户连接至网站以下载主题。
为了确保主题是安全的,可以在下载至玩偶之前使用玩偶的唯一ID号对数据进行加密。然后每个玩偶的唯一ID号可以用于对主题内的数据进行解密。这可以用于确保每个玩偶与网站连接以下载主题。例如,即使每个Jane玩偶将使用相同的子主题,对于每个特定玩偶来说对数据进行不同编码,并且因此该数据对于除了特定玩偶之外的玩偶是无用的。
个性的表达和脚本主题
如前所述,每个不同的主题具有能够表达不同个性的各种子主题。每个主题的脚本是不同的并且用于根据该主题产生会话。然而,每个主题中的每个子主题具有产生会话的相同的脚本,但是子主题中使用的语音是不同的。这使得多个个性能够可用于相同的主题。
为了增加会话的可变性,存在可用于问相同问题的多个随机选择。所以例如存在多种方式来问简单的问题,并且这可以依赖于主题/子主题,例如:“我们接下来做些什么?”;“我们现在将做些什么”;或“接下来呢?”。每个子主题可以具有用于表示着相同事情的不同表达。例如,一个子主题可以说“喂,你好吗?”,并且另一个说“嗨,最近怎么样?”。短语的意思基本相同但是表达不同,从而个性是不同。这样,每个主题可以具有任何数目的子主题以创建多彩和有趣的会话。这样,增强了用户体验,并且允许更有变化的游戏玩法,而无需大量存储器。
可以将个性特点归于一个以及相同的主题。因此可能存在相同主题的Jack版本和Jill版本。Jack版本是子主题,并且Jill版本是子主题。
将玩偶的名字(即Jane)与个性类型链接,使得由Jane玩偶表达的个性对于每个主题是相同的;仅仅是主题的内容将改变。这使得玩偶保持一致并且允许玩偶在不同情形中以类似的方式作出反应。
备选地,在由网站首先对玩偶进行初始化时,玩偶的用户可以选择玩偶的名字以及玩偶的个性。这使得用户能够更加与玩偶有关。然后在玩偶内的存储器中存储玩偶的名称和个性、与ID相关联的每个属性,以及在例如下载其他子主题时使用。
可下载主题是表达和脚本的组合并且指示了会话的类型。
还可以裁剪(tailor)玩偶的美感和词汇,使得对于目标听众来说是适合年龄的。不同的主题可以具有适合年龄的等级。这实现了例如针对青少年市场的嘻哈主题的玩偶。
此外,可以提供仅允许由离散的玩偶集合(可能是单一玩偶)使用的短语。当选择该短语时,执行检查以确保其可以由当前玩偶来使用。如果该短语不能由该玩偶使用,则选择另一短语。
类似地,指令的部分可以进行限于离散的玩偶集合,以将其他随机性引入会话中。
备选地,玩具可以是坦克形式或其它这样的玩具。在该情况中,玩具个性的表达是与语音相对的移动形式。例如,一个玩具坦克可以具有“防御”个性并且另一玩具坦克可以具有“进攻”个性。
创作工具
创作工具是可以用于为多个玩偶创建会话主题的应用。由于会话可能遵循的潜在分支的数目很大,需要大量的时间来创建如上所述的会话。因此,为了让该过程更有效率,提供创作工具以协助该过程。尽管在个人计算机等(比如如图10所示的PC 1000或膝上型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位于PC 1000或膝上型1002之内。这里使用的术语内容意味着脚本数据、表达数据、主题数据、玩偶数据以及可以由用户输入到创作工具中的任何其它数据。
图12a是第一界面窗口,并且具有下列选项:
添加主题,1100:其用于创建新的主题并且一般是使用的第一选项。其如图12b和12c所示打开主题表单,该主题表单要求下列输入:
名称:主题的名称。这是spoken text string的占位符
玩偶的数目:该主题中支持的玩偶总数
描述:该主题的描述
主题属性:该主题的全局属性,如位置
玩偶属性:玩偶的局部属性,如情绪
这些输入等于如上述所述构建会话所需的输入。如参照创作工具实施例描述的,如上所述,主题和玩偶属性分别等于全局和局部变量。然而,创作工具向主题开发者提供结构化的输入窗口以使得更有效率地输入信息。
更详细地,主题属性包含名称和可选的值。该值可以是用于spoken_text_string的占位符。如下所述,在已经完成主题之后创建spoker_text_string。spoken_text_string是可以在会话期间访问的声音文件。例如,如果主题位于动物园中,可能的主题属性将是位置=“动物园”,并且可以由玩偶来使用;例如说“嗨,我觉得动物园真有趣”,其中使用主题属性“位置”来访问单词“动物园”。
由于特定主题中的每个玩偶要求属性的值,在界面窗口中创建玩偶属性。例如,如果属性设置是“情绪”,则将对每个玩偶赋予该属性的值,比如“高兴”、“悲伤”、“愤怒”等。在会话期间,会话引擎可以访问任何玩偶属性(局部变量),并且在会话中使用该玩偶属性。
编辑,1202:其用于编辑现有的主题。例如,选择主题Alon#1,1206,并且按动编辑将允许用户编辑Alon#1主题的细节。
移除,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”代码时,将所有位置标签转换为youme_conversation_struct_t结构(用于该结构和这里描述的其他结构的C代码命名习惯)的阵列的索引,其与上下文位置相对应。
●语句1502-与在随机选择过程中使用的权重一起的、玩偶能够说的语句列表。该语句包含作为spoken_text_strings的短语列表。这是在会话中该上下文点可以由具体玩偶说出的语句的列表。将每个语句用方括号括起来,并且每个语句可以用逗号分隔(例如[语句1],[语句2],[语句3]),或在如图15所示的上下文输入窗口的分开的行上输入。语句包含用于随机选择的权重以及短语的列表。在本情况中,加权以上面参照条件性流程控制描述的加权(比如SET、BRANCH或CHOOSE控制)类似的方式进行操作。每个短语是显式的的spoken_text_strings,或者是对主题属性或玩偶属性的引用,例如语句可以引用主题的位置或玩偶的情绪。在双引号中定义显式spoken_text_strings作为文本(例如“喂,你好吗”)。
引用采用下列形式:
■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_procedure。default_say_procedure使用权重来随机地选择可用语句中的一个。备选地,可以使用下拉列表来选择提供不同行为的任何可用的内置说过程。最终,如果需要定制行为,则可以在此处输入所需说过程的“C”代码。
●转换,1506-用于选择下一个玩偶的过程。其可以是上述的任何过程,包括:NOTME、ANY、ME、PREV、FINISH或玩偶名字之一,或者可以在此处输入的一些“C”代码。如果为空白则使用default_transition_procedure,这是NOTME转换。备选地,存在可用的转换程序下拉列表。该列表包含下列内置转换,并且在创作工具中经由下拉菜单来访问(每一个如上详细描述的):
■NOTME      随机选择除了当前说话者之外的任何玩偶
■ANY        随机选择任何玩偶
■ME         选择当前说话者
■PREV       选择前一个说话者
■玩偶的名字 选择该玩偶
附加地,如果需要定制转换行为,则可以在此处输入所需转换过程的“C”代码。
●下一个,1508-与在随机选择过程中使用的权重一起的、接下来想要去哪里的分支选择的列表。这是用于下一个上下文位置的分支选择的列表。每个分支选择在方括号中括起来并且用逗号分隔。分支选择本身包含与用于随机选择的权重一起的位置标签列表。它们在格式上与以上BRANCH命令相似。以下是对该字段的有效输入的示例(每一个如以上详细描述):
■[(1,label1),(1,label2)]-包含具有相等权重的两个标签选择的一个分支选择。
■[(1,label1),(1,label2)],[(2,label3),(3,label4)]-两个分支选择,第一个分支包含具有相等权重的两个标签选择,第二个分支包含具有权重2和3的两个标签选择。
●分支,1510-用于影响分支的过程,并且格式与以上参照会话构建描述的格式相同。否则可以在此处输入一些“C”代码。该字段用于指定处理分支选择的分支过程。如果为空白,则使用default_branch_procedure。default_branch_procedure使用下一个列表中的第一分支选择,并且使用提供的权重来随机选择标签之一。然后将上下文改变至具有所选标签作为其位置标签的上下文行。备选地,存在可用的内置分支程序的下拉列表。可以在该下拉列表中提供如上所述的分支过程。
●属性,1512-属性、set_flag、以及值和用于随机选择的权重的列表的列表。该字段用于指定用在该上下文点处的值设置的任何属性,即,主题开发者可以将玩偶属性“情绪”设置为高兴。如果为空白,则不设置任何属性。每个要设置的属性在方括号中括起来并且用逗号分隔。在方括号中在set_flag之后指定的属性,set_flag指定了对该属性设置一次还是可以重置该属性,之后是值和用于随机选择的权重的列表。该属性字段等于如上所述的SET命令。以下是对属性字段的有效输入:
■空白    不设置属性
■[me.attribute1,set,(1,“喂”)]如果还没设置,则将一个属性设置为spoken_text_string“喂”的值
■[me.attribute1,reset,(1,“喂”),(1,“嗨”)],[me.attribute2,set,(1,“宠物”),(1,“保罗”)]设置两个属性。即使已经设置了,也将第一属性设置为“喂”或“嗨”。如果还没有设置,则将第二属性设置为“宠物”或“保罗”。
●设置,1514-用于影响属性值设置的过程。如果空白则使用default_set_procedure。default_set_procedure将每个指定的属性设置为考虑到set_flag的值的适当选择。“设置”的set_flag意味着仅当还没有设置属性时可以设置该属性。“重置”的set_flag意味着可以一次又一次地设置该属性。备选的,存在可用的内置设置过程的下拉列表。最终,如果需要一些特殊的定制设置行为,则可以在此处输入所需设置过程的“C”代码。
如上所述,针对每个玩偶重复下列字段、语句、说、转换、下一个、分支、属性以及设置。字段:说、转换、下一个和分支是对于在玩具/玩偶之间交互的方法做出贡献的所有参数,并且全部等于以上参照会话构建描述的命令。
上下文选项重复用于向会话添加上下文行直到完成会话。
当已经完成主题时,包括定义每一个玩偶以及每一个上下文,创作工具提供保存功能。该选项用于保存会话,并且在一个示例中,其创建下列目录:
c:\youme\themes\theme_name
c:\youme\themes\theme_name\doll_name针对每个玩偶
c:\youme\themes\theme_name\doll_name\audio针对每个玩偶
因此,在主目录文件夹“theme_name”中保存单一主题所需的所有文件。为每个玩偶创建子文件夹以使得有效率地管理针对每个玩偶的下载。最终,每个玩偶子文件夹具有存储该玩偶所需的音频文件的文件夹。
该选项还创建下列文件:
c:\youme\themes\theme_name\theme.txt-包含主题数据作为文本文件
c:\youme\themes\theme_name\doll_name\doll.txt-包含玩偶数据作为文本文件
c:\youme\themes\theme_name\doll_name\audio\A00001.wav
c:\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分配文件名A0000n.wav。文件名中使用的n还用作当需要“C”代码的输出时短语的索引。在一个实施例中,记录器1112提示演员扮演所需的spoken_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来创建并且输出每个玩偶的所有不同短语(spoken_text_strings)的列表;这是每个玩偶所需的短语的词典。该词典产生引擎1110与服务器1004内的数据库1122进行通信,并且基于在数据库内的主题上存储的信息来编译该列表。该词典是表达/语句和分配给该表达/语句的ID号之间的有效率的查找表。
在每个上下文行的语句字段和属性字段中定义每个玩偶使用的短语。这些短语可以是显式定义的spoken_text_strings或可以是对定制属性的引用。只要定义显式的spoken_text_string,从A00001.wav开始向该显式的spoken_text_string顺序地分配诸如A00xxx.wav的文件名。编号xxx还是短语索引。可以在下列文件中保存spoken_text_string的列表:
c:\youme\themes\theme_name\phrases.txt-其包含在该主题中使用的所有短语的列表
c:\youme\themes\theme_name\doll_name\phrases.txt-这些包含每个玩偶使用的所有短语的列表
这些文件将包含下列格式的文本:
A00xxx作为文本的关联短语
这样,将创建大量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示出了附着至PC 304并且与玩偶100进行无线通信的USB通信保护器1600的图示。该保护器包含无线模块104、IR/RF发射器/接收器212、以及接口1602。除了接口1602之外,这些组件与如上所述的玩偶100中包含的组件是相同的。然而,使用PC 304作为处理器1604,而不是具有玩偶100所有的独立处理器的保护器,从而PC有效率地变为能够与物理玩偶100进行通信的虚拟玩偶。该虚拟玩偶配备在PC监视器上示出的动画化身,其可以与真实玩偶在外观上相似,并且从而化身的动画与玩偶的语音同步。为了运行该会话,PC在存储器1606中存储有仿真程序,用于仿真玩具的处理器。备选地,如上所述,创作工具输出针对基于PC的虚拟玩偶的特定代码。在两种情况中,主题会话数据用于使用在PC上运行的应用来运行会话,该应用用于仿真玩具/玩偶的固件。经由PC扬声器来输出玩具/玩偶的语音。
接口1602是USB连接,并且提供将无线通信保护器1600与PC 304连接的有效率的方法。保护器使用的无线通信协议与在这里所述的玩偶之间所使用的通信协议是相同的,即IEEE 802.15.4。
当用户连接至网站时,他/她能够使用USB通信保护器来便于在物理玩偶与网站内动画的虚拟玩偶之间的会话。这样,单一用户可以在不需要多个物理玩偶的情况下使用玩偶的会话引擎的功能。另外,虚拟玩偶可以参与与多个物理玩偶的会话。例如如果两个用户分别具有带有USB通信保护器的膝上型计算机,则虚拟玩偶还可以与其它虚拟玩偶互动。
游戏玩法
在另一实施例中,玩具还适用于与儿童玩游戏。例如,玩具可以玩棋盘游戏(board games),如Snakes和Ladders、Mousetrap、Ludo、或使用骰子玩的任何其它基于机会的游戏。
该玩具配备用于模拟骰子的随机数发生器。此外,该玩具适用于对通过棋子(playing piece)沿着棋盘前进的间隔数目进行计数。玩具向儿童发出可听的信号来使棋子移动所需数目的间隔。一旦儿童移动了棋子,儿童通过按动按钮等向玩具指示轮到下一个玩具/儿童。备选地,棋盘也可以是交互式的,并且包含传感器等以接收来自游戏棋盘的、与计数器的位置有关的信息。这样持续玩直到出现胜利者。
图5提供了还包括游戏引擎400在内的控制器玩具200的示意图。其余组件与图2和3中描述的组件相同。游戏引擎400包括棋盘存储器402、随机数发生器404、位置RAM 406以及肯定应答接收器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!”的声音。计数机制对文本循环适当的次数,然后在位置RAM 406内记住最终位置。所以例如当虚拟骰子掷出4时,访问数字列表4次以产生最终结果。
附加地,玩偶具有接收来自由儿童激活的外部随机数发生器的的信息的能力。这样,儿童可以与玩偶玩,并且玩偶可以跟踪所有玩家(包括该儿童)的棋子以确定何时出现胜利者。
图6示出了玩游戏的过程的流程图。由用户发起游戏(步骤500),并且控制器玩偶将执行检查(步骤502)以确定玩家的数目。控制器玩偶然后将使用随机数发生器等来判定第一玩家(步骤504)。控制器玩偶然后将针对第一玩家掷虚拟骰子(步骤506),或如果儿童是第一玩家则控制器玩偶要求儿童掷出他们的骰子。控制器玩偶然后指示玩家在棋盘上将计数器/棋子移动相应数目的方格(步骤508),然后等待儿童已经移动了计数器的肯定应答(步骤510)。在步骤512,在向儿童提示已经移动了计数器的肯定应答之前,控制器玩偶等待预定秒数,如2、3、5或8秒。一旦控制器玩偶接收肯定应答,则执行检查以确定该玩家是否已经赢得该游戏(步骤514)。如果该玩家还没有赢得游戏,则游戏继续至下一个玩家(步骤516),并且过程从步骤506继续进行直到玩家获胜(步骤518)。
该游戏引擎适用于以上述方式来玩任何基于规则的游戏。
备选地,该系统可以实现常规编程语言(如C)以运行更复杂的算法来玩更复杂的游戏(如国际象棋)。将使用上述相同语言来产生会话,并且将可以根据C程序来引用该语言。
这样的玩具和玩偶向儿童们提供不同交互时机,并且增强他们游戏。
主题示例
附录I中提供了玩偶之间的主题会话的四个示例。这些示例提供了构建会话的不同方法。存在两个随机产生会话的示例(动物园和宠物主题),一个完全脚本会话的示例(Mr X主题)以及一个玩游戏主题的示例(Snakes和Ladders主题)。
将单元的处理器102与其它模块(如语音编译器206、语音数据库208以及参数存储器216)结合使用来解释主题内的脚本。例如当定义变量时,在参数存储器中分配存储。每一次发起会话时,在参数存储器中分配变量。这使得能够改变主题(即,从动物园到宠物),并且为新的变量分配了恰当的存储资源,而不会于来自前一个会话的变量的冲突。此外,还在参数存储器中为参数(比如PREV、NEXT和ME)分配存储。这使得SELECT语句能够引用脚本内的参数。
当使用SAY语句时,控制器玩偶使用上述通信协议以使用无线模块和发射器向有关玩偶发送命令,或如果控制器玩偶是当前说话者时,使用控制器玩偶的相关模块。使用要求说话的玩偶中的语音编译器206来访问语音数据库208中的适当音频文件。例如,动物园主题内的具有SAY语句的第一行是“SAY(I think we’ve seen everything now,p03,letsgo home)”。该语句包含对语音数据库内音频文件的三个引用。那些引用是“I think we’ve seen everything now”、“p03”以及“lets go home”。它们都引用音频文件但是“p03”引用指代了特定长度的暂停。该暂停是用于将音频文件适当分隔开的空白音频文件。语音编译器206然后使用扬声器210来播放该音频文件。
附录I内的示例主题提供使用以上定义的语句的其它示例。在每一个情况中,处理器对代码进行解释并且使用适当的模块来执行语句。
在备选实施例中,如上所述处理器不使用内置解释器,而是每个主题包含二进制数据文件,该文件包括使得处理器能够正常工作的所有处理器控制指令。这有效率地在需要时能够利用新特征对处理器的固件进行更新。可以使用创作工具来产生下面提供的主题示例。然而,控制玩具/玩偶的指令将是编译的“C”代码的二进制文件。
处理器和关联电子元件
图8示出了图2和3中所示的示意图的潜在生产版本的电路图和部件列表的示意-附录II详述了图8中的组件。图9示出了备选电路图的示意图-附录III详述了图9的组件。存在在生产电路中包括的备选方案,并稍后讨论。
电路包括:
●Jennic无线控制器
生产电路使用Jennic IC,包含RF电路,并且将固件和数据组合在单一大型闪速存储器IC中。Jennic无线控制器可以例如使用Zigbee无线通信协议来在玩偶之间进行通信。
●电池充电器
生产电路使用特殊设计的部件来从USB端口充电并且在充电的同时也向电路供电
●音频放大器
生产电路上的音频放大器是D类音频放大器。这是非常有效率的(~80%)。
技术选项
本节讨论图8中的生产电路中还没有包括的可能备选方案。
●USB接口
FTDI FT245RQ
选择该组件主要由于其为包括USB驱动软件的现成IC,减少了开发工作。其主要缺点是使用了Jennic上的大部分DIOx线路。尽管这对于当前设计来说不是问题,如果其他选项(例如语音压缩IC)需要DIOx线路,则该部件将不是适合的。
备选实施例
下面的两个备选方案都是具有内置USB和SPI从属接口的8比特微控制器IC。尽管两个制造商都提供了参考设计、应用注意事项等等以协助开发,但这些微控制器都需要使其工作而开发的固件和软件。这些部件的优点在于它们可以与Jennic SPI接口连接,并且仅需要1个DIOx线路,将其他的DIOx线路释放以作它用。
玩具不具有复杂的USB要求;唯一的要求是下载可编程到闪速存储器中的数据。该设备不需要遵循任何一般的设备功能,例如记忆棒。这减少了所需的开发工作。
选择下面标识的部件,这是由于它们的目的是简单、低功耗嵌入式应用并且具有SPI从属接口。然而,来自制造商家族或来自其它制造商的其它设备也可能是同样适合的。
Cypress CY7C63833-LFXC
Atmel AT90USB82-16MU
电池
锂离子(Lithium-Ion)
图8和9所示的电路使用锂离子(Li+)电池。出于以下三个原因选择Li+电池:
i)形状-可具有扁平棱柱(flat prismatic)封装,对于示范项目来说是方便的。
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碱性=1150mAh1.5V
●AAA NiCad=300mAh1.2V
●AAA NiMH=750mAh1.2V
●Li+棱柱=620mAh3.7V
注意:Li+电池保持与相同级别的其它电池两倍的功率,这是由于其电压是两倍大。两个AAA电池必须串联使用,或这单一AAA与升压转换器一同使用,并且其容量会减半。
对图9所示的电路的功率估计。
估计的电流消耗=当说话时为136mA,其他情况为48mA。这是从下述中得到的:
●Jennic模块=48mA
●音频驱动器:
250mW最大8ohm扬声器功率=175mA,但是在2个玩偶之间的会话中,每一个玩偶说一半的时间=>88mA。
注意:在全部时间以最大功率来驱动扬声器是不可能的,然而,音频放大不是100%效率的,因此88mA是合理的折中。
●电路的其余部分=可忽略
基于示范估计的电池寿命
  电池   连续会话   上电但不说话
  单AAA碱性   41/4小时   12小时
  单AAA NiCad   66分钟   3小时
  单AAA NiMH   23/4小时   7小时40分钟
  双AAA碱性   81/2小时   24小时
  双AAA NiCad   21/4小时   61/4小时
  双AAA NiMH   51/2小时   15小时40分钟
  单棱柱Li+   41/2小时   13小时
单棱柱Li+解决方案是示范的显而易见的选择。
图8所示电路的功率要求
由于音频功率是总功耗中最重要的因素,因此获得更精确的值是重要的。最佳方法是直接测量,但是只在完成音频执行后才可能。
然而,存在多个因素,暗示音频功率将不如估计的大:
●语音特性使得波形的平均功率比其峰值振幅要小很多。例如,语音包含大量的暂停。从电路将可能以小于最大平均功率电平来驱动。
●生产电路中使用的D类放大器比图9中所示的电路中的放大器更有效率,引起显著的功率节省。
对示范会话的更详细地计算和分析暗示了平均音频功率在讲话时将仅为10mA,至于2个玩偶之间的会话来说给出平均5mA。这使得Jennic功率支配给出总共说话时53mA并不说话时48mA。
注意:该音频功率电平仅针对说出的语音,不是音乐。
基于对音频功率的改进估计的电池寿命
  电池   连续会话   上电但不说话
  单AAA碱性   10小时50分钟   12小时
  单AAA NiCad   23/4小时   3小时
  单AAA NiMH   7小时   7小时40分钟
  双AAA碱性   21小时40分钟   24小时
  双AAA NiCad   51/2小时   61/4小时
  双AAA NiMH   13小时50分钟   15小时40分钟
  单棱柱Li+   111/2小时   13小时
存在降低Jennic功耗的方法。当前,Jennic在所有时间都是开启的,连续地收听消息。由于固件中的改变,以及玩偶彼此通信的方式的改变,仅一个玩偶(第一个上电的)需要连续收听。其它玩偶可以在它们需要说话是周期性地检查第一个玩偶,并且仅需要在该短时间内上电。其余时间Jennic可以处于低功率休眠模式。如果可达到10%的占空比,这将不说话时的功耗降低到十分之一。当说话时,需要对Jennic供电,但是不需要收听消息,从可以不对RF级供电。这将Jennic功耗降低到四分之一。从而能够将整体电流消耗减少到说话时14mA以及不说话时4mA。
尽管大多数玩偶将具有该降低功率要求,一个玩偶(第一个打开的)不具有该功率节省。使用激活玩偶的方式的改变,也能够减少功率。需要进一步调查来确定什么是可行的。
基于减少的Jennic功率要求的电池寿命
 电池   连续会话   上电但不说话
 单AAA碱性   41小时   1433/4小时
 单AAA NiCad   103/4小时   371/2小时
  单AAA NiMH  263/4小时   933/4小时
  双AAA碱性  82小时   2871/2小时
  双AAA NiCad  211/2小时   75小时
  双AAA NiMH  541/2小时   1871/2小时
  单棱柱Li+  441/2小时   155小时
如果可以达到这些功率要求,则使用双AAA标准、NiCad或NiMH电池变为可能。
自动断电功能
玩偶电子元件的当前规范是ON-OFF开关控制电路的供电。与其它玩具通过,当该玩偶开启时是不明显的,这是由于其被动地坐等在任意一个激活的玩偶中按动按钮。这意味着很有可能忘记关闭玩偶。结果是下一次(例如第二天)玩玩偶时电池没电。
电路能够将其自身切换至‘待机’模式,汲取非常少的电流,但是这还没有在当前功能规范中包括。当电子元件进入待机模式并且如何将其重激活暗示玩偶的总体行为和表现。
语音压缩
语音压缩允许在相同容量的存储器中存储更多的音频数据。当前设计不包含任何语音压缩技术。当前设计使用产生64k bps(比特每秒)的8比特8kHz音频数据,并且使用64Mbit串行闪速存储器,该存储器能够存储1000秒(17分钟)的音频数据。
语音压缩可以用于将该数据速率降低至2kbps和8kbps之间,压缩越高则音频质量越低。所以对于8kbps来说,4Mbit闪速存储器可以保持大约500秒(81/2分钟)的音频数据。
压缩的音频数据要求在播放时的解压缩。这可以用软件或专用硬件来进行。下面给出几个选项。
Jennic控制器上的软件解压缩
还没有广泛的调查该选项。首先,必须找到合适压缩/解压缩算法的源代码,使得可以将该算法装(port)到Jennic控制器上。其次,必须对算法所需的处理能力和在Jennic控制器上的可用性进行分析。
Sensory Inc语音合成IC
Sensory Inc具有两个微控制器族。SC-6x族具有预编程的SC-691从属合成器。其具有要求9个DIOx线路与Jennic连接的4比特MCU接口,并且可以直接驱动32-欧姆扬声器。较新的RSC-4x族不具有预编程的从属合成器,并且从而要求开发定制的固件。其将用4比特或8比特MCU接口(9或15个DOIx线路)与Jennic连接。然而,该较新的RSC-4x族具有更强大的处理器(其可以处理语音识别算法),并且可以直接驱动8-欧姆扬声器。这两个部件中的任一部件不能与USB FT245芯片一起使用,这是由于Jennic不具有同时用于上述二者的足够的DIOx线路。从属SPI USB芯片将是必须的(参见USB节)。
使用具有显著处理能力的语音合成微控制器(如RSC-4x)暗示可能备选的系统架构。取代运行主要玩偶算法的Jennic无线微控制器,并且使用合成微控制器作为从属协处理器来简单地解压缩音频,合成微控制器可以运行主要玩偶算法并且使用无线微控制器作为从属协处理器以进行无线通信。更多细节请参见无线微控制器节。
无线微控制器
当前设计是基于2.4GHz IEEE 802.15.4个人区域网通信标准的。无线微控制器产品在于包含必须的RF硬件和固件来处理所有低级别RF通信。仅通信中的数据需要由玩偶应用来定义。当前设计已经选择Jennic无线微控制器。
尽管IEEE 802.15.4产品处理低级别RF通信,但是存在与玩偶应用不符合的一个方面。IEEE 802.15.4是基于节点的分级结构,具有与全功能设备通信的很多简化功能的设备。玩偶应用具有对等结构,其中所有设备是相同的。
在相同2.4GHz或不同的ISM频带中工作的其它RF收发器产品是可用的。它们都包含必需的RF硬件,但是没有强加特定低级别协议。这些收发器IC作为对通用微控制器或专用微控制器(如RSC-4x语音合成器)的从属来工作。使用这些部件,可以开发私有的对等通信协议。
RF收发器的示例是TI CC2500Atmel ATA542x族。这些部件潜在地提供比Jennic IC更低的功耗和更低的单位成本。
当然理解,本发明并不意在不受限于仅作为示例描述的上述实施例的细节,并且可以在本发明的范围中作出对细节的修改。
可以独立地或以任何适当组合的方式来提供在说明书和(在适当的地方)权利要求书以及附图中公开的每个特征。
附录I-主题示例
动物园主题
//VISIT THE ZOO MULTI-WAY CONVERSATIONS
DEFINE THEME
DEFINE G_WHERE_ARE_WE
DEFINE G_BEEN_TO_INSECTS
DEFINE G_BEEN_TO_REPTILES
DEFINE G_BEEN_TO_PRINIATES
DEFINE G_BEEN_TO_SAFARI
DEFINE G_BEEN_TO_ICECREAM
DEFINE MY_CHOICE
DEFINE INSECT
DEFINE REPTILE
DEFINE PRIMATE
DEFINE SAFARI
DEFINE ICECREAM
DEFINE LIKE
DEFINE HATE
DEFINE TEMP
DEFINE PHRASE1
DEFINE PHRASE2
DEFINE PHRASE3
DEFINE PHRASE4
DEFINE SELF_DONE
Start:
      SELECT NOTME
      BRANCH_F Only_one_doll
      TEST EQ &PREV $UNDEF
      BRANCH_F Main_loop
      TEST EQ       &PREV.SELF_DONE $UNDEF
      BRANCH_F      Main_loop
Get_next_spkr:
      SELECT NEXT
      TEST EQ &NEXT &PREV
      BRANCH_F Get_next_spkr
      TEST   EQ    &NEXT.SELF_DONE $UNDEF
      BRANCH_F     Main_loop
      TEST   EQ    &ME.SELF_DONE $UNDEF
      BRANCH_F     Main_loop
      CHOOSE([3,Main_loop],[1,Finish])
Finish:
      SAY(i think we′ve seen everything now,p03,lets go home)
      SWITCH FINISH
Only_one_doll:
      SAY(oh dear I′m all alone)
      SWITCH FINISH
Normal_switch:
      TEST EQ &G_BEEN_TO_INSECTS $UNDEF
      BRANCH_F Do_switch
      TEST EQ &G_BEEN_TO_REPTILES $UNDEF
      BRANCH_F Do_switch
      TEST EQ &G_BEEN_TO_PRIMATES $UNDEF
      BRANCH_F Do_switch
       TEST EQ &G_BEEN_TO_SAFARI $UNDEF
       BRANCH_F Do_switch
       SET SELF_DONE ([1,done])
Do_switch:
       SAY(p50)
       SWITCH SPEAKER Start
Main_loop:
       TEST EQ &G_BEEN_TO_INSECTS $UNDEF
       BRANCH_F Do_main_loop
       TEST EQ &G_BEEN_TO_REPTILES $UNDEF
       BRANCH_F Do_main_loop
       TEST EQ &G_BEEN_TO_PRIMATES $UNDEF
       BRANCH_F Do_main_loop
       TEST EQ &G_BEEN_TO_SAFARI $UNDEF
       BRANCH_F Do_main_loop
       SET SELF_DONE([1,done])
Do_main_loop:
       TEST EQ &PREV $UNDEF
       BRANCH_F First_speaker
       SET PHRASE1([1,I′ve had enough of the],[1,I′m bored with the],[1,enough of
the])
       SET PHRASE2([1,lets go somewhere else],[1,lets move on],[1,lets get out of
here])
       TEST EQ &G_WHERE_ARE_WE insects
       CHOOSE_F([15,Insects],[1,Move_on_insects])
       TEST EQ &G_WHERE_ARE_WE reptiles
       CHOSE_F([15,Reptiles],[1,Move_on_reptiles)]
       TEST EQ &G_HERE_ARE_WE primates
       CHOOSE_F([15,Primates],(1,Move_on_primates])
       TEST EQ &G_WHERE_ARE_WE safari
       CHOOSE_F([15,Safari],[1,Move_on_safari])
       TEST EQ &G_WHERE_ARE_WE icecream
       CHOOSE_F([5,Icecream],(1,Move_on_icecream])
Move_on_insects:
       TEST EQ &G_BEEN_TO_INSECTS $UNDEF
       BRANCH_F Main_loop
       SAY (&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)
       BRANCH My_choice
Move_on_reptiles;
       TEST EQ &G_BEEN_TO_REPTILES $UNDEF
       BRANCH_F Main_loop
       SAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)
       BRANCH My_choice
Move_on_primates;
       TEST EQ &G_BEEN_TO_PRIMATS $UNDEF
       BRANCH_F Main_loop
       SAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)
       BRANCH My_choice
Move_on_safari:
       TEST EQ &G_BEEN_TO_SAFARI $UNDEF
       BRANCH_F Main_loop
       SAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)
       BRANCH My_choice
Move_on_icecream:
       TEST EQ &G_BEEN_TO_ICECREAM $UNDEF
       BRANCH_F Main_loop
       SETPHRASE1([1,icecream is great],[1,umm icecream is yummy],[1,oh boy I really
enjoyed that])
       SET PHRSE2([1,lets go somewhere else],[1,lets move on],[1,where shall we go
now])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH My_choice
First_speaker:
       SET PHPASE1([1,well here we are at the zoo],[1,now we′ve arrived at the
zoo],[1,hurrah we′re at the zoo])
       SET PHRASE2 ([1,Where shall we start],[1,what shall we see first],[1,what
animals will we start with])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p50)
My_choice:
       TEST EQ &ME.SELF_DONE $UNDEF
       BRANCH_F Do_choice
       SELECT NOTME
       BRANCH Normal_switch
Do_choice:
       CHOOSE
([1,Check_insects],[1,Check_reptiles],[1,Check_primates],[1,Check_safari],[1,Check_ice
cream])
Check_insects:
       TEST NE &G_BEEN_TO_INSECTS $UNDEF
       BRANCH_F Do_choice
       SET MY_CHOICE([1,insects])
       BRANCH Made_choice
Check_rsptiles:
       TEST NE &G_BEEN_TO_REPTILES $UNDEF
       BRANCH_F Do_choice
       SET MY_CHOICE([1,reptiles])
       BRANCH Made_choice
Check_primates:
       TEST NE &G_BEEN_TO_PRIMATES $UNDEF
       BRANCH_F Do_choice
       SET MY_CHOICE([1,primates])
       BRANCH Made_choice
Check_safari:
       TEST NE &G_BEEN_TO_SAFARI $UNDEF
       BRANCH_F Do_choice
       SET MY_CHOICE([1,safari])
       BRANCH Made_choice
Check_icecream:
       TEST NE &G_BEEN_TO_ICECREAM $UNDEF
       BRANCH_F Do_choice
       SET MY_CHOICE([1,icecream])
       SAY(how about,p03,we get some,p03,&ME.MY_CHOICE)
       BRANCH Get_next
Made_choice:
       SAY(how about,p03,we see the,p03,&ME.MY_CHOICE)
Get_next:
       SELECT NOTME
       TEST NE &NEXT.SELF_DONE $UNDEF
       BRANCH_F Normal_switch
       SAY(p50)
       SWITCH SPEAKER Next_choice
Next_choice:
       TEST EQ &PREV.MY_CHOICE icecream
       CHOOSE_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_insects:
       TEST NE &G_BEEN_TO_INSECTS $UNDEF
       BRANCH_F Next_choice
       SET MY_CHOICE([1,insects])
       BRANCH Check_agreement
Check_next_reptiles:
       TEST NE &G_BEEN_TO_REPTILES $UNDEF
       BRANCH_FNext_choice
       SET MY_CHOICE([1,reptiles])
       BRANCH Check_agreement
Check_next_primates:
       TEST NE &G_BEEN_TO_PRIMATES $UNDEF
       BRANCH_F Next_choice
       SET MY_CHOICE([1,primates])
       BRANCH Check_agreement
Check_next_safari:
       TEST NE &G_BEEN_TO_SAFARI $UNDEF
       BRANCH_F Next_choice
       SET MY_CHOICE([1,safari])
       BRANCH Check_agreement
Check_next_icecream:
       TEST NE &G_BEEN_TO_ICECREAM $UNDEF
       BRANCH_F Next_choice
       SET MY_CHOICE([1,icecream])
       SAY(how about,p03,we get soma,p03,&ME.MY_CHOICE)
       BRANCH Get_next
Select_icecream:
       SET MY_CHOICE([1,icecream])
       SET PHRASE1([1,great idea],[1,good thinking],[1,totally agree])
       SET PHRASE2([1,lets get some],[1,I want],[1,yippee])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.MY_CHOICE)
       BRANCH Change_location
Check_agreement:
       TEST EQ &ME.MY_CHOICE &PREV.MY_CHOICE
       BRANCH_F Agreement
       TEST NE &ME.MY_CHOICE &NEXT.MY_CHOICE
       BRANCH_F No_agreement
Agreement:
       SET PHRASE1([1,great idea],[1,OK],[1,yes])
       SET PHRASE2([1,lets go see the],[1,off we go to the])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.MY_CHOICE,p50)
       BRANCH Change_location
No_agreement:
       SET PHRASE1([1,no lets],[1,I would rather],[1,I′d prefer to),[1,how about we])
       SET PHRASE2([1,see the],[1,go to the])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.MY_CHOICE)
       BRANCH Get_next
Change_location:
       SET G_WHERE_ARE_WE([1,&ME.MY_CHOICE])
       SET PHRASE1([1,here we are at the],[1,now we′ve arrived at the],[1,hurrah
we′re at the])
       SET PHRASE2([1,-])
       TEST EQ &G_WHERE_ARE_WE icecream
       SET_F PHRASE2([1,shop])
       SAY(&ME.PHRASE1,p03,&G_WHERE_ARE_WE,p03,&ME.PHRASE2)
Change_location_switch:
       SELECT NEXT
       BRANCH Normal_switch
Icecream:
       SET G_BEEN_TO_ICECREAM([1,done])
       TEST NE &ME,ICECREAM $UNDEF
       BRANCH_F Icecream_get_next
       SET ICECREAM([1,chocice],[1,rasberry_ripple],[1,lolly],[1,ninety_nine])
       CHOOSE([1,$L_NEXT],[1,Ask_icecream])
       SET PHRASE1([1,my favourite is a],[1,I just love a])
       SAY(&ME.PHRASE1,p03,&ME.ICECREAM)
Ask_icecream:
       SET PHRASE1([1,I′ll have a],[1,can I have a])
       SAY(&ME.PHRASE1,p03,&ME.ICECREAM,p03,please)
Icecream_get_next:
       SELECT NOTME
       BRANCH Normal_switch
Insects:
       SET G_BEEN_TO_INSECTS([1,done])
       CHOOSE([3,Prev_insect],[3,Self_insect],[3,Next_insect])
Prev_insect:
       TEST EQ &ME &PREV
       CHOOSE_F([1,Self_insect],[1,Next_insect])
       TEST EQ &PREV.INSECT $UNDEF
       CHOOSE_F([1,Self_insect],[1,Next_insect])
       SELECT PREV
Continue_prev_insect:
       SET INSECT([1,&PREV.INSECT])
       SET PHRASE1([1,ooh],[1,oh my god],[1,ugh],[1,-])
       TEST EQ &PREV.INSECT spiders
       CHOOSE_F([1,Spiders_not_insects],[3,Prev_spider_talk])
       TEST EQ &PRIV.INSECT scorpions
       CHOOSE_F([1,Prev_scorpion_talk])
       SET PHRASE1([1,ooh],[1,oh my god],[1,-])
       TEST EQ &PREV.INSECT centipedes
       CHOOSE_F([1,Prev_centipede_talk])
       TEST EQ &PREV.INSECT millipedes
       CHOOSE_F([1,Prev_millipede_talk])
       TEST EQ &PREV.INSECT beetles
       CHOOSE_F([1,Prev_beetle_talk])
       TEST EQ &PREV.INSECT ants
       CHOOSE_F([1,Prev_ant_talk])
       TEST EQ &PREV.INSECT bees
       CHOOSE_F([1,Prev_bee_talk])
Spiders_not_insects:
       SAY(funny how,p03,&PREV.INSECT,p03,are in the insect house,p03,seeing
as,p03,&PREV.INSECT,p03,aren′t insects)
       BRANCH Normal_switch
Prev_spider_talk:
       CHOOSE([1,Prev_spider_talk_1],[1,Prev_spider_talk_2])
Prev_spider_talk_1:
       SET PHRASE2([1,look at that),[1,can you see that],[1,what a])
       SET PHRASE3([1,big tarantula],[1,hairy ugly spider])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3)
       BRAMCH Prev_spider_talk_end
Prev_spider_talk_2:
       SET PHRASE2([1,spiders are creepy],[1,tarantulas eat crickets],[1,tarantulas
don′t seem to do very much do they])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH Prev_spider_talk_end
Prev_spider_talk_end:
       CHOOSE([1,Prev_spider_talk_switch],[1,$L_NEXT])
       SAY(look at,p03,all those crickets in with the tarantula)
Prev_spider_talk_switch:
       BRANCH Normal_switch
Prev_scorpion_talk:
       CHOOSE([1,Prev_scorpion_talk_1],[1,Prev_scorpion_talk_2])
Prev_scorpion_talk_1:
       SET PHRASE2([1,look at that],[1,can you see that],[1,what a])
       SET PHRASE3([1,big black],[1,scary yellow])
       SAY(&ME.PHRSE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,scorpion)
       BRANCH Normal_switch
Prev_scorpion_talk_2:
       SET PHRASE2([1,Scorpions have a nasty poigonous sting in their tails],[1,I
don′t like scorpions])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH Normal_switch
Prev_centipede_talk:
       CHOOSE([1,Prev_centipede_talk_1],[1,Prev_centipede_talk_2])
Prev_centipede_talk_1:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,it can move very quickly],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,centipede,p03,&ME,PHRASE3)
       BRANCH Normal_switch
Prev_centipede_talk_2:
       SET PHRASE2([1,has anyone counted the centipede′s legs doesn′t look like 100
to me])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH Normal_switch
Prev_millipede_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,look at all its legs],[1,millipedes are boring],[1,-])
       SAY(&ME.PHPASE1,p03,&ME.PHRASE2,p03,millipede,p03,&ME.PHRASE3])
       BRANCH Normal_switch
Prev_beetle_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,big green],[1,big black stag],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,beetle)
       BRANCH Normal_switch
Prev_ant_talk:
       CHOOSE([1,Prev_ant_talk_1],[1,Prev_ant_talk_2])
Prev_ant_talk_1:
       SAY(&ME.PHRASE1,p03,look at,p03,all those,p03,ants,p03,in that ant nest)
       BRANCH Normal_switch
Prev_ant_talk_2:
       SAY(&ME.PHRASE1,p03,ants,p03,are very busy,p03,they are always on the move)
       BRANCH Normal_switch
Prev_bee_talk:
       CHOOSE([1,Prev_bee_talk_1],[1,Prev_bee_talk_2])
Prev_bee_talk_1:
       SAY(&ME.PHRASE1,p03,can you see,p03,all the honey combs,p03,in the beehive)
       BRANCH Normal_switch
Prev_bee_talk_2:
       SAY(&ME.PHRASE1,p03,can you see,p03,the queen,p03,she is much bigger than the
workers)
       BRANCH Normal_switch
Self_insect:
       TEST NE &ME.INSECT $UNDEF
       CHOOSE_F([4,Continue_self_insect],[3,Select_self_insect])
Select_self_insect:
       SET TEMP
([1,spiders],[1,scorpions],[1,centipedes],[1,millipedes],[1,beetles],[1,ants],[1,bees]
)
       TEST EQ &ME.TEMP &ME.INSECT
       BRANCH_F Select_self_insect
       SET INSECT([1,&ME.TEMP])
       SET PHRASE1([1,wow],[1,I say],[1,cor],[1,come and])
       SET PHRASE2([1,look at those])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.INSECT)
       CHOOSE([2,Self_insect_notme],[1,Self_insect_next])
Self_insect_notme:
       SELECT NOTME
       BRANCH Normal_switch
Self_insect_next:
       SELECT NEXT
       BRANCH Normal_switch
Continue_self_insect:
       SELECT NOTME
       CHOOSE([1,Like_self_insect],[1,Dislike_self_insect])
Like_self_insect:
       TEST EQ &ME.HATE &ME.INSECT
       BRANCH_F Like_self_insect_end
       SET LIKE([1,&ME.INSECT])
       SET PHRASE1([1,I])
       SET PHRASE2([1,like],[1,rsally like])
       SET PHRASE3([1,they are fascinating],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.INSECT,p03,&ME.PHRASE3)
Like_self_insect_end:
       BRANCH Normal_switch
Dislike_self_insect:
       TEST EQ &ME.LIKE &ME.INSECT
       BRANCH_F Dislike_self_insect_end
       SET HATE([1,&ME,INSECT])
       SET PHRASE1([1,I])
       SET PHRASE2([1,don′t like],[1,hate])
       SET PHRASE3([1,they′re creepy crawly],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.INSECT,p03,&ME.PHRASE3)
Dislike_self_insect_end:
       BRANCH Normal_switch
Next_insect:
       SELECT NOTME
       TEST NE &NEXT.INSECT $UNDEF
       BRANCH_F Continue_next_insect
       BRANCH Tell_next_insect
Continue_next_insect:
       CHOOSE([3,Tell_next_insect],[4,Respond_next_insect])
Respond_next_insect:
       SET INSECT([1,&NEXT.INSECT])
       TEST EQ &NEXT.INSECT spiders
       CHOOSE_F([3,Next_spider_talk])
       TEST EQ &NEXT.INSECT scorpions
       CHOOSE_F([1,Next_scorpion_talk])
       TEST EQ &NEXT.INSECT centipedes
       CHOOSE_F([1,Next_centipede_talk])
       TEST EQ &NEXT.INSECT millipedes
       CHOOSE_F([1,Next_millipede_talk])
       TEST EQ &NEXT.INSECT beetles
       CHOOSE_F([1,Next_beetle_talk])
       TEST EQ &NEXT.INSECT ants
       CHOOSE_F([1,Next_ant_talk])
       TEST EQ &NEXT.INSECT bees
       CHOOSE_F([1,Next_bee_talk])
Tell_next_insect:
       SET INSECT
([1,spiders],[1,scorpions],[1,centipedes],[1,millipedes],[1,beetles],[1,ants],[1,bees]
)
       TEST EQ &ME.INSECT &NET.INSECT
       BRANCH_F Tell_next_insect
       SET PHRASE2([1,lookat those],[1,can you see those])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.INSECT)
       BRANCH Normal_switch
Next_spider_talk:
       SET PHRASE2([1,can you see that],[1,look at that])
       SET PHRASE3([1,big black],[1,hairy ugly])
       SET PHRASE4([1,spinning a web],[1,eating a cricket],[1,molting its skin],[1,-
])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,spider,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Next_scorpion_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,big black],[1,scary yellow])
       SET PHRASE4([1,fighting],[1,running around],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,scorpion,p03,&ME,PHRASE4)
       BRANCH Normal_switch
Next_centipede_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,it can move very quickly],[1,how many lage doea it have],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,centipede,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_millipede_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,look at all its legs],[1,millipedes are boring],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,millipede,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_beetle_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,big green],[1,big black stag])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,beetle)
       BRANCH Normal_switch
Next_ant_talk:
       CHOOSE([1,Next_ant_talk_1],[1,Next_ant_talk_2])
Next_ant_talk_1:
       SAY(&NEXT.NAME,p03,look at,p03,all those,p03,ants,p03,in that ant nest)
       BRANCH Normal_switch
Next_ant_talk_2:
       SAY(&NEXT.NAME,p03,ants,p03,are very busy,p03,thay are always on the move)
       BRANCH Normal_switch
Next_bee_talk:
       CHOOSE([1,Next_bee_talk_1],[1,Next_bee_talk_2])
Next_bee_talk_1:
       SAY(&NEXT.NAME,p03,can you see,p03,all the honey combs,p03,in the beehive)
       BRANCH Normal_switch
Next_bee_talk_2:
       SAY(&NEXT.NAME,p03,can you see,p03,the queen,p03,she is much bigger than the
wotkers)
       BRANCH Normal_switch
Reptiles:
       SET G_BEEN_TO_REPTILES([1,done])
       CHOOSE([3,Prev_reptile],[3,Self_reptile],[3,Next_reptile])
Prev_reptile:
       TEST EQ &ME &PREV
       CHOOSE_F([1,Self_reptile],[1,Next_reptile])
       TEST EQ &PREV.REPTILE $UNDEF
       CHOOSE_F([1,Self_reptile],[1,Next_reptile])
       SELECT PREV
Continue_prev_reptiles:
       SET REPTILE([1,&PREV,REPTILE])
       SET PHRASE1([1,ooh],[1,cor],[1,-])
       TEST EQ &PREV.REPTILE snakes
       CHOOSE_F([5,Prev_snake_talk])
       TEST EQ &PREV.REPTILE lizards
       CHOOSE_F([1,Prev_lizard_talk])
       TEST EQ &PREV.REPTILE crocodiles
       CHOOSE_F([1,Prev_crocodile_talk])
Prev_snake_talk:
       CHOOSE([1,Prev_snake_talk_1],[1,Prev_snake_talk_2])
Prev_snake_talk_1:
       SAY(&ME.PHRASE1,p03,look at that,p03,big python)
       BRANCH Normal_switch
Prev_snake_talk_2:
       SAY(&ME.PHRASE1,p03,look at that,p03,cobra,p03,cobras are very poisonous)
       BRANCH Normal_switch
Prev_lizard_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,iguana],[1,little green geko])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Prev_crocodile_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,huge],[1,big green],[1,enormous],[1,-])
       SET PHPASE4([1,see its teeth],[1,its got bulgy eyes],[1,its got big nostrils])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,crocodile,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Self_reptile:
       TEST NE &ME.REPTILE $UNDEF
       CHOOSE_F([4,Continue_self_reptile],[3,Select_self_reptile])
Select_self_reptile:
       SET TEMP([1,snakes],[1,lizards],[1,crocodiles])
       TEST EQ &ME.TEMP &ME.RBPTILE
       BRANCH_F Select_self_reptile
       SET REPTILE([1,&ME.TEMP])
       SET PHRASE1([1,wow],[1,cor],[1,I say],[1,come and])
       SET PHRASE2([1,look at those])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03.&ME.REPTILE)
       CHOOSE([2,Self_reptile_notme],[1,Self_reptile_next])
Self_reptile_notme:
       SELECT NOTME
       BRANCH Normal_switch
Self_reptile_next:
       SELECT NEXT
       BRANCH Normal_switch
Continue_self_reptile:
       SELECT NOTME
       CHOOSE([1,Like_self_reptile],[1,Dislike_self_reptile])
Like_self_reptile:
       TEST EQ &ME.HATE &ME.REPTILE
       BRANCH_F Like_self_reptile_end
       SET LIKE([1,&ME.REPTILE])
       SET PHRASE1([1,I])
       SET PHRASE2([1,like],[1,really like])
       SET PHRASE3([1,they′re awsome],[1,they are fascinating])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.REPTILE,p03,&ME.PHRASE3)
Like_self_reptile_end:
       BRANCH Normal_switch
Dislike_self_reptile:
       TEST EQ &ME.LIKE &ME.REPTILE
       BRANCH_F Dislike_self_reptile_end
       SET HATE([1,&ME.REPTILE])
       SET PHRASE1([1,I])
       SET PHRASE2([1,don′t like],[1,hate])
       SET PHRASE3([1,they′re wriggly])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.REPTILE,p03,&ME.PHRASE3)
Dislike_self_reptile_end:
       BRANCH Normal_switch
Next_reptile:
       SELECT NOTME
       TEST NE &NEXT.REPTILE $UNDEF
       BRANCH_F Continue_next_reptiles
       BRANCH Tell_next_reptile
Continue_next_reptiles:
       CHOOSE([3,Tell_next_reptile],[4,Respond_next_reptile])
Respond_next_reptile:
       SET REPTILE([1,&NEXT.REPTILE])
       TEST EQ &NEXT.REPTILE snakes
       CHOOSE_F([1,Next_snake_talk])
       TEST EQ &MEXT.REPTILE lizards
       CHOOSE_F([1,Next_lizard_alk])
       TEST EQ &NEXT.REPTILE crocodiles
       CHOOSE_F([1,Next_croeodile_talk])
Tell_next_reptile:
       SET REPTILE([1,snakes],[1,lizards],[1,crocodiles])
       TEST EQ &ME.REPTILE &NEXT.REFTILE
       BRANCH_F Tell_next_reptile
       SET PHRASE2([1,look at those],[1,can you see those])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.REPTILE)
       BRANCH Normal_switch
Next_snake_talk:
       CHOOSE([1,Next_snake_talk_1],[1,Next_snake_talk_2])
Next_snake_talk_1:
       SAY(&NEXT.NAME,p03,look at that,p03,big python)
       BRANCH Normal_switch
Next_snake_talk_2:
       SAY(&NEXT.NAME,p03,look at that,p03,cobra,p03,cobras are very poisonous)
       BRANCH Normal_switch
Next_lizard_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,iguana],[1,little green geko])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_crocodile_talk:
       SET PHRASE1([1,look at that],[1,can you see that])
       SET PHRASE2([1,huga],[1,big green],[1,enormous],[1,-])
       SET PHRASE3([1,see its teeth],[1,its got bulgy eyes],[1,its got big nostrils])
       SAY(&NEXT.NAME,p03,&ME.PHRASE1,p03,&ME.PHRASE2,p03,crocodile,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Primates:
       SET G_BEEN_TO_PRIMATES([1,done])
       CHOOSE([3,Prev_primate],[3,Self_primate],[3,Next_primate])
Prev_primate:
       TEST EQ &ME &PREV
       CHOOSE_F([1,Self_primate],[1,Next_primate])
       TEST EQ &PREV.PRIMATE $UNDEF
       CHOOSE_F([1,Self_primate],[1,Next_primate])
       SELECT PREV
Continue_prev_primates:
       SET PRIMATE([1,&PREV.PRIMATE])
       SET PHRASE1([1,ooh],[1,cor],[1,-])
       TEST EQ &PREV,PRIMATE gorillas
       CHOOSE_F([1,Prev_gorilla_talk])
       TEST EQ &PREV.PRIMATE chimpanzees
       CHOOSE_F([1,Prev_chimp_talk])
       TEST EQ &PHEV.PRIMATE monkeys
       CHOOSE_F([1,Prev_monkey_talk])
Prev_gorilla_talk:
       SET PHRASE2([1,can you see that],[1,see that],[1,look at that])
       SET PHRASE3([1,big],[1,fat],[1,hairy])
       SET PHRASE4([1,eating a banana],[1,scratching itself],[1,with the baby],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,gorilla,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Prev_chimp_talk:
       SET PHRASE2([1,can you see that],[1,see that],[1,look at that])
       SET PHRASE3([1,poking a stick into that hole],[1,eating a banana],[1,grooming
the other one],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,chimp,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Prev_monkey_talk:
       SET PHRASE2([1,look at all],[1,can you see all])
       SET PHRASE3([1,climbing in that tree],[1,jumping all over the
place],[1,fighting],[1,playing],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,those,p03,monkeys,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Self_primate:
       TEST NE &ME.PRIMATE $UNDEF
       CHOOSE_F([4,Continue_self_primate],[3,Select_self_primate])
Select_self_primate:
       SET TEMP([1,gorillas],[1,chimpanzees],[1,monkeys])
       TEST EQ &ME.TEMP &ME.PRIMATE
       BRANCH_F Select_self_primate
       SET PRIMATE([1,&ME.TEMP])
       SET PHRASE1([1,wow],[1,cor],[1,I say],[1,come and])
       SET PHRASE2([1,look at those])
       SAY(&ME.PHRASE1_p03,&ME.PHRASR2,p03,&ME.PRIMATE)
       CHOOSE([2,Self_primate_notme],[1,Self_primate_next])
Self_primate_notme:
       SELECT NOTME
       BRANCH Normal_switch
Self_primate_next:
       SELECT NEXT
       BRANCH Normal_switch
Continue_self_primate:
       SELECT NOTME
       SET PHRASE1([1,I])
       SET PHRASE2([1,like],[1,really like])
       SET PHRASE3([1,they′refunny],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME,PRIMATE,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_primate:
       SELECT NOTNE
       TEST NE &NEXT.PRIMATE $UDEEF
       BRANCH_F Continue_next_primates
       BRANCE Tell_next_primate
Continue_next_primates:
       CHOOSE([3,Tell_next_primate],[4,Respond_next_primate])
Respond_next_primate:
       SET PRIMATE([1,&NEXT.PRIMATE])
       TEST EQ &NEXT.PRIMATE gorillas
       CHOOSE_F([1,Next_gorilla_talk])
       TEST EQ &NEXT.PUMATE chimpanzees
       CHOOSE_F([1,Next_chimp_talk])
       TEST EQ &NEXT.PRIMATE monkeys
       CHOOSE_F([1,Next_monkey_talk])
Tell_next_primate:
       SET PRIMATE([1,gorillas],[1,chimpanzees],[1,monkeys])
       TEST EQ &ME.PRIMATE &NEXT.PRIMATE
       BRANCH_F Tell_next_primate
       SET PHRASE2([1,look at those],[1,can you see those])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PRIMATE)
       BRANCH Normal_switch
Next_gorilla_talk:
       SET PHRASE1([1,can you see that],[1,see that],[1,look at that])
       SET PHRASE2([1,big],[1,hairy])
       SET PHRASE3([1,eating a banana],[1,scratching itself],[1,wlth the baby
gorilla],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE1,p03,&ME.PHRASE2,p03,gorilla,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_chimp_talk:
       SET PHRASE1([1,can you see that],[1,see that],[1,look at that])
       SET PHRASE2([1,chimp],[1,chimpanzee])
       SET PHRASE3([1,poking a stick into that hole],[1,eating a banana],[1,grooming
the other one],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE1,p03,&ME,PHRASE2,p03,&ME.PHRRAE3)
       BRANCH Normal_switch
Next_monkey_talk:
       SET PHRASE2([1,see all],[1,look at all])
       SET PHRASE3([1,climbing in that tree],[1,jumping all over the
place],[1,fighting],[1,playing],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,those monkeys,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Safari:
       SET G_BEEN_TO_SAFARI([1,done])
       CHOOSE([3,Prev_safari],[3,Self_safari],[3,Next_safari])
Prev_safari:
       TEST EQ &ME &PREV
       CHOOSE_F([1,Self_safari],[1,Next_safari])
       TEST EQ &PREV.SAFARI $UNDEF
       CHOOSE_F([1,Self_safari],[1,Next_safari])
       SELECT PREV
Continue_prev_safari:
       SET SAFARI([1,&PREV.SAFARI])
       SET PHRASE1([1,ooh],[1,cor],[1,-])
       TEST EQ &PREV.SAFARI lions
       CHOOSE_F([5,Prev_lion_talk],[5,Prev_lion_talk_1)
       TEST EQ &PREV.SAFARI zebras
       CHOOSE_F([1,Prev_zebra_talk])
       TEST EQ &PREV.SAFARI giraffes
       CHOOSE_F([1,Prev_giraffe_talk])
       TEST EQ &PREV.SAFARI rhinos
       CHOOSE_F([1,Prev_Rhino_talk])
       TEST EQ &PREV.SAFARI cheetahs
       CHOOSE_F([1,Prev_cheetah_talk])
Prev_lion_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,with the big mane],]1,-])
       SAY(&ME.PHRASE1,p03,&ME,PHRASE2,p03,lion,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Prev_lion_talk_1:
       SET PHRASE2([1,look at those],[1,can you see those])
       SET PHRASE3([1,playinghow cute],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,lion,p03,cubs,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Prev_zetra_talk:
       SET PHRASE29([1,look at those],[1,can you see those])
       SET PHRASE3([1,they look like stripy donkeys],[2,-])
       SAY(&ME.PHRASE1,p03,&ME.PHEASE2,p03,zebras,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Prev_giraffe_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,-],[1,baby])
       SET PHRASE4([1,what a long neck],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,giraffe,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Prev_rhino_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,-],[1,baby])
       SET PHRASE4([1,look at its horn],[2,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,rhino,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Prev_cheetah_talk:
       SET PHRASE2([1,look at that],[1,can you see thay])
       SET PHRASE3([1,see its spots],[1,they can run very fast],[2,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRSE2,p03,cheetah,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Self_safari:
       TEST NE &ME.SAFARI $UNDEF
       CHOOSE_F([4,Continue_self_safari],[3,Select_self_safari])
Select_self_safari:
       SET TEMP([1,lions],[1,zebras],[1,giraffes],[1,rhinos],[1,cheatahs])
       TEST EQ &ME.TEMP &ME.SAFARI
       BRANCH_F Select_self_safari
       SET SAFARI([1,&ME.TRMP])
       SET PHRASE1([1,wow],[1,cor],[1,I say],[1,come and])
       SET PHRASE2([1,look at those])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.SAFARI)
       CHOOSE([2,Self_safari_notme],[1,Self_safari_next])
Self_safari_notme:
       SELECT NOTME
       BRANCH Normal_switch
Self_safari_next:
       SELECT NEXT
       BRANCH Normal_switch
Continue_self_safari:
       SELECT NOTME
       SET PHRASE1([1,I])
       SET PHRASE2([1,like],[1,reelly like])
       SET PHRASE3([1,they′re awsome],[1,they are fascinating])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2,p03,&ME.SAFARI,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_safari:
       SELECT NOTME
       TEST NE &NEXT.SAFARI $UDEF
       BRANCH_F Continue_next_safari
       BRANCH Tell_next_safari
Continue_next_safari:
       CHOOSE ([3,Tell_next_safari],[4,Respond_next_safari])
Respond_next_aafari:
       SET SAFARI([1,&NEXT.SAFARI])
       TEST EQ &NEXT.SAFARI lions
       CHOOSE_F([1,Next_lion_talk],[1,Next_lion_talk_1])
       TEST EQ &NEXT.SAFARI zebras
       CHOOSE_F([1,Next_zebra_talk])
       TEST EQ &NEXT.SAFARI giraffes
       CHOOSE_F([1,Next_giraffe_talk])
       TEST EQ &NEXT.SAFARI rhinos
       CHOOSE_F([1,Next_rhino_talk])
       TEST EQ &NEXT.SAFARI cheetahs
       CHOOSE_F([1,Next_cheetah_talk])
Tell_next_safari:
       SET SAFARI([1,lions],[1,zebras],[1,giraffes],[1,rhinos],[1,cheetahs])
       TEST EQ &ME.SAFARI &NEXT.SAFARI
       BRANCH_F Tell_next_safari
       SET PHRASE2([1,look at those],[1,can you see those])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.SAFARI)
       BRANCH Normal_switch
Next_lion_talk:
       SET PHRASE2([1,look at tbat],[1,can youseethat])
       SET PHRASE3([1,with the big mane],[1,listen to it roar],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,lion,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_lion_talk_1:
       SET PHRASE2([1,look at those],[1,can you see those])
       SET PHRASE3([1,playing how cute],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,lion,p03,cubs,p03,&ME.PHRASE3)
       BRANCH Normal_switch
Next_zebra_talk:
       SET PHRASE2([1,look at those],[1,can you see those])
       SET PHRASE3([1,they look like stripy donkeys],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,zebras,p03,&ME.RHRASE3)
       BRANCH Normal_switch
Next_giraffe_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,-],[1,baby])
       SET PHRASE4([1,what a long neck],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,giraffe,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Next_rhino_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,-],[1,baby])
       SET PHRASE4([1,look at its horn],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,&ME.PHRASE3,p03,rhino,p03,&ME.PHRASE4)
       BRANCH Normal_switch
Next_cheetah_talk:
       SET PHRASE2([1,look at that],[1,can you see that])
       SET PHRASE3([1,see its spots],[1,they can run very fast],[1,-])
       SAY(&NEXT.NAME,p03,&ME.PHRASE2,p03,cheetah,p03,&ME.PHRASE3)
       BRANCH Normal_switch
宠物主题
//PET MULTI-WAY CONVERSATIONS
DEFINE ID
DEFINE G_THEME
DEFINE PET
DEFINE PET_NAME
DEFINE COLOUR
DEFINE BREED
DEFINE PREFERENCE
DEFINE SELF_DONE
DEFINE PHRASE1
DEFINE PHRASE2
DEFINE PHRASE3
Start:
       SELECT NOTME
       BRANCH_F Only_one_doll
       TEST   EQ    &PREV $UNDEF                  //First speaker?
       CHOOSE_F([1,Say_about_self],[1,Ask_next_spkr])
       TEST   EQ    &PREV.SELF_DONE $UNDEF
       BRANCH_F     Main_loop
Get_next:
       SELECT NEXT
       TEST EQ &NEXT &PREV
       BRANCH_F Get_next
       TEST   EQ     &NEXT.SELF_DONE $UNDEF
       BRANCH_F      Main_loop
       TEST   EQ     &ME.SELF_DONE $UNDEF
       BRANCH_F      Main_loop
       CHOOSE([3,Main_loop],[1,Finish])
Finish:
       SAY(talking about pets has been fun,p50)
       SAY(we should do it again soon)
       SWITCH FINISH
Only_one_doll:
       SAY(oh dear I′m all alone)
       SWITCH FINISH
Normal_switch:
       TEST EQ &ME.PET $UNDEF
       BRANCH_F Do_switch
       TEST EQ &ME.PET_NAME $UNDEF
       BRANCH_F Do_switch
       TEST EQ &ME.COLOUR $UNDEF
       BRANCH_F Do_switch
       TEST NE &ME.PET puppy
       SET_F SELF_DONE([1,done])
       TEST NE &ME.BREED $UNDEF
       SET_F SELF_DONE([1,done])
Do_switch:
       SAY(p50)
       SWITCH SPEAKER Start
Main_loop:
       CHOOSE([20,Respond_prev_spkr],[5,Say_about_self],[15,Ask_next_spkr])
Respond_prev_spkr:
       TEST EQ &ME &PREV
       BRANCH_F Start
       TEST EQ &PREV.SELF_DONE done
       CHOOSE_F([3,Start],[1,Compare_prev])
       TEST EQ &PREV.PET $UNDEF
       BRANCH_F Ask_about_pet
       CHOOSE([3,Prev_pet_questions],[2,Compare_prev])
Prev_pet_queations:
       CHOOSE([1,Ask_about_name],[1,Ask_about_colour],[1,Ask_about_breed])
Ask_about_name:
       TEST NE &PREV.PET_NAME $UNDEF
       BRANCH_F Prev_pet_questions
       SET PHRASE1([1,fantastic],[1,wow],[1,cor],[1,how wonderful],[1,-])
       CHOOSE([1,Ask_about_name_1],[1,Ask_about_name_2],[1,Ask_about_name_3])
Ask_about_name_1:
       SAY(&ME.PHRASE1,p03,what do you call your,p03,&PREV.PET)
       BRANCH Ask_about_name_switch
Ask_about_name_2:
       SAY(&ME.PHRASE1,p03,whats your,p03,&PREV,PET,s,p03,name)
       BRANCH Ask_about_name_switch
Ask_about_name_3:
       SAY(&ME.PHRASE1,p03,has your,p03,&PREV.PET,p03,got a name)
       BRANCH Ask_about_name_switch
Ask_about_name_switch:
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Reply_to_name
Reply_to_name:
       TEST NE &ME.PET_NAME $UNDEF
       BRANCH_F Say_name
       TEST EQ &ME.PET puppy
       SET_F PET_NAME([1,boris],[1,fred],[1,scruffy],[1,rex])
       BRANCH_F Say_name
       TEST EQ &ME.PET kitten
       SET_F PET_NAME([1,tinks],[1,bo],[1,felix],[1,tigger])
       BRANCH_F Say_name
       TEST EQ &ME.PET hamster
       SET_F PET_NAME([1,roger],[1,hammy],[1,bart])
       BRANCH_F Say_name
       SET PET_NAME([1,peter],[1,bunnikins],[1,roger],[1,bugsy])
Say_name:
       SET PHRASE1([1,-])
       TEST EQ &ME &PREV
       BRANCH_F Say_name_do
       TEST EQ &ME.PET_NAME &PREV.PET_NAME
       SET_F PHRASE1([1,too],[1,as well],[1,also])
Say_name_do:
       SAY(my,p03,&ME.PET,p03,is called,p03,&ME.PET_NAME,p03,&ME.PHRASE1)
       SELECT NEXT
       BRANCH Normal_switch
Ask_about_colour:
       TEST NE &PREV.COLOUR $UNDEF
       BRANCH_F Prev_pet_questions
       SET PHRASE1([1,wow],[1,-])
       SAY(&ME.PHRASE1,p03,what colour is your,p03,&PREV.PET)
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Reply_to_colour
Reply_to_colour:
       TEST NE &ME.COLOUR $UNDEF
       BRANCH_F Say_colour
       TEST EQ &ME.PET puppy
       SET_F COLOUR([1,black and white],[1,all black],[1,brown])
       BRANCH_F Say_colour
       TEST EQ &ME.PET kitten
       SET_F COLOUR([1,ginger],[1,black and white],[1,black])
       BRANCH_F Say_colour
       TEST EQ &ME.PET hamster
       SET_F COLOUR([1,all black],[1,brown],[1,all white])
       BRANCH_F Say_colour
       SET COLOUR([1,black and white],[1,brown],[1,all white],[1,black])
Say_colour:
       SAY(my,p03,&ME.PET,p03,is,p03,&ME.COLOUR)
       SELECT NEXT
       BRANCH Normal_switch
Ask_about_breed:
       TEST NE &PREV.PET puppy
       BRANCH_F Prev_pet_questions
       TEST NE &PREV.BREED $UNDEF
       BRANCH_F Prev_pet_questions
       SET PHRASE1([1,wow],[1,-])
       SAY(&ME.PHRASE1,p03,what type of dog is your,p03,&PREV.PET)
       SELECT PREV
       SAY(P50)
       SWITCH SPEAKER Reply_to_breed
Reply_to_breed:
       TEST NE &ME.PET puppy
       BRANCH_F Say_breed_switch
       TEST NE &ME.BREED $UNDEF
       BRANCH_F Say_breed
       SET BREED
([1,spaniel],[1,Labrador],[1,terrier],[1,retriever],[1,scottie],[1,collie])
Say_breed:
       SAY(my,p03,&ME.PET,p03,is a,p03,&ME.BREED)
Say_breed_switch:
       SELECT NEXT
       BRANCH Normal_switch
Ask_about_pet:
       TEST EQ &PREV.PREFERENCE $UNDEF
       BRANCH_F No_preference
       SAY(do you have a,p03,&PREV.PREFERENCE)
       BRANCH Pet_switch
No_preference:
       SAY(do you have a,p03,pet)
Pet_switch:
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Reply_to_pet
Reply_to_pet:
       SET PET([1,puppy],[1,kitten],[1,hamster],[1,bunny])
       SET PHRASE1([1,-])
       TEST EQ &ME.PET &PREV.PET
       SET_F PHRASE1([1,too],[1,as well],[1,aleo])
       TEST EQ &ME.PREFERENCE $UNDEF
       BRANCH_F Reply_no_preference
       TEST NE &ME.PREFERENCE &ME.PET
       BRANCH_F Reply_different_pet
Reply_no_preference:
       SAY(yes,p03,we have a,p03,&ME.PET,p03,&ME.PHRASE1)
       BRANCH Reply_pet_switch
Reply_different_pet:
       SAY(No,p03,we have a,p03,&ME.PET,p03,&ME.PHRASE1)
Reply_pet_switch:
       SELECT NEXT
       BRANCH Normal_switch
Compare_prev:
       TEST EQ &ME.PET $UNDEF
       BRANCH_F Respond_prev_epkr
       TEST EQ &ME.PET &PREV.PET
       CHOOSE_F
([1,Prev_same_pet_1],[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_1:
       SAY(thets great,p03,we both have,p03,&ME.PET,s)
       BRANCH Compare_switch
Prev_same_pet_2:
       SAY(we both have,p03,&ME.PET,s,p03,how wonderful)
       BRANCH ComPare_switch
Prev_friends:
       SAY(I hode,p03,my,p03,&ME.PET,p03,and your,p03,&PREV.PET,p03,will be friends)
       BRANCH Prev_friends_switch
Prev_same_friends:
       SAY(I hope,p03,our,p03,&ME.PET,s,p03,will be friends)
       BRANCH Prev_friends_switch
Prev_friends_switch:
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Prev_friende_reply
Prev_frierds_reply:
       SAY(that would be gareat )
       CHOOSE([1,Prev_friends_reply_1],[1,Prev_friends_reply_2])
Prev_friends_reply_1:
       SET PHRASE1([1,Then they could play together],[1,It would be fun to see them
together])
       SAY(&ME.PHRASE1)
       BRANCH Compare_switch
Prev_friends_reply_2:
       SET PHRASE1([1,you should bring your],[1,one day bring your])
       SET PHRASE2([1,to my house],[1,over to my place])
       SAY(&ME.PHRASE1,p03,&PREV.PET,p03,&ME.PHRASE2)
       BRANCH Compare_switch
Prev_play:
       SAY(do you think your,p03,&PREV.PET,p03,and my,p03,&ME.PET,p03,will play
together)
       BRANCH Prev_play_switch
Prev_same_play:
       SAY(do you think our,p03,&PREV.PET,s,p03,will play together)
       BRANCH Prev_play_switch
Prev_play_switch:
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Prev_play_reply
Prev_play_reply:
       SET PHRASE1([1,I hope so],[1,I would like that])
       SET PHRASE2([1,They can be friends],[1,That would be fun],[1,we must bring
them together],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH Compare_switch
Prev_diff_pet:
       TEST EQ &PREV.PET kitten
       BRANCH_F Prev_predator
       TEST EQ &PREV.PET puppy
       BRANCH_F Prev_predator
       TEST EQ &PREV.PET hamster
       BRANCH_F Prev_prey
       TEST EQ &PREV.PET bunny
       BRANCH_F Prev_prey
       BRANCH Compare_prev
Prev_predator:
       TEST EQ &ME.PET hamster
       BRANCH_F Prev_predator_statement
       TEST NE &ME.PET bunny
       BRANCH_F Prev_predator_statement
       BRANCH Compare_prev
Prev_predator_statement:
       SAY(do you think your,p03,&PREV.PET,p03,will eat my,p03,&ME.PET)
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Prev_predator_reply
Prev_predator_reply:
       SET PHRASE1([1,I hope not],[1,I wouldn′t like that])
       SET PHRASE2([1,That would be terrible],[1,perhaps we should keep them
apart],[1,-])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH Compare_switch
Prev_prey:
       TEST EQ &ME.PET kitten
       BRANCH_F Prev_prey_statement
       TEST EQ &ME.PET puppy
       BRANCH_F Prev_prey_statement
       BRANCH Compare_prev
Prev_prey_statement:
       SAY(I hope my,p03,&ME.PET,p03,won′t eat your,p03,&PREV.PET)
       SELECT PREV
       SAY(p50)
       SWITCH SPEAKER Prev_prey_reply
Prev_prey_reply:
       SET PHRASE1([1,I hope not],[1,oh dear])
       SET PHRASE2([1,That would be terrible], [1,perhaps we should keep chem apart])
       SAY(&ME.PHRASE1,p03,&ME.PHRASE2)
       BRANCH Compare_switch
Compare_switch:
       SELECT NEXT
       BRANCH Normal_switch
Say_about_self:
       TEST EQ &ME.SELF_DONE done
       CHOOSE_F
([3,Start],[1,Cute_response],[1,Love_response],[1,Preference_response])
       TEST NE &ME &PREV
        CHOOSE_F
([2,Cute_response],[2,Love_response],[2,Preference_response],[3,My_pet])
        CHOOSE([2,Preference_response],[3,My_pet])
CUte_response:
        TEST EQ &PREV.PET $UNDEF
        BRANCH_F Say_about_self
        SAY(&PREV.PET,s,p03,are so cute)
        BRANCH Cute_switch
Cute_Switch:
        SELECT NEXT
        TEST EQ &NEXT &ME
        CHOOSE_F([1,Continue_self],[2,Cute_switch])
        BRANCH Normal_switch
Love_response:
        TEST EQ &PREV.PET $UNDEF
        BRANCH_F Say_about_self
        SET PHRASE1([1,ooh],[1,-])
        SAY(&ME.PHRASE1,p03,I love,p03,&PREV.PET,s)
        BRANCH Love_switch
Love_switch:
        SELECT NEXT
        TEST EQ &NEXT &ME
        CHOOSE_F([1,Continue_self],[2,Love_switch])
        BRANCH Normal_switch
Preference_response:
        TEST EQ &ME.PET $UNDEF
        BRANCH_F State_preference
        BRANCH Preference_switch
Stabe_preference:
        SET PHRASE1([1,ooh],[1,-])
Set_preference:
        TEST EQ &ME.PREFERENCE $UNDEF
        SET_F PREFERENCE([1,puppy],[1,kitten],[1,hamster],(1,bunny])
        TEST EQ &PREV.PET $UNDEF
        CHOOSE_F([1,Preference_response_1],[1,Preference_response_2])
        TEST EQ &PREV.PET &ME.PREFERENCE
        CHOOSE_F([1,Preference_response_3],[1,Preference_response_4])
         SAY(I prefer,p03,&ME.PREFERENCE,s)
        BRANCH Preference_switch
Preference_response_1:
        SAY(&ME.PHRASE1,p03,I think,p03,&ME.PREFERENCE,s,p03,are so cute)
        BRANCH Preference_switch
Preference_response_2:
        SAY(&ME.PHRASE1,p03,I love,p03,&ME.PREFERENCE,s)
        BRANCH Preference_switch
Preference_response_3:
        SAY(&ME.PHRASE1,p03,&PREV.PET,s,p03,are so cute)
        BRANCH Preference_switch
Preference_response_4:
        SAY(&ME.PHRASE1,p03,I love,p03,&PREV.PET,s)
        BRANCH Preference_switch
Preference_switch:
         SELECT NEXT
        TEST EQ &NEXT &ME
        CHOOSE_F([1,Continue_self],[2,Preference_switch])
        BRANCH Normal_switch
My_pet:
        TEST EQ &ME.PET $UNDEF
        BRANCH_F Declare_pet
       CHOOSE([1,Declare_name],[1,Declare_colour],[1,Declare_breed])
Declare_pet:
       SET PET([1,puppy],[1,kitten],[1,hamster],[1,bunny])
       SET PHRASE1([1,-])
       TEST EQ &PREV.PET &ME.PET
       SET_F PHRASE1([1,too],[1,as well],[1,also])
       SAY(I have a,p03,&ME,PET,p03,&ME.PHRASE1)
Declare_pet_switch:
       SELECT NEXT
       TEST EQ &NEXT &ME
       CHOOSE_F([1,Continue_self],[2,Declare_pet_switch])
       BRANCH Normal_switch
Declare_name:
       TEST EQ &ME.PET_NAME $UNDEF
       BRANCH_F Reply_to_name
       BRANCH My_pet
Declare_colour:
       TEST EQ &ME.COLOUR $UNDEF
       BRANCH_F Reply_to_colour
       BRANCH My_pet
Declare_breed:
       TEST NE &ME.PET puppy
       BRANCH_F My_pet
       TEST EQ &ME.BREED $UNDEF
       BRANCH_F Reply_to_breed
       BRANCH My_pet
Continue_self:
       BRANCH Start
Ask_next_spkr:
       SELECT NOTME
       TEST EQ &NEXT &PREV
       CHOOSE_F([1,Start ],[2,Ask_next_spkr])
       TEST EQ &NEXT.SELF_DONE done
       CHOOSE_F([3,Start],[2,Compare_next],[1,3party_statements])
       TEST EQ &NEXT.PET $UNDEF
       BRANCH_F Ask_next_pet
       CHOOSE([3,Next_pet_questions],[2,Compare_next],[1,3party_statements])
Next_pet_questions:
       CHOOSE([1,Ask_next_name],[1,Ask_next_colour],[1,Ask_next_breed])
Ask_next_name:
       TEST NE &NEXT.PET_NAME $UNDSF
       BRANCH_F Next_pet_questions
       SAY(&NEXT.NAME,p03,what do you call your,p03,&NEXT.PET,p50)
       SWITCH SPEAKER Reply_to_name
Ask_next_colour:
       TEST NE &NEXT.COLOUR $UNDEF
       BRANCH_F Next_pet_questions
       SAY(&NEXT.NAME,p03,what colour is your,p03,&NEXT.PET,p50)
       SWITCH SPEAKER Reply_to_colour
ASk_next_breed:
       TEST NE &NEXT.PET puppy
       BRANCH_F Next_pet_questions
       TEST NE &NEXT.BREED $UNDEF
       BRANCH_F Next_pet_questions
       SAY(&NEXT.NAME,p03,what type of dog is your,p03,&NEXT.PET,p50)
       SWITCH SPEAKER Reply_to_breed
Ask_Next_pet:
       TEST EQ &NEXT.PREFERENCE $UNDEF
       BRANCH_F Next_no_preference
       SAY(&NEXT.NAME,p03,do you have a,p03,&NEXT.PREFERENCE)
       BRANCH Next_pet_switch
Next_no_preference:
       SAY(&NEXT.NAME,p03,do you have a,p03,pet)
Next_pet_switch:
       SAY(p50)
       SWITCH SPEAKER Reply_to_pet
Compare_next:
       TEST EQ &ME.PET $UNDEF
       BRANCH_F Ask_next_spkr
       TEST EQ &NEXT.PET $UNDEF
       BRANCH_F Ask_next_spkr
       TESTEQ &ME.PET &NEXTT.PET
       CHOOSE_F([1,Next_same_pet_1],[1,Next_same_pet_2])
       CHOOSE
([1,Next_diff_pet_1],[1,Next_diff_pet_2],[1,Next_diff_pet_3],[2,Next_diff_pet_4])
Next_same_pet_1:
       SAY(Hay,p03,&NEXT.NAME,p03,we both have,p03,&ME.PET,s)
       BRANCH Compare_next_switch
Next_same_pet_2:
       SAY(&NEXT.NAME,p03,you and mehave,p03,&ME.PET,s,p03,isn′t that great)
       BRANCH Compare_next_switch
Next_diff_pet_1:
       SAY(&NEXT.NAME,p03,I hope my,p03,&ME.PET,p03,and your,p03,&NEXT.PET,p03,will
be friends)
       BRANCH Compare_next_switch
Next_diff_pet_2:
       SAY(&NEXT.NAME,p03,do you think your,p03,&NEXT.PET,p03,and
my,p03,&ME.PET,p03,will play together)
       BRANCH Compare_next_switch
Next_diff_pet_3:
       SAY(&NEXT.NAME,p03,it would be fun to see your,p03,&NEXT.PET,p03,and
my,p03,&ME.PET,p03,playing together)
       BRANCH Compare_next_switch
Next_diff_pet_4:
       TEST EQ &NEXT.PET kitten
       BRANCH_F Next_predator
       TEST EQ &NEXT,PET puppy
       BRANCH_F Next_predator
       TEST EQ &NEXT.PET hamster
       BRANCH_F Next_prey
       TEST EQ &NEXT.PET bunny
       BRANCH_F Next_prey
       CHOOSE([1,Next_diff_pet_1],[1,Next_diff_pet_2])
Next_predator:
       TEST EQ &ME.PET hamster
       BRANCH_F Next_predator_statement
       TEST EQ &ME.PET bunny
       BRANCH_F Next_pedator_statement
       CHOOSE([1,Next_diff_pet_1],[1,Next_diff_pet_2])
Next_predator_statement:
       SAY(&NEXT.NAME,p03,do you think your,p03,&NEXT.PET,p03,will eat
my,p03,&ME.PET,p50)
       SWITCH SPEAKER Next_predator_reply
Next_predator_reply:
       CHOOSE([1,Next_predator_reply_1],[1,Next_predator_reply_2])
Next_predator_reply_1:
       SAY(I don′t think so,p03,my,p03,&ME.PET,p03,is very gentle)
       SELECT NEXT
       BRANCH Compare_next_switch
Next_predator_reply_2:
       SAY(I hope not,p03,perhaps we should keep them apart)
       SELECT NEXT
       BRANCH Compare_next_switch
Next_prey:
       TEST EQ &ME.PET kitten
       BRANCH_F Next_prey_statement
       TEST EQ &ME.PET puppy
       BRANCH_F Next_prey_statement
       CHOOSE([1,Next_diff_pet_1],[1,Next_diff_pet_2])
Next_prey_statement:
       SAY(I hope my,p03,&ME.PET,p03,won′t eat,p03,&NEXT.NAME,s,p03,&NEXT.PET,p50)
       SWITCH SPEAKER Next_prey_reply
Next_prey_reply:
       CHOOSE([1,Next_prey_reply_1],[1,Next_rey_reply_2])
Next_prey_reply_1:
       SAY(I hope not,p03,that would be awful)
       SELECT NEXT
       BRANCH Compare_next_switch
Next_prey_reply_2:
       SAY(I hope not,p03,perhaps we should keep them apart)
       SELECT NEXT
       BRANCH Compare_next_switch
Compare_next_switch:
       BRANCH Normal_switch
3party_statements:
       TEST EQ &ME.PET $UNDEF
       BRANCH_F Ask_next_spkr
       TEST EQ &ME &PREV
       CHOOSE_F([1,Ask_next_spkr],[1,Compare_next])
       TEST EQ &PREV.PET $UNDEF
       CHOOSE_F([1,Ask_next_spkr],[1,Compare_next])
       TEST EQ &NEXT.PET $UNDEF
       CHOOSE_F([1,Ask_next_spkr],[1,Compare_next])
       TEST EQ &PREV.PET &NEXT.PET
       BRANCH_F P_eq_N
       TEST EQ &ME.PET &NEXT.PET
       BRANCH_F M_eq_N_ne_P
       TEST EQ &ME.PET &PREV.PET
       BRANCH_F M_eq_P_ne_N
P_ne_N_ne_M:
       SAY(wow,p03,&PREV.NAME,p03,&NEXT.NAME,p03,and me,p03,have three different
pets)
       BRANCH 3party_switcn
P_eq_N:
       TEST EQ &ME.PET &NEXT.PET
       BRANCH_F M_eq_P_eq_N
P_eq_N_ne_M:
       SAY(&PREV.NAME,p03,and,p03,&NEXT.NAME,p03,both have,p03,&PREV.PET,s,p03,but,I
have a,p03,&ME.PET)
       BRANCH 3party_switch
M_eq_N_ne_P:
       SAY(both,p03,&NEXT.NAME,p03,and me
have,p03,&ME.PET,s,p03,but,p03,&PREV.NAME,p03,hasa,p03,&PREV.PET)
       BRANCH 3party_switch
M_eq_P_ne_N:
       SAY(both,p03,&PREV.NAME,p03,and me
hae,p03,&ME.PET,s,p03,but,p03,&NEXT.NAME,p03,has a,p03,&NEXT.PET)
       BRANCH 3party_switch
M_eq_P_eq_N:
       SAY(&PREV.NAME,p03,and,p03,&NEXT.NAME,p03,and me all have,p03,&ME.PET,s)
3party_switch:
       BRANCH Normal_switch
预定会话主题
//Mr X
DEFINE G_THEME
DEFINE SELF_DONE
Start:
       SELECT homer
       BRANCH_F No_homer
       SELECT salesman
       BRANCH_F No_salesman
       SELECT lisa
       BRANCH_F No_lisa
       SELECT homer
       SWITCH SPEAKER Begin
No_homer:
       SAY(no homer)
       SWITCH FINISH
No_salesman:
       SAY(no salesman)
       SWITCH FINISH
No_lisa:
       SAY(no lisa)
       SWITCH FINISH
Begin:
       SAY(homer1)
       SAY(homer2)
       SELECT salesman
       SWITCH SPEAKER $L_NEXT
       SAY(SM1)
       SAY(SM2)
       SELECT homer
       SWITCH SPEAKER $L_NEXT
       SAY(homer3)
       SAY(homer4)
       SAY(homer5)
       SELECT saleeman
       SWITCH SPEAKER $L_NEXT
       SAY(SM3)
       SAY(SM4)
       SAY(SM5)
       SAY(SM6)
       SELECT homer
       SWITCH SPEAKER $L_NEXT
       SAY(homer6)
       SELECT salesman
       SWITCH SPEAKER $L_NEXT
       SAY(SM7)
       SAY(SM8)
       SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer7)
      SELECT salesman
      SWITCH SPEAKER $L_NEXT
      SAY(SM9)
      SAY(SM10)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer8)
      SELECT salesman
      SWITCH SPEAKER $L_NEXT
      SAY(SM11)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer9)
      SELECT salesman
      SWITCH SPEAKER $L_NEXT
      SAY(SM12)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer10)
      SELECT salesman
      SWITCH SPEAKER $L_NEXT
      SAY(SM13)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer11)
      SELECT lisa
      SWITCH SPEAKER $L_NEXT
      SAY(lisa1)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer12)
      SAY(homer13)
      SAY(homer14)
      SELECT lisa
      SWITCH SPEAKER $L_NEXT
      SAY(lisa2)
      SAY(lisa3)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer15)
      SAY(homer16)
      SAY(homer17)
      SELECT lisa
      SWITCH SPEAKER $L_NEXT
      SAY(lisa4)
      SAY(lisa5)
      SELECT homer
      SWITCH SPEAKER $L_NEXT
      SAY(homer18)
      SAY(homer19)
      SWITCH FINISH
      Snakes和Ladders主题
//snakes and ladders
DEFINE SQUARE
DEFINE OLD_SQUARE
DEFINE DICE
       DEFINE DICE_COUNTER
       DEFINE INTRO
       DEFINE DICE_INC_RETURN
       DEFINE SQUARE_INC_RETURN
Start:
       SELECT alice
       BRANCH_F No_alice
       SWITCH SPEAKER $L_NEXT
       SET SQUARE([1,zero])
No_alice:
       SELECT joe
       BRANCH_F No_joe
       SWITCH SPEAKER $L_EXT
       SET SQUARE([1,zero])
No_joe:
       SELECT zoe
       BRANCH_F No_zoe
       SWITCH SPEAKER $L_NEXT
       SET SQUARE([1,zero])
No_zoe:
       TEST EQ &ME.NAME alice
       BRANCH_F Init_select_joe
       TEST EQ &ME.NAME joe
       BRANCH_F Init_select_zoe
       TEST EQ &ME.NAME zoe
       BRANCH_F Init_select_alice
Init_select_alice:
       SELECT alice
       BRANCH_F Init_select_joe
       BRANCH Continue
Init_select_joe:
       SELECT joe
       BRANCH_F Init_select_zoe
       BRANCH Continue
Init_select_zoe:
       SELECT zoe
       BRANCH_F Init_select_alice
       BRANCH Continue
Continue:
       CHOOSE([1,Introduce_next],[1,No_intro])
Introduce_next:
       TEST EQ &ME.INTRO $UNDEF
       BRANCH_F No_intro
       TEST EQ &ME &NEXT
       BRANCH_F No_intro
       SET INTRO([1,yes])
       SAY(now its your turn,&NEXT.NAME)
       BRANCH Do_roll_switch
No_intro:
       SET INTRO([1,no])
Do_roll_switch:
       SAY(p50)
       SWITCH SPEAKER $L_NEXT
       TEST EQ &ME.NAME alice
       BRANCH_F Select_joe
       TEST EQ &ME.NAME joe
       BRANCH_F Select_zoe
       TEST EQ &ME.NAME zoe
       BRANCH_F Select_alice
Select_alice:
       SELECT alice
       BRANCH_F Select_joe
       BRANCH Roll_dice
Select_joe:
       SELECT joe
       BRANCH_F Select_zoe
       BRANCH Roll_dice
Select_zoe:
       SELECT zoe
       BRANCH_F Select_alice
       BRANCH Roll_dice
Roll_dice:
       TEST EQ &PREV.INTRO yes
       BRANCH_F Set_dice
       SAY(It′s my turn,p50)
Set_dice:
       SET DICE([1,one],[1,two],[1,three],[1,four],[1,five],[1,six])
       SET DICE_COUNTER([1,zero])
       TEST NE &ME.SQUARE $UNDEF
       SET_F OLD_SQUARE([1,&ME.SQUARE])
       SAY(I′verolled a,&ME.DICE,p50)
Move_my_square:
       TEST EQ &ME.DICE &ME.DICE_COUNTER
       BRANCH_F Moved
       SET DICE_INC_RETURN([1,one])
       BRANCH Increment_my_dice_counter
Dice_counter_incremented_one:
       BRANCH Increment_my_square
Square_incremented:
       TEST NE &ME.SQUARE &PREV.SQUARE
       BRANCH_F Test_next
       TEST EQ &ME &PREV
       BRANCH_F Test_next
       TEST NE &ME.DICE &ME.DICE_COUNTER
       BRANCH_F Passed_prev
       SAY(hurray,Ive caught up with you,&PREV.NAME,p075)
       BRANCH Test_next
Passed_prev:
       SAY(hurray,Ive overtaken you,&PREV.NAME,p075)
       BRANCH Test_next
Test_next:
       TEST NE &ME.SQUARE &NEXT.SQUARE
       BRANCH_F Done_testing
       TEST EQ &ME &NEXT
       BRANCH_F Done_testing
       TEST NE &ME.DICE &ME.DICE_COUNTER
       BRANCH_F Passed_next
       SAY(hurray,Ive caught up with you,&NEXT.NAME,p075)
       BRANCH Done_testing
Passed_next:
       SAY(hurray,Ive overtaken you,&NEXT.NAME,p075)
       BRANCH Done_testing
Done_testing:
       BRANCH Move_my_square
Moved:
       TEST NE &ME.SQUARE onehundredandone
       BRANCH_F Check_new_square
       SET SQUARE([1,&ME.OLD_SQUARE])
       SAY(Oh dear I′ve rolled too much,I have to stay on square,&ME.SQUARE,p075)
       BRANCH Continue
Check_new_square:
       SAY(now I′m at square,&ME.SQUARE,p075)
       TEST EQ &ME.SQUARE onehundred
       BRANCH_F I_have_won
       TEST EQ &ME.SQUARE four
       SET_F SQUARE([1,thirtynine])
       BRANCH_F Up_ladder
       TEST EQ &ME.SQUARE twentysix
       SET_F SQUARE([1,seventyfive])
       BRANCH_F Up_ladder
       TEST EQ &ME.SQUARE thirtythree
       SET_F SQUARE([1,fiftytwo])
       BRANCH_F Up_ladder
       TEST EQ &ME.SQUARE fiftynine
       SET_F SQUARE([1,sixtythree])
       BRANCH_F Up_ladder
       TEST EQ &ME.SQUARE seventythree
       SET_F SQUARE([1,ninetythree])
       BRANCH_F Up_ladder
       TEST EQ &ME.SQUARE ninetynine
       SET_F SQUARE([1,fortytwo])
       BRANCH_F Down_snake
       TEST EQ &ME.SQUARE eightysix
       SET_F SQUARE([1,fiftyseven])
       BRANCH_F Down_snake
       TEST EQ &ME.SQUARE seventy
       SET_F SQUARE([1,fifty])
       BRANCH_F Down_snake
       TEST EQ &ME.SQUARE thirtysix
       SET_F SQUARE([1,eight])
       BRANCH_F Down_snake
       TEST EQ &ME.SQUARE thirty
       SET_F SQUARE([1,twelve])
       BRANCH_F Down_snake
       BRANCH Continue
Up_ladder:
       SAY(hurray,up a ladder to square,&ME.SQUARE,p075);
       BRANCH Continue
Down_snake:
       SAY(Boo,down a snake to square,&ME.SQUARE,p075);
       BRANCH Continue
I_have_won:
       SAY(hurrah I have won)
       SWITCH FINISH
Increment_my_dice_counter:
       TEST EQ &ME.DICE_COUNTER zero
       BRANCH_F Dice_counter__zero
       TEST EQ &ME.DICE_COUNTER one
       BRANCH_F Dice_counter_one
       TEST EQ &ME.DICE_COUNTER two
       BRANCH_F Dice_counter_two
       TEST EQ &ME.DICE_COUNTER three
       BRANCH_F Dice_counter_three
       TEST EQ &ME.DICE_COUNTER four
       BRANCH_F Dice_counter_four
       TEST EQ &ME.DICE_COUNTER five
       BRANCH_F Dice_counter_five
Dice_counter_zero:
       SET DICE_COUNTER([1,one])
       BRANCH Dice_inc_return
Dice_counter_one:
       SET DICE_COUNTER([1,two])
       BRANCH Dice_inc_return
Dice_counter_two:
       SETDICE_COUNTER([1,three])
       BRANCH Dice_inc_return
Dice_counter_three:
       SET DICE_COUNTER([1,four])
       BRANCH Dice_inc_return
Dice_counter_four:
       SET DICE_COUNTER([1,five])
       BRANCH Dice_inc_return
Dice_counter_five:
       SET DICE_COUNTER ([1,six])
       BRANCH Dice_inc_return
Dice_inc_return:
       SAY(&ME.DICE_COUNTER,p50)
       TEST EQ &ME.DICE_INC_RETURN one
       BRANCH_F Dice_counter_incremented_one
Increment_my_square:
       TEST EQ &ME.SQUARE zero
       BRANCH_F Not_started
       TEST EQ &ME.SQUARE one
       BRANCH_F At_one
       TEST EQ &ME.SQUARE two
       BRANCH_F At_two
       TEST EQ &ME.SQUARE three
       BRANCH_F At_three
       TEST EQ &ME.SQUARE four
       BRANCH_F At_four
       TEST EQ &ME.SQUARE five
       BRANCH_F At_five
       TEST EQ &ME.SQUARE six
       BRANCH_F At_six
       TEST EQ &ME.SQUARE seven
       BRANCH_F At_seven
       TEST EQ &ME.SQUARE eight
       BRANCH_F At_eight
       TEST EQ &ME.SQUARE nine
       BRANCH_F At_nine
       TEST EQ &ME.SQUARE ten
       BRANCH_F At_ten
       TEST EQ &ME.SQUARE eleven
       BRANCH_F At_eleven
       TEST EQ &ME.SQUARE twelve
       BRANCH_F At_twelve
       TEST EQ &ME.SQUARE thirteen
       BRANCH_F At_thirteen
       TEST EQ &ME.SQUARE fourteen
       BRANCH_F At_fourteen
       TEST EQ &ME.SQUARE fifteen
       BRANCH_F At_fiveteen
       TEST EQ &ME.SQUARE sixteen
       BRANCH_F At_sixteen
       TEST EQ &ME.SQUARE seventeen
       BRANCH_F At_seventeen
       TEST EQ &ME.SQUARE eighteen
BRANCH_F At_eighteen
TEST EQ &ME.SQUARE nineteen
BRANCH_F At_nineteen
TEST EQ &ME.SQUARE twenty
BRANCH_F At_twenty
TEST EQ &ME.SQUARE twentyone
BRANCH_F At_twentyone
TEST EQ &ME.SQUARE twentytwo
BRANCH_F At_twentytwo
TEST EQ &ME.SQUARE twentythree
BRANCH_F At_twentythree
TEST EQ &ME.SQUARE twentyfour
BRANCH_F At_twentyfour
TEST EQ &ME.SQUARE twentyfive
BRANCH_F At_twentyfive
TEST EQ &ME.SQUARE twentysix
BRANCH_F At_twentysix
TEST EQ &ME.SQUARE twentyseven
BRANCH_F At_twentyseven
TEST EQ &ME.SQUARE twentyeight
BRANCH_F At_twentyeight
TEST EQ &ME.SQUARE twentynine
BRANCH_F At_twentynine
TEST EQ &ME.SQUARE thirty
BRANCH_F At_thirty
TEST EQ &ME.SQUARE thirtyone
BRANCH_F At_thirtyone
TEST EQ &ME.SQUARE thirtytwo
BRANCH_F At_thirtytwo
TEST EQ &ME.SQUARE thirtythree
BRANCH_F At_thirtythree
TEST EQ &ME.SQUARE thirtyfour
BRANCH_F At_thirtyfour
TEST EQ &ME.SQUARE thirtyfive
BRANCH_F At_thirtyfive
TEST EQ &ME.SQUARE thirtysix
BRANCH_F At_thirtysix
TEST EQ &ME.SQUARE thirtyseven
BRANCH_F At_thirtyseven
TEST EQ &ME.SQUARE thirtyeight
BRANCH_F At_thirtyeight
TEST EQ &ME.SQUARE thirtynine
BRANCH_F At_thirtynine
TEST EQ &ME.SQUARE forty
BRANCH_F At_forty
TEST EQ &ME.SQUARE fortyone
BRANCH_F At_fortyone
TEST EQ &ME.SQUARE fortytwo
BRANCH_F At_fortytwo
TEST EQ &ME.SQUARE fortythree
BRANCH_F At_fortythree
TEST EQ &ME.SQUARE fortyfour
BRANCH_F At_fortyfour
TEST EQ &ME.SQUARE fortyfive
BRANCH_F At_fortyfive
TEST EQ &ME.SQUARE fortysix
BRANCH_F At_fortysix
TEST EQ &ME.SQUARE fortyseven,
BRANCH_F At_fortyseven
TEST EQ &ME.SQUARE fortyeight
BRANCH_F At_fortyeight
TEST EQ &ME.SQUARE fortynine
BRANCH_F At_Fortynine
TEST EQ &ME.SQUARE fifty
BRANCH_F At_fifty
TEST EQ &ME.SQUARE fiftyone
BRANCH_F At_fiftyone
TEST EQ &ME.SQUARE fiftytwo
BRANCH_F At_fiftytwo
TEST EQ &ME.SQUARE fiftythree
BRANCH_F At_fiftythree
TEST EQ &ME.SQUARE fiftyfour
BRANCH_F At_fiftyfour
TEST EQ &ME.SQUARE fiftyfive
BRANCH_F At_fiftyfive
TEST EQ &ME.SQUARE fiftysix
BRANCH_F At_fiftysix
TEST EQ &ME.SQUARE fiftyseven
BRANCH_F At_fiftyaeven
TEST EQ &ME.SQUARE fiftyeight
BRANCH_F At_fiftyeight
TEST EQ &ME.SQUARE fiftynine
BRANCH_F At_fiftynine
TEST EQ &ME.SQUARE sixty
BRANCH_F At_sixty
TEST EQ &ME.SQUARE sixtyone
BRANCH_F At_sixtyone
TEST EQ &ME.SQUARE sixtytwo
BRANCH_F At_sixtytwo
TEST EQ &ME.SQUARE sixtythree
BRANCH_F At_sixtythree
TEST EQ &ME.SQUARE sixtyfour
BRANCH_F At_sixtyfour
TEST EQ &ME.SQUARE sixtyfive
BRANCH_F At_sixtyfive
TEST EQ &ME.SQUARE sixtysix
BRANCH_F At_sixtysix
TEST EQ &ME.SQUARE sixtyseven
BRANCH_F At_sixtyseven
TEST EQ &ME.SQUARE sixtyeight
BRANCH_F At_sixtyeight
TEST EQ &ME.SQUARE sixtynine
BRANCH_F At_sixtynine
TEST EQ &ME.SQUARE seventy
BRANCH_F At_seventy
TEST EQ &ME.SQUARE seventyone
BRANCH_F At_seventyone
TEST EQ &ME.SQUARE seventytwo
BRANCH_F At_seventytwo
TEST EQ &ME.SQUARE seventythree
BRANCH_F At_seventythree
TEST EQ &ME.SQUARE seventyfour
BRANCH_F At_seventyfour
TEST EQ &ME.SQUARE seventyfive
BRANCH_F At_seventyfive
TEST EQ &ME.SQUARE seventysix
BRANCH_F At_seventysix
TEST EQ &ME.SQUARE seventyseven
BRANCH_F At_seventyseven
TEST EQ &ME.SQUARE seventyeight
BRANCH_F At_seventyeight
TEST EQ &ME.SQUARE seventynine
BRANCH_F At_seventynine
TEST EQ &ME.SQUARE eighty
BRANCH_F At_eighty
TEST EQ &ME.SQUARE eightyone
       BRANCH_F At_eightyone
       TEST EQ &ME.SQUARE eightytwo
       BRANCH_F At_eightytwo
       TEST EQ &ME.SQUARE eightythree
       BRANCH_F At_eightythree
       TEST EQ &ME.SQUARE eightyfour
       BRANCH_F At_eightyfour
       TEST EQ &ME.SQUARE eightyfive
       BRANCH_F At_eightyfive
       TEST EQ &ME.SQUARE eightysix
       BRANCH_F At_eightysix
       TEST EQ &ME.SQUARE eightyseven
       BRANCH_F At_eightyseven
       TEST EQ &ME.SQUARE eightyeight
       BRANCH_F At_eightyeight
       TEST EQ &ME.SQUARE eightynine
       BRANCH_F At_eightynine
       TEST EQ &ME.SQUARE ninety
       BRANCH_F At_ninety
       TEST EQ &ME.SQUARE ninetyone
       BRANCH_F At_ninetyone
       TEST EQ &ME.SQUARE ninetytwo
       BRANCH_F At_ninetytwo
       TEST EQ &ME.SQUARE ninetythree
       BRANCH_F At_ninetythree
       TEST EQ &ME.SQUARE ninetyfour
       BRANCH_F At_ninetyfour
       TEST EQ &ME.SQUARE ninetyfive
       BRANCH_F At_ninetyfive
       TEST EQ &ME.SQUARE ninetysix
       BRANCH_F At_ninetysix
       TEST EQ &ME.SQUARE ninetyseven
       BRANCH_F At_ninetyseven
       TEST EQ &ME.SQUARE ninetyeight
       BRANCH_F At_ninetyeight
       TEST EQ &ME.SQUARE ninetynine
       BRANCH_F At_ninetynine
       TEST EQ &ME.SQUARE onshundred
       BRANCH_F At_onehundred
       BRANCH Square_incremented
Not_started:
       SET SQUARE([1,one])
       BRANCH Square_incremented
At_one:
       SET SQUARE([1,two])
       BRANCH Square_incremented
At_two:
       SET SQUARE([1,three])
       BRANCH Square_incremented
At_three:
       SET SQUARE([1,four])
       BRANCH Square_incremented
At_four:
       SET SQUARE([1,five])
       BRANCH Square_incremented
At_five:
       SET SQUARE([1,six])
       BRANCH Square_incremented
At_six:
       SET SQUARE([1,seven])
       BRANCH Square_incremented
At_seven:
       SET SQUARE([1,eight])
       BRANCH Square_incremented
At_eight:
       SET SQUARE([1,nine])
       BRANCH Square_incremented
At_nine:
       SET SQUARE([1,ten])
       BRANCH Square_incremented
At_ten:
       SET SQUARE([1,eleven])
       BRANCH Square_incremented
At_eleven:
       SET SQUARE([1,twelve])
       BRANCH Square_incremented
At_twelve:
       SET SQUARE([1,thirteen])
       BRANCH Square_incremented
At_thirteen:
       SET SQUARE ([1,fourteen])
       BRANCH Square_incremented
At_fourteen:
       SET SQUARE([1,fifteen])
       BRANCH Square_incremented
At_fiveteen:
       SET SQUARE([1,sixteen])
       BRANCH Square_incremented
At_sixteen:
       SET SQUARE([1,seventeen])
       BRANCH Square_incremented
At_seventeen:
       SET SQUARE([1,eighteen])
       BRANCH Square_incremented
At_eighteen:
       SET SQUARE([1,nineteen])
       BRANCH Square_incremented
At_nineteen:
       SET SQUARE([1,twenty])
       BRANCH Square_incremented
At_twenty:
       SET SQUARE([1,twentyone])
       BRANCH Square_incremented
At_twentyone:
       SET SQUARE([1,twentytwo])
       BRANCH Square_incremented
At_twentytwo:
       SET SQUARE([1,twentythree])
       BRANCH Square_incremented
At_twentythree:
       SET SQUARE([1,twentyfour])
       BRANCH Square_incremented
At_twentyfour:
       SET SQUARE([1,twentyfive])
       BRANCH Square_incremented
At_twentyfive:
       SET SQUARE([1,twentysix])
       BRANCH Square_incremented
At_twentysix:
       SET SQUARE([1,twentyseven])
       BRANCH Square_incremented
At_twentyseven:
       SET SQUARE([1,twentyeight])
       BRANCH Square_incremented
At_twentyeight:
       SET SQUARE([1,twentynine])
       BRANCH Square_incremented
At_twentynine:
       SET SQUARE([1,thirty])
       BRANCH Square_incremented
At_thirty:
       SETSQUARE([1,thirtyone])
       BRANCH Squere_incremented
At_thirtyone:
       SET SQUARE([1,thirtytwo])
       BRANCH Square_incremented
At_thirtytwo:
       SET SQUARE([1,thirtythree])
       BRANCH Square_incremented
At_thirtythree:
       SRT SQUARE([1,thirtyfour])
       BRANCH Square_incremented
At_thirtyfour:
       SET SQUARE([1,thirtyfive])
       BRANCH Square_incremented
At_thirtyfive:
       SET SQUARE([1,thirtysix])
       BRANCH Square_incremented
At_thirtysix:
       SET SQUARE([1,thirtyseven])
       BRANCH Square_incremented
At_thirtyseven :
       SET SQUARE([1,thirtyeight])
       BRANCH Square_incremented
At_thirtyeight:
       SET SQUARE([1,thirtynine])
       BRANCH Square_incremented
At_thirtynine:
       SET SQUARE([1,forty])
       BRANCH Square_incremented
At_forty:
       SET SQUARE([1,fortyone])
       BRANCH Square_incremented
At_fortyone:
       SET SQUARE([1,fortytwo])
       BRANCH Square_incremented
At_fortytwo:
       SET SQUARE([1,fortythree])
       BRANCH Square_incremented
At_fortythree:
       SET SQUARE([1,fortyfour])
       BRANCH Square_incremented
At_fortyfour:
       SET SQUARE([1,fortyfive])
       BRANCH Square_incremented
At_fortyfive:
       SET SQUARE([1,fortysix])
       BRANCH Square_incremented
At_fortysix:
       SET SQUARE([1,fortyseven])
       BRANCH Square_incremented
At_fortyseven:
       SET SQUARE([1,fortyeight])
       BRANCH Square_incremented
At_fortyeight:
       SET SQUARE([1,fortynine])
       BRANCH Square_incremented
At_fortynine:
       SET SQUARE([1,fifty])
       BRANCH Square_incremented
At_fifty:
       SET SQUARE([1,fiftyone])
       BRANCH Square_incremented
At_fiftyone:
       SET SQUARE([1,fiftytwo])
       BRANCH Square_incremented
At_fiftytwo:
       SET SQUARE([1,fiftythree])
       BRANCH Square_incremented
At_fiftythree:
       SET SQUARE([1,fiftyfour])
       BRANCH Square_incremented
At_fiftyfour:
       SET SQUARE([1,fiftyfive])
       BRANCH Square_incremented
At_fiftyfive:
       SET SQUARE([1,fiftysix])
       BRANCH Square_incremented
At_fiftysix:
       SET SQUARE([1,fiftyseven])
       BRANCH Square_incremented
At_fiftyseven:
       SET SQUARE([1,fiftyeight])
       BRANCH Square_incremented
At_fiftyeight:
       SET SQUARE([1,fiftynine])
       BRANCH Square_incremented
At_fiftynine:
       SET SQUARE([1,sixty])
       BRANCH Square_incremented
At_sixty:
       SET SQUARE([1,sixtyone])
       BRANCH Square_incremented
At_sixtyone:
       SET SQUARE([1,sixtytwo])
       BRANCH Square_incremented
At_sixtytwo:
       SET SQUARE([1,sixtythree])
       BRANCH Square_incremented
At_sixtythree:
       SET SQUARE([1,sixtyfour])
       BRANCH Square_incremented
At_sixtyfour:
       SET SQUARE([1,sixtyfive])
       BRANCH SqUare_incremented
At_sixtyfive:
       SET SQUARE([1,sixtysix])
       BRANCH Square_incremented
At_sixtysix:
       SET SQUARE([1,sixtyseven])
       BRANCH Square_incremented
At_sixtyseven:
       SET SQUARE([1,sixtyeight])
       BRANCH Square_ncremented
At_sixtyeight:
       SET SQUARE([1,sixtynine])
       BRANCH Square_incremented
At_sixtynine:
       SET SQUARE([1,seventy])
       BRANCH Square_incremented
At_seventy:
       SET SQUARE([1,seventyone])
       BRANCH Square_incremented
At_seventyone:
       SET SQUARE ([1,seventytwo])
       BRANCH Square_incremented
At_seventytwo:
       SET SQUARE([1,seventythree])
       BRANCH Square_incremented
At_seventythree:
       SET SQUARE([1,seventyfour])
       BRANCH Square_incremented
At_seventyfour:
       SET SQUARE([1,seventyfive])
       BRANCH Square_incremented
At_seventyfive:
       SET SQUARE([1,seventysix])
       BRANCH Square_incremented
At_seventysix:
       SET SQUARE([1,seventyseven])
       BRANCH Square_incremented
At_seventyseven:
       SET SQUARE([1,seventyeight])
       BRANCH Square_incremented
At_seventyeight:
       SET SQUARE([1,seventynine])
       BRANCH Square_incremented
At_seventynine:
       SET SQUARE([1,eighty])
       BRANCH Square_incremented
At_eighty:
       SET SQUARE([1,eightyone])
       BRANCH Square_incremented
At_eightyone:
       SET SQUARE([1,eightytwo])
       BRANCH Square_incremented
At_eightytwo:
       SET SQUARS([1,eightythree])
       BRANCH Square_incremented
At_eightythree:
       SET SQUARE([1,eightyfour])
       BRANCH Square_incremented
At_eightyfour:
       SET SQUARE([1,eightyfive])
       BRANCH Square_incremented
At_eightyfive:
       SET SQUARE([1,eightysix])
       BRANCH Square_incremented
At_eightysix:
       SET SQUARE([1,eightyseven])
       BRANCH Square_incremented
At_eightyseven:
       SET SQUARE([1,eightyeight])
       BRANCH Square_incremented
At_eightyeight:
       SET SQUARE([1,eightynine])
       BRANCH Square_incremented
At_eightynine:
       SET SQUARE([1,ninety])
       BRANCH Square_incremented
At_ninety:
       SET SQUAFE([1,ninetyone])
       BRANCH Square_incremented
At_ninetyone:
       SET SQUARE([1,ninetytwo])
       BRANCH Square_incremented
At_ninetytwo:
       SET SQUARE([1,ninetythree])
       BRANCH Square_incremented
At_ninetythree:
       SET SQUARE([1,ninetyfour])
       BRANCH Square_incremented
At_ninetyfour:
       SET SQUARE([1,ninetyfive])
       BRANCH Square_incremented
At_ninetyfive:
       SET SQUARE([1,ninetysix])
       BRANCH Square_incremented
At_ninetysix:
       SET SQUARE([1,ninetyseven])
       BRANCH Square_incremented
At_ninetyseven:
       SET SQUARE([1,ninetyeight])
       BRANCH Square_incremented
At_ninetyeight:
       SET SQUARE([1,ninetynine])
       BRANCH Square_incremented
At_ninetynine:
       SET SQUARE([1,onehunered])
       BRANCH Square_incremented
At_onehundred:
       SET SQUARE([1,onehundredandone])
       BRANCH Square_incremented
附录II-与图8有关的组件的细节
附录III-与图9有关的组件的细节

Claims (29)

1.一种用于创建在主题中操作玩具的指令的创作工具,包括:
用于接收与特定主题有关的内容的装置,所述装置适用于分别接收包括以下二者的内容:
表达数据,包括所述特定主题内玩具用于交互的语句;以及
脚本数据,用于控制所述特定主题内的玩具,所述脚本数据包括以下交互方法中的至少一个:
选择下个玩具;
说出语句;以及
分支进入会话的另一部分;以及;
用于处理所述脚本数据和所述表达数据以产生指令集合的装置,所述指令集合用于在所述特定主题中操作所述玩具;以及
用于输出所述指令集合的装置。
2.根据权利要求1所述的创作工具,其中,所述表达数据定义所述玩具的个性。
3.根据权利要求1所述的创作工具,其中,所述接收装置适用于接收离散部分中的内容。
4.根据权利要求3所述的创作工具,还包括:用于向每个表达数据部分分配唯一ID号的装置。
5.根据权利要求4所述的创作工具,其中,所述处理装置适用于利用所述唯一ID号作为对所述指令集合中所述表达数据部分的引用。
6.根据权利要求1所述的创作工具,其中,所述表达数据包括下列中的至少一个:主题名称和玩具名称。
7.根据权利要求1所述的创作工具,其中,所述脚本数据包括下列中的至少一个:在主题内能够交互的玩具的数目、主题相关参数、以及玩具相关参数。
8.根据权利要求1所述的创作工具,还包括:用于接收与游戏有关的内容。
9.根据权利要求1所述的创作工具,还包括:用于将与特定主题有关的所述脚本数据和表达数据存储在阵列中的装置。
10.根据权利要求9所述的创作工具,其中,所述处理装置适用于从所述阵列中产生所述指令集合。
11.根据权利要求1所述的创作工具,其中,所述处理装置包括:用于对包括至少一些表达数据在内的至少一个列表进行编译的装置。
12.根据权利要求11所述的创作工具,其中,所述列表编译装置适用于在所述特定主题中对每个玩具的相应的列表进行编译。
13.根据权利要求1所述的创作工具,其中,所述表达数据是符号数据。
14.根据权利要求13所述的创作工具,还包括:用于记录符号数据的扮演数据版本的装置。
15.根据权利要求14所述的创作工具,还包括:用于提示演员产生扮演数据的必备部分的装置。
16.根据权利要求15所述的创作工具,其中,所述处理装置适用于产生符号数据和扮演数据之间的查找表。
17.根据权利要求1所述的创作工具,其中,所述处理装置适用于输出表达数据。
18.根据权利要求17所述的创作工具,其中,所述处理装置还适用于分别输出表达数据和指令集合。
19.根据权利要求1所述的创作工具,其中,所述处理装置适用于产生指令集合,所述指令集合包括:
用于控制玩具的基本功能的基本指令集合;以及
用于在主题中控制玩具的针对基本指令集合的主题指令集合。
20.根据权利要求19所述的创作工具,其中,所述处理装置适用于将所述基本指令集合与所述主题指令集合组合在一起。
21.根据权利要求19所述的创作工具,还包括编译器。
22.根据权利要求21所述的创作工具,其中,所述编译器适用于编译所述基本指令集合和所述主题指令集合。
23.根据权利要求1所述的创作工具,其中,所述处理装置包括:适用于将所述指令集合变换为计算机可读代码的编码引擎。
24.根据权利要求23所述的创作工具,其中,所述计算机可读代码可下载到玩具、由玩具可读取并由玩具可执行。
25.根据权利要求1所述的创作工具,还包括用户界面,所述用户界面包括:
用于向用户提供输入窗口集合的装置,每个窗口对应于与主题有关的特定内容子集合的输入;以及
用于发起指令的输出的装置。
26.根据权利要求25所述的创造工具,其中,所述内容子集合包括下列中的至少一个:主题相关数据、玩具相关数据以及上下文相关数据。
27.根据权利要求26所述的创造工具,其中,所述上下文相关数据包括下列中的至少一个:玩具用于交互所使用的语句、脚本数据、主题相关参数、以及玩具相关参数。
28.一种用于产生玩具的主题数据的系统,包括:
根据权利要求1至27中任一项所述的创作工具,用于访问、创建和编辑所述主题数据;以及
服务器,包括用于存储所述主题数据的数据库;
其中,所述创作工具适用于经由互联网访问主题数据。
29.根据权利要求28所述的系统,其中,所述创作工具适用于将所述主题数据处理成阵列,并且所述数据库适用于在所述阵列中存储所述主题数据。
CN200880106641.8A 2007-07-19 2008-07-18 交互式玩具 Expired - Fee Related CN101801485B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0714148.4 2007-07-19
GB0714148A GB0714148D0 (en) 2007-07-19 2007-07-19 interacting toys
PCT/GB2008/002457 WO2009010760A2 (en) 2007-07-19 2008-07-18 Interacting toys

Publications (2)

Publication Number Publication Date
CN101801485A CN101801485A (zh) 2010-08-11
CN101801485B true CN101801485B (zh) 2015-09-30

Family

ID=38476662

Family Applications (2)

Application Number Title Priority Date Filing Date
CN200880106641.8A Expired - Fee Related CN101801485B (zh) 2007-07-19 2008-07-18 交互式玩具
CN200980127979.6A Expired - Fee Related CN102170945B (zh) 2007-07-19 2009-01-21 交互式玩具

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN200980127979.6A Expired - Fee Related CN102170945B (zh) 2007-07-19 2009-01-21 交互式玩具

Country Status (6)

Country Link
US (4) US8795022B2 (zh)
EP (1) EP2180928A2 (zh)
JP (2) JP5628029B2 (zh)
CN (2) CN101801485B (zh)
GB (1) GB0714148D0 (zh)
WO (1) WO2009010760A2 (zh)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0714148D0 (en) 2007-07-19 2007-08-29 Lipman Steven interacting toys
EP2341991A1 (en) * 2008-07-18 2011-07-13 Hydrae Limited Interacting toys
KR101210280B1 (ko) * 2009-09-02 2012-12-10 한국전자통신연구원 센서 기반 조립형 교구
GB201005718D0 (en) 2010-04-06 2010-05-19 Lipman Steven Interacting toys
TWI437503B (zh) * 2010-11-26 2014-05-11 Inst Information Industry 電子公仔與電子公仔網路服務系統
US11062615B1 (en) 2011-03-01 2021-07-13 Intelligibility Training LLC Methods and systems for remote language learning in a pandemic-aware world
US10019995B1 (en) 2011-03-01 2018-07-10 Alice J. Stiebel Methods and systems for language learning based on a series of pitch patterns
CN102872598A (zh) * 2011-09-15 2013-01-16 徐菲 互动火车游戏机玩具装置及方法
JP5644846B2 (ja) * 2011-12-21 2014-12-24 キヤノンマーケティングジャパン株式会社 撮影システム、撮影装置、制御方法、及びプログラム
US9649565B2 (en) * 2012-05-01 2017-05-16 Activision Publishing, Inc. Server based interactive video game with toys
US10223636B2 (en) * 2012-07-25 2019-03-05 Pullstring, Inc. Artificial intelligence script tool
CN104884142A (zh) * 2012-12-13 2015-09-02 西博互动有限公司 新颖的玩具控制台和使用方法
GB2511479A (en) * 2012-12-17 2014-09-10 Librae Ltd Interacting toys
US11748833B2 (en) * 2013-03-05 2023-09-05 Wevideo, Inc. Systems and methods for a theme-based effects multimedia editing platform
US9821237B2 (en) 2013-04-20 2017-11-21 Tito Vasquez Character-based electronic device, system, and method of using the same
JP6061822B2 (ja) * 2013-09-05 2017-01-18 株式会社バンダイ 玩具システム及びプログラム
US9665179B2 (en) 2013-10-01 2017-05-30 Mattel, Inc. Mobile device controllable with user hand gestures
US20150147936A1 (en) * 2013-11-22 2015-05-28 Cepia Llc Autonomous Toy Capable of Tracking and Interacting With a Source
BR112017007667A2 (pt) * 2014-10-17 2017-12-19 Osarogiagbon Kelvin brinquedos falantes inspiracionais
US20160136534A1 (en) * 2014-11-13 2016-05-19 Robert A. EARL-OCRAN Programmable Interactive Toy
JP5889465B1 (ja) 2015-04-24 2016-03-22 任天堂株式会社 情報処理プログラム、情報処理装置、情報処理システムおよび情報処理装置の制御方法
JP2016202683A (ja) * 2015-04-24 2016-12-08 任天堂株式会社 情報処理装置、情報処理装置の制御方法、情報処理プログラムおよび情報処理システム
US10616310B2 (en) * 2015-06-15 2020-04-07 Dynepic, Inc. Interactive friend linked cloud-based toy
KR101824977B1 (ko) * 2015-11-26 2018-02-02 엠텍씨앤케이 주식회사 컨텐츠와 외부기기 연동방법
TWI622896B (zh) * 2015-12-23 2018-05-01 絡達科技股份有限公司 可回應外部音訊產生動作回饋之電子裝置
CN108697938B (zh) 2016-01-06 2020-07-10 埃沃洛夫有限公司 具有可变角色的机器人
US10118696B1 (en) 2016-03-31 2018-11-06 Steven M. Hoffberg Steerable rotating projectile
DE112017003651T5 (de) * 2016-07-20 2019-04-04 Groove X, Inc. Autonom agierender Roboter, der Körperkontakt versteht
US10272349B2 (en) 2016-09-07 2019-04-30 Isaac Davenport Dialog simulation
US10111035B2 (en) 2016-10-03 2018-10-23 Isaac Davenport Real-time proximity tracking using received signal strength indication
CN107665702A (zh) * 2016-11-09 2018-02-06 汎达科技(深圳)有限公司 一种带音频播放的电子设备的使用方法
TWM551086U (zh) * 2017-07-05 2017-11-01 jun-yi He 機台直播系統
CN107583291B (zh) * 2017-09-29 2023-05-02 深圳希格玛和芯微电子有限公司 玩具互动方法、装置及玩具
US11712637B1 (en) 2018-03-23 2023-08-01 Steven M. Hoffberg Steerable disk or ball
ES2738829A1 (es) * 2018-07-24 2020-01-27 Choren Belay Maria Luz Speed inforgal
US10944221B2 (en) * 2018-09-05 2021-03-09 Assa Abloy Ab Systems and devices for authentication
JP2020042074A (ja) * 2018-09-06 2020-03-19 トヨタ自動車株式会社 音声対話装置、音声対話方法および音声対話プログラム
US10981073B2 (en) 2018-10-22 2021-04-20 Disney Enterprises, Inc. Localized and standalone semi-randomized character conversations
US10486078B1 (en) * 2019-01-18 2019-11-26 Disney Enterprises Inc. Toy with build-time effects
US11123647B2 (en) * 2019-02-04 2021-09-21 Disney Enterprises, Inc. Entertainment system including performative figurines
JP6935452B2 (ja) * 2019-05-29 2021-09-15 株式会社バンダイ システム、装置、方法及びプログラム
US20210056272A1 (en) 2019-08-23 2021-02-25 KEFI Holdings, Inc Object detection-based control of projected content
CN114124591B (zh) * 2021-11-22 2024-04-05 抖音视界有限公司 发言用户选定方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6368177B1 (en) * 1995-11-20 2002-04-09 Creator, Ltd. Method for using a toy to conduct sales over a network
US6544098B1 (en) * 1998-12-15 2003-04-08 Hasbro, Inc. Interactive toy
WO2004104736A2 (en) * 2003-05-12 2004-12-02 Stupid Fun Club Figurines having interactive communication
GB2423943A (en) * 2005-04-26 2006-09-13 Steven Lipman Communicating Toy

Family Cites Families (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US663393A (en) * 1900-01-02 1900-12-04 William L Hall Hearing-tube.
US4247108A (en) 1979-09-10 1981-01-27 Ideal Toy Corporation Time limited power boost passing for toy vehicles
US4857030A (en) 1987-02-06 1989-08-15 Coleco Industries, Inc. Conversing dolls
US5314336A (en) 1992-02-07 1994-05-24 Mark Diamond Toy and method providing audio output representative of message optically sensed by the toy
US5587545A (en) 1994-03-10 1996-12-24 Kabushiki Kaisha B-Ai Musical toy with sound producing body
US5636994A (en) 1995-11-09 1997-06-10 Tong; Vincent M. K. Interactive computer controlled doll
US20010021669A1 (en) * 1995-11-20 2001-09-13 Creator Ltd. I*doll
US6553410B2 (en) 1996-02-27 2003-04-22 Inpro Licensing Sarl Tailoring data and transmission protocol for efficient interactive data transactions over wide-area networks
CA2225060A1 (en) 1997-04-09 1998-10-09 Peter Suilun Fong Interactive talking dolls
US6246927B1 (en) 1997-05-05 2001-06-12 Ralph Dratman Inter-cooperating toys
WO1999017854A1 (en) 1997-10-07 1999-04-15 Health Hero Network, Inc. Remotely programmable talking toy
US20010032278A1 (en) 1997-10-07 2001-10-18 Brown Stephen J. Remote generation and distribution of command programs for programmable devices
JP3494567B2 (ja) 1998-01-22 2004-02-09 株式会社ナムコ 携帯用通信玩具及び情報記憶媒体
US6110000A (en) 1998-02-10 2000-08-29 T.L. Products Promoting Co. Doll set with unidirectional infrared communication for simulating conversation
US6089942A (en) 1998-04-09 2000-07-18 Thinking Technology, Inc. Interactive toys
US6056618A (en) * 1998-05-26 2000-05-02 Larian; Isaac Toy character with electronic activities-oriented game unit
IL127569A0 (en) 1998-09-16 1999-10-28 Comsense Technologies Ltd Interactive toys
US6246403B1 (en) * 1998-10-08 2001-06-12 Hewlett-Packard Company Method and apparatus for generating a graphical user interface
IL127293A0 (en) 1998-11-26 1999-09-22 Creator Ltd Script development systems and methods useful therefor
AU3693300A (en) 1999-01-28 2000-08-18 Lanette O. Pleschutznig Interactively programmable toy
US6729934B1 (en) 1999-02-22 2004-05-04 Disney Enterprises, Inc. Interactive character system
US6546436B1 (en) * 1999-03-30 2003-04-08 Moshe Fainmesser System and interface for controlling programmable toys
WO2000066239A1 (fr) * 1999-04-30 2000-11-09 Sony Corporation Systeme d'animal de compagnie electronique, systeme de reseau, robot et support de donnees
US6663393B1 (en) 1999-07-10 2003-12-16 Nabil N. Ghaly Interactive play device and method
AU6646900A (en) 1999-08-19 2001-03-13 Kidkids, Inc. Networked toys
US6631351B1 (en) 1999-09-14 2003-10-07 Aidentity Matrix Smart toys
JP2001154681A (ja) 1999-11-30 2001-06-08 Sony Corp 音声処理装置および音声処理方法、並びに記録媒体
JP2001179665A (ja) 1999-12-24 2001-07-03 Toshiba Corp 知的ロボット
US6255800B1 (en) 2000-01-03 2001-07-03 Texas Instruments Incorporated Bluetooth enabled mobile device charging cradle and system
CA2391919A1 (en) 2000-02-11 2001-08-16 Mattel, Inc. Interacting toy figure for computer users
US20020049606A1 (en) 2000-05-16 2002-04-25 Lg Electronics Inc. Interactive learning device using web-based system and method therefor
JP2002063092A (ja) 2000-06-09 2002-02-28 Tomy Co Ltd 情報提供システム、情報提供装置、サーバ、玩具、情報提供方法および記録媒体
US20020029388A1 (en) 2000-06-22 2002-03-07 Bernd Heisele Interactive toy system
ATE451156T1 (de) 2000-07-01 2009-12-15 Alexander V Smirnov Interaktives spielzeug
JP2002028378A (ja) * 2000-07-13 2002-01-29 Tomy Co Ltd 対話型玩具および反応行動パターン生成方法
US20020092004A1 (en) * 2000-07-26 2002-07-11 Lee John Michael Methods and systems for automatically generating software applications
WO2002013935A1 (en) 2000-08-12 2002-02-21 Smirnov Alexander V Toys imitating characters behaviour
US20020059386A1 (en) * 2000-08-18 2002-05-16 Lg Electronics Inc. Apparatus and method for operating toys through computer communication
FR2813471B1 (fr) * 2000-08-31 2002-12-20 Schneider Automation Systeme de communication d'un equipement d'automatisme base sur le protocole soap
JP4765155B2 (ja) * 2000-09-28 2011-09-07 ソニー株式会社 オーサリング・システム及びオーサリング方法、並びに記憶媒体
CN1398214A (zh) * 2000-10-23 2003-02-19 索尼公司 有足机器人、用于有足机器人的动作控制方法、和存储介质
JP2002292154A (ja) 2001-03-30 2002-10-08 Bandai Co Ltd 運動体制御システム
US7069503B2 (en) * 2001-06-04 2006-06-27 Murata Kikai Kabushiki Kaisha Device and program for structured document generation data structure of structural document
TW572767B (en) 2001-06-19 2004-01-21 Winbond Electronics Corp Interactive toy
WO2003000370A1 (en) 2001-06-25 2003-01-03 Peter Sui Lun Fong Interactive talking dolls
US20040229696A1 (en) 2003-05-14 2004-11-18 Beck Stephen C. Object recognition toys and games
JP3791773B2 (ja) 2001-11-29 2006-06-28 コナミ株式会社 遠隔操作玩具システム、並びにその送信機及び駆動機器
US7297044B2 (en) 2002-08-26 2007-11-20 Shoot The Moon Products Ii, Llc Method, apparatus, and system to synchronize processors in toys
JP2005001099A (ja) 2003-03-23 2005-01-06 Sony Corp ロボット装置及びその動作制御方法
US20050009443A1 (en) 2003-05-20 2005-01-13 Martin Raymond J. Supra-voice sound-responsive toy
US6822154B1 (en) 2003-08-20 2004-11-23 Sunco Ltd. Miniature musical system with individually controlled musical instruments
US20050157668A1 (en) 2003-12-24 2005-07-21 Michael Sivan Wireless remote control and data transfer system
US7704119B2 (en) 2004-02-19 2010-04-27 Evans Janet E Remote control game system with selective component disablement
WO2005094959A1 (en) 2004-03-24 2005-10-13 Uncle Milton Industries, Inc. Toy figure with interchangeable brain having associated voice responses
JP3888558B2 (ja) * 2004-11-18 2007-03-07 任天堂株式会社 無線ネットワークシステムおよび無線通信プログラム
US7930182B2 (en) * 2005-03-15 2011-04-19 Nuance Communications, Inc. Computer-implemented tool for creation of speech application code and associated functional specification
US8490015B2 (en) * 2005-04-15 2013-07-16 Microsoft Corporation Task dialog and programming interface for same
EP1885466B8 (en) 2005-04-26 2016-01-13 Muscae Limited Toys
EP1776990A3 (en) 2005-10-21 2007-09-19 Patent Category Corporation Interactive toy system
US20080153594A1 (en) * 2005-10-21 2008-06-26 Zheng Yu Brian Interactive Toy System and Methods
JP4918778B2 (ja) 2005-11-16 2012-04-18 株式会社日立製作所 半導体集積回路装置の製造方法
US8055707B2 (en) * 2005-11-30 2011-11-08 Alcatel Lucent Calendar interface for digital communications
US20070128979A1 (en) 2005-12-07 2007-06-07 J. Shackelford Associates Llc. Interactive Hi-Tech doll
US8134061B2 (en) 2006-04-21 2012-03-13 Vergence Entertainment Llc System for musically interacting avatars
US8324492B2 (en) 2006-04-21 2012-12-04 Vergence Entertainment Llc Musically interacting devices
US7607962B2 (en) 2006-05-04 2009-10-27 Mattel, Inc. Electronic toy with alterable features
US8287327B1 (en) * 2006-08-02 2012-10-16 Ghaly Nabil N Interactive play set
US20080080456A1 (en) * 2006-09-29 2008-04-03 Williams Jeffrey B Method and Apparatus for Wireless Coordination of Tasks and Active Narrative Characterizations
EP2117782B1 (en) * 2007-01-12 2014-07-30 Hansjorg Baltes Method and system for robot generation
US8020150B1 (en) * 2007-05-11 2011-09-13 Nvidia Corporation System, method, and computer program product for controlling a driver utilizing scripts
US8583746B1 (en) * 2007-05-25 2013-11-12 Callwave Communications, Llc Methods and systems for web and call processing
GB0714148D0 (en) 2007-07-19 2007-08-29 Lipman Steven interacting toys
US8689194B1 (en) * 2007-08-20 2014-04-01 The Mathworks, Inc. Optimization identification
US20090069084A1 (en) 2007-09-12 2009-03-12 Reece Alex D System and Methods for Monitoring and Controlling the Actions of an Avatar in a Virtual Environment
US8545335B2 (en) 2007-09-14 2013-10-01 Tool, Inc. Toy with memory and USB ports
US20090117819A1 (en) 2007-11-07 2009-05-07 Nakamura Michael L Interactive toy
KR100995807B1 (ko) 2008-03-28 2010-11-22 성균관대학교산학협력단 컨텐츠가 매일 업데이트 되는 대화형 완구 및 그 동작방법
EP2341991A1 (en) 2008-07-18 2011-07-13 Hydrae Limited Interacting toys
US8689131B2 (en) * 2009-01-21 2014-04-01 Microsoft Corporation Visual creation of computer-based workflows
GB201005718D0 (en) 2010-04-06 2010-05-19 Lipman Steven Interacting toys

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6368177B1 (en) * 1995-11-20 2002-04-09 Creator, Ltd. Method for using a toy to conduct sales over a network
US6544098B1 (en) * 1998-12-15 2003-04-08 Hasbro, Inc. Interactive toy
WO2004104736A2 (en) * 2003-05-12 2004-12-02 Stupid Fun Club Figurines having interactive communication
GB2423943A (en) * 2005-04-26 2006-09-13 Steven Lipman Communicating Toy

Also Published As

Publication number Publication date
CN102170945A (zh) 2011-08-31
US8827761B2 (en) 2014-09-09
JP2010533532A (ja) 2010-10-28
US20110143631A1 (en) 2011-06-16
CN102170945B (zh) 2015-11-25
EP2180928A2 (en) 2010-05-05
JP2014195718A (ja) 2014-10-16
GB0714148D0 (en) 2007-08-29
US20150111465A1 (en) 2015-04-23
CN101801485A (zh) 2010-08-11
JP5628029B2 (ja) 2014-11-19
US8795022B2 (en) 2014-08-05
WO2009010760A4 (en) 2009-09-11
WO2009010760A2 (en) 2009-01-22
WO2009010760A3 (en) 2009-06-25
US20150140893A1 (en) 2015-05-21
US20120015734A1 (en) 2012-01-19

Similar Documents

Publication Publication Date Title
CN101801485B (zh) 交互式玩具
US8324492B2 (en) Musically interacting devices
CN101208141B (zh) 玩具
JP5404781B2 (ja) 対話式玩具
CN1720520B (zh) 对话控制设备和方法,以及机器人设备
US20100041304A1 (en) Interactive toy system
US20140170929A1 (en) Interacting toys
JP2011528246A5 (zh)
US9262890B2 (en) Customizing player-generated audio in electronic games
CN107908709A (zh) 亲子语聊互动方法、装置及系统
US20120185254A1 (en) Interactive figurine in a communications system incorporating selective content delivery
TWI412393B (zh) 機器人
EP1885466A2 (en) Toys
CN115814421B (zh) 虚拟人行为自驱调度生成方法、装置、设备及存储介质
JP2004195636A (ja) 対話制御装置及び方法並びにロボット装置
CN117291618A (zh) 一种供电服务智能客服机器人及其系统
CN108509391A (zh) 课件单页的处理方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: HYDE CO., LTD.

Free format text: FORMER OWNER: LIPMAN STEVEN

Effective date: 20110412

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: LONDON, UK TO: RAMSAY, UK

TA01 Transfer of patent application right

Effective date of registration: 20110412

Address after: Ramsay

Applicant after: Hydor OY

Address before: London, England

Applicant before: Lipman Steven

C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20170622

Address after: London, England

Patentee after: Lipman Steven

Address before: Ramsay

Patentee before: Hydor OY

TR01 Transfer of patent right
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150930

Termination date: 20180718