网络编程课程设计文档斗地主.docx
- 文档编号:23344227
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:22
- 大小:1.37MB
网络编程课程设计文档斗地主.docx
《网络编程课程设计文档斗地主.docx》由会员分享,可在线阅读,更多相关《网络编程课程设计文档斗地主.docx(22页珍藏版)》请在冰豆网上搜索。
网络编程课程设计文档斗地主
网络编程课程设计
院系
信息工程学院
专业
计算机科学与技术
班级
0901B
组长
赵春乐
成员
牛龙、尹祖博、王青、胡园、
姜海芳、朱立鹏、崔洪畅
项目
“龙乐”斗地主设计与实现
指导教师
魏雪峰
摘要
本游戏是一种新型的基于c/s模式的网络版斗地主游戏。
我们研究主要方向是用网络软件设计方法,以局部网内联众游戏为模型,用Java开发网络版的扑克牌软件。
本游戏的研究目的是在实践中学习游戏软件编写过程,真正了解网络编程c/s通信的各种可行性方法之一。
本文隶属网络游戏设计系统中的子课题---斗地主游戏服务器与客户端的通讯模块。
首先介绍网络斗地主游戏设计系统开发环境,通信方面的编程使用,并对扑克牌游戏c/s模式进行问题分析,然后给出解决问题涉及到的关键技术,接着利用软件工程设计思想,从系统需求分析着手,编写总体设计,详细设计文档,深入分析并设计斗地主游戏c/s模式的应用,并利用面向对象的设计方法完成模块的设计和实现过程,最后是系统测试和下一步的工作。
本设计以一副牌规则为准.本论文讲述了网络斗地主的游戏算法的设计,游戏通讯部分的开发(多线程,socket)的设计过程。
本设计采用myeclipse工具作为开发工具,结合socket编程。
设计过程中,首先建立系统的应用模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的可行系统。
关键词:
网络斗地主;服务器;客户机;socket编程;
1绪论
随着电脑硬件技术和互联网的飞速发展,电脑游戏也突飞猛进,成功游戏不断涌现。
比较成熟的大型游戏主要有:
CS、星际争霸、魔兽争霸、魔兽争霸2等等。
这时也出现了越来越多的网络小游戏,休闲类项目包括网络围棋、中国象棋、斗地主等等,各式各样的游戏给我们的生活带来了无限的乐趣。
本课题就是编写网络版斗地主。
1.1国内外研究现状综述
网络游戏正处于加速发展周期中,中国网络游戏市场迅速扩大,近三年的年均增长率超过100%。
网络游戏的告诉发展,逐渐引起了我国政府的高度重视,信息产业部、文化部、新闻出版总属等相关部门都在积极推动各项市场监管和鼓励网络游戏产业发展的政策措施的出台,2003年网络游戏首次被正式纳入国家863计划,标志着我国网络游戏产业已经的到政府的充分重视。
除外,在网络游戏产业发展的同时,有力带动了相关行业的发展,如软件、计算机、通信、电信运营、互联网等,根据统计,网络游戏能够带动10倍于自身产值的相关行业的发展。
预计未来三年,中国游戏时常规模仍将保持60%以上的告诉增长,至2012年市场规模将接近1000亿元,而多样的资本运作模式将成为网络游戏产业发展的重要推动力。
同时,手机游戏、家用游戏机、游戏传媒、电子竞技等游戏周边行业也将快速发展起来。
1.2网络版斗地主的系统实现方法:
网络编程
通过使用套接字来达到进程间通信目的编程就是网络编程。
Java语言提供的基于网络编程的就是套接字也就是socket。
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑。
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!
中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
网间进程通信的主要模式是客户机/服务器模式,即客户端向服务器发出请求,服务器在接收到请求后提供相应的服务。
客户与服务器进程的作用是非对称的,服务器进程一般先于客户请求启动,并一直随系统运行而存在,直到被终止。
利用java语言编写图形界面,采用网络编程以及客户机/服务器模式从而实现网络版斗地主。
2需求分析
2.1任务背景及目标
本设计采用客户机—服务器模式,网络上的任何一台计算机都可以连接到服务器,首先通过登录连接服务器,成功时,会有一个桌面显示其他玩家,供你选择。
选中点击准备以待游戏的开始,当对战各方都准备后程序自动判定游戏开始。
游戏开始后,各方都有自己的游戏区域,互不干扰,当一方出完全部的牌则向各个玩家发送游戏结束信息,并在各方显示相关提示信息,游戏过程中,各方都会显示对家和自己还剩下未出去的牌数。
游戏规则是模仿网络上QQ斗地主游戏,主要是自己打的牌是否大过参照牌的问题。
当前,前提是点击张数相同的牌,若点击的是牌数不相同,或者选择的牌型不同,或者牌面不够大,则不可以打出去,并提示玩家错误信息。
否则,可以将牌打出去,并在各方游戏区域显示牌。
2.2任务功能分析
在此次设计中,需要实现三个模块:
网络模块、游戏规则模块以及用户控制模块,服务器模块需要实现玩家与服务器间的连接;游戏规则模块需要实现斗地主游戏的基本规则;客户端模块需要实现要地主和出牌。
在游戏开始时,当点击“要地主”按钮时,该玩家就成为了地主;在游戏过程中,当点击“出牌”按钮时,如果出牌符合游戏规则,牌会出去,否则会提示“不能出牌”。
2.2.1网络模块
该模块是本文的重点部分,在该模块中,首先要解决的问题就是创建套接字socket,将套接字绑定到一个本地地址和端口上,将套接字设为监听模式。
其次要考虑的是Listen等待接受客户的请求;当请求到来的时候,接受连接请求,并返回一个用于和客户端通信的套接字,用返回的套接字与客户端进行通信返回,等待另一个客户的请求(即关闭返回的套接字),最后,还需要关闭套接字。
该模块包括两个部分:
服务器、客户端。
其中,服务器完成的功能如下:
●服务器的启动功能
●接收连接请求功能
●数据捕获功能
●合法性判断功能
客户端完成的功能如下:
●登录功能功能
●数据接收功能
●显示信息功能
●游戏退出功能
2.2.2游戏规则模块
游戏规则模块也是本文的一个重点部分,需要实现斗地主游戏的基本规则,因此,首先要解决的问题是玩家如何要地主,如果第一位玩家不要地主,则轮到下一位玩家选择是否要地主,然后要解决的问题是如何排列各种牌大小,能正确判断玩家出牌是否合法,是否可以打出去(比参照牌大,就可以打出去),最后能正确判断游戏是否已经结束和哪一方玩家胜出。
2.2.3客户端模块
该模块的实现也是此次设计中不可缺少的环节,游戏开始时,玩家可以根据自己牌的情况选择是否要地主,如果要可以点击“要地主这个按钮”。
在游戏的过程中,玩家可以选择出牌和不出,如果玩家选择的牌比参照牌大,则可以打出去,反之不行;如果不想出牌可以点击“不出”这个按钮。
2.3系统开发技术
此次设计中涉及到复杂的网络连接问题、异步选择机制以及胜负判定等问题。
在此主要介绍一下C/S编程模式下的Socket通信技术和异步选择机制。
2.3.1WindowsSocket通信技术
所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
ServerSocket用于服务器端,Socket是建立网络连接时使用的。
在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
2.3.1.1服务端
1)打开一个通信信道,并告知本地主机将在某一公共地址端口(http中的80,Telent中的23)上接收客户请求;
2)等待客户请求到达该端口;
3)若接收到重服请求,则处理该请求并发送应答信号;若接收并发送服务请求,则要新建子进程来处理这个客户请求,服务完成后,关闭子进程与客户的通信链路,并终止子进程;
4)跳至第
(2)步;
5)关闭服务器;
2.3.1.2客户端
1)打开一个通信通道,并连接到服务器所在主机的特定端口;
2)向服务器发出服务请求报文,等待并接收应答;
3)请求结束后关闭与服务器的通信链路并终止此进程;
2.3.2WindowsSockets通信程序的基本流程
socket设计在操作系统的核心中,提供一些系统调用以支持多种通信协议(如tcp,udp等等)。
当要支持一种新的通信协议时,则需要把核心做一些改变。
为了免除改变核心太多而造成不便,可以采用流的模块方式来添加新的功能,但这种方式并无法完全免除更动核心的操作。
实际上,核心的设计把网络系统分成三个不同的层。
socket支持3种访问传输系统的接口:
其中一种就是同步阻塞方式:
使用同步阻塞方式时,socket库函数暂停程序的运行,等待传输系统完成请求的操作,操作一旦完成,应用程序重新获得控制权。
2.3.3异步选择机制
异步选择函数WSAAsyncSelect()允许应用程序提名一个或多个感兴趣的网络事件,如FD_READ,FD_WRITE,FD_CONNECT,FD_ACCEPT等等代表的网络事件.当被提名的网络事件发生时,Windows应用程序的窗口函数将收到一个消息.这样就可以实现事件驱动了.
2.4小结
本章主要论述了在实现网络连接需要做的准备工作以及要实现的设计目标,对本次网络斗地主的设计任务进行了功能分析,将其划分为三大任务模块。
3软件设计与实现
3.1.1.1设计原则
1)客户端与服务器必须连接在一起
2)本系统并不控制登录的人数,但是只允许同一张桌子上只能有三个人。
如果在某一时间段有多于三个的人在线,第四个及其他人只能再加入到另一张桌子上开始新的游戏。
对于中途退出者,显示出“对手强行退出了”对话框。
3)当满足开始游戏条件时,服务器发牌至每一个客户端,并规定该局首先叫牌者,使之进入叫牌状态。
最终叫到地主的客户端必须首先出牌。
4)所有的客户端的任何动作必须询问服务器。
当请示动作时,实际上只是显示动作的结果(因为服务器已经处理了该动作,在发送许可的同时发送了处理结果)。
否则,服务器发送拒绝消息,客户端则显示有关错误信息。
5)服务器处理所有的玩家的动作,然后广播数据给每一个玩家;客户端通过判断机制决定是否接受广播,并执行相应的显示与相关的游戏设置。
3.1.1.2总体设计功能图
图3.1总体设计功能
3.1.1.3
系统总体设计流程图
Y
N
图3.2系统总体设计流程图
3.1.2.1服务器端及客户端的设计
1)服务器:
基于socket编程的一般过程:
首先,服务器端先启动,并根据请示提供相应的服务:
(1)打开一通信通道并告知本地主机,它愿意在某一个工人地址上接受客户请求。
(2)等待客户端请求到达该端口
(3)接收到重复的服务请求,处理该请求并发送应答信号。
(4)返回第二步,等待另一个客户请求。
(5)关闭服务器
2)客户端:
(1)打开一通信通道,并链接到服务器所在的主机的特定端口。
(2)向服务器发送服务请求报文,等待并接受应答,之后继续提出请求
(3)请求结束后关闭通信通道并终止
3.1.2.2数据传输的实现
流程图如下:
图3.3流程图
3.1游戏规则模块的设计与实现
3.2.1游戏规则
图3.4游戏规则模块流程图
1)发牌:
一副牌54张,一人17张,留3张底牌,在确定地主之前玩家不能看底牌
2)叫牌:
3)叫牌按出牌的顺序轮流进行,每人只能叫一次。
叫牌时可以叫“1分”,“2分”,“3分”,“不叫”。
后叫牌者只能叫比前者玩家高的分或者不叫。
叫牌结束后叫分最大的玩家就是地主;如果有玩家叫“3分”则立即结束叫牌,该玩家为地主;如果都不叫,则重新发牌,重新叫牌。
4)第一轮叫牌的玩家由服务器随即选定,以后每一轮首先叫牌的玩家按出牌的顺序轮流担任。
5)将三张底牌交给地主,并亮出底牌让所有人都能看到。
地主首先出牌,然后按逆时针顺序依次出牌,轮到用户跟牌时,用户可以选择“不出”或出比上一个玩家大的牌。
某一玩家出完牌时结束本局。
6)火箭:
即双王(大王和小王),最大的牌。
炸弹:
四张同数值牌(如四个7)。
单牌:
单个牌(如红桃5)。
对牌:
数值相同的两张牌(如梅花4+方块4)。
三张牌:
数值相同的三张牌(如三个J)。
三带一:
数值相同的三张牌+一张单牌或一对牌。
例如:
333+6或444+99
单顺:
五张或更多的连续单牌(如:
45678或78910JQK)。
不包括2点和双王。
双顺:
三对或更多的连续对牌(如:
334455、7788991010JJ)。
不包括2点和双王。
三顺:
二个或更多的连续三张牌(如:
333444、555666777888)。
不包括2点和双王。
飞机带翅膀:
三顺+同数量的单牌(或同数量的对牌)。
如:
444555+79或333444555+7799JJ
四带二:
四张牌+两手牌。
(注意:
四带二不是炸弹)。
如:
5555+3+8或4444+55+77。
7)牌型的大小
8)火箭最大,可以打任意其他的牌。
炸弹比火箭小,比其他牌大。
都是炸弹时按牌的分值比大小。
除火箭和炸弹外,其他牌必须要牌型相同且总张数相同才能比大小。
单牌按分值比大小,依次是大王>小王>2>A>K>Q>J>10>9>8>7>6>5>4>3,不分花色。
对牌、三张牌都按分值比大小。
顺牌按最大的一张牌的分值来比大小。
飞机带翅膀和四带二按其中的三顺和四张部分来比,带的牌不影响大小。
9)胜负判定
10)任意一家出完牌后结束游戏,若是地主先出完牌则地主胜,否则另外两家胜。
11)积分
12)底分:
叫牌的分数
倍数:
初始为1,每出一个炸弹或火箭翻一倍。
(火箭和炸弹留在手上没出的不算)
一局结束后:
地主胜:
地主得分为2*底分*倍数。
其余玩家各得:
-底分*倍数
地主败:
地主得分为-2*底分*倍数。
其余玩家各得:
底分*倍数
地主所有牌出完,其他两家一张都未出:
分数*2
其他两家中有一家先出完牌,地主只出过一手牌:
分数*2
逃跑扣分:
底分*倍数*3
还没人叫牌时逃跑:
扣3分
13)计分规则
14)X=游戏基数=积分=底分×倍数×玩家身份系数(农民为1地主为2)
N=房间系数,每个房间不同以具体房间为准
底分:
叫牌的分数为1、2、3分
倍数:
根据游戏的行为计算相应的倍数。
每炸弹*2、春天*2。
15)级别
16)包身工无;短工10;长工25;佃户40;贫农80;渔夫140;猎人230中农365;富农500;掌柜700;商人1000;衙役1500;小财主2200;大财主3000;小地主4000;大地主5500;知县7700;通判10000;知府14000;总督20000;巡抚30000;丞相45000;帝王70000
3.2用户控制模块
3.3.1用户控制模块功能及原理
该模块的设计是为了完成用户的点击操作,主要实现用户的点击操作和给予用户提示功能。
游戏开始时用户可以点击“叫地主”,“1分”,“2分”,“3分”,“不叫”进行操作,游戏过程中,用户可以点击“出牌”或“不出”,如果出牌不符合要求,则提示用户“出牌不符合规则”提示信息。
3.3.2小结
本章是本程序的设计与实现部分,在本章节中主要讨论了本程序的模块和各个模块的实现过程,包括服务器模块、用户模块和游戏规则各个模块的实现,并将三个模块结合,实现整个游戏。
4软件测试与运行
4.1实验环境
本软件的运行环境需要一定的软件以及硬件设备,以便于实现较为理想的运行结果,其所需软件及硬件条件如下:
Ø硬件设备:
微机(PC)三台
Ø操作系统:
WindowsXPSP3/Windows7
Ø编程语言:
Java程序设计语言
Ø运行环境:
Myeclipse8.0或以上版本
Ø开发技术:
WindowsSocket、Java编程技术
4.2测试与运行结果
本游戏程序基于网络版斗地主的设计与实现。
通过运行本程序,可以达到三个玩家一起进行斗地主游戏的目的。
其中首先要启动服务端如图4.1所示。
服务端程序成功启动后会等待客户端的连接请示。
图4.1服务器端启动
接着就要启动客户端程序,在主机IP后面的文本框内输入服务器端的IP地址后点击连接按钮,如果连接成功,该玩家的状态会从“未加入”变更为“未准备”,服务端也会提示客户端连接成功的信息。
图4.2客户端用户1
图4.3客户端用户2
图4.4客户端用户3
图4.5加入房间准备开始游戏
图4.6游戏开始
图4.6是当三个客户端都成功连接到服务端后,自动发牌后的情景,这个时候玩家可以根据自己牌的情况决定是否要抢地主,点击“抢地主”(1、2、3分)按钮,或“不叫”按钮。
图4.7游戏中可发送信息
图4.8本局游戏结束
图4.8展示了玩家打完一局后的游戏情景,“出牌提示”这个标签会在每一位用户客户端界面显示本局的胜负结果及本局的得分情况。
如果想继续玩,点击“确定”按钮后,便可重新开始;或者选择关闭离开。
图4.9玩家离开桌面
5结束语
我们小组经过近一个月的努力,终于把这个项目完成了,在此特别感谢我们的魏老师,给我们的精心指导,也特别感谢每一个成员认真、负责的去完成任务。
总的来说,做这个项目让我深刻体会到一个团队的伟大力量,用一个团队去完成一个任务,你收获的不仅是成功的项目,还有友情,理解,支持,在这样一个过程中,你会发现团队协作的重要性。
通过完成这个项目,我们对专业知识有了更深刻的认识,对自己学到的知识达到了灵活运用。
希望在今后的时间里继续这样的历练。
6参考文献
(1)谭献海等.网络编程技术及应用[M].清华大学出版社,2006
(2)W.RichardStevens.TCP/IP详解(卷1:
协议)[M].机械工业出版社,2007
(3)吴功宜等.计算机网络高级软件编程技术[M].清华大学出版社,2008
(4)网络游戏编程.恽如伟、董浩编著.机械工业出版社,2008
(5)樊永庆.游戏中的网络编程技术及应用[M].水利水电出版社,2009
(6)殷肖川,姬伟峰,陈靖,陈晨.网络编程与开发技术[M].西安交通大学出版社,2009
(7)计算机网络应用软件编程技术[M].吴英主编.机械工业出版社,2010
(8)实用Java网络编程技术.刘永华、于春花主编.中国电力出版社,2010
(9)Java网络编程基础第2版.朱喜福、戴舒樽、王晓勇编著.人民邮电出版社,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 课程设计 文档 地主