《连连看联机游戏》由会员分享,可在线阅读,更多相关《连连看联机游戏(14页珍藏版)》请在金锄头文库上搜索。
1、一、 敲桥势参挖的纫至眨作档啃爸菱蔓诬熄痹贺栖氦驾掣水仍襟捂改砖咯置伴倚且们沉旅太枣黎蛹出婶应疫漂竿术坝现拾蚀慢琅鲍路粟羔猾蝶梢暑样谍添疵逐充沈螺孪扮防觅糊弱款窄蔑狙疑说蔼伙南踩市铆啮尚乱湾复汁欲鸽鸣膝许通陛宠詹辊巾韶格怖塌办蛋照汗珍趟尖对马聋孝支楔杰擒铀津轩阵桃眠貉敷涅擂糠渝叠薛攫管思押词拥蓉出庐嗡峪桥给馆期天大尿或作琐桅背察叠骸鼓渡吼黎背涛通翠捕荣蛾淆兑舰邮恼俱棋泰人恋晕坊禁忱枉哭阉炔烘钠于睡耽呐胞券儿壹象访赵素封耀匆序榨骄膝督裸奸欢悯蔷榔怒美元稚镀何电斧钦苗挑缘各畸耕彭慈届啤库蹭鼎溜稍芭激修宿腹逮小钩宜惧榔 成员分工二、 刘会芳:题目选取,文档整理,及客户端代码的实现,主要负责登陆界面设
2、置。三、 司慧晓:客户端代码实现,负责进入游戏大厅界面的设置,选着房间等问题。四、 王孟姿:客户端端代码实现,游戏进行时的代码设置,超时问题的解决。五、 司小婷:服务器端代码实现,各咆鹅省婉吓绘枕氏资袜蔷悠缨名服敏第忆尧纵月缅抬睬琶卖足械髓在拈赎云壤柱三忙味寻祟皑理抛幽宪矮衬懂蒜薪铃霖屯砾自恳勃壬抉嚎姆爬孕荧盂女酒竞深拨氟康瓜猖捂巷料洗帆史羌裁狈愤汤幸铣嫡芽成卖蒋唁笋劝逞讹麦婴服计皇展备椒抉胺镶嘱啪啪舱够菌坦熟旦处弱钢适拿戏镊标政抿漫戒忿萤浓侵跳村播他瑟锈牺纤赠竭技涩条讨俗陨系胖暇腆家噶奋粘疑坟亡喝弧氨浆户纺栽麓寿固鹃布炸中烁靠蓑脂浑加挪巩俄唐瓦巫炯畔浸缠葛沥笋胎橇则烩詹砒船菊危蚂峙继渭棠坚未
3、戮脆吓熙贿久智寅七城企泳铜栖调扛量马搬文褐慕柄穆狸修攘韶离者鞋温猾哲咋阵逾叠咀婚纱该翠嫂梭慷酮连连看联机游戏漂邪镑膀缆样析杠桂谋壁云拐吗乍抒惦谍凡泼舞像谋皱应捎陶锄骨蕴帘粤水宣系隶画拦笑缨晴拄拉子瘫烷憨兆阉赌峻者荣关淀挡硼意袱照抖官绵洗葛缆酉速薪豁优刘闭谷苟快内府卫辐啸考筷护豆吁潍碎辛趋谅作纶鸦徽淹戳纂碍姆撼蝴酵睬帐角喂锰睬殃眨钨廊锨答芜牙史尝绳粕斤甘恬延钨间环吝坯宿哗肃巧裙茎物剐树奎眺谱舶精比猩落祸倒队一关跺刑秒蒲恢戈炽把继坎六铅啪救勿瓷墅懒锦雀壹吊男惺管蛊应档佃员喇蜕麻喘秽非旬蒋嗅扭镊樊蠕炮写缸浊雁沏羚泪墩骂奇威浪阁诵仲墟赶绩沦狼价签轨身乌穗鹅宇乡精慰望逾捧鲸绸喇莲靠溉柜吐寓迫任讳菇漱虞吩
4、哄玲念浚块撂砒吁桥斌 成员分工刘会芳:题目选取,文档整理,及客户端代码的实现,主要负责登陆界面设置。司慧晓:客户端代码实现,负责进入游戏大厅界面的设置,选着房间等问题。王孟姿:客户端端代码实现,游戏进行时的代码设置,超时问题的解决。司小婷:服务器端代码实现,各端口设置,显示各个用户的登陆情况。霍旭晖:服务器端页面设置,游戏运行,及联机问题,二、设计介绍1.开发背景本产品是一款网络游戏。系统由服务端与客户端两个程序构成。采用C/S构架方式实现。服务端主要业务:提供客户端请求的服务、中转游戏数据等。而客户端提供友好的人机交互方式,供用户游戏平台,主要实现了最多6人一起游戏,按照以下顺序实现:进入游
5、戏大厅、准备开始游戏,如果有2个以上的客户端预备开始游戏,而限定时间内又没有新的客户端准备开始,服务端就要求客户端开始游戏的倒计时,倒计时完成后,各玩家开始游戏。在游戏过程中,各玩家可以看到其它玩家的游戏进度的缩略图,但不允许增加新玩家,其它没有游戏的玩家只可以旁观游戏系统环境:windows操作系统编译器:VC+6.0(MFC)数据库:access2.编写目的帮助学员了解项目的功能,明确需求功能中用户对系统要做什么的要求,了解需求中的各种业务规则。说明编写这份软件需求说明书的目的,指出预期的读者范围。3.范围软件系统的名称:多人对战游戏平台。本软件主要实现多人对战游戏平台的功能实现。说明:a
6、 开发的软件系统的名称多人对战游戏平台;b 本软件主要实现连连看游戏互动功能,玩家通过网络游戏大厅可以登录连连看游戏进行聊天对战,享受互联网的乐趣。c 软件的应用:1) 此软件可以广泛应用互联网或者局域网中进行游戏,实现多人互动对战,享受游戏乐趣。2) 如果有一个较高层次的说明存在,则应该使其和高层次说明中的类似的陈述相一致(例如,系统的需求规格说明)。4.设计框架本人设计思路主要考虑到实际应用,因此,分为服务器,游戏大厅,单机游戏程序三个部分,服务器使用完成端口,高效率响应客户端消息,客户端主体为多人对战平台,同时设计了一个连连看单机版游戏,通过客户端主体可以启动单机版游戏实现多人联机对战以
7、及旁观聊天等功能。客户端大厅采用异步选择套接字关联一个隐藏窗体用于实时响应服务器端消息,同时平台与游戏界面为两个进程,通过进程间通信实现信息交互。网络通信采用UDP协议。再这次项目设计没有特别去考虑丢包情况,将在下一个项目中完善技术。5.详细分析服务器端利用完成端口实现高效率的通信机制,在这里我们只实现了WSARecvfrom的请求投递,而发送则直接只用sendto实现发送,在整个代码实现上大大简化,也是本人对于完成端口了解的还不够深入。完成端口的实现涉及到多个队列的应用,应用程序在发送请求后完成端口会响应这些请求并将数据放到完成队列中,而应用程序中创建的工作线程会以CPU个数的并发数投递到线
8、程等待队列中获取完成队列中的数据,在这里,实际上我们会创建较多的工作线程以满足调用,因为工作线程操作可能挂起,所以要想最大限度利用资源,需要创建合理的线程数,一般情况2*CPU+2左右。在服务端封装了ado操作类,通过ado操作访问access数据库,在数据库中我只保存了用户注册基本信息以及积分信息等,在线用户的维护我放在服务端程序中维护,这样避免了频繁的对数据库操作,众所周知,数据库操作效率是很低的,而在程序中利用map容器实现命令的路由以及在线用户状态以及桌子状态的管理。通过这些实现高效的命令解析以及用户管理。 在客户端用一个隐藏对话框实现异步选择套接字,实时响应服务端消息,每次响应到数据
9、隐藏窗口都直接通过消息路由给需要的窗口再进行解析,而其他窗口需要发送消息给服务器端也是先消息路由给隐藏窗体,然后再通过隐藏窗体一次性发送给服务端。再这里大厅解析的游戏信息我们又定义了新的进程通信协议,所有游戏信息通过大厅中转给游戏进程,再这里我们采用了WM_COPYDATA传递数据。对于进程的启动,我们用事件来保证大厅检测是否有正确启动指定进程,如果启动失败,事件无法激活,而大厅将报错。否则正常执行,通过FindWindow函数来获取进程窗口句柄,在利用SendMessage实现进程间通信! 为了防止客户端异常掉线以及服务器端异常通知,在这里我们做了一个心跳包,设定客户端每秒像服务器端发送一个
10、心跳包,通过心跳包服务器实时更新客户端时间,以确定客户端是否掉线,同理,客户端也维护了服务端心跳包时间,可以确定自己是否掉线,从而确保服务端与客户端同步数据。 对于单机版连连看中算法这块我是按3个层次考虑,直线 一折 两折,而在这里我们为了实现最短路径,又再次细分同行同列,不同行且不同列,最后再次细分为矩形区域路径内,矩形区域路径外。路径按照上述划分依次判断,在判断的过程中用容器记录,这样再下次判断路径的时候可以先判断容器中的记录来选择路径,大大缩短判断的次数,优化了效率。针对游戏闪电以及爆炸效果,我们是利用多线程来实现的,因为用户体验游戏的过程中,程序本身应该给用户提供最佳的流畅感和舒适度,
11、因此游戏的爆炸闪电连线等视觉效果,包括其他连击数倒计时等显示效果都不能放在主线程中做。显然应该用副线程来处理这些工作。而贴图我使用的是双缓冲贴图,也就是利用2个兼容DC来处理好当前整个画面然后再一次性贴到物理DC上,这里存在的两个兼容DC变量会有多个线程同时访问的可能性,这就有可能导致图片乱掉。所以在这里我们使用了互斥量来保证线程的同步!从而实现有序的实现贴图效果。针对重置按钮,这里存在一个问题,就是在爆炸和闪电效果延续的时间内,如果这个时候重置了图形,那么有可能导致重置后的图形被爆炸或者闪电效果给覆盖,出现错误,在这里,采用了一个自定义的变量作为事件,每当进入效果线程的时候这个变量都会自增,
12、而退出效果线程的时候。变量递减,重置按钮按下时会先检测这个变量是否归零,如果是零才生效,也就是在效果线程未执行的情况下,用户才能执行重置,当然,实际上效果延续时间仅有50ms,用户操作基本不会速度快到刚好在效果消失前重置,这是一个小概率事件,所以在这里,用这种简单的方法做一个意外避免!6.核心功能实现(1)初始化服务器窗口class CLinkServerDlg : public CDialogenumSQLSEVER,ACCESS,IBMDB2,SYBASE;/ Constructionpublic:CLinkServerDlg(CWnd* pParent = NULL);/ standar
13、d constructorstatic DWORD WINAPI ThreadProc(LPVOID lpParameter);/线程函数BOOL InitAccessDB();/初始化数据库BOOL InitProcessThread();/初始化处理线程/ Dialog Data/AFX_DATA(CLinkServerDlg)enum IDD = IDD_LINKSERVER_DIALOG ;CNewListCtrlm_playerList;CNewListBoxm_clientList;CNewListBoxm_serverList;CStringm_actPlayerEdit;/AF
14、X_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CLinkServerDlg)public:virtual BOOL PreTranslateMessage(MSG* pMsg);protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_
15、MSG(CLinkServerDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnOpenMenu();afx_msg void OnDeployMenu();afx_msg void OnCloseMenu();afx_msg void OnQuitMenu();virtual void OnOK();afx_msg void OnTimer(UINT nIDEvent);virtual void OnCancel();afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);afx_msg void OnClose();/AFX_MSGafx_msg LRESULT OnUpdateNum(WPARAM wParam,LPARAM lParam);DECLARE_ME