网络游戏开发(网络版

上传人:自*** 文档编号:80690097 上传时间:2019-02-19 格式:DOC 页数:16 大小:548.30KB
返回 下载 相关 举报
网络游戏开发(网络版_第1页
第1页 / 共16页
网络游戏开发(网络版_第2页
第2页 / 共16页
网络游戏开发(网络版_第3页
第3页 / 共16页
网络游戏开发(网络版_第4页
第4页 / 共16页
网络游戏开发(网络版_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《网络游戏开发(网络版》由会员分享,可在线阅读,更多相关《网络游戏开发(网络版(16页珍藏版)》请在金锄头文库上搜索。

1、期末作业题目:实现扑克牌的联网游戏 课 程 名 称: 网络游戏开发 学 院:信息工程与自动化学院 专 业: 计算机科学与技术 班 级: 082 学 生 姓 名: 崔号 学 号: 200810405211 任 课 教 师: 欧阳鑫 日 期: 2011-12-28 一、扑克游戏设计介绍用C+实现斗地主游戏主要有三部分。第一部分是界面设计;第二部分是游戏内核(包括出牌大小、如何过牌、出牌等)设计;第三部分是网络部分。该游戏由3个人玩,用一副牌,地主为一方,其余两家为另一方,双方对战,先出完牌的一方获胜,出牌规则类似“争上游”。发牌:一副牌,留3张底牌,其它发给3家,底牌加到地主手中。叫牌:叫牌按出牌

2、顺序轮流开始叫牌,每人只能叫一次。叫牌的人为地主,如果都选择不叫,则重新发牌,重新叫地主。出牌:首先将3张底牌交给地主,3张底牌为可见。由地主开始出牌,然后按逆时针顺序依次出牌,轮到用户跟牌时,用户可按右下方“过牌”按钮表示不出,或者按照规则按“出牌”选择符合规则的牌,直至某一方出完牌为止。牌型说明:1.双王。2.炸弹(四张大小相同的牌)。3.单牌(单张牌)。4.双牌(两张大小相同的牌)。5.三张牌(三张大小相同的牌)。6.三带一手(三张大小相同的牌+1张单牌或一对牌)。7.单顺(5张或更多的连续单牌,不包括2点和双王,不分花色)。8.双顺(3对或更多的连续对牌(不包括2点和双王)。9.三顺(

3、两个或更多的连续“三张牌”,不包括2点和双王)。10.飞机带翅膀(3顺+同数量的一手牌)。11.四带二(4张牌+两手牌)。牌型比较:双王炸弹一般牌型(单牌,对牌,三张牌,三带一手,单顺,双顺,三顺,飞机带翅膀,四带二)。一般牌型:只有牌型且张数相同的牌才可按牌点数比较大小。其中三带一,三带二,飞机带翅膀,四带二组合牌型,比较其相同张数最多的牌点数大小。游戏术语:地主(叫的一方为地主,可获得底牌)。游戏规则:只能出大于上家的牌,没有则不出,直到一方出完,则游戏结束。二、 基于Socket的网络编程用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TC

4、P连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接。生成套接字,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Soc

5、ket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为Client Socket,另一个运行于服务器端,称之为Server Socket。根据连接启动

6、的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了

7、。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。Socket编程实现原理(从连接的建立到连接的关闭,每个socket应用都大致包括以下几个基本步骤):1 .服务器端socket绑定于特定端口,服务器侦听socket等待连接请求;2 .客户端向服务器和特定端口提交连接请求;3 .服务器接受连接,产生一新的socket,绑定到另一端口,由此socket来处理和客户端的交互,服务器继续侦听原socket来接受其他客户端的连接请求;4 .连接成功后客户端也产生一socket,并通过它来与服务器端通讯(注意客户端socket并不与特定端口绑定)。5 .接下来,服务器端和客户端就通

8、过读取和写入各自的socket来进行通讯。三、程序总体分析游戏核心网络游戏界面把程序分为3部分。第一部分是界面;第二部分是游戏内核,用来计算是否可以出牌,由谁出牌,比较所出牌的大小,游戏是否结束等;第三部分是网络部分。图3-1 游戏交互图在网络部分,主机和客户机的区别是参数bool m_Isserver,参数bool m_ready3用来记录3个玩家是否准备就绪。Bool m_ready3这个参数中有在服务器上才有存在的意义,因为只有服务器才能开始游戏。服务器的玩家是0号,依次加入的分别为1号和2号。 在游戏核心Manager中,Card PlayCards320记录的是3个玩家的牌,会不断地

9、更新。CardOutCards20记录的是已经出掉的牌,一次最多出20张牌。Int OutPlayer表示走牌的玩家的号数,服务器是0号,后面加入的依次是1号,2号玩家。DoMsg(int num,int action)准备过牌/出牌/单击牌/放弃地主/接受地主退出游戏用户操作 点击则改变Click属性 Game_state=-1时选地主改变PlayMain,改变谁是地主PlayCardsxy.Click 点牌则改 -1Game_state红桃-梅花-方块的顺序摆放,每种花色都可以采用升序或者降序排列;而另一种方法就是把牌摆放成一个矩阵,而牌的排列顺序由数据结构中的纸牌类Card来决定。下面是

10、Card类函数声明:Class CardPublic;Card; Virtual Card(); int Num;/牌面数目 2-10 J=11,Q=12,K=13,A=1,Jok(小)=14,Jok(大)=15,大于15表示此牌不存在; int Pow;/牌的实际大小; int Type;/牌的类型,用0代表黑桃、1代表红桃、2代表梅花、3代表方块; Bool Click;/牌是否被选中,选中时true,否则为false;从上面的函数声明中看出,一张牌的大小、花色是由Num和Type决定(而大小王只需要Num),同时再按照Num和Type对应的数字进行整理,就可以把54张牌集中起来。因为函数

11、中定义的参数不多,而且也比较简单,所以采用按顺序排列的方式进行,而不是用矩阵的方式来排列。图片加载后,再来看看如何读取鼠标指针的坐标,对位置进行大致确定。而要完成位置的确定就需要确定鼠标位置的坐标,所以引入(point.x,point.y)来确定鼠标的坐标。而这又需要在CprogramView类中添加一个WM_MOUSEMOVE响应。void CProgramView:OnMouseMove(UNIT nFlags,CPoint point) /TODO:Add your message handler code here and/or call default/跟踪光标坐标int mx=po

12、int.x;int my=point.y;CString st;CDC *pDc=GetDc();St.Format(”%d,%d”,point.x,point.y);pDc-TextOut(400,5,st);ReleaseDc(pDc);CView:OnMouseMove(nFlags,point);4.2 BUTTON控件实现利用CButton的初始化函数来创建Button:BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT &rect,CWND*pParentWnd,UNIT nId)添加相关的消息响应函数:在游戏界面中需要

13、有确定、取消、出牌、过牌四个按钮来完成选地主、过牌等动作。BUTTON按钮的创建只需要在旁边的工具箱中进行简单的拖曳就可以了。所以在程序里用BUTTON控件来制作按钮,然后把按钮和函数进行关联就实现了上述四个不同的动作。下面分析四个按钮具体代码:确定按钮:void CProgramView:OnOK() if(manager.Game_State!=-2)return;/判断是否为主机if(!pControl-m_Isseverse) pControl-SendGetReady();/如果不是主机则发送“准备的消息”else pControl-m_ready1=true;/如果是主机则准备完毕/如果三个玩家都准备完毕后if(pControl-m_ready0&pControl-m_ready1&pControl-m_ready2) pControl-m_ready0=false; pControl-m_ready1=false; pControl-m_ready2=fals

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号