




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络小游戏-连连看 摘要 因特网的发展使人类进入了一个全新的世界,人与人之间可以远隔万里为了同一兴趣爱好而交流,做到了网络无国界,信息无国界。随着因特网的不断发展,网络游戏作为一个新的名词融入到了人们的日常生活当中。网络游戏来源于“onlinegame”,更直接的翻译是“在线游戏”,亦即必须在大家联网而且都在线的时候,才能够团队互动,否则就属于单机游戏了。 网络游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是网络游戏本身所具有的强大的吸引力。网络游戏的吸引力主要在于,它在让玩家打发时间的同时,可以让人实现在显示生活中不能实现的理想,得到在显示中不能得到的东西。而且网游产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。近年来,世界网络游戏市场高速发展。根据统计,全球网络玩家所占互联网人群的比例已经超过30%。网络游戏凭借其信息双向交流,速度快,不受空间限制等互联网有时,具有诱人的互动性、仿真性和竞技性,已经成为网络业盈利优厚的三大领域之一。网络平台的发展,为网络游戏奠定了坚实的“物质”基础。宽带的迅猛发展为网络游戏提供了“高速公路”,而专用游戏服务器则为网络游戏提供了容量巨大的“加油站”。前不久,网络游戏还被视为一个“高风险”的行业,但随着人们对网络游戏的重新认识,网络游戏正在恢复其应有的地位。 关键字 连连看、网络游戏、网络对战。 目录 1 选题背景1 1.1 课题来源1 1.2 目的1 1.3 意义1 1.4 主要问题1 1.5 技术要求2 1.6 发展概况2 1.7 指导思想2 2 方案论证2 2.1设计原理2 2.2 方案选择3 2.3 数据流图3 3系统设计4 3.1 基本思路4 3.1.1 解决游戏区域问题4 3.1.2 获取图片位置的思路4 3.1.3 网络通信协议的思路5 3.1.4 其它功能的思路5 3.2 界面的设计和图片的随机生成5 3.2.1 界面的设计5 3.2.3 单机控件的事件触发7 3.2.4 其它控件与功能9 3.3 图片是否可消除的判断10 3.3.1 两张图片是否相同10 3.3.2 图片路径的判断12 3.4网络通信与对战13 3.4.1 概要13 3.4.2 读取对家发送的数据13 3.4.3 网络通信控件事件触发16 4结果分析18 4.1 数据分析18 4.2 运行结果分析19 4.2.1 游戏同时开始问题19 4.2.2 游戏结束时的判断19 5总结20 谢辞20 参考文献20 1 选题背景 1.1 课题来源 网络游戏起源早期电子游戏中的RPG游戏(角色扮演游戏)。RPG游戏是电子游戏中历史最为悠久的一种,也是数量最为庞大的一种,因为RPG游戏相对于其他类型的游戏,技术要求最低,电脑配置要求也最低,因此开发起来相对容易很多。在电子游戏发展史中,也留下了许许多多的经典作品,像家用电视游戏机上的最终幻想系列,PC机上魔法门系列,还有中文电脑RPG游戏的经典仙剑奇侠传。正是因为RPG游戏的竞争十分激烈,许多厂商开始力图在RPG游中引入一些新鲜的因素。1997年,暴雪公司发布了DIABLO(暗黑破坏神),这其实是一款全新的游戏类型,严格意义上来说这并不是一款传统的RPG游戏,它更像是即时战略游戏与传统RPG的结合,但它又确实包含了许多传RPG的因素在里面,最为关键的就是完整包括了角色的升级系统,所以业界给这种游戏定义为ARPG(动作角色扮演游戏)。DIABLO对游戏界的贡献还不只于此,这款游戏还首创了战网游戏系统,所有正版游戏用户都可以得到一个CDKEY,用这个CDKEY可以上到暴雪为用户免费开发的服务器上进行多人游戏,这虽然有别于现在的网络游戏,但无疑为后来的网络游戏开发商提供了一个很好的思路。 随着电脑软硬件技术和互联网的飞速发展,电脑游戏也突飞猛进,成功游戏不断涌现。比较成熟的项目主要有:反恐精英(CS)、星际争霸、魔兽争霸2、FIFA2003、帝国时代、FIFA2004等等。这时也出现了越来越多的网络小游戏,休闲类项目包括网络围棋、中国象棋、四国军棋、桥牌、麻将、拱猪、斗地主、拖拉机、连连看等。 1.2 目的 网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。 另外也通过本程序将三年来所学的专业知识和其他方面的知识融入到实际应用中。 1.3 意义 通过此次课题的设计,掌握如何制作一个游戏软件,以及制作游戏软件的整个流程,制作游戏软件的步骤,为以后的就业工作打下基础。 1.4 主要问题 开始制作游戏时,主要要解决的问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断;如何连接网络上的两台计算机实现网络对战,互发消息,如何判断游戏是否结束以及输赢问题等。 1.5 技术要求 网络中任意计算机当运行该游戏软件是,能自己决定是当客户机还是服务器,如果要当服务器,则等待客户机的连接请求;如果要当客户机,则要主动去连接服务器。游戏中能正确判断鼠标两次点下的图片是否可以消去、能正确判断游戏是否已经结束和哪一方玩家胜出。还可顺利发消息给对方和接收对方发来的消息。 1.6 发展概况 网络游戏正处于加速发展周期中,中国网络游戏市场迅速扩大,近三年的年均增长率超过100%。网络游戏的告诉发展,逐渐引起了我国政府的高度重视,信息产业部、文化部、新闻出版总属等相关部门都在积极推动各项市场监管和鼓励网络游戏产业发展的政策措施的出台,2003年网络游戏首次被正式纳入国家863计划,标志着我国网络游戏产业已经的到政府的充分重视。除外,在网络游戏产业发展的同时,有力带动了相关行业的发展,如软件、计算机、通信、电信运营、互联网等,根据统计,网络游戏能够带动10倍于自身产值的相关行业的发展。预计未来三年,中国游戏时常规模仍将保持60%以上的告诉增长,至2006年市场规模将接近100亿元,而多样的资本运作模式将成为网络游戏产业发展的重要推动力。同时,手机游戏、家用游戏机、游戏传媒、电子竞技等游戏周边行业也将快速发展起来。 1.7 指导思想 按照软件开发的总过程进行设计,经历定义和计划、需求分析、软件设计、软件编码、软件测试等过程。 2 方案论证 2.1设计原理 本设计采用客户机服务器模式,网络上两台计算机自主决定是否当服务器或是客户机,若一方为客户机,则另一方为服务器,当连接上是则分别点击准备以待游戏的开始,游戏开始时间以后当对战双方都准备后程序自动判定游戏开始。游戏开始后,双方都有自己的游戏区域,互不干扰,当一方消完全部的图片则向对方发送游戏结束信息,并在双方显示相关提示信息,游戏过程中,双方都会显示对家和自己还剩下未消去的图片数。 游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。 游戏过程,任意一家(假设为A方)消去图片后必须同时向对家发送已消去两张图片的信息。这样对方(假设为B方)在获取信息后即显示A方剩余的图片数,当A方剩余图片数为0,而B方剩余图片数大于0,则提示A方胜利。B方失败的信息。 考虑到游戏娱乐性以及网络游戏的交互特性。加入聊天功能,这样交战双方可以在游戏之后或者过程中发表自己的看法与经验(这也是参考了当前网络游戏的潮流来设计的)。 2.2 方案选择 在概要设计阶段,只要有两中方案可供选择: 一、双方都有自己的游戏区域,互不干扰,谁先消完全部的图片方块则就为胜出的一方,同时不管另一方是否已经消完全部的图片方块,游戏仍然结束。 二、双方的游戏区域相同,即共用一个游戏区域,当一方消去两块图片,则其总共消去的方块数加2,并且对方的游戏区域中也少掉那两块图片。当所有的图片方块都消去后,则游戏结束,统计消去的图片块数多的一方为胜者。 在第二种方案中,双方共用一个游戏区域,任何一放的消去方块的动作都要在另一方中实时的反应出来,这容易产生一些问题,就比如甲方点下图片下标值为1的图片(姑且用甲),乙方点下另一张图片下标值也为1的图片,当乙方想再次点下另一张下标值为1的图片时,甲方已经先于乙方点下那张图片,则按规则就已经消去了,反应在乙方这边的好象是乙方做了一次空操作,如此反复的话,可能会引起玩家的厌烦心在网络上流行的连连看游戏或者其他的游戏都是以第一种方案为设计思想,对第二种方案设计的游戏的规则可能会不太习惯,玩起来就不能达到娱乐的目的了。所以我们放弃第二种方案的设计思想,参考网络上流行的连连看的游戏规则,设计出第一种方案。 2.3 数据流图 由于游戏包含网络功能,所以将程序分为服务端程序和客户端程序。两种程序既有自身模块之间数据传送,也有与对方程序之间的数据传送,所以就有了下面的这个数据流图:3系统设计 针对上面的需求分析,我们把整个软件分成三个模块:1、整体界面的设计和图片的随机生成;2、图片路径判断函数;3、网络通信与对战。 以下就是系统结构图:(略)3.1 基本思路 3.1.1 解决游戏区域问题 这个问题最简单,但是却是最花时间的。正所谓:万事开头难。刚开始想了好多控件来实现。比如Label,Panel等等,后来在参考文献中发现一个扫雷游戏可以通过image控件来画图。因此在几天之后才解决这个最早的最简单的也是最头疼的问题。 3.1.2 获取图片位置的思路 首先,最基本的就是关于程序图片的位置怎么获取,以及如何控制。这里采用最常用的方法数组。考虑到图片是多行多列的格式。所以采用二维数组(数组名为flag)的方式来控制比较直观,并且为了程序容易解读,统一在不同过程中用名为i和j的变量来分别表示行列。程序开始时给数组中的各个元素赋初值为0,即表示没有图片。 然后数组控制整个游戏区域,游戏区域最外围为空白区域,即相关元素的值为0。这样就可以保证游戏刚开始后,第二层显示的图片之间的相连路径处理时就没有阻碍了。 现在介绍flag数组具体控制图片的过程,首先,由于每张图片显示的宽度高度为3947,所以整个控件设置为468376(包括外围空白的两行两列)。而每张图片可以用flagi,j来表示,它在image内部的位置为x=i*39到(i+1)*39,y=j*47到(j+1)*47这样image控件内的一点M(x,y)所对应的图片就可以转化为数组flagi,j的值来判断。这个思路的具体算法可以后面的3.2.2的第二个步骤中得以体现。 3.1.3 网络通信协议的思路 这里有一点非常需要解决,那就是对战双方发送的游戏状态信息、聊天信息、用户准备信息全部是同一个方法来发送出去的,这进接收方将无法判断收到的信息是哪个类型的,这时通过定义发送信息的协议来完成。即在每次发送不同信息前加入一个四字符长的字符串来说明是哪种类型,接收方通过提取接收到信息前四个字符来判断是哪种类型,然后进行进行相关的处理。详细处理过程见3.4.2的内容。 3.1.4 其它功能的思路 其它功能的思路基本上没有什么难度也没花多少时间去解决,因此将在后面的具体各个部分的设计过程当中分别进行介绍。 3.2 界面的设计和图片的随机生成 由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。图片的随机生成主要是用到一个random()函数将随机数赋值给flag数组中的每个元素,然后根据数组元素值,来显示图片。(这个在3.1.2的思路中有详细的介绍) 3.2.1 界面的设计 将整体界面分为三个大的部分,左上部分为游戏图片显示区域,即主区域,用IMAGE控件;右上角为命令按钮、聊天信息框,双方游戏状态显示(用到了按钮、MEMO、EDIT、Label等控件)。下面部分则是状态栏,显示相关提示信息(如图3-1)。 图3-1 程序主体界面3.2.2 图片的随机生成 实现这个功能要分很多个步骤: 1. 程序运行时即载入游戏需要的六张图片。通过一个循环,将命名为1-6.bmp的位图载入到数组的各个元素。这个数组的下标也是相应的从标志为1-6.这样后面通过将flag标志的值置为1-6判断,该载入哪张图片。具体载入图片的代码如下: for i:=1 to 6 do begin fki:=TBitmap.Create;/生成一个数组分别存放六张图片 fki.loadfromfile(pic+inttostr(i)+.bmp); end; 2. 当确认游戏开始时,通过画图过程完成图片生成,画图的过程代码如下 procedure TForm1.drawmap(); var i,j,k:integer; begin image1.Canvas.Rectangle(0,0,468,376); /初始化设置画出一片空白区域 for i:=1 to 6 do/将给二组数组相关元素赋1-6的值,以方便画出相应图 for j:=1 to 10 do begin randomize(); repeat k:=random(6)+1; /将生成随机数加1(为了防止0生成) flagi,j:=k; /控制每个元素显示图片的名称,六张图片文件名为1-6,均是.bmp格式 samek:=samek+1; until samek1 then /ready变量是BYTE型用来判断双方是否已经同时准备,默认为0,任意一家准备都加1。 begin label4.Caption:=60;/游戏开始设置对家剩余图片数为60(默认) label5.Caption:=60;/ 游戏开始设置自己剩余图片数为60(默认) image1.Enabled:=true;/激活IMAGE控件 drawmap();/调用画图过程 end else statusbar.SimpleText:=正在准备对家开始;/如果只有一家准备,显示提示信息。 end; 开始按钮的过程事件的设计过程分为三个阶段: 1. 游戏开始设计时,这时功能最简单,只需要激活image控件与调用画图过程即可 2. 加入网络游戏后,为了让对家双方明确清楚谁赢了,加入要求用户开始游戏之前输入玩家名字的功能。 3. 网络游戏要求双方全都准备好了才开始游戏,所以加入ready变量来判断双方是否已经全部准备,并向对家发送已经准备的消息。(从这个功能开始,因为需要向对方发送信息,且由于服务器端与客户端发送消息的方法不同,所以遇到发送消息功能时全部通过一个新加入的类型为布尔型的变量 isserver判断) 发送按钮过程代码: procedure TForm1.sendClick(Sender: TObject); var strchat:string; begin strchat:=chatedit.Text;/将输入框的内容存入字符串变量当中 chatshow.Lines.Add(strchat); /聊天记录框显示当前发送信息 if IsServer then/判断当前电脑是服务器端时发送聊天信息的方式 ServerSocket.Socket.Connections0.SendText(chat+strchat) Else/当为客户端时发送聊天信息的方式。 ClientSocket.Socket.SendText(chat+strchat); chatedit.Text:=;/发送完信息,清空聊天输入框 end; 3.2.4 其它控件与功能 Label控件,用来显示双方对战过程剩余图片数。状态栏控件,用来显示游戏过程相关的提示信息。包括单机和网络两方面的提示信息 用户帮助功能,当用户点击帮助按钮后,打开说明书文件,代码如下: ShellExecute(Handle, open, 说明书.htm, nil, nil, SW_SHOW); 上面的代码就是执行Shell指令,打开名为“说明书.htm”的文件。这里由于考虑到并不是所有的电脑都安装有Office办公应用软件,不适应用word文档作说明书,且又需要说明书界面不至于太单调,所以将其保存为web页面(几乎能运行本程序的所有电脑都能打开web页面),这样就能保证所有用户都能正常阅读到帮助文件。 不过使用这个函数之前,要先加ShellAPI,即在源代码中的implementation下一行加入一行:uses shellapi; 3.3 图片是否可消除的判断 本模块包括两部分:一是判断两张图片是否相同;二是路径判断问题。 3.3.1 两张图片是否相同 这个部分功能只与一个事件相关,就是image控件按下的事件。 这个事件算法,其中很重要的一点就是在鼠标按下后要获取图片值,这个思路在前面的3.1.1有详细介绍,另外本过程还有一个解决问题就是,要判断前后两次选中的图片是否相同,及其相应位置(路径判断时需要用到)。所以用两个变量tempi和tempj来分别存储前次选中图片的行列位置。下面是实现的算法代码: procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i,j:integer; strtemp:string; begin i:=(y div 47); j:=(x div 39); if temp=0 then begin temp:=flagi,j; tempi:=i; tempj:=j; end else begin if (temp=flagi,j) and (path(i,j,tempi,tempj) then /这里就调用了path函数来判断,两张相同的图片,是否符合路径上的要求。 begin if (i=tempi)and (j=tempj) then/if2 temp:=0 else/else2 begin temp:=0; flagi,j:=0; flagtempi,tempj:=0; gamevalue:=gamevalue-2; strtemp:=inttostr(gamevalue); label5.Caption:=inttostr(gamevalue); image1.Canvas.Rectangle(j*39,i*47,(j+1)*39,(i+1)*47); image1.Canvas.Rectangle(tempj*39,tempi*47,(tempj+1)*39,(tempi+1)*47); if IsServer then /if3 begin if gamevalue0 then ServerSocket.Socket.Connections0.SendText(picn+strtemp) else ServerSocket.Socket.Connections0.SendText(over) end else /else3 begin if gamevalue0 then ClientSocket.Socket.SendText(picn+strtemp) else ClientSocket.Socket.SendText(over); end; end; /end2 end /end1 else temp:=0;/else1 end; tempi:=tempi; tempj:=tempj; 测试变量值开始赋值 strtemp:=temp:+inttostr(temp)+chr(13); strtemp:=strtemp+flag+inttostr(i)+,+inttostr(j)+:; strtemp:=strtemp+inttostr(flagi,j)+chr(13); strtemp:=strtemp+flag+inttostr(tempi)+,+inttostr(tempj)+:; strtemp:=strtemp+inttostr(flagtempi,tempj)+chr(13); strtemp:=strtemp+x+inttostr(x)+chr(13)+y+inttostr(y); 测试变量值赋值结束 上面的内容是在单机测试时为了观察每次鼠标点击后相关位置图片的值是否判断正确,以方便调试程序用的,跟程序正常运行并没有直接关系。 if gamevalue0 then gameover:=false else gameover:=true; if gameover then begin /start.Enabled:=true; start.Caption:=准 备; winner:=player; image1.Canvas.Rectangle(0,0,468,376); messagedlg(winner+已经胜利,游戏结束!,mtwarning,mbyes,mbno,0); chatshow.Lines.Add(恭喜,你已经胜利了); end; Label1.Caption:=strtemp+chr(13)+inttostr(gamevalue);/测试各个变量值 end; 3.3.2 图片路径的判断 这方面的主要内容是path函数来完成的,其返回值为布尔型,当每次在IMAGE控件上点击时判断前后两个图片是否相同且路径是否符合要求时调用,由于这第二个功能(即path函数)全部是由这个游戏的合作的同学在我设计网络通信模块的同时来完成的。所以这里就不做详细介绍了。 3.4网络通信与对战 3.4.1 概要 本模块的功能比较复杂也分散。主要包括以下几个方面:主机监听、客户机连接、聊天信息发送、准备信息收集、游戏结束判断、对战双方游戏状态信息收集。其中后面四个功能是服务器端和客户端同时具备的功能。 3.4.2 读取对家发送的数据 首先,服务器端ServerSocket控件使用到以下四个事件:ServerSocketAccept、ServerSocketClientConnect、ServerSocketClientConnect、ServerSocketClientRead。由于前面三个事件都是在状态中给出相关的提示,并没有复杂的功能。过程代码这里就不做详细介绍。至于服务器端的ServerSocketClientRead事件与客户端的ClientSocketRead事件二者处理过程基本上相同,这里就以服务器端读取信息事件来介绍。 ServerSocketClientRead过程代码(读取客户端发送信息时触发): procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); var cmd:byte;/定义命令(即协议变量为BYTE型) begin cmd:=0;/初始化为0,表示没有收到任何信息 strread:=Socket.ReceiveText;/获取从套接字读取的数据存入字符串变量strread strcmd:=copy(strread,0,4); -*说明*- 由于对家每个发送的信息中的前四个字符是定义发送信息的类型(即协议)故提取将其提取出来进行判断。 由于不同协议通过不同的处理方式可以if条件语句与case语句两种进行不同的判断,但是Case语句更直观,但是Case语句必须是顺序的数值型。故先用if语句将不同协议转换为顺序的数值来判断。 -*说明*- if strcmd=chat then cmd:=1;/聊天信息 if strcmd=over then cmd:=2;/游戏结束 if strcmd=prep then cmd:=3;/游戏预备 if strcmd=picn then cmd:=4;/游戏状态 case cmd of /通过不同case语句来进行处理不同协议的内容。 1:chatshow.Lines.Add(copy(strread,5,96); 2:/游戏结束后,显示相关提示信息(如图3-5) begin label4.Caption:=0; chatshow.Lines.Add(很遗憾,对家赢了!游戏结束!+chr(13); /这个提示信息可以参考图3-5 image1.Canvas.Rectangle(0,0,468,376); -*说明*- 由于游戏结束了,不能再对游戏进行任何操作,所以通过调用image控件的画矩形框程序的方法,将所有的图片消去。 -*说明*- messagedlg(很遗憾,对家赢了!游戏结束!,mtwarning,mbyes,mbno,0); /这个提示信息可以参考图3-5 end; 3:/游戏开始(运行界面如图3-4) begin ready:=ready+1; /收到对家的游戏准备请求,将ready值加1,当超过2时,表示双方已经都准备好了。 if ready1 then begin label4.Caption:=60;/游戏开始后,对家的剩余图片数默认显示为60 label5.Caption:=60;/游戏开始后,自己的剩余图片数默认显示为60 image1.Enabled:=true;/激活image控件 drawmap();/调用画图程序,双方均随机生成开始画面,如图3-4 end; end; 图3-4游戏运行界面 4: begin /游戏过程,将收集到的对家剩余图片数显示出来(如图3-4) label4.Caption:=copy(strread,5,2); -*注释开始*- 由于前面四个字符是定义的通信协议,所以不显示出来,只提取第5个字符及后面的字符。其中的COPY的函数是整个通信协议进行判断的重要内容。从以上几个代码就可以看出其作用的重要性。 -*注释结束*- end; end; end; 图3-5游戏结束3.4.3 网络通信控件事件触发 这个部分的控件有三个:监听、连接、断开。下面分别列出三个控件的触发事件过程。 监听:这个控件要实现的功能就是当一台机器充当服务器角色时,点击这个按钮(默认是还未当服务器,且点击后才监听)后就开始监听。如果当前已经处于监听状态,就显示为“停止监听”,且按下按钮后将停止监听,即断开了客户机连接请求。两个功能的实现详见下面的代码,且相关代码均有详细的介绍。 procedure TForm1.listenClick(Sender: TObject); begin if listen.Caption=监 听 then/如果还未监听时处理下面事件 begin connect.Enabled:=false;/当监听后就当服务器,不用连接到别的机子,所以连接按钮的Enabled属性则设为false。 listen.Caption:=停止监听;/按钮显示为“停止监听” ServerSocket.Active := True;/激活服务器端socket控件 ClientSocket.Active := False;/ 关闭客户端socket控件。默认也是关闭的 statusbar.SimpleText:=当前状态:监听客户端.; isserver:=true;/变量是用来判断当前是否为服务器端。整个程序当处理服务器端与客户端不同情况都通过这个变量来判断 end else /当处于监听状态中,按钮显示为“停止监听”,点击后即停止监听,下面是实现这个功能的代码 begin listen.Caption:=监 听; if ServerSocket.Active then ServerSocket.Active := False; statusbar.SimpleText:=当前状态:停止监听.; end; end; 连接(运行情况如图3-3 连接到服务器端):这个按钮的功能就是实现将当前机器设为客户机,且向已有的服务器发送连接请求,同时这里用到了一个输入框函数。获取用户要连接的服务器IP地址。 procedure TForm1.connectClick(Sender: TObject); begin if InputQuery(准备连接到,服务器:,Server) then/弹出对话框,让用户输入要连接的服务器端的IP地址 if Length(Server) 0 then begin disconnect.Enabled:=true; form1.Caption:=连连看客户端; with ClientSocket do/通过with来设置客户端socket控件属性,减少代码冗余度 begin Host := Server; Active := True; Listen.Enabled := False;/当为客户端时监听按钮则不能用 isserver:=false;/标志为客户端 end; start.Enabled:=true;/连接成功后才让准备按钮可用,防止未链接到服务器端就点击准备按钮。 statusbar.SimpleText:=当前状态:正在链接到主机 +server; end; end; 断开连接:这个按钮事件功能算是最简单的了,当触发事件后,关闭与服务器端的链接。 procedure TForm1.disconnectClick(Sender: TObject); begin ClientSocket.Close; StatusBar.SimpleText:=客户套接字连接已经关闭.; end; 4结果分析 4.1 数据分析 在游戏编写过程中,发现部分变量是重复用到且在不同的过程中需要共享存储的数据。所以最后将这些变量(局部)转为全局变量。下面介绍这些变量 v flag数组变量,这是一个二维数组用来存放显示60张图片的变量 v gameover布尔型变量,这是用来判断游戏是否结束的变量。 v gamevalue整型变量,这是用来存放当前剩余图片数的变量。 v server字符串型变量,这是用来存放服务器IP地址的变量。 v isserver布尔型变量,这是用来判断当前机子是不是服务器,默认值为false,当电脑获取客户机的连接请求时,设为真值。 v player字符串型变量,这是用来存放玩家名字的变量。当游戏结束后可以将这个变量的数据一起传送出去,告诉对方名为player的玩家获得胜利。 v winner字符串型变量,这是用来存放胜利的玩家名字的变量。 v strcmd:BYTE型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年综合类-中学信息技术(高级)-中学信息技术(初级)-初级中学信息技术(综合练习)历年真题摘选带答案(5卷单选题百道集合)
- 2025年综合类-中医临床三基(护士)-妇产科护理历年真题摘选带答案(5套单选100题合辑)
- 2025年综合类-专业综合第十二章其他-中国邮政储蓄银行理财考试历年真题摘选带答案(5卷单选题百道集合)
- 宁波特种车辆管理办法
- 安徽电网安全管理办法
- 安全服务存储管理办法
- 地产全套资料管理办法
- 天津机场考勤管理办法
- 学生健康安全管理办法
- 大型水库库区管理办法
- 体外冲击波碎石
- AEO贸易安全培训
- 科研办公楼建筑设计与规划方案
- 甘肃省安全员《B证》考试题库及答案
- 数据结构C语言版(第2版)严蔚敏人民邮电出版社课后习题答案
- 依诺肝素钠课件
- 教育培训机构佣金分配方法
- GB/T 23444-2024金属及金属复合材料吊顶板
- 安全文明施工检查考核奖惩制度(4篇)
- 医务人员职业道德培训课件
- 汽车维修安全生产培训考核试卷
评论
0/150
提交评论