网络游戏开发(网络版

上传人:宝路 文档编号:21980616 上传时间:2017-11-25 格式:DOC 页数:16 大小:519.26KB
返回 下载 相关 举报
网络游戏开发(网络版_第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 对或

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

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

5、通信,实现数据传输的并发服务。Socket 可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入 Socket 中,该 Socket 将这段信息发送给另外一个 Socket 中,使这段信息能传送到其他程序中。Host A 上的程序 A 将一段信息写入 Socket 中,Socket 的内容被 Host A 的网络管理软件访问,并将这段信息通过 Host A 的网络接口卡发送到 Host B,Host B 的网络接口卡接收到这段信息后,传送给 Host B 的网络管理软件,网络管理软件将这段信息保存在 Host B 的 Socket 中,然后程序 B 才能在Socket 中阅读这段

6、信息。要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为 Client Socket,另一个运行于服务器端,称之为 Server Socket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认:是指当

7、服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。Socket 编程实现原理(从连接的建立到连接的关闭,每个 socket 应用都大致包括以下几个基本步骤):1 .服务器端 socket 绑定于特定端口,服务器侦听 socket 等待连接请求;2 .客户端向服务器和特定端口提交连接请求;3 .服务器接受连接,产生一新的 socket,绑定到另一端口,由此 socket来处理和客户端的交互,服务器继续侦

8、听原 socket 来接受其他客户端的连接请求;4 .连接成功后客户端也产生一 socket,并通过它来与服务器端通讯(注意客户端 socket 并不与特定端口绑定) 。5 .接下来,服务器端和客户端就通过读取和写入各自的 socket 来进行通讯。三、程序总体分析把程序分为 3 部分。第一部分是界面;第二部分是游戏内核,用来计算是否可以出牌,由谁出牌,比较所出牌的大小,游戏是否结束等;第三部分是网络部分。图 3-1 游戏交互图在网络部分,主机和客户机的区别是参数 bool m_Isserver,参数 bool m_ready3用来记录 3 个玩家是否准备就绪。Bool m_ready3这个参

9、数中有在服务器上才有存在的意义,因为只有服务器才能开始游戏。服务器的玩家是 0号,依次加入的分别为 1 号和 2 号。游戏界面 网络游戏核心 在游戏核心 Manager 中,Card PlayCards320记录的是 3 个玩家的牌,会不断地更新。CardOutCards20记录的是已经出掉的牌,一次最多出 20 张牌。Int OutPlayer 表示走牌的玩家的号数,服务器是 0 号,后面加入的依次是 1号,2 号玩家。 点击则改变 Click 属性 Game_state=-1 时选地主点牌则改 -1红桃- 梅花-方块的顺序摆放,每种花色都可以采用升序或者降序排列;而另一种方法就是把牌摆放成

10、一个矩阵,而牌的排列顺序由数据结构中的纸牌类 Card 来决定。下面是 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 决定(而大小王只

11、需要 Num) ,同时再按照 Num 和 Type 对应的数字进行整理,就可以把 54 张牌集中起来。因为函数中定义的参数不多,而且也比较简单,所以采用按顺序排列的方式进行,而不是用矩阵的方式来排列。图片加载后,再来看看如何读取鼠标指针的坐标,对位置进行大致确定。而要完成位置的确定就需要确定鼠标位置的坐标,所以引入(point.x,point.y)来确定鼠标的坐标。而这又需要在 CprogramView 类中添加一个 WM_MOUSEMOVE 响应。void CProgramView:OnMouseMove(UNIT nFlags,CPoint point)/TODO:Add your mes

12、sage handler code here and/or call default/跟踪光标坐标int mx=point.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 dw

13、Style,const RECT &rect,CWND*pParentWnd,UNIT nId)添加相关的消息响应函数:在游戏界面中需要有确定、取消、出牌、过牌四个按钮来完成选地主、过牌等动作。BUTTON 按钮的创建只需要在旁边的工具箱中进行简单的拖曳就可以了。所以在程序里用BUTTON 控件来制作按钮,然后把按钮和函数进行关联就实现了上述四个不同的动作。下面分析四个按钮具体代码:确定按钮:void CProgramView:OnOK()if(manager.Game_State!=-2)return;/判断是否为主机if(!pControl-m_Isseverse)pControl-Sen

14、dGetReady();/如果不是主机则发送“准备的消息”elsepControl-m_ready1=true;/如果是主机则准备完毕/如果三个玩家都准备完毕后if(pControl-m_ready0&pControl-m_ready1&pControl-m_ready2)pControl-m_ready0=false; pControl-m_ready1=false;pControl-m_ready2=false;manager.GameStart();/游戏开始pControl-StartCards();/发牌CDC *pDC=GetDC();ReleaseDC(pDC);取消按钮:voi

15、d CProgramView:OnCancel()Exit(0);/退出程序发牌按钮:void CProgramView:OnSendCard()if(manager.DoMsg(15,4)/如果 DoMsg 为 TRUE,则需要发生改变PrintAll();/重绘pControl-SendCards(manager.OutCards,4);/将玩家出牌信息发给其它玩家过牌按钮void CProgramView:OnPass()if(manager.DoMsg(16,3)/如果 DoMsg 为 TRUE,则需发生改变 PrintAll();/重绘pControl-SendCards(NULL,3);/将玩家出的牌发送给其它玩家,此时发送的是空信息LBUTTONDOWN 事件响应:if(mx=100&my=440&mx=100&my=440) i=SelectNum(i,mx,my);/判断点中的是第几张牌

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

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

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