专利名称:一种协同实物编程方法
技术领域:
本发明属于人机交互领域,具体涉及到一种通过实物进行多人协同编程的方法。
背景技术:
伴随着计算技术的迅速发展,计算思维得到了越来越多的研究人员的重视。卡内基梅隆大学的教授周以真提出,计算思维是21世纪每个人都应该具备的基本技能,同时指出计算思维将成为和读,写,算一样重要的每个儿童都应该具备的能力。计算思维有助于儿童发展分析能力,对他们在STEM (科学,技术,工程和数学)学科和其他领域,甚至是日常生活都有很大的好处。编程允许儿童去探讨创造性的议题,并使其学习问题求解的技能。虽然计算思维并不只是计算机编程,但计算机科学与技术学科要求的编程能力中却处处需要计算思维能力,两者是相互促进的。目前大部分的编程语言是基于文本和符号的方式。这种编程方式对儿童来讲,理 解和使用起来很不方便,其主要原因是传统编程语言中的语法、复杂指令以及大量输入工作。对儿童和初学编程者来讲,学习这种编程语言、理解程序的运行方式是比较困难的一件事。同时,儿童很难理解和记住程序语言的语法、逻辑关系和程序架构等非常专业的知识。此外,对文字掌握得还不纯熟的儿童来说,程序的文本编辑方式缺乏直观性,儿童无法采用传统的编程方式来创作自己的程序。因此,进行儿童编程研究的目的在于提供一种对儿童来说容易学习使用的编程软件系统。正如我们之前申请的专利一种实物编程方法和系统(公开号CN 102136208)中所描述的,实物编程将实物交互方式与编程有效的结合起来,为儿童编程提供了一种有效的途径。通过实物编程系统,儿童可以对程序语言的逻辑有更加直观的理解。儿童通过对实物的拼接组合,就可以完成普通程序语言通过键盘输入代码完成的工作。协同工作为人们提供了一种新的工作模式,尤其对于儿童而言,有多方面的优势。有研究表明儿童对于多人共同参与一项任务有着浓厚的兴趣,该方式充分利用面对面交流的优点,帮助儿童综合利用来自其他用户的信息。面对面的合作所带来的社交方面的益处也是人们共享计算机的主要原因之一。在多人共享计算机的情况下,计算机只能由一个人操作时,旁观者由于没有计算机的控制权,很容易失去兴趣和注意力。而一些基于实物交互界面的系统,可以有效避免这一问题。同时,通过协同的合作,也可以有效的提高解决问题的效率和加快学习的速度。正是基于协同的上述优势,我们提出了一种协同的实物编程方法。通过这种方法,用户有更多的机会进行合作以及相互帮助,每一个人都有机会参与到任务中。协同编程不仅能增强用户的参与意识,也能促进用户之间的交流与合作,增强了编程的趣味性和娱乐性。当前已有的协同编程的方法和系统,都是允许用户通过角色的分工合作来共同编写一个程序。没有能够支持多个用户同时进行编程,并且通过程序来进行相互协作
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种协同实物编程的方法。通过这种方法,多个用户可以同时通过实物编程的方式来编写程序,同时通过所编写的程序来进行协作完成特定的任务。本发明通过让儿童及新手使用实物编程块来进行协作编程。一方面,解决了儿童及新手学习编程的难题。使得儿童和新手可以摆脱编程语言繁冗的语法,专注于程序设计本身。另一方面,在协作过程中,通过相互的交流沟通,加速了儿童及新手学习和解决编程问题的过程。同时,通过程序间的协作,帮助儿童和新手接触和理解更加复杂的编程概念,比如并行处理和同步等。本发明的技术方案为一种协同实物编程的方法,其步骤为I)选取或建立一个双人或多人协同实物编程显示环境,并给出相应双人或多人协 同实物编程的任务和协同任务执行规则,存储到协同实物编程处理模块中。下面通过双人协作为例进行说明。2)协同任务是指参与协作的用户需要分别通过实物编程块来编写的程序,控制游戏中对应的人物进行协作并完成指定的任务。3)用户I和用户2分别根据I)中的相应的协同任务要求,分别在自己的编程空间中,摆放实物编程块序列完成任务;其中,每个实物编程块的表面都贴有一个计算机视觉识别码和易于儿童理解的语义图形。4)设置有两个摄像头,分别用于获取用户I和用户2单独摆放的编程块序列。两个摄像头会定时的拍摄用户摆放的实物编程块序列,上传至计算机上的协同实物编程处理模块。5)协同实物编程处理模块接收到摄像头拍摄的图像后,会利用计算机视觉相关技术分别对于两个摄像头拍摄的图像进行分析,找出每个用户所摆放的实物编程块序列的相
关信息。6)步骤5)中得到了每个用户实物编程块序列的相关信息后,协同实物编程处理模块会分别对于两个用户通过实物编程块所编写的程序进行语法和语义的分析和理解,根据每一用户的实物编程块序列信息将其转换为相应的功能语义序列。首先,需要对于当前位置的资源进行冲突检测,如果检测到资源冲突,就进行冲突解决。然后,结合两个用户当前进行中的任务信息以及双方所摆放的编程块序列中是否包含协同操作块,来判断是否是协同操作,如果不是就按照专利一种实物编程方法和系统(公开号CN102136208)所述的方法对每个用户的程序进行分析处理;如果是协同操作,则进行相应的协同处理。7)步骤6)中的如有错误,则本方法将对于两个用户分别给出明确实时的图形反馈,提示两个用户出错原因,直到用户正确修改程序。重复步骤I到5直到程序完成。如果两个用户的程序全部编译正确,本方法会给出正确的图形反馈。8)如果在步骤6)中,两个用户通过实物编程块编写的程序正确,并且完成了相应的任务后,用户可以选择运行程序。每个程序在运行的过程中,每一步执行都会进行冲突检测,判断程序对应的人物是否和其他用户的程序对应人物在地图中发生冲突并处理。根据两个用户所编写的程序不同,本方法会分别针对每个用户给出单独的多媒体反馈。每个用户的程序对应着一个人物,而每个用户程序的执行效果通过这个人物的相应动作和行为进行显示。9)在步骤8)中,在执行协同部分的程序时,两个用户所编写的程序会进行通信以确保状态的同步,只有两个程序的状态都达到一致状态后,协同部分的程序才会继续执行。比如,当一个用户程序所控制的人物1,已经走到了协同任务要执行的起始位置,但是与其协同的程序控制点另一个人物2,还未走到协同任务起始执行位置,此时,人物I的程序会暂停执行,直到人物2的程序执行到对应可协同的位置并发送信号,将人物I的程序恢复执行,并同时开始协同部分任务的执行。如果两个程序在执行到协同部分时的状态不同步,则执行较快的一方程序需要进行暂停等待,直到同步完成,才可以继续执行。步骤I)进一步包括在提供的协同实物编程环境下,定义相应的协同编程任务,供多用户使用,在本发明中,以两个用户为例进行说明,分别为用户I和用户2。用户I和用户2的程序将通过分别对应着两个不同的人物的行为和动作进行反馈。 (I)根据给出的协同编程任务来制定相应的任务规则。以家具布置为例,在这里,需要每个用户确定从当前位置移动到待移动家具的可行路线。同时,还需要确定移动每个家具所使用的操作和移动的位置方向和步数。在遇到需要协作才能移动的家具时,还需要考虑使用协同控制操作来完成任务。(2)协同实物编程软件处理模块会依据当前协同编程任务内容、当前的协同任务规则,和当前每个用户所摆放的实物编程块序列来确定游戏的当前状态。然后,由协同实物编程显示环境实时显示整个环境的当前状态。包括,每个用户当前的任务进度和每个用户程序的编译结果反馈等。步骤3)进一步包括每个用户所编写的程序需要首先满足单人实物编程语法分析的要求,并单独进行语法分析。当所控制的人物遇到协同编程任务或者用户编程块中摆放了协同控制编程块后,需要将参与协同任务的用户编写的程序结合协同任务的要求,进行协同编程的语法分析,判断是否满足协同任务要求。步骤3)进一步包括(I)在选择相应任务关卡后,两个用户分别阅读相应协同任务的目标和规则。用户需要在这一步理解整个协同任务的目标,然后通过思考和交流来确定解决步骤。(2)根据⑴中的协同任务目标,用户I和用户2分别在共有的实物编程块中,选取相应的实物编程块,并且将实物编程块以一定的顺序放在属于自己的编程空间中。每个实物编程块上都贴有计算机视觉识别码供系统识别和图形语义图标帮助用户理解每个编程块的功能。步骤4)进一步包括(I)每个编程空间都配有一个摄像头来捕捉用户的程序序列。每个摄像头独立的对于用户的编程空间内的实物编程块序列进行拍照。所拍摄的每个用户摆放的编程块序列照片,都会单独传送到实物编程模块进行识别分析,完成程序的编译分析。步骤5)进一步包括(I)对于每个摄像头所捕捉到的图片,分别使用计算机视觉技术,对图像进行处理,找出每张图像中所包含的计算机视觉识别码的相关信息,包括所识别出的每个计算机视觉识别码在图像中的位置信息和每个识别码本身所代表的识别编号等。(2)通过识别出的位置信息,分析每张图片中,实物编程块相互之间的逻辑拓扑关系,还原两个用户的实物编程块序列的顺序,并对于识别出每个用户的计算机视觉识别码序列建立相应的数据结构进行存储。步骤6)进一步包括(I)建立计算机视觉识别码与相应实物编程块语义之间的映射关系表。本协同实物编程块分为六大类,分别是开始结束编程块、方向编程块、循环控制编程块、循环数字编程块、动作编程块和协同控制编程块。每种实物编程块都有与其对应的唯一计算机视觉识
别码一一对应。(2)将步骤5中,针对每个用户建立的计算机视觉识别码编程块序列,通过⑴中建立的映射表并结合位置信息转换为实物编程语言中的相应功能语义序列。(3)依据当前任务地图,对于当前编译状态下,操作位置的资源进行冲突检测。如果此资源发生冲突即有多个程序需要占有此资源,则需要进行冲突消解。如果此时已有一方先占有资源,其余冲突方程序的相应对于抢占资源的操作会失败,并进行等待,直到先占有一方释放资源。如果冲突方,同时提出资源占有请求,则随机进行抢占优先权分配。(4)依据当前任务,本方法会给出对应的语法语义判定规则。如果是单人任务,则单独对该用户编写程序所对于的功能语义序列结合相应的任务信息,地图背景等进行语法语义分析。具体可参考专利一种实物编程方法和系统(公开号CN 102136208)。如果是多人协同的任务,协同游戏的语法语义规则是依据家庭地图的可行路径,以及相应协同任务相关情况制定。即用户的协同程序除了要满足基本编程语法外,程序的语义还需要满足协同任务的要求。本方法会依据上述协同游戏的语法语义规则,对于(2)中所转换好的每个用户的实物编程语言的功能语义序列来进行相应的语法语义分析。(5)如果⑷中的协同任务编程中,用户的编程序列包含协同操作的内容,则首先需要对于协同部分的代码单独进行协同语法检测,首先对于协同部分代码中,协同控制编程块的语法正确性进行检测,然后对于中间的协同操作序列的语法依据单人任务的编程语法进行检测判断。而后结合每个协同参与用户的当前程序指令,对于协同部分的操作进行语义分析,判断是否满足协同部分的语义要求。具体的是通过对于协同任务的具体操作和任务要求,以及参与协同用户的协同操作序列进行分析,判断每个用户的协同操作序列是否能够达到协同任务的目标。步骤7)进一步包括(I)如果步骤6中,读取的当前用户指令不满足该协同实物编程显示环境的语法语义判定规则,则实时通过文字、图像等多媒体呈现方式分别实时反馈给每个用户,并在每个用户的提示区域给出相应的错误提示,帮助并鼓励用户进行思考,找到并解决相应错误。比如,如果用户I的程序编译出现错误,一方面,在用户I所对应的提示反馈区域,会出现卡通的哭脸来提示有程序有错误发生。另一方面,在地图上,本方法会继续给出当前用户代码序列中所有正确编译过的代码的反馈,帮助用户来找到错误代码发生的位置。(2)如果步骤6满足该协同实物编程显示环境的语法语义判定规则,则分别给用户编程正确的反馈提示。正确的反馈包括给每个用户在对应的提示区域分别给出笑脸的反馈;对当前每个用户当前读取并成功编译的指令执行进行提示。例如,对于方向编程块通过在地图单元格上绘制箭头来提示位置,其中不同颜色的箭头对应不同的用户。同时,如果读取的是协同部分的指令,则两个用户的相应反馈颜色均为红色,以提示用户这一部分是共同需要完成的任务。如果两个用户都已经正确完成了程序的编写,则提示用户可以进入程序执行阶段。步骤8)进一步包括(I)当两个用户所分别编写的程序全部正确,并且满足相应的任务需求后,用户可以选择开始运行程序。(2)在执行过程中,每个程序在所对应的人物每行进一步时,都会对于该位置进行冲突检测判断是否存在资源抢占问题。如果该位置没有其他程序对应人物抢占冲突,则继续执行。如果发生和其他程序对应人物对于同一位置的资源冲突,则需要进行冲突消解。如果已有一方提前占有了冲突资源,则后来程序需要等待,直到已占有程序放弃资源。否则, 在进行冲突消解时,首先会判断冲突位置和双方程序对应人物起始位置之间的距离以及到达冲突位置的时间,位置短以及先到达者对应的程序将会继续执行。而距离远以及后到达者的程序,需要进行暂停,直到先通过冲突位置的程序,发出释放信号,等待的程序及对应的人物才可以继续执行。如果在冲突消解时,冲突双方程序对应人物的起始位置与冲突位置之间的距离相同或者到达时间相同时,则随机决定由哪一方程序优先通过,其余冲突方进行等待。(3)两个程序的运行结果,会分别生成多媒体的反馈效果,主要是屏幕上生成动画等。每个用户所编写程序在地图中路径的反馈颜色也不同,可以很容易分辨每个程序所对应的路径和行为。每个用户的程序对应着一个不同的人物,而每个用户的程序的执行的效果通过这个人物的相应动作和行为进行显示,包括,行走,推,拉,打扫等等。同时,当每个迷宫中的任务,执行了特定的动作后,本方法也会针对每个动作给出单独的反馈。比如,当用户打扫完一处的垃圾,此处的垃圾会消失,并且地板的颜色会发生改变,以提示该部分已经清扫。步骤9)进一步包括(I)协同部分指令的执行结果,以动画反馈的形式输出,以双人协同为例,只有当两个用户所控制的迷宫中的人物,均满足协同程序开始的条件,比如到达了协同程序开始协作的位置时,协同部分才能够开始执行。具体的也就是说,如果用户I的程序在步骤6中执行到了协同编程指令,需要与用户2的程序进行同步通信,只有当双方的程序状态一致满足协同操作的要求后,程序才能够开始执行协同操作部分的代码。判定双方程序状态是否协同一致是依据双方程序所控制的人物,是否都进入到了协同操作开始执行的位置,当双方都满足协同要求后,每个程序会开始单独的读取协同操作部分的命令并进行执行。如果在步骤9中,双方程序执行到协同编程指令时的状态,不满足同步的需求,则已经完成协同操作准备的程序需要暂停等待,直到系统另一方的程序也满足执行协同部分程序的要求。实现本方法的具体模块结构如图I所示,包含输入模块、识别理解模块、逻辑处理模块和结果显示模块。这四个模块之间的关系是输入模块作为整个信息输入端,以双人协作为例,主要包含,两个摄像头和笔或鼠标等输入设备。两个摄像头是用来分别捕捉每个用户单独摆放的实物编程块序列。而鼠标和笔是让用户控制完成程序的一些基本功能。识别理解模块包含了图像捕捉、计算机视觉识别、指点操作理解三个部分。图像捕捉是通过调用相应的摄像头控制模块来控制摄像头实时拍摄图片。计算机视觉识别则对于拍摄到的图片进行识别处理,找出每个实物编程块在每个图片中的位置。指点操作理解,用来对于用户通过笔和鼠标来完成的一些操作进行判断并执行。逻辑处理模块包括语法分析、语义分析,协同理解,同步控制,实时反馈、游戏控制等六个部分。语法分析就是要对于用户所摆放的实物编程块序列,结合相应的协同编程语法规则,来判断用户编程的语法是否正确。语义分析,在语法分析的基础上,结合协同游戏的规则,背景地图和任务信息,对于相应的操作的语义正确性进行理解和分析。实时反馈,将语法语义分析结果实时的提供给用户。而游戏控制是依据每个用户所编写的程序,分别执行相应的游戏指令。协同理解,是指对于用户代码中协同部分代码,单独进行协同语法分析,同时结合另一个用户的程序进行语义的判断。具体是将每个参与协同的用户的协同操作部分的代码进行分析,然后对于双方的操作结合协同任务要求进行分析,判断是否操作是否能够满足协同任务的要求。同步控制是指,当两个用户所编写的程序执行到协同程序部分时,需要进行彼此间同步通信,只有每个程序均满足协同部分的要求后,才能开始执行协同程序代码。最后,结果显示模块,是作为输出来与用户进行交互反馈的。这个模块主要由两部分组成图像输出和动画输出。在整个游戏的编程阶段,所有的反馈,包括程序总体界面和编译图像提示等,都是以图像输出的形式进 行呈现。而动画输出是指在程序完成编程阶段后,本方法会根据用户所编写的程序内容,自动生成动画以对于程序的执行进行可视化的反馈。本方法的实现架构图如图2所示,主要分为界面交互层,内部处理层和数据资源三部分。界面交互层主要用来处理主程序和用户进行交互的输入输出,包含用户程序输入,用户通过鼠标和笔的输入,以及最后的图像以及动画的反馈呈现等。内部处理层,对于界面交互层的输入进行了数据采集,然后通过逻辑控制调用数据资源层的相关资源内容,最后经过信息反馈渲染提供给界面交互层进行反馈。本方法在我们现有的专利一种实物编程的方法和系统(公开号CN 102136208)的基础上,通过计算机视觉等技术,提出了一个支持多人同时协作编程的协作实物编程方法。这种方法通过允许多个用户同时通过实物编程块进行编程,并且所编写的程序进行实时的协同完成任务,实现了实物编程语言的一个突破。这种协同编程的方式,一方面可以通过用户之间的协作和沟通加速用户学习编程的过程和乐趣;另一方面,通过程序的协同,可以帮助用户接触并体验并行处理和同步等高级的编程语言概念。由于本方法容易实现且成本低廉,所以具有很好的推广潜力。在儿童教育、家庭娱乐、儿童编程学习等环境下,多个用户都可以通过协同编程来完成游戏任务,同时学习接触到相关的编程知识。与现有技术相比,本发明具有如下的优点和技术效果I.给出了一种适合儿童的协同实物编程方法。本发明给出的协同实物编程方法,降低了编程对于儿童的难度,同时允许儿童通过我们的方法进行协作编程.2.给出了一种支持多个儿童同时进行编程的实物交互方法本发明通过采用多个摄像头,支持多个儿童在独立的编程空间内同时进行编程.摄像头会单独对于每个儿童的编程序列进行捕捉和识别。3.支持多个儿童通过多种方式来进行协同
本协同编程方法,不仅支持儿童在开发的空间内通过互相帮助,语言沟通来进行协同,还支持两个儿童通过编写自己所编写的程序来进行协同完成特定协同任务。4.通过实时的图形编译反馈,降低调试程序的难度本发明给出的协同编程方法会对于每个用户所编写的程序,以实时的多媒体图像方式分别给每个用户进行直观反馈,帮助多用户进行程序的调试,降低调试难度。5.成本低廉,易于推广。相比于其他的一些实物编程系统,本方法价格低廉,容易进行推广。
图I本方法的基本处理流程图;
图2本方法的系统架构图;图3本原型连接结构图;图4本方法的实现流程图。
具体实施例方式为了使本技术领域的技术人员更好的理解,下面结合附图和实施方式对本协同编程方法作进一步的详细说明本发明方法的双人协作示例的连接结构图如图3所示,主要由一台计算机主机,一台显示器,两个摄像头和两套实物编程块组成。主机用来存储程序以及进行运算,显示器进行结果的反馈,而两个摄像头来对于两个用户所摆放的实物编程块序列进行拍照。本发明的实现流程如图4所示。主要分为状态控制、编程调试和程序执行三个阶段。首先是状态控制部分。如图4所示,此阶段主要分为用户输入监听和用户行为分析两个模块。用户输入监听模块用来监听来自用户可操作的笔或鼠标的输入数据,伴随着整个原型的启动而开始。监听到数据后,将相应的输入数据传送给用户输入分析模块来进行处理分析。下面详细说明在状态控制阶段的各个模块的详细功能(I)用户输入监听用户输入监听是整个系统中获取用户输入与用户进行交互的重要部分,主要是用来对于用户的鼠标或笔的操作数据进行监听,并将结果传给(2)进行分析,决定程序的下
一步动作。I.对于鼠标或笔的输入监听。这一部分伴随着整个系统的启动而开始,系统主要记录笔或者鼠标在界面上即时位置的变化,以及是否被点击或者双击等操作的发生。一旦检测到相应的事件,便将数据记录发送给(2)进行用户行为的分析,执行每个操作所对应的功能。(2)用户行为分析在(I)中获取了鼠标或笔的输入数据后,用户行为分析模块将会对于输入数据进行相应的处理和理解,分析相应用户的行为和意图,然后执行。I.对于笔或鼠标的输入的理解分析。这一部分的分析主要分为3个阶段。第一阶段,程序启动时,用户需要通过笔或鼠标这样的输入设备来点击用户界面上的响应按钮来选择相应的游戏内容类型或者退出系统。第二阶段,当第一阶段用户选择了相应的游戏类型后,会进入相应的游戏关卡选择界面,用户行为分析此时需要判断用户通过笔或鼠标选择了哪一个关卡内容,而后转入响应相应关卡的游戏地图界面。第三阶段,在第二阶段用户选择进入了游戏地图界面后,用户可以通过笔或鼠标这样的输入设备来点击游戏界面上的编程控制按钮,来开始编程或者开始执行程序。在完成了状态控制阶段后,程序将进入协同编程调试阶段或者进入协同程序执行阶段。下面先对协同编译调试阶段进行说明。协同编译调试阶段是整个协同编程方法最重要部分。在这个部分,每个用户需要通过摆放实物编程块来分别编写程序分别控制游戏中的所对应的格子人物,独自或者协作的完成相应的指定任务。在此过程中,本方法会定时的捕捉每个用户的编程序列,并且进行编译,实时的给出反馈帮助用户进行编程。以双人协作为例,主要的操作步骤如下首先,通过相应的视频图像捕捉模块,来控制两个摄像头定时的拍摄两个用户的实物编程序列的照片。而后,将拍摄的照片通过计算机视觉技术来进行分析识别。将识别出的计算机视觉识别码序列映射为此协同编程语言的指令,为每个用户得到一个编程指令序列。最后,对于每个用户的编程指令序列进行编译并给出实时的反馈。下面将详细介绍这一部分的各个功能 模块和步骤(I)图像捕捉处理I.打开摄像头。当用户在游戏主界面通过鼠标或笔点击相应编程控制按钮,开始进行编程后,系统第一步,会通过调用相应的摄像头控制模块打开两个摄像头,为下一步的图像捕捉处理做准备。2.启动定时器。在完成弟I步打开摄像头后,本方法会为每个摄像头分别启动一个定时器,直到编程调试阶段结束。两个定时器分别控制着两个摄像头,每隔I秒左右对用户摆放的实物编程块序列进行拍照。所拍摄照片供系统分析识别使用。3.图像捕捉。在第2步定时器启动后,通过调用系统软件中的图像捕捉模块,来分别控制两个摄像头拍摄用户所摆放的实物编程块序列。并且将所捕捉到的每个用户的编程序列图片分别保存到unsigned char数组当中,供下一步计算机视觉识别使用。4.计算机视觉识别。在图像捕捉部分,系统将拍摄有两个用户所保存的实物编程块序列的图片数据分别保存在两个unsigned char数组当中。而在计算机视觉识别部分,就是要对于两个保存的图像数据进行处理,分析出每幅图像中编程块的信息和位置。在本系统中,在每个实物编程块的表面都贴有计算机视觉识别码。系统通过图像捕捉模块将每个用户摆放的实物编程块序列拍摄下来,图像中包含了每个实物编程块表面的计算机视觉识别码。在计算机视觉识别阶段,系统通过调用相应的计算机视觉识别库中的响应识别函数,对于图像捕捉阶段保存的每个用户所对应的图像数据unsigned char数组进行处理识另IJ,获取了图像中每个计算机视觉识别码的具体信息和他们在图像中的位置。(2)语法分析和语义理解I.本方法通过(I)后,获取了每幅图像中的所有计算机视觉识别码的信息和位置。在语法分析和语义理解的两个阶段,就是要将这些信息进行分析得到每个用户程序的语法语义正确性。而对于每一幅图片中的信息的分析过程,主要可以分为两步。a.第一步,分析所有计算机视觉识别码相互之间的逻辑和拓扑关系。由于摄像头的拍摄视野有限,因此,当用户摆放的实物编程序列中某一行的长度超出摄像头拍摄视野的宽度时,用户可以在原有实物编程块序列的下方重新开始新的一行进行摆放,本方法会自动识别为一个连续程序序列。系统通过这样的方式来支持在程序中使用更多的实物编程块的数量。下一步,系统会通过对于识别出来的每个计算机视觉识别码在图像中的位置信息进行相应的排序,来确定所有编程块的拓扑顺序。整个编程块序列在图像中的识别顺序是,先上后下,先左后右。因此,依据此规则,在第(I)步的基础上,先根据所有识别出的计算机视觉码的在图像中的y坐标进行一次排序,将所有的识别码按照从上到下的顺序排好。然后在此基础上,再对于所有的识别码进行行切分。最后,对于切分好的每一行,对于其X坐标进行排序。经过这样过程后,就可以得出没用用户摆放的实物编程块序列的所有的计算机视觉识别码的拓扑顺序。b.第二步,在a中确定了所有的计算机视觉识别码的拓扑逻辑关系基础上,要将这些计算机视觉识别码与对应的程序功能语义映射,而后再将这些语义转换为具体的程序指令。协同实物编程块分为六大类,分别是开始结束编程块、方向编程块、循环控制编程块、循环数字编程块、动作编程块和协同控制编程块。每种实物编程块都有与其对应的唯一计算机视觉识别码一一对应。在当前的协同实物编程系统中一共使用了 21种不同的计算机·视觉识别码,他们与程序中的语义的对应关系。所对应的功能语义为程序开始、程序结束、协同开始、协同结束、向上下左右四个方向行走、循环开始、循环结束,从I到9等九个数字,用来表示循环操作的重复次数,以及拿起、放下、推、拉,扫地,拖地等动作。系统根据对应关系,将识别好的计算机视觉识别码按照原有的拓扑顺序转换为相应的功能语义代码,并保存在相应的数据容器中。2.在I中,经过相应的转换得到的功能语义序列中,若检测到包含有协同控制相关语义代码,则需要单独对于协同部分的代码进行语法分析和语义理解。首先,需要检测协同部分的编程块是否符合协同控制等语法。在当前的实物编程方法中,协同部分的语法规则应该为首先摆放协同开始编程块,最后摆放协同结束编程块标示着整个协同部分的完成,然后在协同开始和协同结束编程块中间摆放所需要协同的动作编程块序列。在每一步语法分析完成后,本方法会同时结合相关的游戏地图(主要包含当前地图中的所有家具和物体的位置以及可行路径的信息)和任务信息对于语义正确性进行检测.比如,在当前位置是否有需要协同的任务,根据用户的程序序列,结合协同任务的信息和游戏地图的位置信息,来判断当前的协同操作是否正确等,并给出相应的反馈信息.具体内容在(3)中进行描述。(3)游戏状态理解和反馈I.游戏状态理解。在游戏状态理解阶段,在经过了(2)中对于程序的语法分析和语义理解之后,本方法会结合游戏的相关地图和任务信息对于当前每个用户的功能语义代码序列进行分析,从而对协同游戏状态进行理解和判断,并且给出相应的反馈。当前游戏状态包括当前游戏任务的地图和任务的相关信息、当前两个用户所走到的位置、当前两个用户已经完成的任务和未完成的任务以及每个用户所摆放的实物编程块序列等。具体的过程是,依次从第(2)步保存的两个用户程序所对应的功能语义序列中取出相应的命令,每取到一个命令后,根据该命令的种类结合游戏的规则,游戏的地图和任务信息,以及当前的任务状态来进行判断是否符合当前协同游戏的状态,并需要进行冲突检测。如果不符合,则在当前用户的反馈提示区域内,进行单独的结果反馈,同时停止读取该用户剩下的语义命令。如果正确,则继续从该用户的功能语义序列中取出命令,并对于当前命令进行语义理解,结合相应的游戏规则,游戏地图以及人物信息来判断语义正确性。直到取出所有命令或某个命令不符合当前游戏状态返回。具体的,在每一步判断某个命令是否符合当前游戏状态时,不同命令的判断依据和过程也不同。其中开始结束指令,方向命令的判断过程可以参考专利一种实物编程方法和系统(公开号CN 102136208)所述。其他指令的判断过程如下所示a.动作相关指令。当前的协同游戏中所包含的动作相关指令为拿起动作指令,放下动作指令,扫地动作指令,拖地动作指令,推动作指令,拉动作指令。当取出的指令为拿起动作指令时,本方法会检测当前人物所在位置的四周是否有可拿起的物体,比如扫箸和拖把。如果取出的是放下动作指令,本方法会检测当前位置是否为空,能否放下人物所持物体以及当前用户是否有可放下的物体。如果是扫地或者拖地动作指令,则检测当前用户的手里是否已经拿起了相应的工具,比如扫帚和拖把等。如果读取到的是推或者拉动作指令, 需要读取当前人物所站方向的正前方或正后方是否为可行的单元格。下一步,会对于每个动作指令所针对的位置和资源进行冲突检测。如果该资源已经被其他程序所抢占,则发生了资源冲突。需要进行冲突消解。这时会根据冲突双方的起始位置和冲突资源位置之间的距离进行判断,距离短者获得资源使用权,其他用户的相关动作操作则失败,并给出反馈。如果冲突相关方的距离相同,则随机分配资源优先使用权。如果相关的动作指令符合当前游戏的状态,则继续读取下一个指令。如果不符合相应的游戏状态,则本方法给出相应的错误反馈提示。b.循环相关指令。循环相关指令主要包含循环控制指令和循环数字指令两种。循环控制指令在本协同编程方法中的使用顺序为,循环开始指令,方向指令,循环操作指令,循环次数指令和循环结束指令。循环开始和结束指令标示着一个循环的开始和结束。方向指令,表示游戏中的人物所需要循环移动的方向。循环操作指令,表示人物伴随着移动所需要同时进行的循环动作。循环次数指令用来标明循环应该重复执行的次数。除了使用循环控制指令来进行循环外,还可以通过循环数字指令,进行简易循环操作。使用方法为,用户先放下所需要循环重复的编程动作块,而后直接放下循环数字块表示循环重复的次数。在这里,这种简易循环操作支持的循环编程指令为,方向编程指令、推编程指令和拉编程指令。如果在这一步,顺利的取出所有的循环指令,下一步会依据a, b, c的相关指令判定规贝U,结合游戏场景地图和游戏规则来判断,相应的循环操作能否正确执行,如果不能正确执行,则按照a,b,c中的规则给出相应的错误反馈。c.协同控制相关指令。协同控制的相关指令是用来控制一个协同操作的开始和结束。主要包括,协同开始指令和协同结束指令。协同控制指令的使用次序应该为协同开始指令,协同内容指令序列,协同结束指令。其中协同内容指令序列可以为一个或者多个为了完成特定的协同任务的编程指令。比如,当两个用户需要合作将一个沙发向前推动5个单元格时,协同内容的指令序列就应该为,推编程指令加上循环次数为5的循环次数指令。而本方法的处理流程是,当读取到协同开始指令后,会检测当前的人物是否已经进入了协同开始的状态。如果不是,则给出错误反馈。如果是,则通过游戏状态信息判定当前是否有需要进行协同的任务。如果没有,则给出错误反馈。如果有则继续进行指令读取。在读取后面协同内容的指令序列时,语法和语义的分析过程与a,b,c部分的一致。最后,本方法会针对每个用户的协同指令给出单独的图形反馈。2.反馈本方法会实时的给出每个用户相应的反馈信息。根据内容不同可以分为三种不同的反馈编译结果的图像反馈、编程提示的图像反馈、协同任务反馈和程序运行的动画输出反馈。a.编译结果图像反馈。主要是通过卡通脸表情的变化来给用户以直观的提示。微笑的卡通脸表示游戏状态理解正确。沮丧卡通脸表示游戏状态理解有错误。此编译图像反馈结果将会动态的显示在每个用户的特定反馈结果区域内。即用户所控制人物当前的路径状态上。
b.编程提示图像反馈。在编程阶段,本方法会对于用户编程的结果动态的显示在游戏地图上。具体的提示方式如下当用户摆放的方向编程块符合当前游戏的状态时,本方法会在相应的单元格上绘制对应的方向图标,而为了区分两个用户的编程进度,二者的方向图标颜色不同。而当用户通过拿起编程块成功拿起扫帚或者拖把等工具时,在地图中的相应工具图标会从彩色变为灰色。当用户通过扫地块或者拖地块成功开始进行扫地时,本方法会将当前打扫的块以及他四周8个单元格的颜色变为某一颜色如紫色,表示当游戏中人物走过一个单元格时,系统会设置为它四周的8块单元格也都被打扫干净。而当用户通过推或者拉的动作块来移动家具时,本方法会绘制相应家具的黑色边框在当前已经移动的目标上,来提示用户已经移动的位置。C.协同反馈提示。本方法对于协同的反馈提示有所不同。如果用户进入了协同编程的状态,两个用户在单元格上绘制的方向图标变为一致的颜色,用来提示用户已经进入了双人合作状态中。比如,当两个用户所控制的人物需要共同来推沙发到指定位置时,当他们开始协同部分的推的操作后,两人的操作反馈在地图单元格上都会以红色的箭头来进行提示,当完成协同部分的操作后,两人的操作反馈会恢复原有不同的反馈箭头颜色。d.程序运行的动画反馈。当所有编程任务都已经被完成后,可以进行程序的执行。每个用户的程序执行,在系统中对应着一个不同的人物,而每个程序的执行的效果通过这个人物的相应动作和行为进行显示,包括,行走,推,拉,打扫等等。同时,当每个迷宫中的任务,执行了特定的动作后,本方法也会针对每个动作给出单独的动画反馈。反馈是本方法实时调试的一个重要组成部分。用户可以根据图像提示来综合判断所编写程序的出错位置。很大程度上方便了程序调试的整个过程。如图4所示,在编译调试阶段的最后部分,本方法会判断两个用户是否继续进行编程。如果继续编程,就返回到上面的图像捕捉,继续重复上述行为。如果选择不继续进行编程,则返回操作理解阶段,判断用户的意图。通常有两种情况一种是,用户在编程过程中,点击退出按钮,退出程序的执行;另一种是,两个用户通过本方法的实物编程块,都成功完成了各自的任务和全部协同编程任务,点击开始执行按钮,从编程调试阶段进入到了程序运行阶段。在进入程序运行阶段时,本方法将针对每个用户的程序启动一个线程来进行程序的同步及执行。以双人协作为例,会启动两个线程,来同时读取并执行两个用户在编程阶段所完成的编程指令序列。在遇到协同部分指令时,还需要两个线程之间进行同步,来完成相应的指令执行。(I)指令获取在这一阶段,本方法会分别依次读取在编译调试阶段编译通过后保存的每个用户所编写指令序列供(2)使用。(2)指令语义分析和执行
在这一阶段,将会对于在(I)中读取的指令进行执行。在此阶段中,并没有对于指令正确与否的判断和反馈,因为所执行的指令应该均是经过编程调试阶段的可执行指令。在这一阶段,需要进行相关信息判断I.当前人物是否已经完成了所有的指令执行和任务,如果是,则结束程序执行,如果不是,则继续取指令执行。2.进行冲突检测和冲突消解。每读取一条指令进行执行前,都需要对于操作执行的位置及资源进行冲突检测。如果和其他人物发生了资源抢占冲突,则需要进行冲突消解。冲突消解的主要依据时,参与冲突人物到达冲突位置的先后顺序以及起始位置距离冲突位置的距离。先到达冲突位置或者距离冲突位置更近的人物,将优先读取并执行指令通过,其余人物则暂停指令执行,等待通过人物发出资源释放信号。如果参与冲突的人物,同时到达冲突位置并且起始位置和冲突位置距离相同,则随机确定优先执行指令通过的任务。2.当前读取的指令,是否为协同操作指令。如果不是,则直接进行指令执行。如果是协同操作指令,则首先需要读取协同的操作内容指令。然后分析另一个协作用户是否达到了一致的任务协作状态。如果所有用户的程序都已达到同步的协作状态,则可以执行协作部分指令。如果未达到同步协作状态的要求,则先到达同步状态的程序需要被暂时挂起等待,直到其他用户的程序满足同步状态需求。在此过程中,用户间的程序会进行通信和同步。比如,在布置家具任务中,需要两个用户程序所控制的人物协作将大件的家具,比如沙发移动到指定位置。如果当用户I的人物已经走到沙发前,需要开始执行协作操作,进行推沙发时,用户2的人物还没有到达指定的协作位置。这时,用户I的人物会暂停动作即程序挂起等待,直到用户2的人物也移动到沙发前的指定协作位置上后,激活用户I的程序执行,两个人物一起执行协作部分的操作,将沙发推到指定位置。(3)游戏状态更新在协作编程方法中,两个用户的程序每执行一个指令,都会动态的绘制相应的动画来进行反馈。当两个用户的所有指令都执行完毕后,本方法会结束程序执行阶段。综上所述,本发明给出了一种通过实物编程块来进行协同编程的方法。有效的简化了编程语言的语法,使得儿童可以集中精力在解决问题本身的逻辑上。通过此方法,用户有更多的机会进行合作以及相互帮助,每一个人都有机会参与到任务中增强了编程的趣味性和娱乐性。同时,在这套协同实物编程方法中,多个用户可以同时通过实物编程的方式来编写程序,同时通过所编写的程序来进行协作完成特定的任务。
权利要求
1.一种协同实物编程方法,其步骤为 1)选取或建立一个双人或多人协同实物编程显示环境,并将双人或多人协同任务以及协同任务执行规则存储到协同实物编程处理模块中; 2)用户根据协同任务要求分别在自己的编程空间中摆放实物编程块序列;其中,每个实物编程块的表面都设有一个计算机视觉识别码和一语义图形; 3)实时获取每一用户当前所摆放的实物编程块序列,并将其分别发送给所述协同实物编程处理模块; 4)协同实物编程处理模块根据每一用户的实物编程块序列信息将其转换为相应的功能语义序列; 5)协同实物编程处理模块从当前功能语义序列中顺序取出操作指令,并判断是否满足协同任务执行规则;当指令为协同操作开始指令时,用户开始同步通信,当用户都满足协同要求后,从当前功能语义序列中读取并执行协同操作部分的命令,然后根据协同任务执行规则和同步通信的反馈信息判断当前的协同操作是否正确;如果某用户协同操作不正确,则反馈提示信息给该用户,如果所有用户协同操作均正确,则每一用户执行下一指令并判断协同操作是否正确,直到出现协同操作结束指令,结束协同判断和同步通信。
2.如权利要求I所述的方法,其特征在于用户开始同步通信后,执行每一协同操作部分的命令前,进行资源冲突检测,其方法为首先检查当前命令所针对的位置和/或资源是否已被占用,如果已被占用,则根据冲突双方的起始位置和冲突资源位置之间的距离进行判断,距离短者获得资源使用权,其他用户的相关命令操作则失败,并给出反馈;如果冲突相关方的距离相同,则随机分配资源优先使用权。
3.如权利要求I或2所述的方法,其特征在于当读取的指令是协同操作部分的指令,则采用设定的相同反馈方法对每一用户进行提示,以提示用户这一部分是共同需要完成的任务;该反馈方法与每个用户单独编程时的反馈方法不同。
4.如权利要求3所述的方法,其特征在于采用红色反馈指示图标提示用户当前操作为协同操作任务部分。
5.如权利要求I所述的方法,其特征在于所述协同操作指令包括拿起动作指令,放下动作指令,扫地动作指令,拖地动作指令,推动作指令,拉动作指令;当指令为拿起动作指令时,首先检测当前用户控制的人物所在位置四周是否有可拿起的物体;当指令为放下动作指令时,首先检测当前位置能否放下用户控制的人物所持物体以及是否有可放下的物体;当指令为扫地或者拖地动作指令时,则检测当前用户控制的人物手里是否已经拿起了相应的工具;当指令为推动或者拉动作指令时,首先读取当前用户控制的人物所站方向的正前方或正后方是否为可行的单元格;其中,每一指令对应一实物编程块。
6.如权利要求I所述的方法,其特征在于所述指令还包括循环控制指令和循环数字指令;所述循环控制指令顺次包含循环开始指令,方向指令,循环操作指令,循环次数指令和循环结束指令;所述循环数字指令顺次包含所需要循环重复的动作指令,循环重复次数指令;其中,每一指令对应一实物编程块。
全文摘要
本发明公开了一种协同实物编程方法,属于人机交互领域。本方法为1)选取或建立一协同实物编程显示环境;2)用户根据协同任务要求分别摆放实物编程块序列;3)实时获取每一用户当前所摆放的实物编程块序列,并将其发送给协同实物编程处理模块,将其转换为相应的功能语义序列;从当前功能语义序列中顺序取出操作指令,当指令为协同操作开始指令时,用户开始同步通信,从当前功能语义序列中读取并执行协同操作部分的命令,如果某用户协同操作不正确,则反馈提示信息给该用户,如果均正确,则执行下一指令并判断协同操作是否正确,直到协同操作结束指令,结束协同判断和同步通信。本方法允许了多个儿童可以同时编写程序,并且进行程序的同步。
文档编号G06F9/52GK102800223SQ20121025196
公开日2012年11月28日 申请日期2012年7月19日 优先权日2012年7月19日
发明者王丹力, 张铖, 王宏安, 戴国忠 申请人:中国科学院软件研究所