设计文档
1 系统功能说明
该系统采用C/S架构,是一种可以联机进行你画我猜的游戏程序,玩家登录后,可选择进出房间,聊天,画图,猜图等功能。
玩家首先用不可重名的用户名登录,之后会进入房间大厅,在大厅里玩家可以自由选择想进入的房间,也可以在大厅与其他玩家进行即时聊天。
进入房间后,聊天窗口会提示玩家进出房间的消息并刷新玩家列表。第一个进入房间的玩家,会默认成为画题的一方,系统会给其作画题目;之后进入的玩家都是猜画的一方,仅能知晓题目的字数。
玩家均有用户列表,退出房间,即时聊天功能。画家额外拥有刷新题目,五种不同颜色画笔以及擦除的作画功能。猜画玩家专享答题窗口,将猜测的答案发送出去后,系统会提示其正误。只要有一名玩家猜中,此回合游戏就结束,系统将对每个玩家进行弹窗通告某个用户猜对了,并且猜对的玩家成为画题人。若作画玩家中途退出,将任选一名玩家为新的作画人。
2 运行环境说明
编译环境:visual studio 2019;
采用TCP模式,C/S架构,服务端使用WCF服务库,客户端使用WPF应用(.NET Framework);
系统实现多台计算机联机画板和联机通信。
3 系统概要设计
3.1 系统总体功能设计
用户登录:
用户名不能为空,不能重复; 大厅有四个游戏房间,房间下面有对应的房间信息(房间号和、房间人数),玩家可随意进入;
大厅聊天:
用户user发送消息送到服务器,服务器遍历在线玩家列表发送给所有玩家;
房间内聊天、房间内猜题:用户user发送消息到服务器,服务端遍历该房间内玩家列表将消息发送给所有玩家;
墨迹的发送:
画板新增墨迹之后对墨迹进行打包转化成string类型发送到服务端,服务端发送给该房间内所有玩家,然后进行转化,添加到画板上;
题目的刷新:
画题人点击刷新按钮,服务端会读取题库随机返回一个题目,同时对房间内所有玩家题目部分进行相应的更新;
猜题:
猜题人猜题,服务端返回相应的提示(正确或者错误),如果正确,所有用户都会收到该用户猜对的信息,猜对的玩家成为新的画题人,其余玩家猜题,画板清空,题目刷新。
玩家退出房间:
如果是画题人退出房间,在剩余的猜题人中选取一个成为画题人并更新其面板,清空墨迹信息。房间用户收到退出提示,大厅房间信息更新;
退出系统:
如果玩家在游戏房间内退出系统,先执行退出房间,再执行退出系统,大厅消息栏提示用户退出。
3.2 系统接口设计
##服务端实现的接口:
[OperationContract(IsOneWay = true)]
void Login(string userName); //登录系统
[OperationContract(IsOneWay = true)]
void Logout(string userName); //登出系统
[OperationContract(IsOneWay = true)]
void Talk(string userName, string message); //大厅聊天
[OperationContract(IsOneWay = true)]
void InRoom(string username, string roomname); //进入游戏房间
[OperationContract(IsOneWay = true)]
void Room_Talk(string userName, string message); //房间内聊天
[OperationContract(IsOneWay = true)]
void sendink(string username, string ink); //传送笔迹
[OperationContract(IsOneWay = true)]
void Guess_talk(string username, string message); //猜题框消息
[OperationContract(IsOneWay = true)]
void Gusee_win(string username); //猜测正确
[OperationContract(IsOneWay = true)]
void change_hua(string username); //改变画题人
[OperationContract(IsOneWay = true)]
void Refersh_Timu(string username); //刷新题目
[OperationContract(IsOneWay = true)]
void RoomOut(string username); //用户退出房间
客户端实现的接口:
[OperationContract(IsOneWay = true)]
void ShowLogin(string loginUserName, int[] roomcount); //显示新用户登录游戏,进入大厅
[OperationContract(IsOneWay = true)]
void ShowLogout(string userName); //显示用户退出游戏
[OperationContract(IsOneWay = true)]
void ShowTalk(string userName, string message); //在大厅发消息显示消息内容
[OperationContract(IsOneWay = true)]
void InitRoomUsersInfo(string RoomUsersInfo, string ink, bool hua_or_cai, string timu); //初始化房间玩家列表
[OperationContract(IsOneWay = true)]
void ShowInRoom(string username); //显示用户进入房间
[OperationContract(IsOneWay = true)]
void ShowOutRoom(string userName); //显示用户退出房间
[OperationContract(IsOneWay = true)]
void Showlabel(string labelname, int roomusercount); //大厅界面显示四个房间的人数
[OperationContract(IsOneWay = true)]
void Show_Room_Talk(string userName, string message); //显示在房间里聊天的消息
[OperationContract(IsOneWay = true)]
void Show_Room_Talk_error(string message); //显示在房间里聊天的消息
[OperationContract(IsOneWay = true)]
void Show_Guess_Talk(string userName, string message, string daan); //显示猜测聊天框中的聊天消息
[OperationContract(IsOneWay = true)]
void Showink(string ink); //显示墨迹信息
[OperationContract(IsOneWay = true)]
void Show_Guess_win(string username); //显示用户猜中
[OperationContract(IsOneWay = true)]
void Show_Refersh_Timu(string username, string Timu); //刷新题目后,在各个玩家界面显示
[OperationContract(IsOneWay = true)]
void Show_Cannot_login();//提示用户不能登录
[OperationContract(IsOneWay = true)]
void InitNewchutiren(string timu); //初始化新的出题人界面
[OperationContract(IsOneWay = true)]
void change_hua_or_cai(bool hua, string username); //改变画题人和猜题人
4 系统详细设计
4.1 登录界面模块设计
4.1.1 模块描述
用户可以使用不同的用户名称进入游戏,若用户昵称已存在,则不能进入游戏。登录成功后“开始游戏”按钮变成不可点击状态,同时登录界面隐藏,大厅界面出现。
4.1.2 模块UI
图4-1 玩家登录界面
4.1.3 模块类设计
要实现登陆,首先需要用户名,登录成功与登录失败时控件的显示以及提示的消息
4.2 大厅界面模块设计
4.2.1 模块描述
游戏大厅有四个游戏房间,房间下方显示房间信息(房间号、实时房间人数),玩家可以在游戏大厅任意选择一个游戏房间开始游戏;
右边是聊天界面,玩家可以在这里与其他在线玩家进行即时聊天。
4.2.2 模块UI
图4.2 玩家进入大厅,右边有即时聊天窗口,玩家可任人选房间进入游戏
4.2.3 模块类设计
A. 大厅房间的实时显示
B. 大厅的即时聊天窗口的提示及互动
C. 用户点击房间并进入房间的按钮事件
D. 初始化新进房间的用户界面
E. 用户在大厅退出游戏及其提示
4.3 游戏房间模块设计
4.3.1 模块描述
房间的主要功能:玩家列表的显示、画板的实现、题库的实现、猜测聊天窗口和房间聊天窗口的交互实现。
4.3.2 模块UI
图4.3-1第一个进入房间的玩家默认作为画家,有画笔和擦除,刷新题目,即时聊天,退出房间等功能
图4.3.2 后来的玩家作为猜画人,能退出房间,即时聊天,有猜题专栏
4.3.3 模块类设计
A. 玩家列表
string[] users = RoomUsersInfo.Split('、');
this.userlist.Items.Clear();
for (int i = 0; i < users.Length; i++)
{
this.userlist.Items.Add(users[i]);
}
B. 房间聊天的交互式实现
C. 猜测聊天框的实现
D. 笔刷墨迹信息的交互实现
E. 题库的设计原理及实现
5 功能运行效果
5.1 登录
图5-1-1 登录注册界面
5.2 大厅
图5-2-1 玩家进入大厅通告,大厅聊天
图5-2-1 大厅玩家退出通知
5.3 进入房间
图5-3-1 第一个玩家进入房间,画笔及擦除功能,换题功能,聊天功能,退出功能
图5-3-2 后来的玩家为猜题玩家,有专享的答题窗口
5.4 玩家画图
图5.4-1画家作画
图5.4-2画家擦除
图5.4-3画家换题,并清空画布
5.5 猜题
图5.5-1 玩家猜题错误
图5.5-2 玩家猜中
图5.5-3其他玩家界面显示有玩家猜中
图5.5-4 猜中人当画家
图5.5-5 原画家退出,系统随机选一人当画家