毕业论文-做菜机器的虚拟实现.doc_第1页
毕业论文-做菜机器的虚拟实现.doc_第2页
毕业论文-做菜机器的虚拟实现.doc_第3页
毕业论文-做菜机器的虚拟实现.doc_第4页
毕业论文-做菜机器的虚拟实现.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

做菜机器的虚拟实现摘 要做菜机器虚拟实现软件,是一款特定项目的模拟软件,模拟的项目是一台做菜的机器。此软件使用c#.net开发,分为3d模拟和调试面板两个部分。它在可视的虚拟3d世界窗口中,模拟了做菜机器做菜的全过程,为真实机器的开发,提供了一定参考依据。整个系统从符合操作简便、界面友好、灵活、实用、安全的原则出发,完成机器模拟和调试的全过程。各个系统模块包括:3d模拟模块、调试面板、菜谱编译模块、总控制器,尽量向着能满足虚拟调试的需要设计。 论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。关键词:做菜机器;3d模拟;自动化realization of virtual cooking machineabstractrealization of virtual cooking machine, can be seen from the name, this is one project-specific software simulation software. simulation of the project is a cooking machine. c #. development of this software, 3d simulation and debug panel divided into two parts. virtual 3d visualization window in the world, to simulate the whole process of cooking machinery for the development of the real machine, provides a reference. with the entire system from the simple, friendly interface, flexible, practical, safe departure. complete machine simulation and debugging of the entire process. all modules include : 3d simulation module debugging panel, the menu translation module, the total controller to develop to meet the needs of virtual testing. this paper presents the development background of this issue and will have to complete the process of the development and function. the key focus of the system design, design, technical difficulties and solutions.keywords: cooking machine;3d simulation;automationi目 录摘要iabstractii第1章 绪论11.1选题目的和意义11.2相关3d技术11.3研究内容21.4关于做菜机器的理想与展望21.5开发工具简介3第2章 需求分析52.1引言52.2 软件总体概述52.3数据描述62.4系统模型7第3章 系统分析与设计93.1概要设计93.2模块分析103.2.1做菜机器虚拟实现系统各模块的功能103.2.2系统模块图103.2.3各模块的具体分析103.3菜谱数据文件设计113.3.1菜谱数据需求分析113.3.2菜谱文件基本格式123.3.3菜谱数据精度和指令功能详解123.3.4菜谱文件的条件和约束133.3.5对菜谱文件审核和编译的功能模块13第4章 系统实现164.1 控制面板窗体164.1.1 虚拟用户操作区164.1.2 3d窗口模型可视选项区234.1.3 虚拟机器调试区254.2 3d虚拟窗体实现方法374.2.1 构架3d显示环境374.2.1 3d虚拟窗口中模型对指令的响应414. 3虚拟用户窗口的实现方法434. 4程序结构464.4.1程序文件概述464.4.2 uml图39结 论48致 谢49参考文献50附录a 程序核心代码51iii第1章 绪论 1.1选题目的和意义本设计题目为做菜机器的虚拟实现,其设计目的和意义是为开发真实机器搜集理论依据和经验参考。1.2相关3d技术游戏引擎是一个处理游戏底层技术的平台,使用游戏引擎,游戏开发人员可以不用花过多精力去处理系统架构、内存管理、图像绘制等一些底层的技术,可以直接使用引擎提供的api来进行游戏开发,从而大大缩短游戏开发时间,因此引擎是非游戏特有的技术。3d引擎是游戏引擎中的子引擎,负责3d图形绘制功能,本文在分析现有3d商业引擎的基础上,设计和实现了一个功能完备的新一代3d引擎系统。 3d引擎功能主要是负责3d图形相关的功能。首先是光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。 其次是模型动画,目前游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。 引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快。子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。 碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个3d物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保模型撞在墙上时不会穿墙而过,因为碰撞探测会根据模型和墙之间的特性确定两者的位置和相互的作用关系,保证了游戏场景的真实性。 渲染是引擎的核心,当3d模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。 引擎还负责玩家输入处理,处理来自键盘、鼠标、摇杆和其它外设的信号。 本文通过对genesis3d、unreal、quake三个引擎架构和代码的分析,设计并实现了一款具备场景模块处理、actor、模型动作处理、位图处理、雾效、摄像机、象素格式、驱动处理、内存处理、物理、矩阵操作等11个功能模块的3d引擎系统。对绘制技术、碰撞检测技术、模型动画等方面都做了较为深入的研究。代码实现了一个具备独立引擎功能的系统,游戏开发人员可以在这个引擎平台上进行各种不同的游戏的开发,而不需在底层处理上花费过多时间。 本文的贡献在于: 1、设计并实现了一个具备主要图形绘制功能的3d引擎,为游戏开发人员提供了一个开发平台,使开发人员可以完全独立于底层图形api进行游戏开发; 2、设计并实现了大面积场景植被建模和绘制过程; 3、提出了高真实感植被绘制基因库概念。1.3研究内容虚拟实现的研究内容包括 :13d成像技术:虽然direct9.0sdk已经把管道渲染等复杂技术封装好了,但是你用起来还是要话大量的时间和经历去学习。关于次部分的内容将在下一章做详细介绍。2多线程调用,异步执行技术:虚拟的控制器和调试控制面版同时可以控制3d虚拟设备。同时,控制器可以同时操纵多个3d虚拟设备部件,还包括虚拟的用户操作界面。1.4关于做菜机器的理想与展望mp3,mp4,手机,数码相机,对于21世纪的我们来说,这些数码产品早已经不是什么新潮的玩应。从小学生到老太太,从it精英到民工,什么样的人身上,都可以见到这些东西。计算机科学发展到今天,已经不在是仅仅用于巨量的科学计算和破译敌军的密码,现在,计算机科学为我们每一个普通人服务。 但是,这些服务还远远不够。计算机能为我们做的事情,要比它现在正为我们做的事情,多的多。仔细看看周围的人,每天仍然在做些重复的无趣的工作。而大部分的工作,可以由计算机轻松的搞定,而且不需要复杂的人工智能。想想你最后一次看到有人扫地,洗衣服,或者做饭是什么时候。很可能现在就有人在你眼前做这些无聊的工作。你可能会说,不是已经有洗衣机电饭保了吗。难道这样你就满足了吗?我的答案是不!让机器做人做的事情,让人们回到伊甸园!你听说过,伊甸园,善恶果吗?我不是想和你讲圣经故事。我只是想说,我有一个理想,就是上面的那句话。“民以食为天!”,我决定第一步从吃下手,因此,我定下了我的设计题目做菜机器。快下班了,上网登陆到自己家的做菜机器,确定食材已经放在机器里。点击确定,开始做吧。回到家后,香喷喷的美食已经盛在盘子里。快睡觉的时候,到论坛里看看人气最旺的美食有哪些,有感兴趣的,下来。还好食材不贵,买了。五分钟后。身穿做菜机器食材专卖全球连锁超市工作制服的人,按响了你的门铃。第二天早上,闹铃还没响,你就已经被美妙的菜香吸引起床了。以上的情景,可能发生在几年后一个普通上班族的身上,很可能就是你。这就是我的课题的研究意义。1.5开发工具简介自从microsoft公司宣布并发行.net之后,人们一直在尝试指出这种新“事物”到底是什么。根据microsoft公司的市场活动,人们知道它将对计算产生革命性作用。这是一个很宏远的目标,现在断言它是否能够完成目标还太早。但是,它正在一步步地向此目标努力。当人们讨论.net时,无法确定他们正在讨论.net的哪个部分。microsoft公司发行的其他“产品”或“思想”都不具有如此多的不同形式。紧随.net名字的是众多的产品、服务,甚至是概念,因此指出.net实际上是什么,是非常困难的。人们对运行.net代码的最常见误解之一是,代码是“解释执行的”,像java代码或者老的visual basic运行库一样。事实上,为.net编写的代码在执行前首先被编译。当编译.net应用程序时,它被编译为一种中间语言(il,intermediary language)。这种il实际上存储在可执行文件中或者已经创建的库中。il可能在两个位置中的某一处被编译为本机代码(native code)。在安装代码时,可以执行一个称为ngen(native generation,即本机生成器)的进程。它将il直接编译为本机代码,并将所编译的本机代码存储在gac中的特定位置 本机程序集缓存(native assembly cache)中。假设在安装时没有编译代码,则代码在第一次执行前必须被编译。在应用程序启动期间,.net运行库中一种称为jit(just in time)编译器的特殊功能在后台执行编译工作。在后一种情形中,因为发生在后台的编译工作,应用程序的启动时间将受到影响。当启动时间对应用程序非常重要时(例如正在编写游戏时),确保在安装阶段包含ngen步骤是比较明智的。但是,在这期间无法进行某些优化,而如果利用jit编译代码,则可以进行这些优化,因此如果启动时间不是很重要,则可以让.net运行库处理它所能够做的工作。directx 9.0 是最新发展的面向 windows 的 microsoft 3d 图形技术。在 directx?9.0 中,directdraw 和 direct3d 的功能组合到名为 directx graphics 的单个 api 中。该组件的 direct3d 部分将是本文的主要重点。在 microsoft?direct3d 中,程序员有两种选择:依赖固定功能管线或可编程管线。固定功能管线本身依赖于由 direct3d 标准化的现有算法。这些固定功能是通过一组类似于 opengl 的固定的枚举值来公开的,这意味着 direct3d 和 opengl 的固定功能管线均使用内部 switch 语句。在 switch 语句中与枚举值相对应的某些 case 可能是硬件加速的,这基于运行库所依赖的图形卡的功能。在 direct3d 中,在使用固定功能管线时,程序员首先检查运行库,查看图形卡是否支持特定功能。因为一些图形卡并不支持通过 direct3d 公开的所有功能,所以在 direct3d 中提供了一个用来探测图形硬件的机制。如果硬件不支持特定的图形功能,该检查将失败,并允许程序员查找其他的硬件加速算法。请记住以下要点:direct3d 固定功能管线公开硬件加速的功能。尽管 direct3d 有一个名为参考设备的仅限软件的仿真模式,但是,它设计用于调试和功能测试目的 而不是用来提供应用程序。对于硬件和软件共同发展所面临的问题,另一个更有趣的方法是可编程管线。在可编程管线中,程序员可以定义自己的算法,而不是选取预定义的枚举值并让 direct3d 执行算法。运行库将动态地编译基础图形硬件的算法。在这种情况下,direct3d 运行库有一个实时 (jit) 编译器,该编译器是硬件设备驱动程序的显式部分。硬件供应商负责为其特定的图形硬件提供 jit 编译器。因此,direct3d 充当图形虚拟机,它使用自定义的图形指令集高效地虚拟化图形处理器 (gpu)。托管的 direct3d 已经变成核心 direct3d 运行库的重要部分,这与 d3dx 之类的扩展库相反。因此,尝试让托管抽象尽可能接近最初的非托管抽象。为了更好地理解托管 direct3d,一定要先了解托管层如何提取非托管的 direct3d。对于大部分来说,托管的 direct3d 提供从非托管层中的接口、结构和枚举到托管层中的类、结构和枚举的一对一映射。为了显式使用托管代码的一些新功能,如类实现继承、c# 属性、索引器和事件,托管层中的几个抽象需要按稍微不同于其非托管副本的方式公开。第2章 需求分析2.1引言2.1.1编写目的本需求分析说明书的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,作为工作成果的原始依据,同时也表明了本软件的共性,以期能够获得更大范围的应用。可作为系统分析员、设计员、程序员、维护人员之间交流、沟通的工具。2.1.2 背景说明(1)软件名称:做菜机器的虚拟实现(2)任务提出者:殷振南(3)开发者:殷振南(4)本软件与其它系统的关系:软件运行需要microsoft framework2.0和directx9.0支持2.1.3 定义 控制器:控制机器运转的硬件部分。(包括与用户互交的液晶屏幕和输入键盘) 操作器:除控制器以外的(如加热器,炒菜臂)机器部分和各感应器。以下简称“机器”。食材:做菜的原材料料仓:放食材和佐料的仓盒主料仓:放主料的仓盒佐料藏:放佐料的仓盒。2.2 软件总体概述2.2.1 目标虚拟实现做菜的机器自动化。2.2.2 运行环境操作系统:windows nt硬件:cpu主频不小于600m,内存64m以上,显卡要求支持directx9.0通信网络:因特网2.2.3 开发环境操作系统:microsoft windows xp开发语言:visual studio 2005之c#数 据 库:无uml工具:visul2.2.4 假设和约束(条件与限制)无2.3数据描述2.3.1 静态数据菜谱名称,食材名称,食材编号,佐料名称,佐料编号,下料时间,加热温度,锅体内部压力。2.3.2 动态数据由机器传给控制器的数据:时间、内压、温度、料仓载重或容量、外部电源的电力供应,水仓的水源供应(以上数据在远程监控时将由控制器传给远程终端)控制器输出数据: 机器控制输出:下料时间,加热温度,加热功率 液晶屏幕输出:开始时间,剩余时间,以及传感器传回的监控数据(调试时) 结果保存:做菜结束后(成功或失败),做菜机器各时间的状态,执行的动作及结果将保存为文件。 文件输出:将保存的文件输出到屏幕或计算机终端。数据格式: 菜谱:符合一定格式的纯文本文件。 结果:同上。2.3.3 数据库描述无2.3.4数据流图(dfd) 用户控制器用户操作因特网液晶屏显示远程pc远程控制操作器上网下载菜谱获取机器状态控制机器做菜监控器存储器获取菜谱数据图2-1 数据流图(dfd)2.3.5 数据词典菜谱=指令*n指令=时间+动作动作=下料,炒菜,更改温度,出菜下料=下主料,下佐料下主料=主料仓编号下佐料=佐料仓编号+下料量结果=(指令*n+状态*m)+结果 (n=0,m0)状态=时间+状态数据2.3.6 数据采集菜谱数据:1,机器自带菜谱2,用户自编辑菜谱3,上网下载菜谱2.4系统模型2.4.1 功能划分:做菜机器(虚拟)虚拟做菜查看虚拟机器运做控制面板调试上网下载图2-2 功能划分2.4.2 功能描述:功能描述:虚拟做菜:虚拟做菜。查看虚拟机器运做:用户可以通过3d虚拟窗口,查看虚拟机器的运做情况控制面板调试:通过控制面板操作和调试虚拟机器上网下载:可以用机器上网下载菜谱2.5 运行需求2.5.1 用户界面两个窗口,分别是3d虚拟窗口和控制面板窗口2.5.2 硬件接口无2.5.3 网络接口普通网卡。2.5.4 软件接口计算机终端监控软件。系统升级时连接计算机的驱动程序。第3章 系统分析与设计3.1概要设计目标:通过本系统软件,能帮助做菜机器设计人员利用计算机,方便的对做菜机器的虚拟运做进行观察和研究,通过虚拟实现为真实机器的开发积累经验和技术。在开发真实机器之前,发现问题和解决问题,以减少真实开发出现的意外,和不必要的风险开销 处理流程:1.启动系统,激活3d虚拟界面和控制面板界面。 2.对系统进行初始化。 3.系统进入消息循环,通过事件驱动机制激活相应的功能模块,并执行相应的功能; 4.通过关闭系统事件,激活关闭系统模块,退出系统。做菜机器虚拟实现系统模块菜单:虚拟控制模块开启虚拟机器控制虚拟机器停止虚拟机器虚拟用户交互窗口模块显示用户可选菜单响应用户输入指令显示虚拟机器工作状态调试平台模块控制3d窗口显示元素观察机器指令状态观察机器数据状态控制机器运做状态3d虚拟显示模块显示虚拟3d机器调整观察视角3.2模块分析3.2.1做菜机器虚拟实现系统各模块的功能1. 虚拟控制模块:用户控制虚拟机器。2. 虚拟用户交互窗口模块:通过虚拟的机器液晶屏幕,响应用户操作,显示机器实时状态3. 调试平台模块:自由控制虚拟机器各部件的可见状态,以方便观察机器内部运做情况,通过列表显示机器对指令的执行和响应。观察当前机器的运做是否与指令同步。控制机器运做,尽可能实现调试功能。4. 3d虚拟显示模块:通过windows窗口观察虚拟3d世界中的虚拟机器的构造,部件结构,部件的运动。并可以相对自由的控制视角,以方便对虚拟机器的观察。3.2.2系统模块图做菜机器虚拟实现系统调试机器运做观察机器运做控制虚拟机器运做虚拟用户控制虚拟用户窗口图3-1 系统模块图3.2.3各模块的具体分析1. 虚拟控制模块:用户控制虚拟机器。实体e-r图如图3-2: 虚拟控制模块开启虚拟机器控制虚拟机器停止虚拟机器 图3-2 虚拟控制e-r图2. 虚拟用户交互窗口模块:通过虚拟的机器液晶屏幕,响应用户操作,显示机器实时状态。实体e-r图如图3-3所示。 虚拟用户交互窗口模块显示用户可选菜单响应用户输入指令显示虚拟机器工作状态图3-3 虚拟用户交互窗口模块e-r图3. 调试平台模块:自由控制虚拟机器各部件的可见状态,以方便观察机器内部运做情况,通过列表显示机器对指令的执行和响应。观察当前机器的运做是否与指令同步。控制机器运做,尽可能实现调试功能。实体e-r图如图3-4:调试平台模块控制3d窗口显示元素观察机器指令状态观察机器数据状态控制机器运做状态 图3-4 调试平台模块e-r图4. 3d虚拟显示模块:通过windows窗口观察虚拟3d世界中的虚拟机器的构造,部件结构,部件的运动。并可以相对自由的控制视角,以方便对虚拟机器的观察。实体e-r图如图3-5:成绩管理管理 调整观察视角显示虚拟3d机器图3-5 课程管理e-r图3.3菜谱数据文件设计3.3.1菜谱数据需求分析 菜谱应该是一个时间+机器指令的队列。本人决定以纯文本格式保存菜谱文件,类似lrc歌词格式,这样利与编辑,查看和修改。3.3.2菜谱文件基本格式菜谱=指令行*n指令行=时间|指令|值/注释3.3.3菜谱数据精度和指令功能详解1.时间: 考虑到做菜的时间长度的精度的要求,决定把时间格式定为以下形式 00:00.00 前两位为分钟,后4位为秒。这样,时间的最大值为99分59秒99,足够满足一般做菜的需要。时间精度为百分之一秒,相信足够满足控制火候的需求了。2.指令:指令为英文关键词,初步拟订指令集合如下:note,ring,temperature,material,saute,oil,salt,soy,vinegar,out(1) note,注释文字,编辑菜谱者希望用户在使用此菜谱时看到的文字,它将在指定的时间显示在用户屏幕上。它后面的值就要显示的文字内容(2) ring,声音提示,在指定的时间响起,提提示用户注意,后面的值是声音文件的编号(3) temperature,温度,后面的值是目标温度,如过当前温度低于目标温度,则机器加温,知道达到目标温度。之后机器将温度保持在目标温度上,知道接受到其他的temperature指令或者out指令(4) material,主料箱下料,后面的值为主料箱编号,但目前主料箱只有一个。(5) saute,抄动,机器抄柄将做圆周运动,后面的值是机器抄柄转动的速度,单位是周每秒。可以接受负值,既反方向旋转。最大值为没秒12周。超过这个值机器将按最大值处理。机器接受到此命令以后将一直按所给值的速度旋转,直到遇到下一个saute指令,或者out指令特殊值0为停止抄动,当机器接受到此命令时不会立即停止,而是将抄菜柄缓慢旋转到锅的底部,以防抄柄影响到下料和出菜。(6) oil,下作料食物油,值下料量,单位毫升(7) salt,下作料盐,值下料量,单位毫克(8) soy,下作料酱油,值下料量,单位毫升(9) vinegar,下作料醋,值下料量,单位毫升(10) out,出菜指令,此指令为菜谱的出口,菜谱中必有指令,后面的值只做补位作用,无意义。3.3.4菜谱文件的条件和约束1.菜谱文件由指令行组成,可以有空行或只有注释的行。2.指令行中可以有空格,空格数不限,位置不限.当然,空格不可以出现在关键词的中间,也不能出现在符号(|和/)的中间3.有效指令行至少有3行以上,否则菜谱为不合法菜谱。4.菜谱必须有out指令。5.菜谱指令时间可以有相同,但此是不能确定执行顺序,可能出现意外。如:00:05.00|ring|0 00:05.00|note|hello world以上语句机器将在(几乎)同一时刻想起铃声并显示文字。当然不会出什么意外,但是像下面这样的指令:00:05.00| temperature |40 00:05.00| temperature |4005秒钟后,机器将改变温度,但我们就无法判断机器的目标温度会是40还是400。所以请菜谱作者自己注意,以免出现意外。6.out指令后的语句不会被执行,如05:05.00| out |40 06:06.00| salt|400机器是不会在盛出菜以后再往锅里放盐的,遇到out指令后机器自动停止。7.指令行的顺序随意,编译后将自动按时间将指令排序,如:03:05.00| sault |4 02:06.00| salt|400这样的输入是合法的。但为了便于观看菜谱,推荐作者按时间顺序编写菜谱。3.3.5对菜谱文件审核和编译的功能模块此模块负责对读取的菜谱文件进行审核和编译,它将按照上面的约束条件对菜谱文件进行审核,如果审核不通过,将自动报错,并自动指出出错原因和出错位置,提供修改意见。有点像编程ide的编译功能。编译流程如图3-6所示:将编译的指令集合排序并返回读取菜谱文件是否符合菜谱格式和条件约束对菜谱进行编译指出出错原因和出错位置,提供修改意见。 否 图3-6 编译模块流程图编译模块算法: if此行不符合命令格式 报错,并自动指出出错原因和出错位置,提供修改意见。 if关键字不合法 报错,并自动指出出错原因和出错位置,提供修改意见。 if 没有出口报错 if 指令少于3行 报错 按时间将指令排序 将指令集返回第4章 系统实现4.1 控制面板窗体图4-1 控制面版窗体4.1.1 虚拟用户操作区图4-2 虚拟用户操作模块表4-1 主要控件属性表控件名称属性名称属性值panelnamepanel2borderstylefixed3dgroupboxnamegroupbox1text用户操作键盘buttonnameconfigtextbuttonnameuptextbuttonnamedowntextbuttonnamelefttextbackbuttonnamerighttextgo控件panel1用于显示虚拟用户屏幕,和右侧用户操作键盘区域共同实现与用户的交互。panel1中的内容由类devicewindows填充,此类的实现方法本章后面有详细叙述。 工作方式: (a)虚拟用户控制面板 (b)虚拟用户交互界面图4-3 虚拟用户控制于交互 通过单机开启用户窗口,用和选择菜单项,和分别是选择和返回上一菜单。 主菜单中有3项,上图所显示的3项,目前只有第1项好使,后两项由于时间有限,没有开发。选择“制作菜肴”后,进入菜谱选择菜单,如图4-4:图4-4 菜谱选单 谱选择菜是以cp为后缀的文本格式文件,类似于lrc歌词文件,关于菜谱文件的详细说明,会在下一章中做介绍。 选择心仪的菜谱以后,会进入时间选择界面,可以选择何时做菜,如图4-5:图4-5 时间选单 选择“马上做菜”就是马上做菜,如果选择其他的,则屏幕进入倒记时,如图4-6:图4-6 倒记时等待此时选择“取消”则取消做菜计划,回到主菜单。算法如流程图4-7所示:单击开始选择主菜单项清洗机器上网下载未开发,无反应制作菜肴菜谱列表判断菜谱合法不合法显示原因和提示选择菜谱back时间选择列表back合法选择时间选择时间马上做菜开始做菜选择延迟做菜等待时间时间到时间未到取消图4-7 算法流程图实现代码菜单类代码public struct userselects/在人机对话过程中,此类是用户的选择菜单项。它的数组,就是一个菜单。 public string name;/项的名字 public string note;/项的说明 public bool selected;/和checked是一个意思,checked是关键字,所以不能用。 public userselects mainmenu;/主菜单 public userselects caipu;/菜谱菜单,根据磁盘里的菜谱文件自动生成。 public userselects delay;/延时作菜 public userselects cancel;/取消private void initializemainmenu()/初始化菜单 mainmenu = new userselects3;/好的习惯是把通用菜单存为配制文件,但是时间不允许我这么做了,因为现在是07-3-31 11:43 再有几个小时就该交作业了: = 制作菜肴; mainmenu0.note = 美味佳肴从这里开始; mainmenu0.selected = true; = 清洗机器; mainmenu1.note = 干净卫生,吃的放心; = 上网下载; mainmenu2.note = 只有想不到的,没有吃不到的;控制代码:1,单击事件:private void up_click(object sender, eventargs e) if (menu = null) return; int selectid = 0; for (int i = 0; i 0)/如果不是首相 menuselectid.selected = false; menu-selectid.selected = true; /上面做的就是selectid+ drowmenu(); 2,go单击事件:private void right_click(object sender, eventargs e) if (menu = null) return; int selectid = 0; for (int i = 0; i menu.length; i+)/找到selectid if (menui.selected = true) selectid = i; break; if (.endswith(.cp)/如果是选择菜谱文件 if(translate.getdisk(listview1, application.startuppath + caipu + ) menu = controler1.delay; else if (.endswith(作菜) #region 定时菜单 switch () case 马上作菜: controler1.delaytime = 1; break; case 5分钟后作菜: controler1.delaytime = 5 * 60 * 1000; break; case #endregion controler1.delaydocontrol(listview1, action, textbox1, dev); menu = controler1.cancel; else switch () case 制作菜肴: menu = controler1.caipu; break; case 取消: menu=controler1.mainmenu; controler1.delaytimer.enabled=false; dev.delaytime = null; break; drowmenu(); 3,“画”菜单的方法(这里只是逻辑上画,真正的画是在devicewindow中实现的)。 void drowmenu()/把菜单提供到用户界面上 int selectid = 0; for (int i = 0; i menu.length; i+)/找到selectid if (menui.selected = true) selectid = i; break; controler.userselects us = new controler.userselects5;/把选择的项和上下各两项(共)传给新的菜单,显示在屏幕上。 for (int i = 0; i = 0 & selectid - 2 + i menu.length)/有效值 usi = menuselectid - 2 + i; else usi = new controler.userselects(); dev.us = us; 4.1.2 3d窗口模型可视选项区图4-8 窗口模型可视选项区控制虚拟3d窗口中的各个模型部件是否可见,以方便对虚拟机器工作过程的观察。各控件属性如表4-2:表4-2 主要控件属性表控件名称属性名称属性值checkboxnameguotext锅checkboxnameguogaitext锅盖checkboxnamezhuliaocangtext主料仓checkboxnameguochantext锅铲checkboxnamezuoliaocangtext作料仓checkboxnamewaiketext外壳checkboxnamepanzitext盘子所有checkboxcheckedtrue如果checkbox的checked属性状态,直接决定相应的3d部件是否可见,默认值全部为true,所以一加载3d窗口,你首先看到的将是机器的外观(外壳)。相关代码:public void drowall() if (controlform.guo.checked = true)/判断是否显示该模型,控制窗中可以控制 drowmesh(guo, 0, 0, 0);/第三步,渲染出来。参数是模型和它的初始位置 if (controlform.guogai.checked = true) drowmesh(guogai, 0, 0, 0); if (controlform.zhuliaocang.checked = true) drowmesh(zhuliaocang, 0, 28, -11); if (controlform.guochan.checked = true) drowmesh(guochan, 0, 0, 0); if (controlform.zuoliao.checked = true) drowmesh(oil, -2, 24, 1); drowmesh(salt, 2, 24, 1); drowmesh(soy, -2, 24, 5); drowmesh(vinegar, 2, 24, 5); if (controlform.waike.checked = true) drow

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论