安全检测:瑞星:安全 诺顿:安全 卡巴:安全
毕业设计-基于C#的多人在线社交游戏的网络程序设计,共40页,10114字,附C#源代码
摘要:本文主要讲述了类似摩登城市的社交游戏的分析和设计,使用线程池与socket技术实现开发多人在线游戏网络程序的基本功能,包过实现社交游戏中新建建筑、摧毁建筑、收获建筑、升级建筑的功能。通过Winsock实现数据传输、通过Sqlhelper进行数据库连接、通过线程池实现对不同socket连接并发运行管理等。在C/S模式下,客户端发送必要的数据与控制信息给服务器,服务器再根据控制信息对数据进行处理。服务器端首先用一个线程监听socket连接,再将监听到的连接转移到线程池里,这就使得服务器端能同时接受多个用户连接,并行多个任务的计算处理,同时隔离错误,为所有的用户提供相对稳定的后台支持,同时节省了创建线程的时间,并且能够并发进行多个任务,这样就提高了服务器端对多个客户端请求响应速度,也实现了对数据库的高效利用。
关键字:线程池、多人在线游戏、社交游戏、网络游戏
目 录
1 选题背景 1
1.1选题背景 1
1.2 设计目标 3
1.2.1选题主要解决的问题 3
2 设计需求分析 4
3 设计平台选择 6
3.1 操作系统 6
3.2 软件运行环境 6
4 设计过程论述 7
4.1设计程序窗口 7
4.1.1客户端窗口的设计 7
4.1.2服务器端窗口的设计 7
4.2主要技术 8
4.2.1 线程池 8
4.2.2 socket 连接 8
4.2.3 协 议 9
4.3 程序结构 11
4.3.1 客户端设计 11
4.3.2 服务器端的功能设计 17
4.3.3 发送的数据格式设计 17
4.3.4 数据库设计 18
4.4系统流程分析 20
4.4.1 用例举例 21
4.4.2 客户端流程图 23
4.4.3 服务器端流程图 24
5 部分核心代码 25
5.1 客户端 25
5.1.1 使用socket收发信息 25
5.1.2 使用线程来运行任务 25
5.2服务器端 25
5.2.1 监听socket连接 25
5.2.2 接管Socket连接 26
5.2.3 数据库操作 26
6 Socket粘包的测试性研究 28
7 总结 31
8 展望 32
致谢语 33
参考文献 34
本设计是整个游戏流程中的一部分,也是游戏开发的核心工作,游戏编程,基本需要熟练C#、sql编程等技术。设计中使用radiobutton来模拟一个游戏基本场景而没有图形式的游戏场景。设计中需要完成的是模拟目前流行的休闲游戏摩登城市实现盖房子,拆房子,收获房子,升级房子,以及实现相应的时间牵制与财产变迁。
同时,为了解决多个客户端同时连线到服务器端,因此服务器端使用了多线程技术,使用一个线程进行监听是否有客户端连接,再将监听到的连接分配到线程池进行通信。
通信方式则是客户端将要改动的数据与改动命令通过socket发送到服务器端,再由服务器端根据命令对数据库作出修改。
设计需求分析
《摩登城市》这款游戏是基于网页,大量使用flash技术,下图展示的是从3366中的游戏《摩登城市》游戏场景的一部分截图,整个场景以平面的方式表达, 所有的建筑都是贴图,如图2-1所示。
玩家可以选择建筑在地图上的任意位置新建选择的建筑,不要的建筑也可以进行摧毁恢复成空地,一定时间后可以收获建筑得到金钱,建筑有不同等级,玩家可在原有建筑上进行升级,升级与新建一样需要扣除相应的金钱。
因此,地图功能初步设计为:新建、摧毁、收获、升级。
具体细化为:
新建:在某个空地新建某建筑时,将该地点名称改为该建筑名称,同时在用户财产中扣去该建筑所需的费用,并记录新建的时间。
收成:收成某个已有可收成建筑时,用户财产增加该建筑对应的收成数据,更新新建的时间为收成时间。
摧毁:将指定的建筑摧毁成空地。
升级:将指定的未满级的建筑进行一个等级的升级,用户财产扣去升级费用,新建时间更新为升级时间。
因为这类游戏以多人休闲互动为乐趣,所以不止能对自己地图的建筑进行操作,同样也需要能进入别人的地图进行部分操作,因为不是地图主人,所以不能进行新建、摧毁、升级等操作,只能对别人的建筑进行收获操作。
因此,互动功能初步设计为:能够进入别人的地图场景、收获别人的建筑。
具体为:
查看:进入别人的地图场景;
收获:用户财产增加指定的建筑带来的收益数据。
为了防止同个用户不同场地同时登陆的情况,在用户登陆的时候应该对此有所判断,阻止后登陆的该用户的客户端连接服务器端。
本设计将游戏地图简化为4×4的表格,用radiobutton 来代表每个格子(即地皮),形成一个游戏场景的基本架构。并用横纵坐标来区分每个地皮,例如xy为11表示第一行第一列的地皮。