1.需求分析
在设计游戏之前,应先作游戏项目的需求分析,它主要包括游戏规则的描述和游戏功能需求.
1.1游戏规则描述
牌数
共一百零八张:筒、索、万,不带东、南、西、北风、中、发、白。
摸牌
游戏在一开始,只有庄家可得到十四张牌,其余的人十三张。庄家从牌中选出一张最无用的牌丢出。此时,其它三家都有权力要那张丢出的牌。庄家的下家(右手边的玩者),有权力吃或碰那张牌,其它两家则只可碰或杠那张牌。 “ 碰 ” 比 “ 吃 ” 优先。
庄家
庄家确定方法:
A 、第一局由系统随机分配庄家。
B 、以后谁胡牌,下局谁做庄。
C 、如果有人要了海底牌后却没人胡则要海底牌的玩家下局当庄家。
D 、如果四个玩家都不要海底牌,则下轮由第一个可以选择海底牌的玩家当庄家。
E 、如果出现通炮情况,则下轮由放炮玩家当庄家。
F :如果此局无海底牌(即海底牌被补张),则补海底牌的玩家下局当庄家。
G :如果起手后,出现 2 个或 2 个以上的玩家胡(即天胡、四喜、优优顺、缺一色、板板胡五种牌型)则中鸟的玩家下局当庄家。
胡牌规则
1 、基本牌型
1 、 11 、 123 、 123 、 123 、 123
2 、 11 、 123 、 123 、 123 、 111(1111 ,下同 )
3 、 11 、 123 、 123 、 111 、 111
4 、 11 、 123 、 111 、 111 、 111
5 、 11 、 111 、 111 、 111 、 111
注:一对( 11 )是将牌,长沙麻将需要二、五、八做将,比如二万、五条、八筒等。如果是某些牌型则将可以为任意一对。
2 、小胡
1 、四喜:起完牌后,玩家手上已有四张一样的牌,即可胡牌。(四喜计分等同小胡自摸)
2 、板板胡:起完牌后,玩家手上没有一张 2 、 5 、 8 (将牌),即可胡牌。(等同小胡自摸)
3 、缺一色:起完牌后,玩家手上筒、索、万任缺一门,即可胡牌。(等同小胡自摸)
4 、优优顺:起完牌后,玩家手上已有 2 个刻子(刻子:三个一样的牌),即可胡牌。(等同小胡自摸)
5 、小胡: 2 、 5 、 8 作将,其余成刻子或顺子,即可胡牌。
3 、大胡
1 、天胡:单指庄家。庄家起牌后,即已经胡牌。
2 、地胡:指闲家。当庄家打出第一张牌时,给闲家点炮。
3 、碰碰胡:乱将,可碰,可杠,可自摸。
4 、将将胡:玩家手上每一张牌都为 2 、 5 、 8 ,可碰。
5 、清一色:乱将,有筒、索、万三种。任意一种可吃可碰。
6 、海底捞月:最后一张牌为海底。海底胡牌,为大胡,需要将(将的种类根据当前牌型决定)。说明:长沙麻将中,海底牌可漫游。即轮到第一个玩家摸,他不要,则按照次序第二个玩家可要,依此类推。
7 、海底炮:如果甲玩家要了海底,而又不能胡牌;乙玩家没有要得到海底,而又可以胡这张海底牌,即为乙玩家胡牌。同样如果丙和丁能胡则通胡。
8 、七小对:胡牌时,手上任意七对牌。
9 、杠上开花:玩家有四张一样的牌,即可选择开杠掷骰子(听牌的情况下)。补张牌的计数方法为:从最后一张牌计算,倒数,骰子开几点,即取倒数第几叠牌的最上面一张(如最上一张没有则取下方一张)。一旦补张的牌能被开杠者胡则算大胡。
10 、抢杠胡:暗杠不能抢杠胡, 只有明杠可以抢胡。玩家在明杠的时候,其他玩家可以胡被杠的此张牌,叫抢杠胡;
11 、杠上炮:如果开杠者掷骰子补张,补张的牌开杠者若不能胡而其他玩家可以胡属于杠上炮,若胡,则属于杠上开花。
1.2游戏功能需求分析
游戏功能是一个网络游戏中最基本的功能,也是其他系统运行的基础平台.游戏界面需求和游戏功能需求的两大部分.
A. 游戏界面需求分析
(1) 身份验证窗口
使用客户端软件登录游戏时,弹出身份验证窗口,必须输入正确的用户名和密码以及IP端口, 否则提示重新输入.服务器检验用户合法后,该用户就可进入其单击的房间.
(2) 房间页面
房间页面可有桌子和用户名登录框, 用户名登录框无人时为白,用单击任意空框可进该位置上.等四人都进入,则开始进入打牌状态.
B. 游戏功能需求分析
(1)游戏启动
如果游戏4人都进入,游戏就启动.
(2)自动发牌
游戏启动后,服务器随机将牌发4个用户,只有庄家可得到十四张牌,其余的人十三张.用户只能看到自己的牌,其他用户的牌显示为背面.用户始终坐在正下方的位置(南侧),牌的顺序默认为万、条、筒、东南西北发(自左到右),各花色按大小顺序排列。发牌结束后自动进入打牌阶段。
(3)打牌阶段
打牌过程是按顺时针依次进行。庄家先从牌中选出一张最无用的牌丢出。此时,其它三家都有权力要那张丢出的牌。庄家的下家(右手边的玩者),有权力吃或碰那张牌,其它两家则只可碰或杠那张牌。 “ 碰 ” 比 “ 吃 ” 优先等等。
2.总体设计说明
针对以上的需求分析,把软件分成四部分:网络连接模型、文件传输模型、算法的分析、麻将实现来介绍。
2.1网络连接模型
在TCP/IP网络中两个进程间的相互作用的主机模式是客户端/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式:
首先服务器方要先启动,并根据请示提供相应服务
1、 打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。
2、等待客户请求到达该端口。
3、接收到重复服务请求,处理该请求并发送应答信号。
4、返回第二步,等待另一客户请求
5、关闭服务器。
客户端:
1、打开一通信通道,并连接到服务器所在主机的特定端口。
2、向服务器发送服务请求报文,等待并接收应答;继续提出请求……
3、请求结束后关闭通信通道并终止。
基本套接字
为了更好说明套接字编程原理,给出几个基本的套接字,在以后的篇幅中会给出更详细的使用说明。
1、创建套接字——socket()
功能:使用前创建一个新的套接字
格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);
参数:af: 通信发生的区域
type: 要建立的套接字类型
procotol: 使用的特定协议
2、指定本地地址——bind()
功能:将套接字地址与所创建的套接字号联系起来。
格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);
参数:s: 是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
其它:没有错误,bind()返回0,否则SOCKET_ERROR
地址结构说明:struct sockaddr_in
{
short sin_family;//AF_INETu_
short sin_port;//16位端口号,网络字节顺序
struct in_addr sin_addr;//32位IP地址,网络字节顺序
char sin_zero[8];//保留
}
3、建立套接字连接——connect()和accept()
功能:共同完成连接工作
格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);
OCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);
参数:同上
4、监听连接——listen()
功能:用于面向连接服务器,表明它愿意接收连接。
格式:int PASCAL FAR listen(SOCKET s, int backlog);
5、数据传输——send()与recv()
功能:数据的发送与接收
格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);
int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);
参数:buf:指向存有传输数据的缓冲区的指针。
6、多路复用——select()
功能:用来检测一个或多个套接字状态。
格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds, fd_set FAR * exceptfds,const struct timeval FAR * timeout);
参数:readfds:指向要做读检测的指针 writefds:指向要做写检测的指针 exceptfds:指向要检测是否出错的指针 timeout:最大等待时间
7、 关闭套接字——closesocket()
功能:关闭套接字s
格式:BOOL PASCAL FAR closesocket(SOCKET s);
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页