VS2008

2024-07-14

VS2008(通用5篇)

VS2008 篇1

使用VS2008开发ASP.NET 3.5网站时,常常会利用表单获取一些用户信息,如用户名、密码、电话号码、身份证号、答案、金额、成绩、日期和E-mail等。为了防止无效信息,甚至空信息条目被收集,对于某些信息条目,需要开发人员以编程方式根据业务处理逻辑要求进行验证。实际上,验证就是给所收集的信息制定一系列规则。验证不能保证输入数据的绝对真实性,只能说是否满足了一些规则,如“文本框中不能空,必须输入数据”、“输入数据的格式必须是Internet URL”或者“法国电话号码”等。

1 概述

窗体验证分为客户端验证和服务器端验证两种形式。客户端验证是指利用Java Script脚本,在数据发送到服务器之前进行的验证。服务器端验证是指将用户输入的数据全部发送到Web服务器进行的验证。

ASP.NET 3.5通过服务器控件形式引入了窗体验证,具有一定的智能性。在ASP.NET 3.5网站开发时,开发人员不必考虑是使用客户端验证或者是使用服务器端验证进行验证,因为在ASP.NET 3.5页面生成时,系统会自动检测浏览器是否支持Java Script。

验证控件具有完整的客户端实现,这使支持脚本的浏览器可以在客户端上执行验证。客户端验证通过在向服务器发送用户输入前检查用户输入来增强验证过程,这样就可以在提交窗体前在客户端检测出错误,从而避免了服务器端验证所需要的信息往返。

通过判断Page.Is Valid值可以确定页面上的控件是否都通过了验证。如果其值为True,表示所有的控件都通过了验证,如果其值为False,则表示页面上有控件未通过验证。

2 ASP.NET 3.5服务器验证控件

Base Validator类用作验证控件的抽象基类,为所有验证控件提供核心实现。验证控件用于验证关联的输入控件中的用户输入。当用户输入的值未通过验证时,验证控件将显示错误消息。由于验证控件是与输入控件分开的,可以将错误消息定位在页面上相对于输入控件的任意位置。ASP.NET提供了一些验证控件来执行特定类型的验证。它们是RequiredField Validator、Compare Validator、Range Validator、Regular Expression Validator、Custom Validator和Validation Summary控件。除了Validation Summary控件外,其他5个验证控件具有一些共同的属性,如表1所示。

使用Enable Client Script属性来指定是否启用客户端验证。默认情况下,此值设置为true,这在浏览器支持客户端验证的情况下,当在页面改变属性Control To Validate指定控件的值并将焦点移出时,就会产生客户端验证,从而保证响应速度。此时验证用的Java Script代码不是由开发人员开发,而是由系统产生。若将Enable Client Script值设为false,则只有当页面有往返时,才会实现验证工作,此时完全使用服务器端验证。可以逐个控件地禁用客户端验证。当客户端上的动态更新导致页布局出现问题时,或者当想要在验证发生前执行一些服务器代码时,这很有用。

如果一个页面已建立并设置了验证控件,若想在页面往返时不执行验证,如常见的“取消”按钮,只要设置“取消”按钮的属性Causes Validation的值为false就可以了。CausesValidation属性用于获取或设置一个值,该值指示当用户单击命令按钮时是否执行验证。属性Causes Validation值为false,表示不执行验证过程。在上述问题中,若要对一个控件设置多个规则,可通过多个验证控件共同作用,此时验证控件的属性Control To Validate应为相同值。如对密码文本框要求必填并且与确认密码文本框的值相同,此时可将Require Field Validator控件和Compare Validator控件都作用于密码文本框。Base Validator.Control To Validate属性用于获取或设置要验证的输入控件。使用Control To Validate属性来指定要验证的输入控件,对于所有验证控件,此属性必须设置为输入控件的ID(Custom Validator控件除外,对它来说,此属性可以保留为空白)。如果没有指定有效输入控件,则在呈现该页时将引发异常。该ID必须引用与验证控件相同的容器中的控件。它必须在同一页或用户控件中,或必须在模板化控件的同一模板中。

若要对同一个页面上不同的控件提供分组验证功能,可以通过将同一组控件的属性Validation Group设置为相同的组名来实现。

3 分组验证功能

3.1 界面设计

建立Validation Group.aspx文件,放置两个Text Box控件、两个Required Field Validator控件和两个Button控件,设置它们的属性如表2所示,界面设计如图1所示。

3.2 功能实现

设置rv Name控件和btn Submit控件的Validation Group为相同的值User Info Group,将它们分配到“用户信息”验证组,当控件触发服务器回发时,仅验证“用户信息”组中的验证控件。

设置rv Search控件和btn Search控件的Validation Group为相同的值Search Group,将它们分配到“查找信息”验证组,当控件触发服务器回发时,仅验证“查找信息”组中的验证控件。从而实现同一个页面的分组验证功能。

4结语

Base Validator类为所有验证控件提供核心实现,ASP.NET3.5提供的服务器控件具有一定的智能性,使用属性Validation Group实现了同一页面的分组验证功能。

摘要:在ASP.NET 3.5网站开发时,经常会使用表单获取用户的一些信息,为了防止垃圾信息,甚至空信息条目被收集,需要开发人员以编程方式根据实际需求进行验证。探讨基于VS2008的窗体验证,使用属性Validation-Group实现同一个页面的分组验证功能。

关键词:验证,属性,控件

参考文献

[1]覃焱.ASP.NET实现在数据库中二进制格式存取图片[J].电脑编程技巧与维护,2009,(09).

[2]韩家炜,Kamber,M.数据挖掘概念与技术[M].北京:机械工业出版社,2001.

[3]张涛.ASP编程基础[J].电脑编程技巧与维护,2009,(17).

[4]何川.基于Web Service的电子商务体系研究[J].电脑编程技巧与维护,2009,(16).

[5]张岸杨.ASP多层体信息系统的架构与实现[J].电脑编程技巧与维护,2009,(16).

[6]李存斌,田惠英.ASP编程技术基础[M].北京:高等教育出版社,2004.

VS2008 篇2

足球:全面战争

仅仅在几年前,你还很难想象“实况”系列会出现在PC上。因为这几乎是个雷打不动的概念——“实况”系列只会出现在PS或PS2上。但现在,它已经在PC上发行过4个版本。虽然PC玩家每次都要等上半年才能玩到从PS2“移植”的新作,不过总的来说,那只是个发行策略的问题。这也解释了为什么同一款游戏在欧洲叫做“职业进化足球”而非“胜利十一人”,为什么它在北美要比在日本延迟近一年才会上市。但这个策略的重点不是游戏名称和发行时间如何定夺,而是清楚地表明了一个信号——“实况”系列的平台独占计划已经破产。

这是个很有趣的现象,当Konaml的王牌制作人小岛秀夫声嘶力竭地向微软喊话,决不将他的MGS系列收山之作《合金装备4:爱国者之枪》发行到Xbox 360上时,他的同行和同事高冢新吾已经在背后捅了他一刀。高冢毫不客气地为Xbox 360制作了一款特别的“实况”游戏——《胜利十一人×》。你可以将“×”领会成罗马数字的“10”(在PS2上刚好出到第10作),也可以认为它是PS2和PC平台计划之外的一个作品。事实上,它正是“实况”系列在更多游戏平台上的试水之作。由于Xbox 360在日本销量惨淡,《胜利十一人×)在日本国内大概没有多少关注度,但它却成了亚洲其它地区玩家在Xbox uVE上疯狂对战的首选游戏之一。于是,对游戏制作者来说也没有什么好掩饰的了——在今年的E3展上,“实况”系列一口气宣布了n个版本的PES 2008,对应目前还在“服役”的所有游戏平台,甚至此前“声名狼藉”的NDS版也会继续发行续作。这个阵势,EA Sports看到时多半也在暗地里冒冷汗。

FIFA08 Vs,PES2008

显然,“实况”系列的发行策略已经完全改变了,这种改变甚至是戏剧性的。之前,每一代“实况”发行时间飘忽不定,一般的间隔周期是1年半左右,多数时候和FlFA系列的发售期错开。这样,即便在两个系列打得不可开交的欧洲市场。它们也并非面对面较量。但如今,两款游戏都在10月份发售,前后相距不过半个月。且在多个游戏平台上相互争夺,俨然一副刺刀见红的模样。“实况”系列最早的受众只有日本本土,因此即便到了PS2时代,每一代在发售时还是日本市场优先,欧洲和北美可以等几个月后的。国际版”或PES版本。现在,这个逻辑完全颠倒了——游戏开发者已经明确表示,PES2008将是第一位的考虑。这个“国际化“版本将会首先在世界范围内同时发售,至于日语版以及更细致的J联赛版本都可以慢慢来。这表明商业化终于轰下了固执的日本人,一个属于“实况”的新时代来了。

VS2008 篇3

利用Ajax提高用户体验已成为开发人员的共识, 目前, 在.NET环境下Ajax的应用方式主要有以下两种:一是利用VS2008的或第三方的Ajax封装控件, 另外一种是在客户端使用Ext JS替代传统的aspx。第一种方式虽然使用简单, 但毕竟控件数量有限, 而且由于控件封装, 往往无法完全按自己的意愿来调整控件的使用, 加之还有版本的问题, 所以在使用中往往差强人意, 难以尽兴。第二种方式是使用重量级的Ext JS充当客户端框架, 虽然Ext JS提供了眩目的表现层控件, 但是毕竟只是客户端, 这种方式不但要放我们已熟悉VS2008中的各种数据控件, 还要学习Ext JS的设计模式, 转型的成本比较高, 加之现在Ext JS还没有一个成熟的可视化设计环境, 用来设计大型项目, 感觉有些力不从心。

本文给出一种利用jQuery扩展VS2008 Ajax应用的方法, 这种方法的主体架构仍是我们熟知的VS2008, 但是利用轻量级的是jQuery来实现Ajax功能, 由于jQuery的使用是辅助性而非替代性的, 所以我们仍可使用原来熟悉的架构, 而且jQuery本身是基于javascript的, 所以我们可以任意调整Ajax的使用, 考虑到jQuery众多的插件, 这种扩展几乎能满足我们所有的Ajax的需要。

二、应用实例

以下给出本文的一个实例, 用以说明这种扩展方式。首先看下实例效果:

在本实例中, 订单浏览页中显示了所有的订单信息, 如要查看订单详情, 可单击“订单详情”链接, 页面中使用jQuery的Ajax程序会调用另一程序生成订单详情并以动画方式显示在该订单下面, 再次单击可收回。

实例中包括两个aspx页面:订单列表页面 (orderList.aspx) 和订单详细页面 (orderDetail.aspx) 。

订单详细页面orderDetail.aspx只是一个普通的aspx页面, 页面中只有一个datalist控件和一个数据源控件, datalist控件使用流式布局, 该页中没有任何的javascript脚本和CSS样式。页面主要内容如下:

脚本程序首先找到Item层下的所有链接 (a) , 并为每一个链接添加单击处理函数。单击发生时, 首先切换链接的样式为收回状态, 然后获取被单击链接的href属性值, 注意, 我们在页面中将该值绑定到Order ID, 所以我们就得到了Order ID的值。If句判定detail层中是否有内容 (既是否为第一次单击) , 如没有则利用Ajax功能调用orderDetail.aspx并传递orderID参数, 在回调函数中, 首先找出返回数据box层中内容并将它放到指定的detail层中, 然后以缓慢下拉的方式显示该层。return false句的功能是阻止链接到目标地址。若是再次单击, 则只是切换链接样式, 然后以缓慢上拉的方式隐藏detail层。

由以上可以看出, 利用jQuery的强大Ajax功能, 只需短短的几行, 就可完成Ajax调用并可以动画的形式展现内容, 整个过程可自行控制, 效果非常好!

三、结语

由上例可以看出, 以这种利用jQuery扩展Ajax功能的方式编程, 具有诸多优点, 首先是程序的主要框架不变, 仍然的VS2008的架构, 因此我们仍可使用熟悉的各种数据控件来展现数据, 这样就降低了学习开销和开发成本, 另外, 相较其它的页面框架, jQuery的学习要简单的多, 而且其简洁方便的开发一直被人称道, 只需简单几行就可完成数据调用, 回调处理和数据显示, 效果十分理想, 加之VS2008开发环境的支持, 使得jQuery在.Net环境中的应用更加如鱼得水!当然, 与传统纯VS2008r开发方式相比较, 这种方式也需要一些额外的开销, 一是这种方式要求开发人员不权要掌握VS的后台开发技术, 还要掌握javascript、CSS和jQuery等界面设计技术, 这对开发人员提出了更高的要求, 另外, 这种方式也模糊了前后台的界限, 在项目的架构设计上要进行通盘考虑, 因此对项目架构人员也提出新的任务。不过, 总的说来, 这种方式不失为是一种学习曲线低, 架构变化小, 而效果却十分理想的Ajax开发方法。

摘要:Ajax提高用户体验的有效方法, 本文给出了一种利用jQuery扩展VS2008 Ajax应用的方法, 该方法不仅使用简单、效果非常好, 而且不需改变原有VS2008的开发架构, 且整个过程可以由开发人员完成控制, 是一种比较理想的扩展Ajax应用的方法。

关键词:VS2008开发,Ajax,jQuery,javascript&,CSS

参考文献

[1]戴上平, 丁士锋, 等.ASP.NET3.5完全自学手册[M].机械工业出版社, 2009.

[2]jQueryAPI参考文档中文版翻译[EB/OL].http://jquery-apizh-cn.googlecode.com/svn/trunk/index.html.

VS2008 篇4

关键词:PDA,VC++,水准测量,电子手簿

0 引言

为了监测福建省及其近海地震活动,根据研究目标区域活动断裂的空间分布及活动特征,我中心在福建省内及闽赣交界处布设了闽赣跨断层场地、水口库区场地和厦门跨断层场地三类形变观测场地,监测相应断裂的活动。

闽赣跨断层短水准场地从1970-1982年共建有11个场地,2008年在福建省前兆流动监测项目中又增建了6个跨断层短水准观测场地,分别是:政和—海丰断裂带上的大田县旺建场地、邵武—河源断裂带上的泰宁县狮子山场地、闽江断裂带的闽候县坑南场地、永安—晋江断裂带上的安溪县参内场地,上杭—云宵断裂带上的平和县南山场地、沙县—南日岛断裂带上的莆田市莆田场地,观测场地分布见图1。

在水准测量工作中,手工水准记簿是一项极为繁琐的工作,记录、计算、检核各项工作需要记簿员非常准确、快速的完成,整个过程高度紧张,稍有差错就可能导致全测段返工。所以当可编程计算器一面世,各种类型的水准电子记录手簿纷纷出现,应用于各等级的水准测量。我中心水准记录也经历了从手工记录到Hp200Lx掌上电脑,再到基于EVB的PDA水准电子手簿的发展历程。

随着计算机软件及硬件技术的不断发展,微软不再对EVB软件进行升级,新一代的Win CE系统也不再支持基于EVB语言的程序设计,使我中心早期以EVB开发的水准记簿程序不能在新的PDA平台上运行,对生产作业造成很大影响。因此,必须对设备及软件进行升级换代。笔者提出利用Visual C++9.0开发新的基于PDA掌上电脑的水准观测记簿软件。

1 PDA及其开发环境简介

PDA是Personal Digital Assistant的缩写,意为“个人数字助理”。PDA产品大部分采用Windows Mobile、Palm OS和Linux这几种操作系统。其中微软公司研发的Windows Mobile(基于Win CE)系统继承了桌面Windows平台的易于使用和扩展性好等优点,使用最为广泛。

Win CE操作系统支持的与Windows系统兼容的API函数有上千个,使基于Win CE的嵌入式系统中运行的程序可以拥有与PC电脑中的程序同样复杂和强大的功能。可直接从微软官网下载Microsoft embedded Visual Tools开发工具包来开发Win CE应用程序。

这个软件包中还包含了Win CE平台模拟器,可直接在电脑上编写和调试Win CE程序,其中的进程、线程、视窗的概念,API函数以及控件的使用等与Windows系统非常相似。利用Microsoft Visual C++为开发语言,语言灵活性好,效率高,软件运行速度快,是基于PDA嵌入式程序设计的首选语言。在VS2008环境中进行,需安装如下组件:(1)安装VS2008,主要安装VC++9.0以及.Net Framework 3.5;(2)安装Active Sync,用来与PC同步;(3)安装Windows Mobile 6.0 Professional SDK(语言开发工具包),也可用VS2008集成的Windows Mobile 5 Professional SDK;(4)安装Windows Mobile 6 Professional Image(模拟器),也可用VS2008集成的Windows Mobile5 Professional Image。

2 程序设计思路

跨断层短水准场地分布在福建全省,比较分散、且测段短而多,但观测人员、仪器、标尺等相对固定,观测时间段固定,场地信息变化少。因此,在程序设计时充分考虑了以上因素,采用相对比较独立的模块化设计,系统主要包括六个模块:(1)设置观测人员、仪器型号、标尺常数等场地信息的系统初始化模块;(2)跨断层场地水准记录及计算模块(有观测时间限制);(3)长水准观测及计算模块(无观测时间限制);(4)仪器、标尺检测模块;(5)成果查询模块;(6)观测成果、仪检成果打印模块。

采用模块化设计的优势是把大部分信息录入工作放在系统初始化模块来运行,可提前在室内来完成,外业时就直接运行(2)或(3)模块录入观测数据、点击“下一步”按钮即可,这样就减少了记簿员的外业输入工作量,缩短外业时间,保证在一个观测时段内完成一次往测或返测,特别是在像水口场地这种有观测时间限制而水准路线又比较长的跨断层场地中体现得尤为明显。

3程序实现

由于PDA没有键盘输入,而水准观测外业记录时需要频繁输入数据,在外界光线比较强的时候PDA界面由于反光会看不太清楚,因此数据输入界面需要大而明显。程序设计时特别设计了大而高亮显示的数字输入控件,如图3所示。

以下是部分程序代码:

Msg Box"上下丝读数平均值与中丝读数的差超限!",,"三丝超限";}

4 结束语

本电子手簿是一个具有完善功能的水准测量记簿软件,可完全代替手工记簿。软件经过2011、2012年的厦门岛内外一等水准复测,闽赣跨断层短水准18处3期等复测的实际应用,成功实现了水准电子手簿的更新换代,提高了工作效率。说明基于VC++的PDA水准电子手簿工作流程正确,限差设置符合规范要求,数据安全性强,操作方便。

不仅如此,程序设计时,为了拓宽PDA电子手簿应用范围,同时编制了三、四等水准观测记录程序,可应用于一般工程性项目,例如在厦门市导线控制测量网布设项目中施测四等水准就得到了很好的应用。

参考文献

[1]国家地震局.跨断层测量规范[s].北京:地震出版社,1991.

[2]国家一、二等水准测量规范[s].北京:中国标准出版社出版,1992.

[3]国家三、四等水准测量规范(.GB12898-91).

[4]汪兵,李存斌,陈鹏等.EVC高级编程及应用开发[M].北京:中国水利水电出版社,2005.

[5]杨睿,尹晖.Smart Survey水准测量一体化系统设计与开发[J].测绘工程,2009,18(6),49-52.

[6]Microsoft Windows CE程序设计[M].北京:北京大学出版社,2001.

[7]周奕君,童小华.基于掌上电脑PDA的水准测量电子手簿研究与关键技术开发[J].黑龙江哈尔滨:测绘与空间地理信息,2008(1):l7~20.

VS2008 篇5

搜索是人工智能中的一个基本问题,也是模拟仿真中研究的一般性问题,是推理不可分割的一部分。现实世界中的大多数问题都是结构不良或非结构化的问题,一般不存在现成的求解方法,而只能利用已有的知识一步步地摸索着前进,如梵塔问题、MC问题、猴子摘香蕉、八数码难题等。

八数码难题一般描述:在3×3的方格棋盘上,分别放置标有数字1、2、3、4、5、6、7、8的八张牌,第九张牌不标数字,记为空格,给定一种初始状态和目标状态,通过移动空格,使得棋盘从初始状态向目标状态转换(其中操作空格可用的操作有:左移、上移、右移、下移,但不能移出棋盘之外),通过搜索策略寻找从初始状态到目标状态的解路径。

解决八数码问题的搜索策略有很多,归纳起来主要有3种:深度优先搜索(Depth First Search, DFS)、宽度优先搜索(Breadth First Search, BFS)、A*算法。前两种是经典的盲目搜索算法,后一种是经典的启发式搜索算法。对于八数码问题,深度优先搜索一般不能保证得到最优解,A*算法又与其启发式函数息息相关,也无法保证得到最优解。而宽度优先搜索算法可以得到从初始状态到目标状态的最短解路径。虽然宽度搜索算法效率相对较低,搜索点数较多,但考虑到计算机技术的飞速发展,运算速度已经不是影响搜索效率的重要瓶颈了。因此,展开宽度优先搜索算法的研究,不但对解决八数码难题有着实际的意义,而且对解决人工智能中的其他问题,也可以起到积极的参考作用。

从人工智能的角度分析八数码问题,对解决八数码问题的宽度优先搜索策略展开研究,给出算法的一般描述,通过对算法进行分析,指出了宽度优先搜索算法的优点,可以获得最优的解路径。最后,在VS2008开发环境下,设计并实现了宽度优先搜索算法,即BSF算法,通过实验运行效果验证了宽度优先搜索算法的优越性。

2 宽度优先搜索算法

2.1 一般描述

宽度优先搜索是—种先生成的节点先扩展的搜索策略,其一般过程是:从初始状态节点开始逐层向下扩展,在第N层节点还没有全部搜索结束之前,不进入第N+1层节点的搜索。

设TreeNodes表中的节点是根据生成的先后进行排序的,先进入TreeNodes表中的节点排在前面,后进入TreeNodes表的节点排后面,则算法可以进行一般描述:

(1)把初始节点StartState放入TreeNodes表中,作为当前节点。

(2)如果TreeNodes表中当前节点指向为空,则问题无解,失败退出。

(3)把TreeNodes表的当前节点取出,并记该节点为CurrentState。

(4)检查当前节点CurrentState是否为目标节点。若是,则得到问题的解,成功退出;否则进行第(5)步。

(5)若节点CurrentState无法扩展,设定TreeNodes的下一个节点为当前节点,转第 (2) 步。

(6)对当前节点CurrentState进行扩展,将其子节点存放入TreeNodes表的尾部,并为每一个子节点设置指向父节点CurrentState的指针,然后设定TreeNodes的下一个节点为当前节点,转第 (2) 步。

2.2 算法分析

对于求解八数码问题,首先要给出一个起始状态和结束状态,如图1所示。那么,宽度优先搜索算法的目标就是寻找一条从起始状态到结束状态的解路径。

根据算法的一般描述,首先把起始状态加入到TreeNodes表中,作为根节点0。然后,把0节点取出,和结束状态比较,从图1来看,明显不是目标节点。所以对节点0进行扩展,根据空格上下左右移动,得到4个子节点,即节点1、2、3、4,并加入到TreeNodes表的尾部。再取出节点1作为当前节点,也不是目标节点,对其进行子节点扩展,得到2个节点,即节点5、6,并加入到TreeNodes表的尾部。然后,取出节点2作为当前节点,以此类推,进行下去,整个搜索节点过程如图2所示。

图2给出了搜索到节点12时整个TreeNodes表的节点情况。然后继续搜索节点13,根据算法过程,直到发现目标节点结束。这样的搜索过程就是宽度优先搜索算法。最坏情况下,该算法将搜索整个状态空间,即搜索9!/2=181440个节点。但从图2可以看出,只要从根节点到目标节点构建一个路径,则该路径一定是最短的一条解路径。

3 实现

3.1 编程环境

软件实验开发软件选用了Visual Studio 2008,它是基于.NET框架的软件开发平台,.NET开发环境是流行的基于Windows平台的编程平台。Visual Studio 2008可以为项目指定.NET Framework的版本:.NET Framework 2.0、3.0或3.5。应用程序的.NET Framework目标是指为使该应用程序能够在计算机上运行而需要在该计算机上安装的.NET Framework版本。

Visual Studio 2008中的C#代码编辑器提供了语句结束和快速信息功能,以支持C#3.0中的下列新语言构造:

(1)隐式类型的局部变量

(2)查询表达式

(3)扩展方法

(4)对象/集合初始值设定项

(5)匿名类型

(6) Lambda表达式

(7)分部方法

C#语言简单易学,C#3.0语言和编译器引入了多种新的语言功能,为快速开发实现八数码问题的BFS算法提供了方便。

3.2 界面设计

求解八数码问题是一个智力型的游戏,基于这样的考虑,给出界面设计如图3所示。为了美观,在不影响系统运行性能的情况下,引用了第三方皮肤控件IrisSkin2.dll。从界面可以看出,除了起始状态和结束状态之外,还给出了存放中间状态的棋盘。另外一些关键的按钮,如“随机初始状态”、“随机结束状态”、“无解判断”、“宽度搜索”、“状态演示”等,其按钮作用比较明显。

作为游戏,在设计上,考虑了手动移动空格的操作方法。在中间状态情况下,棋盘上每个按钮可以按下操作,按下空格的上下左右按钮,如同空格的上移、下移、左移、右移。在信息记录里面显示操作步骤,游戏过程如图4所示。

3.3 BFS算法设计

宽度优先搜索算法设计主要包括状态编码、状态比较函数、无解判定、状态树构建算法、核心搜索算法等几个部分。

由于界面设计采用了按钮的形式,在状态编码上,按照顺时针顺序,使用整型数组存储每个按钮上的数字来表示某个状态,代码如下:

空格对应于按钮上无数字,在数组中值记为0。

通过状态比较才能判定是否已经达到目标状态。基于整型数组的状态编码方式,可以很方便进行状态比较,只要检查两个状态对应的数组是否相等即可。

无解判定可以避免无解的情况下盲目搜索。可以证明,八数码问题有解的充分必要条件是两个状态的逆序列奇偶性相同。为此,无解判定问题转化为计算两个状态的逆序列奇偶性问题,给出代码如下:

状态树构建问题主要是对当前节点构建其子节点的问题,分3种情况考虑:第一种情况,空格在棋盘中间;第二种情况,空格在棋盘的4个角上;第三种情况,空格在除前两种情况之外的位置。每一种情况构建子节点的数量不同。程序实现代码如下:

子节点构建完成之后, 要考虑是否已经在状态树上存在该状态, 如果存在, 则不加入到状态树中;否则, 加入状态树中, 作为一个新的节点存在。

宽度优先搜索算法是解决八数码问题的关键,根据BFS算法的基本思想,使用alllist存放整个TreeNodes树的所有节点,给出其实现代码如下:

3.4 实验结果

根据图3所示的操作界面上的起始状态和结束状态,首先进行无解判断,点击“有解判断”之后,程序提示是有解的。然后进行宽度优先搜索,界面显示如图5所示。

经过一段时间之后,系统搜索完成,弹出界面,如图6所示。

从搜索结果可以看出,此次八数码问题的解路径为20步,系统记录了每个节点的父节点,通过指向连接,可搜索到整个路径,点击状态演示后,最终界面如图7所示。

4 结语

从实验可以看出,宽度优先搜索是一种完备策略,即只要问题有解,它就一定可以找到解。并且,宽度优先搜索找到的解,还一定是路径最短的解。这些都是宽度优先搜索的优点。当然,宽度优先搜索也存在很多缺点,主要缺点是盲目性较大,尤其是当目标行点距初始节点较远时,将产生许多无用的节点,因此其搜索效率较低,虽然相对于计算机飞速发展的运算速度来讲,这已经不是关键问题,但仍是下一步有待改进的方面。

参考文献

[1]佘玉梅, 段鹏.人工智能及其应用[M].上海:上海交通大学出版社, 2007.

[2]王万森.人工智能原理及其应用[M].第2版.北京:电子工业出版社, 2007.

[3]詹志辉, 胡晓敏, 张军.通过八数码问题比较搜索算法的性能[J].计算机工程与设计, 2007, 06.28 (11) :2505~2508.

[4]刘浩, 鲍远律.A*算法在矢量地图最优路径搜索中的应用[J].计算机仿真, 2008, 04.l25 (4) :253-257.

[5]刘甲耀, 严桂兰.C#程序设汁教程[M].北京:电子工业出版社, 2007.

上一篇:贸易摩擦探析下一篇:永煤集团