软件工程认识实习报告

上传人:痛*** 文档编号:104974243 上传时间:2022-06-11 格式:DOC 页数:27 大小:295KB
收藏 版权申诉 举报 下载
软件工程认识实习报告_第1页
第1页 / 共27页
软件工程认识实习报告_第2页
第2页 / 共27页
软件工程认识实习报告_第3页
第3页 / 共27页
资源描述:

《软件工程认识实习报告》由会员分享,可在线阅读,更多相关《软件工程认识实习报告(27页珍藏版)》请在装配图网上搜索。

1、计算机认识实习实验报告专业:计算机科学与技术班级: 3 姓名: 学号: 08122304 计算机工程与科学学院报告日期 2010年 7 月 13 日第一章概述1实验目的此次认识实习通过编写两人对弈军旗程序,了解程序设计的一般过程,树立良好的设计方法,巩固有关计算机软件的知识,加深专业知识的了解,扩大专业知识面,培养和提高发现问题、认识问题、分析问题及解决问题的能力,为后续有关专业课程的学习奠定基础。2背景说明1.题目名称: 军棋(两人对弈)。3实验要求 选择棋子:1键盘操作:用方向键、移动光标,Enter键选中棋子。 2鼠标操作:移动鼠标,按鼠标左键,选中棋子。 移动棋子:1键盘操作:用方向键

2、、移动光标,Enter键选落子。空格键:放弃。 2鼠标操作:鼠标左键按下时移动鼠标,放开鼠标左键击落子,右键放弃。 落子后,检测:如果不符合游戏走子规则,则重新操作。否则,棋子落定,并按游戏规则吃子。 能完成概述中的基本功能。 主界面为窗口界面,包含菜单栏。菜单中至少要有“运行”菜单,含“run”命令、“stop”命令;“帮助”菜单,含“Help” 命令、“About” 命令。Help内容是操作说明,About内容是开发者的姓名、学号、日期等。(见有关要求的说明。) 记时、记分。显示所得的分数和运行的时间。. 设置“暂停”和“恢复”功能。 实现各题功能概述所描述的功能; 实现一定的动画效果。

3、程序主界面为Windows窗口界面 “游戏”菜单中至少包含选项“开始新游戏”、“退出”;“工具”中包含“计算器”和“记事本”;“帮助”中包括“使用指南”和“关于本程序”。 所有菜单选项须符合Windows菜单命名规则,能用Alt键操作菜单。 “工具”菜单中各命令要求启动相应程序; “帮助”中“关于本程序”命令必须使用“关于对话框”实现,分两行显示姓名及学号。4实验内容编写符合吃子规则、走棋规则、棋盘布局,能够记录时间以及分数,判断胜负,可选择规则的军旗程序。军棋的子数:军棋每方共有25个子,司令、军长、军旗各一;师长、旅长、团长、营长、炸弹各二;连长、排长、工兵、地雷各三。军棋的子力:司令军长

4、师长旅长团长营长连长排长工兵,大子遇到小子,小子拿掉,大子放在原位,炸弹碰到任何子力同时拿下,这是任何规则都遵循的。 军棋棋盘:军棋棋盘包含铁路线、公路线,每方包括5个行营、23个兵站、2个大本营。兵站是子力的摆放位置;铁路线是子力的快行线,只要在直线上或弧型弯路子力走步数不限;公路线是慢行线,每次只能移动一步;行营是子力的活的保护区,在行营中的子力可以免受其他任何子力的攻击,行营里的子每次只能移动一步;大本营,其中一个必然是军旗所在位置,另一个可以摆放其他任何子力。工兵行棋比较特殊,只要在铁路线上,在没有挡路的情况下,可以飞抵棋盘上任何位置。 军棋的摆法:原则上25个子可以摆放在棋盘除行营外

5、的任何位置,但是对于一些特殊子力还有特别的限制。军棋:只能摆在两个大本营其中一个;地雷:只能摆在后两排除军旗占据一个大本营外任何11个位置;炸弹:不能摆在第一排的5个位置。军旗和地雷位置一旦固定出征后就不能够再移动。 军棋规则:针对于大本营,有进大本营子力能进能出的,也有能进不能出的;针对地雷可以分为弹簧雷(工兵飞雷雷下,工兵在;炸弹遇雷同时拿下;其他子力遇到地雷自动碰死拿下);炸弹雷(任何子力遇到雷同时拿下);针对于炸弹,有炸弹等同于其他子力按规矩行动的,也有炸弹满天飞(行子方式如同工兵)。针对行棋方式分为铁路线上只可直行或弧行弯路;可以走交叉线(棋盘上多出两道交叉线);可以拐直角弯路。总之

6、这类规则很多,甚至可以自行规定。 军棋的胜负判定:夺取敌方军棋,一般夺棋就算胜;还有的需要夺棋运到自己大本营才能获胜。 军棋的下法:按照参加的人数分:二人对弈,俗称单挑,也是我们华人儿童最先接触的军棋初版;三人对弈,俗称三国鼎立;四人对弈,俗称四国大战。还有大家很少见到的六人对弈,又称六国大战。按照棋的摆法来分有明棋、暗棋、混棋之分。 3、吃子规则:司令 军长 师长 旅长 团长 营长 连长 排长 工兵,小棋遇大棋被吃,相同棋子相遇,则同归于尽;工兵能排除地雷,其他棋子遇地雷同归于尽(可选其他棋子遇地雷皆败);炸弹与任何棋子相遇时同归于尽。4、棋盘常识:棋盘上行走路线包括公路线和铁路线,显示较细

7、的是公路线,任何棋子在公路线上只能走一步;显示为粗黑的为铁路线,铁路上没有障碍时,工兵可在铁路线上任意行走,其它棋子在铁路线上只能直走或经过弧形线,不能转直角弯。棋子落点包括结点、行营、两个大本营。行营是个安全岛,进入以后,敌方棋子不能吃行营中的棋子。大本营中的棋子(包括军棋和另一名棋子)以及“地雷”均不能移动,游戏开始后进入任何大本营的棋子不能再移动。5、布子规则:作战开始前,各玩家按照自己的规划将自己的棋子安排到自方棋盘的位置上。规定炸弹不能放在第一排(可选);地雷只能放在最后两排;军旗只能放在大本营;行营里不能放子。等所有玩家都布好阵并按下“开始”按钮后则进入战斗。 6、作战:用户可以先

8、单击选中自己的棋子,再单击对方的棋子,让双方交战,交战后服务器根据大小决定胜负,胜者留在交战发生的棋格,负者消失。各方均不能和自己同盟的一方交战。“军棋”是双方争夺的对象,一旦“军旗”被对方吃掉,则这盘棋就算输了。如果有一方被逼得无棋可走了,系统也将自动判定该方输棋。输的一方在其他方尚未决出胜负时,可以看见对面联盟方的棋子。如最后与自己结盟的一方取胜,则自己也算取胜。 7、时限:游戏各方每步棋有时间限定(默认1分钟),轮到某用户走棋时,如果在此时限后还不走棋,则取消本轮行棋资格,自动轮到下一家走,并增加超时一次,三次以上超时(不包括三次)作认输处理。8、可选规则:游戏开始前可以设置如下几条规则

9、:炸弹满天飞(即炸弹允许排在第一排,默认为不允许)、无敌地雷(默认为关闭)、夺旗限制(包括任何子都可以夺旗、司令不可以夺旗、只有工兵可以夺旗,默认为任何子均可夺旗)、时限(默认1分钟)。设置选项由桌主设置,后面加入的用户都可以在设置里看到这些规则(但不允许更改)。9、胜负判断:最后的幸存的玩家及其联盟为胜家,军棋被扛、无棋可走、超时三次以上都会被判负;如到最后游戏各方均无法继续下子(如全部同归于尽),则系统算为和局;如游戏当前剩下的各方均自认无法攻下对方的军旗,也可以选择“求和”,棋盘上还剩下的用户均同意后,该局作和局论。5参考资料1.臧玉琴,腾跃. Visual Basic界面、多媒体与操作

10、系统程序设计M. 北京:人民邮电出版社,2003第二章概要设计1总体设计1.1需求规定一、模块要求:输入项:1、地形 2、血量 3、双方位置 4、键盘对坦克操作 5、鼠标对坦克操作输出项:1、地形与背景的显示 2、血量显示 3、更改设置显示 4、坦克移动显示 5、炮弹移动显示 6、胜利消息二、功能要求:1 按规则移动棋子;2 按规则吃子;3 允许联机对战;4 设置棋局规则、单回合时间;5 判断胜负并计算分数、记录时间;6 可用鼠标和键盘进行操作;7 程序主界面为Windows窗口界面;8 提供帮助文件;9 导入导出布局;10 允许投降、申请和局;11 单机模式允许悔棋最多5步;12 操作具有音

11、效。三、性能要求:1.判断规则算法无明显延迟感;2.服务器端与客户端时间与走棋方统一。基本设计概念和处理流程1.2.1基本设计概念系统分成三层设计:显示层、数据处理层、事件响应层;显示层:显示层使得用户可以对系统进行操作和控制,采用图形界面来表示数据,使用户操作时直观。将棋盘底盘与棋子位置、选中的棋子、可选棋子、当前棋局状态、应播放的音效文件、可进行的设置与操作从数据转换为图形界面,将控件的位置与显示内容转化为当前操作下的值;数据处理层:以过程及函数的形式出现,主要处理事件响应层传来的数据:两子战斗的处理、棋子移动的处理、棋盘初始化处理、胜利事件处理、投降事件处理、和局事件处理、计算棋子能否到

12、达指定位置、计算棋子位置、摆放棋子过程、移除棋子过程、交换棋子过程、棋子阵亡过程、网络通信数据处理,再将数据传回,在显示层输出;事件响应层:根据各个控件的事件和控制变量的值选择对应的数据处理方式并传输数据进行处理,主要有背景的KeyDown事件,各按钮、多选、单选的单击事件,Winsock的数据传输事件等。1.2.2处理流程(1)单机模式顶层图:符合规则不符合规则选中棋子并单击另一位置无操作/交换棋子选中棋子并单击另一位置导入布局保存布局玩家一存储器导入布局保存布局玩家二存储器准备阶段准备阶段规则判断无操作/交换棋子开战规则与时间设置选中棋子并单击另一位置不符合规则选中棋子并单击另一位置玩家一

13、玩家二战斗阶段战斗阶段规则判断移动棋子或进行战斗求和/回复求和请求/投降一方胜利一层图:N标识选中记录当前棋子判断当前棋子与记录棋子的关系两者不为同一棋子且为同方棋子两者为同一棋子或不为同方棋子标识未选中Y战斗阶段战斗阶段规则判断玩家两者为同一棋子或不为同方棋子标识未选中Y准备阶段准备阶段规则判断开战规则与时间设置移动棋子或进行战斗一方胜利是否有棋选中玩家N标识选中记录当前棋子判断当前棋子与记录棋子的关系两者不为同一棋子且为同方棋子交换棋子是否有棋选中二层图:战斗准备阶段开战战斗阶段移动棋子或进行战斗一方胜利交换棋子将记录的棋子移动到当前棋子位置将当前棋子移动到记录的棋子位置修改相应数组的值(

14、棋子对应的底盘、底盘对应的棋子)按规则比较大小小子阵亡,大子移动到小子位置1.3结构主窗体+关于对话框1.4命名规范及目录结构1 棋子图片文件名采用b_和p_加上棋子大小的方式命名2 棋子背面图片采用b_和p_加上back的方式命名3 控制变量采用is加上所控制状态的英文名的方式命名4 棋子与底盘采用控件数组统一命名1.5尚未解决的问题l 主服务器与各登陆者之间的通讯问题l 单机模式下的AI问题2系统数据结构设计2.1结构设计要点2.1.1棋盘底盘的设计数组名作用numofchs棋对应的编号chs棋号对应的棋chspos棋号的位置号position位置号对应的棋号vertex位置与位置号对应数

15、组arc位置号之间的边数组u_arc当前位置号之间的边数组floydd最短路径数组path路径数组3系统出错处理设计3.1出错信息错误名称处理方式输出出错信息文件存储出错放弃存储警告:存储出错文件读出失败放弃读取警告:读取出错网络拥堵等候传输3.2系统维护设计不需维护第四章详细设计1本地程序设计1.1显示层:1) 按顺序将棋子位置保存在顺序文件中,导入时按顺序加载图片;2) 加载主窗体时设置作弊器可用、信息发送不可用、玩家姓名标签不可见、网络选项不可用、可选择网络模式、准备按钮可用、投降与求和按钮不可用、步数设置为0,显示当前时间,导入棋子图片;3) 遮盖过程中隐藏已准备好一方的棋子;4) 显

16、示过程中显示传入参数所对应方的棋子;5) 一方胜利时显示其最终的分数;数据处理层:1) 导入阵形时依次设置棋对应的编号、棋号对应的棋、棋号的位置号、位置号对应的棋号;2) 加载主窗体时初始化位置与位置号对应数组、位置号之间的边数组、当前位置号之间的边数组、最短路径数组、路径数组,是否明棋、是否网络对战、是否炸弹满天飞模式、是否开启键盘模式、是否开启作弊器、是否开始战局、是否首次准备好、双方司令是否存活、是否服务器端、是否已选中、是否已准备、双方分数、单回合时间、所用的端口号、下棋方;3) 遮盖过程:通过循环语句将所有棋子的图片换为背面,不更改实际对应值;4) 显示过程:通过循环语句将所有棋子的

17、图片换为数组中对应值的图片,不更改实际对应值;5) 交换棋子过程:把记录的棋子的纵坐标以及横坐标设置为当前棋子的纵坐标以及横坐标,再将当前棋子的纵坐标以及横坐标设置为记录的棋子的纵坐标以及横坐标;6) 判断是否到达过程:先判断是否为工兵或者炸弹满天飞模式中的炸弹,如果不是则先判断是否在一条线上,即行位置或者纵位置是否相等,如果不是且目标不为营,则将可到达标志置为0,果果在一条直线上,将路径上的距离相加(公路为1,铁路为0),如果和大于1则将可到达标志置为0,否则将可到达标志置为1;如果为工兵或者炸弹满天飞模式中的炸弹,则先将计算最短路径的数组以及记录路径的数组初始化,用Dijkstra算法计算

18、两位置间的最短路径,如果和大于1则将可到达标志置为0,否则将可到达标志置为1;7) 战斗过程:判断记录的棋子与当前棋子的关系,如果有一方是炸弹或者两方大小相等,则调用阵亡过程使两枚棋子都阵亡;除上述情况以外如果记录的棋子大于当前棋子或者记录的棋子是工兵而且当前棋子是地雷或者满足其他大于规则的则先调用阵亡过程令当前棋子阵亡,在调用移动过程将记录的棋子移动到当前棋子的位置上;除上述情况以外如果记录的棋子小于当前棋子或者记录的棋子则调用阵亡过程使记录的棋子阵亡;8) 棋子阵亡过程:先判断死亡的棋子是否为司令,如果是,将阵亡那方的司令存活标志设为0,之后交换下棋方时调用遮盖过程后显示此方的军旗。无论是

19、否为司令,之后判断是否为地雷,如果不是则将此方可移动棋子数减一,并将其设为不可见,调用移除棋子过程,将其移动到窗体左上角;9) 移除棋子过程:将移除位置四周的路径距离减一;10) 摆放棋子过程:将移除位置四周的路径距离加一;11) 和棋过程:发出提示,初始化棋局;12) 胜利过程:发出提示,初始化棋局;13) 投降过程:发出提示,调用另一方胜利过程,初始化棋局;14) 判断行营过程:用当前位置与行营位置进行比对,判断是否为行营。事件响应层1) 加载主窗体时调用初始化过程,并设置相应显示;2) 单击准备按钮时判断是否为明棋,若不是则调用遮盖过程,将已准备好的一方棋子图片换为棋子背面图片,如果双方

20、均已准备则进入开战状态;3) 单击棋子时,如果还未开战则再判断是否已经选中,如果还未选中则把选中标志置1,保存已选择的棋的位置;如果已经选中,则判断是否为己方棋子以及是否符合摆棋规则,如果符合则调用交换棋子过程将两个棋子交换,将选中标志置0;如果已经开战,再判断是否已经选中,如果还未选中则把选中标志置1,保存已选择的棋的位置;如果已经选中,则判断是否为对方棋子以及是否符合吃子规则以及是否能够到达,如果符合则调用战斗过程进行处理,将选中标志置0;4) 单击底盘时,如果选中标志为1,则先调用判断是否到达过程,如果能够到达调用移动棋子过程将棋子移动到指定位置,其他情况不作反应;5) 单击方向键时,如

21、果键盘模式打开着,则将光标的位置按照所按方向键进行移动;6) 单击回车时调用当前棋子的click事件;7) 单击空格时取消选中;8) 单击投降时调用投降过程;9) 单击跳过时结束当前回合,作超时计算;10) 单击网络对战时将网络对战标志设为1,并将相应控件的enable及visible设置好;11) 单击打开和保存阵型时从文件导入相应阵型;12) 单击退出时卸载窗体;13) 单击暂停/继续时暂停/继续游戏(仅单机状态下可用)14) 单击声音时更改是否有声音标志的值;15) 单击工具中的软件时将其运行;16) 单击帮助时打开帮助窗体;17) 单击关于时打开关于窗体;18) 单击明棋时将非明棋标志

22、设为0;19) 单击设置回合时间时提供inputbox输入新设置的回合时间;2网络通信设计1、 服务器端监听本地6000端口;2、 客户端向指定ip地址的6000端口发出连接请求;3、 服务器发送本机玩家姓名,设置相应按钮可见;4、 客户端发送本机玩家姓名,设置相应按钮可见;指令指令格式指令作用BB0或B1设置或取消炸弹满天飞模式EE0或E1对方回应和棋请求FF2位位置*4战斗指令KKIP跳过本轮MM聊天内容发送聊天指令NN3位时间玩家姓名传输回合时间以及玩家姓名PPeace求和RReady准备SSurrender投降TN2位时间1位下棋方设置时间以及下棋方VV2位位置*4移动指令第五章测试用

23、例测试用例标识测试描述测试结果问题报告标识评语网络对战netwar在局域网内用两台微机进入网络模式,输入名字后一台作为服务器端,一台作为用户端,摆好阵型后双方准备、开战。测试各种棋子的走法以及按钮的使用。能够正常导入阵型文件并在双方完成准备后进入游戏。在开战状态下能够正常运行,按照规则进行移动和吃子。在达到其中一方的胜利条件后能够进入取胜过程。有能够正常使用第六章技术难点与要点1判断是否能够到达设置一个数组储存点之间的距离,构建一个图的数据结构,计算点之间的最短路径,并以此来判断是否能够到达。Sub isreach(m As Integer, n As Integer, p As Intege

24、r) m、n为位置号,p用于返回值,判断是否能够到达Dim z As Integer, X As Integer, c As Integer, k As Integer, i1 As Integer, j1 As Integer, i2 As Integer, j2 As Integer, i3 As Integer, j3 As Integer, a As Integer, b As Integer, temp As IntegerCall iscamp(n, a)Call iscamp(m, b)If (chs(position(m) 32 And Not (chs(position(m)

25、 = 31 And isbomb = 1) Thenk = mCall searchvertex(k, i1, j1)k = nCall searchvertex(k, i2, j2)If i1 = i2 Then X = 0 If j2 j1 Then For c = (j1 + 1) To j2 z = c - 1 If (i1 = 7 Or i1 = 8 Or i1 = 9) Then c = c + 1 End If X = X + CInt(u_arc(vertex(i1, z), vertex(i1, c) + 1) / 2 - 0.1) Next Else For c = (j2

26、 + 1) To j1 z = c - 1 If (i1 = 7 Or i1 = 8 Or i1 = 9) Then c = c + 1 End If X = X + CInt(u_arc(vertex(i1, z), vertex(i1, c) + 1) / 2 - 0.1) Next End If If X i1 Then For c = (i1 + 1) To i2 z = c - 1 If (j2 = 2 Or j2 = 4) And (c = 7 Or c = 8 Or c = 9) Then c = 10 End If X = X + CInt(u_arc(vertex(z, j1

27、), vertex(c, j1) + 1) / 2 - 0.1) Next Else For c = (i2 + 1) To i1 z = c - 1 If (j2 = 2 Or j2 = 4) And (c = 7 Or c = 8 Or c = 9) Then c = 10 End If X = X + CInt(u_arc(vertex(z, j1), vertex(c, j1) + 1) / 2 - 0.1) Next End If If X = 1 Then temp = 1 Else temp = 0 End IfElse If (a = 1 Or b = 1) Then If (

28、Abs(i1 - i2) = 1 And Abs(j1 - j2) = 1) Then temp = 1 Else temp = 0 End If Else temp = 0 End IfEnd If If temp = 1 Then p = 1 Else p = 0 End If ElseFor z = 71 To 139For X = 71 To 139 floydd(z, X) = CInt(u_arc(z, X) + 1) / 2 - 0.1) If (z X And floydd(z, X) 9) Then path(z, X) = z Else path(z, X) = -1 En

29、d IfNextNextFor c = 71 To 139For z = 71 To 139For X = 71 To 139 If (floydd(z, c) + floydd(c, X) floydd(z, X) Then floydd(z, X) = floydd(z, c) + floydd(c, X) End If path(z, X) = path(c, X) 用于显示路径,暂未使用NextNextNextk = mCall searchvertex(k, i1, j1)k = nCall searchvertex(k, i2, j2) If (floydd(m, n) = 1)

30、Then p = 1 Else p = 0 End IfEnd IfIf (m = 95 And n 94 And n 89) Or (m 94 And n = 95) Or (m 75 And n = 76) Or (m = 76 And n 75 And n 80) Or (m 114 And n = 115) Or (m = 115 And n 114 And n 119) Or (m 133 And n = 134) Or (m = 134 And n 133 And n 128) _Or (m = 82 And n 96 And n 98 And n 99 And n 81) Or

31、(n = 82 And m 96 And m 98 And m 99 And m 81) _Or (m = 121 And n 135 And n 137 And n 138 And n 120) Or (n = 121 And m 135 And m 137 And m 138 And m 120) Thenp = 0End IfEnd Sub2网络通信通过自定义命令的方式控制己方棋子在对方棋盘上的行动。Private Sub ws_DataArrival(ByVal bytesTotal As Long)Dim judge As String, X As Integer, Y As Int

32、eger, qh As Integer, i As Integer, val As String, x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, m As Integer, n As Integer, a As Integer, b As Integer, yn As String, rt As Integer, nn As String Call ws.GetData(str, vbString) judge = Left(str, 1) str = Mid(str, 2) If judge = N Then 设置主机

33、姓名及回合时间 rt = CInt(Mid(str, 1, 3) tt = rt str = Mid(str, 4) playername(2) = str l_name(2).Caption = playername(2) If isserver = 0 Then com_recieve.Text = com_recieve.Text & 主机将回合时间设置为: & CStr(tt) & 秒 & Chr(13) & Chr(10) nn = N If tt = 10 And tt 100) Then nn = nn & 0 & CStr(tt) Else nn = nn & CStr(tt)

34、 End If nn = nn & playername(1) ws.SendData nn End If ElseIf judge = M Then 接受信息 com_recieve.Text = com_recieve.Text & playername(2) & : & str & Chr(13) & Chr(10) ElseIf judge = R Then 对方准备 ready2_Click For i = 1 To 25 qh = CInt(Mid(str, 1 + (i - 1) * 8, 2) val = Mid(str, 3 + (i - 1) * 8, 2) X = CIn

35、t(Mid(str, 5 + (i - 1) * 8, 2) Y = CInt(Mid(str, 7 + (i - 1) * 8, 2) chs(qh) = val chess(qh).Picture = LoadPicture(App.path & img1_back.jpg) chspos(qh) = vertex(X, Y) position(vertex(X, Y) = qh chess(qh).Left = Image1(vertex(X, Y).Left chess(qh).Top = Image1(vertex(X, Y).Top Next ElseIf judge = T Th

36、en 设置回合时间 turntime = CInt(Mid(str, 1, 2) playerturn = CInt(Mid(str, 3) ElseIf judge = B Then 设置炸弹满天飞模式 i = CInt(Mid(str, 1, 1) If i = 1 Then isbomb = 1 com_recieve.Text = com_recieve.Text & 主机设置了炸弹满天飞模式 & Chr(13) & Chr(10) Else isbomb = 0 com_recieve.Text = com_recieve.Text & 主机取消了炸弹满天飞模式 & Chr(13)

37、& Chr(10) End If ElseIf judge = S Then 对方投降 Surrender2_Click ElseIf judge = K Then 对方跳过 If ischose = 1 Then shark1.Enabled = False chess(sharkr).Visible = True ischose = 0 End If cs(playerturn) = cs(playerturn) + 1 If isnet = 0 Then com_recieve.Text = com_recieve.Text & 玩家 & playerturn & 已跳过(超时) & c

38、s(playerturn) & 次 & Chr(13) & Chr(10) Else com_recieve.Text = com_recieve.Text & playername(playerturn) & 已跳过(超时) & cs(playerturn) & 次 & Chr(13) & Chr(10) End If playerturn = 3 - playerturn tshark.Enabled = False turntime = tt t1(playerturn).Visible = True t1(playerturn).Caption = turntime t1(3 - pl

39、ayerturn).Visible = False ElseIf judge = F Then 对方攻击 x1 = CInt(Mid(str, 1, 2) y1 = CInt(Mid(str, 3, 2) x2 = CInt(Mid(str, 5, 2) y2 = CInt(Mid(str, 7, 2) m = vertex(x1, y1) n = vertex(x2, y2) If (chs(position(m) = 31 And chs(position(n) 30) Or (chs(position(n) = 31 And chs(position(m) 30) Or chs(posi

40、tion(m) = chs(position(n) Then Call chessdie(position(m) Call chessdie(position(n) ElseIf (chs(position(m) = 32 And chs(position(n) = 41) Or chs(position(m) chs(position(n) Then Call chessdie(position(n) Call movechess(position(m), n, 1) ElseIf (chs(position(m) 军长师长旅长团长营长连长排长工兵军旗,工兵能挖地雷,炸弹能炸任何子9、单击己

41、方棋子选中,如果再单击本棋子则取消选中,单击对方棋子进行战斗10、单击暂停/继续可以暂停或继续游戏11、单击声音可以开启/关闭声音12、单机关于可打开关于对话框13、单击求和可以求和,单击投降认输,单击跳过跳过本回合,作超时处理2网络模式1、通过单击网络对战按钮可以选择网络对战2、输入姓名3、创建游戏或者加入游戏3、服务器端单击炸弹满天飞可以选择是否下炸弹满天飞模式5、 服务器端可以设置回合时间6、 连接后可以给对方发送聊天信息第八章总结与体会由于之前对vb有过一定的学习,所以在完成实习的过程中主要需要解决的是如何实现各个设计的问题,比如如何移动棋子,如何让棋子与期盼的位置相对应,如何判断一个

42、棋子能否移动到另一个位置等。虽然在vb的使用上没有大的问题,但由于之前没有只做过一个比较完整的项目,在完成实习的过程中遇到了不少问题。首先是由于事先规划不完善造成的问题。随着程序的扩张,变量变得越来越多,由于事前没有一个完善的设计,程序逐渐变得混乱,结构也出现了相互重叠和代码重复的问题。这又造成了每增加一个功能便需要更改大量的代码,不但在大量的代码中寻找相应的语句很繁琐,而且极易遗漏。这也有一部分是实现对程序估计不足,没有使用模板和类的结果。其次是算法选择上的问题。开始在计算最短路径时考虑到要让程序简介一点,选择了佛洛依德算法,但实际操作后发现延迟达到了很明显的程度,对于这样一款小游戏来说这样

43、的延迟过长了。于是采用了迪杰斯特拉算法,单源点算法使速度明显加快。还有就是特殊节点的问题。由于军旗棋盘比较不规则,有些地方的路长和路径不大好处理,直到最后也没有找到好的解决办法,只能一条条进行判断,造成程序比较繁琐。不过对于过程的拆解还是比较成功的,将一整个过程拆成几个使基本的过程能够重复使用提高了不少效率。分块的程序也使程序的维护更为方便,能够在过程内部进行修改,而不必一处一处去找需要修改的地方。虽然两国军旗只是一个很小的程序,不过已经足够当做一个工程来完成,从中我得到了不少经验,特别是在设计一整个系统上的一些选择。在开发过程中也有意识地用了一些学过的数据结构和算法,增强了对这些知识的应用能力。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!