收藏 分销(赏)

JAVA169泡泡堂网络游戏的设计.doc

上传人:xrp****65 文档编号:7059864 上传时间:2024-12-25 格式:DOC 页数:21 大小:270.50KB 下载积分:10 金币
下载 相关 举报
JAVA169泡泡堂网络游戏的设计.doc_第1页
第1页 / 共21页
JAVA169泡泡堂网络游戏的设计.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
JAVA169泡泡堂网络游戏的设计 <P>3&nbsp;需求分析<BR>本设计主要是实现一个类似于“泡泡堂”功能的网络游戏。其操作流程及其主要功能如下介绍<BR>3.1&nbsp;游戏的操作流程<BR>游戏的操作类似于网络游戏QQ堂。其操作流程如图1所示。<BR>图1 游戏操作流程<BR>1. 首先要先运行服务器端,来处理各个客户端发来的请求。<BR>2. 玩家运行客户端,首先展现一个版权声明的界面,因为游戏中的图片来源于腾迅公司的QQ堂游戏,图片的版权归腾迅公司所有。<BR>3. 几秒后自动跳到登录界面。在这里输入用户名称,密码。因系统中没有对数据库进行操作,并没有保存用户的相关信息,所以没有注册的功能,也没有对密码的正确与否进行验证。输入密码后点击登录进入游戏大厅,退出则关闭程序。<BR>4. 进入大厅后,用户可以选择自己的角色,蓝队或者红队,并可以进行聊天对话。点击准备时将进入准备状态。当所有用户都进入准备状态,游戏自动进入对战场地进行对战游戏。<BR>5. 在对战时,玩家可以用方向键盘控制人物的移动,人物只能在空地中移动,当遇到“箱子”时,可以使用“空格键”放置“泡泡”,利用“泡泡”的爆炸的威力去破坏周围的障碍物(“仙人掌”不能被破坏掉)。同时可以一连串放置多个“泡泡”,放置“泡泡”后,“泡泡”将持续几秒钟才会爆炸,在这段时间玩家可以放置更多的“泡泡”来攻击对手,在运动过程中还要及时躲开“泡泡”的爆炸区域。当玩家被“泡泡”炸中,则该玩家的生命将结束,不能继续进行游戏<BR>6. 当有一个队中的所有玩家都死掉,则该队挑战失败,对方获胜。</P> <P>3.2&nbsp;应该解决的问题<BR>本程序需要解决的主要问题:<BR>1.&nbsp;游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。<BR>2.&nbsp;网络计算机之间的数据通讯:用socket进行编程,同时由于对人同时游戏,要尽量减少网络数据的传输量,提高传输效率,防止堵塞。<BR>3.&nbsp;算法的设计:算法是游戏的核心,要设计很好的算法,提高游戏运行的效率,运行速度要高,并且资源占用的要少。<BR>4.&nbsp;线程的控制:由于涉及到对个玩家,并且要即时的将数据进行网络传输,因此可以用多个线程来并发执行这些操作。线程之间的同步和调度上要很好的控制。<BR>5.&nbsp;双缓存:在图片之间相互调用转换时,图像的画面要流畅,不能有停顿和闪烁<BR>6.&nbsp;游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,这里使用了QQ堂游戏里的一些截图来美化界面,同时对解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。<BR>以上相关技术细节和整体流程将分别在以下小节阐述。<BR>4&nbsp;系统设计<BR>本游戏开发采用C/S结构,分为服务器端和客户端两部分。<BR>4.1&nbsp;处理流程<BR>服务器端主要处理各个客户端发过来的消息(Message),并根据消息的类型,对消息进行不同的处理,然后将处理后的消息转发或者直接转发消息到所有玩家。<BR>客户端则监听用户的输入动作,包括键盘和鼠标动作,对于不同的动作做不同的处理,并根据玩家动作的类型,把所有信息封装为一个消息的实体(Message),然后发到服务器端。同时要监听服务器端的回复过来的消息当收到一个新的消息,将对消息进行解析,根据消息的类型作不同的处理,从而改变游戏场景或者状态等。处理流程如图2所示。</P> <P><BR>泡泡堂网络游戏的设计与实现<BR>摘&nbsp; 要<BR>网络游戏开发是一项很大的工程,需要很多综合性的知识。这对于刚刚入门的开发者来说很难理解。本论文从研究开发一个模仿泡泡堂网络游戏的例子出发,讲述网络游戏开发中用到的一些最基本的知识和设计思想,使大家清晰的理解游戏开发的过程。<BR>整个设计中利用java中的swing编程,结合游戏的操作流程,对整个游戏进行精心的设计和大量的测试,实现游戏软件服务器端和客户端的开发,为玩家提供一个友好美观的操作界面,并添加聊天等功能以增加玩家之间的互动性,此外实现了可编辑场景地图的功能,使得游戏内容的更加丰富,玩家交互性更好,确保了游戏更具有趣味性、灵活性,以满足玩家对这款网络游戏的要求。</P> <P>关键词:消息传输;java-swing;网络游戏;线程;场景<BR></P> </p> 摘要:比较教学法是教学中突破重点难点的有效方法。本文介绍了作者在Delphi多态性教学中运用比较教学法解析覆盖、重载和隐藏等难点概念的教学实践。<br>  关键词:比较教学法;多态性;覆盖;重载;隐藏;Delphi<br>      <br>  1引言<br>  <br>  多态性(Polymorphism)是面向对象程序设计(OOP)的三大支柱之一。在各种OOP语言的多态性教学中,覆盖、重载和隐藏等概念历来是教学难点。已有的教学实践证明,比较教学法是各学科教学中突破重点难点的有效方法 [1]。本文就Delphi多态性教学中运用比较教学法解析难点概念作概要讨论。<br>  <br>  2多态性教学中的难点概念分析及解决方案<br>  <br>  多态性教学中涉及的概念和术语较多,其中学生最感困难者当属覆盖、重载和隐藏。这些概念之所以成为教学难点,主要有以下原因:<br>  (1) 概念本身的复杂性和表观相似性。<br>  (2) 许多教科书对上述概念的解释混乱甚至误用。<br>  (3) 教学中对上述概念先修知识准备不足。这些知识包括继承性、对象的声明类型与实际类型、向上转型(upcasting)、方法的绑定方式、基于绑定机制的方法分类等。<br>  比较教学法的主要形式包括对比、类比、横比和纵比等,笔者在教学中主要采用对比法对上述难点概念进行解析。对比法是揭示比较对象形同质异的思维方法,在对比中发现个性。由于比较对象外部特征相同或相似,往往对人造成直接的迷惑性,容易使人产生主观臆断或机械式认同[1]。易混事物的比较是对比法的重点内容,析其同(似),找出它们容易被混淆的原因;求其异,通过特征对比挖掘事物的本质属性[2]。<br>  <br>  3覆盖与重载的比较<br>  <br>  覆盖(Override)与重载(Overload)是两个完全不同的概念。这是初学者最容易混淆的两个概念,也是许多教科书和文献中使用比较混乱甚至误用的概念。<br>  重载(Overload)的原意是指在同一范围内可以使用同一名称声明多个过程或函数,它们含有不同的参数列表(同名异参)。与Java和C++等语言不同,Delphi提供了专门的指令字overload用于重载。方法的本质是在类中声明的过程或函数,因此也可以重载。Delphi的方法重载不限于在本类内声明的方法,在派生类中亦可用overload指令字声明与基类中同名的方法。<br>  覆盖(Override)一个方法意味着在派生类中对基类方法进行扩展或改进,相当于“推翻”了基类方法的原有定义(实现部分),而采用派生类自己的方法定义。通过覆盖可以使一个方法在不同派生类之间表现出不同的行为,从而实现多态。覆盖一个方法时并未生成新的方法,只是修改了基类方法的原有定义[3,4]。<br>  覆盖与重载容易被混淆的原因:二者英文拼写相似;教科书中译名和解释混乱;它们均涉及基类和派生类中的同名方法;均可使同名方法表现出不同行为。<br>  以上述原因分析为基础,在教学中通过特征对比,揭示二者的本质区别(见表1)。<br>  <br>  从表1可以看出,在Delphi中,覆盖和重载分别使用专门的指令字(这一点与C++和Java不同),并且具有不同的参数规则,通过这两个外显特征不难将二者区分开来。然而,初学者常感困惑的问题不在于此,而是它们的内隐特征,后者并未直观地显现在代码中。这些内隐特征属于系统的内部机制,其中最重要的是绑定方式,它决定了多态性的实现机制。笔者在教学中分别设计了代码相似但本质不同的示例程序,让学生分析代码并观察运行结果,通过对比找出它们的内隐特征,进而掌握覆盖和重载的本质区别及其用途。<br>  <br>  4覆盖与隐藏的比较<br>  <br>  隐藏(Hide)机制与传统编程中局部变量对同名全局变量的遮蔽(Shadowing)效应很相像。在Delphi中,如果在派生类中声明的方法与基类中的方法名称相同,并且未使用特殊指令字,则系统将启动隐藏机制[3,4],即隐藏从基类继承的同名方法,并用派生类中新声明的方法代替它。在其他语言中也存在隐藏机制[5,6],只是实现的细节略有差异。例如,C#中的new关键字不仅可用于为变量(指针)分配内存,还可以在派生类的方法声明中使用,以实现隐藏机制[6]。<br>  覆盖与隐藏容易被混淆的原因如下:教科书中涉及甚少或解释混乱;它们均涉及基类和派生类中的同名方法;均可作用于虚方法和动态方法。<br>  在Delphi中,方法覆盖必须使用指令字override,它是区分覆盖和隐藏的重要标志,这一点与C#相同[6]。如果在派生类中声明的方法与基类的虚方法或动态方法同名同参,但不含override指令字,则新的声明只是隐藏继承的方法而不覆盖它。在派生类中,方法名是静态(早期)绑定的,方法的调用取决于对象变量的声明类型而不是实际类型,其效果类似于静态方法的重新声明。教学中通过对覆盖和隐藏的对比,可以引导学生透过现象认识其本质,消除认识误区(见表2)。<br>  <br>  5重载与隐藏的比较<br>  <br>  Delphi中的方法重载必须遵守两个基本规则:①使用overload指令字;②方法同名异参;二者缺一不可。这是区分重载与隐藏的主要标志。<br>  如果在派生类中声明了与基类中同名异参的方法,但未使用overload指令字,则继承于基类的同名方法将被隐藏;此时声明类型为派生类的对象已不能直接调用继承的基类同名方法,无法实现重载。<br>  如果使用了overload指令字,而派生类与基类中的方法同名同参,尽管编译时仍可通过,但这样做没有意义,实际效果与方法的隐藏相同。此时声明类型为派生类的对象仍然不能直接调用继承于基类的同名方法,并未实现真正意义上的重载。<br>  重载与隐藏容易被混淆的原因如下:二者均涉及基类和派生类中的同名异参方法;它们均可作用于静态方法、虚方法和动态方法;均采用早期绑定;用于虚方法和动态方法时均使用附加指令字reintroduce,以避开编译器警告。<br>  由于二者相似点较多,因此笔者在教学中运用对比法在形似中求质异,强调其本质区别(见表3)。<br>  <br>  6结束语<br>  <br>  覆盖、重载和隐藏是多态性教学中的重点和难点概念,笔者在教学过程中不仅将比较教学法应用于这些概念的理论辨析,而且配以形似质异的典型示例程序强化比较教学法的实施效果。因篇幅所限,未将程序示例纳入本文。尽管比较教学法的适用范围较广,但要注意避免滥用,应当根据教学目标的要求,遵循3W原则:明确比较的目的(Why),选准适于比较的内容(What),采用恰当的比较方式(How);如此方可充分发挥比较教学法的优势,收到事半功倍之效。 <br>  <br>  参考文献<br>  [1] 赵晓东. 比较教学法与工程机械教学[J]. 中国职业技术教育,2006,(19): 47-48.<br>  [2] 李运模. 比较教学法论略[J]. 中南民族学院学报(人文社会科学版),2000,20(3):125-127.<br>  [3] Marco Cantù. Mastering Borland Delphi 2005[M]. USA: SYBEX Inc., 2005.<br>  [4] 刘艺. Delphi面向对象编程思想[M]. 北京:机械工业出版社,2003.<br>  [5] Bruce Eckel. Thinking in C++, 2nd Ed., Volume 1[M]. USA: Prentice Hall PTR, 2000.<br>  [6] Andrew Troelsen. Pro C# 2008 and the .NET 3.5 Platform, 4th Ed[M]. USA: Apress, 2007.<br>  <br>  Application of Comparative Teaching Method in Difficult Concepts Teaching of Polymorphism in Delphi<br>  QI Lai-bin, FENG Xi-ye, JIANG Hai-yan, DU Lin<br>  (Dept. o f Computer Science and Technology, Shandong Institute of Education, Jinan 250013, China)<br>  Abstract:Comparative teaching method is the effective method to surmount emphases and difficulties in teaching. This paper introduced the teaching practice of authors utilizing comparative teaching method to resolve difficult concepts that include override, overload and hide.<br>  Key word:comparative teaching method; polymorphism; override; overload; hide; Delphi<br> </p> <p> </p> <p> </p> 数学课堂教学实质上就是师生公共设疑、质疑、释疑的进程,是以效果处置为中心展开的。爱因斯坦曾经说过:“提出一个效果往往比处置一个效果更重要,由于处置效果也许是一个数学上或实际上的技艺而已,而提出新的效果,新的能够性,重新的角度去看效果都需求有发明性的想象力。”美国数学家哈尔莫斯也说过:“数学的真正组成局部是效果和解,效果才是数学的心脏。”<br>  数学教员,在课堂教学中不能只让学生机械地接受定义、公式、定理,而应引导学生积极自动地探求知识,培育学生的创新素质。数学课堂教学是思想活动的教学,而思想是指向处置某个效果。数学的效果是数学开展的动力,没有效果就不会有思想活动,就没有发明。从这个意义下去说,学生学习的基本缘由是效果,效果是开展学生数学认知结构,培育学生创新思想质量的逻辑力气。因此,增强数学课堂的革新,巧设“效果”,把效果作为主要贯彻于课堂教学中,是改动传统的数学课堂教学,促使学生由主动探求向自动探求转变的一条有效方法。好的效果能引导学生获取知识、提高才干、积极思想、探求处置效果的途径。我就怎样在初中数学课堂教学中停止“效果设计”谈几点看法。<br>  一、擅长创设效果情境,激起求知愿望<br>  研讨始于效果,效果发生于情境,所以设计一个好的效果情境是能否激起学生探求兴味和明白探求方向和目的的首要效果。情形应是学生熟习的,最好是理想的,真实可信的,并从情形中能提出能惹起学生求知欲的,且能指向目的的,明白的效果。下面我结合梯形中位线教学,谈谈如何停止“效果设计”,再以效果处置为形式,展开探求学习活动。<br>  1.效果情境,激起学习兴味,培育思想指向性。<br>  关于创设什么样的效果情形,不同窗科不同课题有不同的处置方式,如:在探求梯形中位线的性质时,教员可先向学生展现:梯子模型(如图1),并提出效果。<br>  效果1:试猜想中间横格BB′与上下两个横格AA′、CC′的位置关系与数量关系。学生经过直观的观察,轻易猜想出位置关系是平行的,而数量关系则有的以为是CC′的二分之一,有的以为是AA′—CC′…这就发生了与原有的认知水平矛盾的现象,激起了学生探求效果的兴味。<br>  2.应用中继效果,展开探求活动,培育思想发明性。<br>  效果2:在平行四边形ABCD中,过AC的中点O任作不时线EF与AD、BC相交,交点区分为E、F(如图2)。<br>  ①OE与OF、AE与CF的大小关系怎样?为什么?<br>  ②取AB中点M,连结MO,试说明MO与BC的位置关系与数量关系。<br>  ③探求梯形ABFE的中位线MO与两底AE、BF的位置关系与数量关系。<br>  引导学生得出结论:梯形中位线平行于两底且等于两底和的一半。<br>  效果3:如何将梯形中位线MN转化为三角形的中位线?<br>  由于这是有关“中点效果”,结合学生原有的认知结构的“倍长中线”思想,学生能看法到MN与以A、B为顶点,一边在BC上的三角形的中位线重合,因此失掉“连结AN并延伸交BC的延伸线于点E”的方法(如图4)。<br>  3.优化认知结构,培育综合才干。<br>  效果4:如图5的模型中,若AA′=20cm,EE′=40cm,则BB′、CC′、DD′的长区分是多少?若已知BB′=2,CC′=3呢?若已知其中二条横格长呢?怎样求其他横格的长?<br>  效果5:梯形ABCD中(如图6),AD∥BC,AM=BM,DN=CN,则EF与AD、BC存在怎样的数量关系?并说明理由。<br>  学生经过上述效果的解答,不只处置了本课末尾提出的初始效果,再次品味了成功的喜悦,而且进一步深化了对结论的了解与看法。教员可应用运动的观念向学生提醒梯形中位线与三角形中位线之间的特殊 与普通,质变与质变的关系(如图7),使学生能将新的知识“异化”到原有知识的结构中,从而构建新的认知结构。<br>  二、巧设递进效果,激活创新思想<br>  效果的设计要依照课程的逻辑顺序,思考 学生的认知顺序。由于学生的思想一直和一定的效果联络着,只要让学生的思想在效果的坡度上步步降低,最终才干抵达“能自己跳起来摘果子”的理想境界。假设前后颠倒,信口提问,只会扰乱学生的思想顺序。所以教员要依据课堂教学的需求,设计目的性明白、很有艺术性的提问,设问梯度由易到难,由表及里,启示和引导学生积极思考 效果,逐渐向深层开掘,把学生的思想一步一个台阶引向求知的新高度。<br>  1.设计概念型递进效果。<br>  概念是反映对象实质属性的一种思想方式,深入了解概念才干灵敏运用。概念型递进效果诱使学生在效果看法驱动下,发生积极的探求趋向,在感受知识创新的进程中加深对概念的看法。<br>  如教学正方形时,我们可以设计下面一组递进效果,让学生自主探求。<br>  (1)四边形ABCD在时为平行四边形?<br>  (2)平行四边形ABCD在时为矩形?在时为菱形?<br>  (3)四边形ABCD在时为矩形?在时为菱形?<br>  (4)矩形ABCD在时为正方形?菱形在时为正方形?<br>  (5)平行四边形ABCD在时为正方形?<br>  (6)四边形ABCD在时为正方形?<br>  从图形最低形状末尾,每层递进,提出一个新效果,引导学生跳出狭窄的单向思想,从边、角、对角线等不同角度,全方位探求满足新的特殊 四边形的条件,直到最后,水到渠成,整个学习进程成为再发现、再发明的进程,让学生的思想开展有一个墨守成规、逐渐深化的进程,契合学生的认知规律,使学生能轻松愉快地取得知识,开展潜力。<br>  2.设计解题型递进效果。<br>  教材中典型例、习题包括着丰厚的潜在教育功用,教学时,教员应从稳固双基,开展才干入手,设计与例、习题相关的递进效果,引导学生探求解法,发现规律,养成发明性思想的习气,学会学习的身手。如温习二次函数性质时,教员可设计一组递进效果,让学生自主探求:<br>  已知抛物线经过点(-1,6),(0,2),(3,2),<br>  (3)在平面直角坐标系中画出这个二次函数的草图。<br>  (5)这条抛物线能否经过点(8,42)?<br>  在效果的开展和处置中体验成功,愉悦学习,完成思想创新。<br>  3.设计探求型递进效果。<br>  探求效果特点鲜明,方式新奇 ,思考 方位不定,综合性、逻辑性较强。在教学中,教员从学生熟知效果动身,设计一些富有探求性递进效果,引导学生独立研讨,积极探求,寻觅联络,尝试猜想,合实际证,是培育学生发明思想的重要途径。<br>  如下面的效果:正方形ABCD的边长为3,连结对角线AC。<br>  (1)操作:将一把三角尺的直角顶点P放在对角线AC上滑动,且使一条直角边过点B,另一条直角边与边DC相交,设交点为M,请选择运动进程中的三个瞬间,区分量取PB和PM的长,并把结果填入下表。<br>  (2)观察实验结果,说出你猜想的结论。<br>  (3)如何证实 你的猜想呢?说说你的证实 思绪。<br>  学生1:我的猜想是PM=PB。<br>  学生2:我经过画图测量,两次失掉PM=PB,一次测得PM和PB不等,但很接近,因此我猜想PM=PB。<br>  学生3:我猜想PM=PB。由于当把P点运动到A点这个特殊 的位置上时,PB就是AB,PM就是AD,显然有PM=PB。<br>  我一定了学生猜想的合理性,同时指出猜想并不能同等正确的结论,还必需经过严厉的论证。我给出了不同的证实 思绪。我进一步要求学生一同往返 忆这个效果的探求进程。<br>  学生1:解题的步骤是,先画图、测量,比拟测量结果;再猜想;最后停止证实 。<br>  学生2:作一点补充。猜想时,除了画图测量外,还应寻觅一个特殊 情形,以“果断”我们的猜想。<br>  教员:讲得十分好。特殊 提到如何去停止猜想:①依据测量的结果;②应用特殊 情形下的结果。<br>  我依据自身的教学实际,把探求的步骤归结为实验—猜想—论证。这是一种重要的探求效果的方式。教员应顺应学生求奇之好,鼓舞打破惯例思想,直觉观察,轻松探求,大胆猜想,指点学生恢复直觉发生的思想进程,补上被繁复的环节,完成认知与思想质量开展的谐和一致,学会发明性学习。<br>  总之,教员在停止课堂教学时应站在学生的角度来优化教学进程,充沛思考 学情,恰当准确迷信地设计效果,才干使得教员的授课有章可循,有理可依。效果的设计,不只仅是实际与教学的结合,还是一门实际与方法融汇的迷信艺术。教员只要巧妙合理地设计教学中的效果,才干充沛调动学生自学的积极性,才干有针对性地处置学生能够出现的困难,才干真正地提高课堂教学的有效性。<br> </p> <p> </p> <p> <br /> </p> <p> </p> 基于VC的语音传输系统的设计与开发<BR>摘&nbsp;&nbsp;&nbsp; 要<BR>随着计算机应用技术的快速发展和日益普及,网络也遍及到我们生活的每个角落,为我们的学习和工作带来极大的方便。很多人都使用过传统的文字输入聊天方式,与之不同的另外一种聊天方式就是语音聊天。主要对那些不会使用键盘的老年用户和追求时尚的年轻人,语音聊天是一种非常好的聊天方式,它能增加聊天双方的亲切感和真实感,语音聊天就涉及到语音的传输。<BR>本系统主要讨论了Windows系统下网络语音的传输,尤其是对网络编程做了较深入的学习和应用,并以语音聊天为例给出了应用实例。本系统主要利用Windows系统下的API函数和SOCKET函数以及VC开发平台的强大功能来实现。经过半年多的努力,终于完成了语音传输系统的需求分析、模块功能划分、多媒体编程、服务器-客户端模型等。本系统可以实现网络间文字、语音信息的传输。<BR>关键词 信息传输;网络编程;语音传输;多媒体<BR>3.3&nbsp;Windows程序设计基础<BR>3.3.1&nbsp;概述<BR>Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。程序中只要按一定的格式填写系统留给客户的那一小部分。<BR>所需要完成的有:窗口类的定义、窗口的建立、消息函数的书写、消息循环。<BR>3.3.2&nbsp;消息处理函数<BR>Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。每个窗口都有一个消息处理函数。<BR>  在消息处理函数中,对传入的消息进行处理。系统内还有它自己的缺省消息处理函数。<BR>  客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。这样,每当有消息产生时,就会去调用这个消息处理函数。<BR>通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。<BR>&nbsp;&nbsp;&nbsp; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)<BR>&nbsp;&nbsp;&nbsp; {<BR>switch (message)<BR>&nbsp;{<BR>case ...<BR>...<BR>&nbsp;case ...<BR>...<BR>&nbsp;<BR>}<BR>return DefWindowProc (hwnd, message, wParam, lParam) ;<BR>&nbsp;}<BR>3.3.3&nbsp;窗口的建立<BR>客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。<BR>1.注册窗口类<BR>建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:菜单、图标等等。<BR>&nbsp;这个属性指定步骤是通过指定"窗口类"来完成的。<BR>  对于自己建立的窗口,这个"窗口类"需要自己制定,也即自己充一个WNDCLASS结构,然后向系统注册。<BR>对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。<BR>2.建立窗口<BR>建立窗口时,注册的"窗口类"名称作为参数传入。<BR>这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。<BR>在应用程序中使用对话框是很方便的,因为对话框可以从模板创建,而模板可以使用可视化资源编译器进行编译,这就大大简化了窗口界面的设计过程。同时为了简化程序设计,Windows在内部也定义了许多窗口类,即常说的字窗口控件,应用程序直接使用这些类名就可以创建子窗口。<BR>同子窗口控件类似,对话框的窗口函数也由User32.dll提供,所以在创建对话框之前不需要注册窗口类。在创建对话框时并不需要调用CreateWindowEx函数,而是调用了DialogBoxParam或CreateDialogBox函数。前一个函数用来创建模式对话框,后一个函数用来创建非模式对话框,它们都在内部调用了CreateWindowEx函数,使用的风格、大小和位置等参数取自资源中定义的对话框模板。<BR>要创建对话框就要先创建对话框模板。对话框模板定义了对话框的基本属性,这包括该对话框的宽度和高度及其中包含的控件。创建对话框模板最简单的方法是使用VC自带的资源编译器,使用VC++的“Insert/Resource”菜单命令,可以非常方便地向工程中加入对话框资源。<BR>3.3.4&nbsp;消息循环<BR>另外,也存在一些不常用的套接字类型,如原始套接字(raw socket)等。<BR>因为Winsock要兼容几个协议,所以必须使用通用的寻址方式。TCP/IP使用IP地址和端口号来指定一个地址,但是其他协议也许采用不同的形式。如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能。Winsock的第一个版本使用sockaddr结构来解决此问题。<BR>Struct sockaddr<BR>{&nbsp;&nbsp; u_short&nbsp;&nbsp;&nbsp; sa_family;<BR>&nbsp;&nbsp;&nbsp; Char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sa_data[14];<BR>};<BR>如果仅仅使用互联网地址家族(TCP/IP),Winsock已经定义了sockaddr结构的TCP/IP版本——sockaddr_in结构。它们本质上是相同的结构,但是第2个更容易操作。<BR>Struct&nbsp; sockaddr_in{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short&nbsp;&nbsp;&nbsp; sin_family;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 地址家族<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; U_short sin_port;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 端口号<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struct&nbsp;&nbsp; in_addr sin_addr;&nbsp; //IP地址<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Char&nbsp; sin_zero[8];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //空字节,要设为0<BR>&nbsp; };<BR>Sin_addr是IP地址(32位),他被定义为一个联合来处理整个32位的值,两个16位部分或者每个字节单独分开。描述32位IP地址的in_addr结构定义如下。<BR>Struct in_addr{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Union{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struct{u_char s_b1,s_b2,s_b3.s_b4;}S_un_b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struct{u_short s_w1.s_w2;}s_un_w; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; U_long s_addr;<BR>}s_un;<BR>};<BR>使用winsock编程的一般步骤是比较固定的,如下:<BR>1 winsock库的装入、初始化和释放<BR>2套接字的创建和关闭<BR>3绑定套接字到指定的IP地址和端口号<BR>4设置套接字进入监听状态<BR>5接受连接请求<BR>6收发数据<BR>4.3&nbsp;服务器程序和客户程序创建过程<BR>在现在的软件开发中,软件开发环境越来越多地涉及了网络环境以及网络下的C/S(Client/Server)模式。<BR>C/S模式,即客户机/服务器模式兴起于20世纪90年代初,到90年代中期达到鼎盛时期。C/S模式是第一个应用于网络的模式,它在拥有友好的用户界面的基础上,利用分布技术成功地提高了执行效率和系统容量,从而得到了广泛的应用。<BR>C/S模式的基本思想是把原先集中在一起的应用划分为功能不同的两个部分,一个成为服务器软件,用来响应和提供固定的服务;另一个被称为客户机软件,用来向服务器端提请和要求某种服务。运行服务器软件的计算机被简称为服务器,而运行客户机软件的计算机被成为客户机,从这个意义上来说,客户机和服务器都是软件意义上的概念,同时也是相对的概念。例如,一台计算机运行了某个网络应用的服务器软件,它就成为这个应用的服务器;如果同时它还在运行另外一个软件的客户机程序,则它同时又是另外一个应用的客户机。不过,因为服务器通常被设计为可以响应多台客户机的请求,所以一般都工作在性能较强、配置较高的计算机上。<BR>服务器方创建监听套接字,并为他关联一个本地地址(指定IP地址和端口号)。然后进入监听状态准备接收客户的连接请求。为了接受客户的连接请求,服务器必须调用accept函数。<BR>客户方创建套接字后即可调用connect函数去试图连接服务器监听套接字。当服务起方接受函数返回后。连接函数也返回。此时客户方使用socket函数创建套接字,服务器使用accept函数创建的套接字,双方就可以进行相互间的通信了。<BR>基本的音频数字化处理包括以下几种。<BR>1、不同采样率、频率、通道数之间的变换和转换。其中变换只是将其视为另外一种格式,而转换通过重新采样来进行,其中还可以根据需要采用插值算法以补偿失真。<BR>2、针对音频数据本身进行的各种变换,如淡入、淡出、音量调节等。<BR>3、通过数字滤波算法进行的变换,如高通、低通滤波器。<BR>但是最基本、最常用的还是声音的录制和播放。作为一个语音传输软件,声音的录制、保存、传输和播放都是必不可少的,也是最重要的一环。本软件需要语音输入、输出功能。这些技术的实现借助了Windows系统提供的底层音频API。<BR>MIDI的意思是乐器数字接口(Musical Instrument Digital Interface),它在微软公司开发Windows系统以前就有的一个用于电子键盘的标准。MIDI定义了一个传输和存储音乐信息的协议。它在多媒体音频中占有重要的位置,是播放和录制音乐的国际标准,它确定了连接音乐设备的电缆线、硬件和通信协议。<BR>下边将介绍程序的具体实现。<BR>对于录入和播放的声音存储时必须以特定的格式才可以,本软件的格式定义如下:<BR>&nbsp;m_soundFormat.wFormatTag=WAVE_FORMAT_PCM;<BR>&nbsp;m_soundFormat.nChannels=1;<BR>&nbsp;m_soundFormat.nSamplesPerSec=8000;<BR>&nbsp;m_soundFormat.nAvgBytesPerSec=16000;<BR>&n
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服