一个支持8~16人的小型网络游戏的编写
来源:互联网 发布:四川禄宏微交易 知乎 编辑:程序博客网 时间:2024/04/30 13:36
掌握了一些基本的网络socket编程后,本章展示一个支持8~16人的小型网络游戏的编写。
事实上大部分的网络即时战略游戏和网络体育竞技游戏都最多支持16人同时在线。
在小型网络游戏中,所有玩家都运行同一个游戏客户端程序,
其中一个玩家(通常是计算机配置最好、网速最快的那位)将同时运行服务器端程序,这也是限制同时在线人数的主要原因。
大量的玩家将使服务器消耗大量的资源,同时运行服务器和客户端程序会很不现实。
下图展示了小型网络游戏大厅的设计框架:
当服务器启动游戏后,服务器在游戏大厅中调用接收(accept)函数。
这时其他玩家可以加入这个游戏,一旦人数满足游戏要求,服务器可以方便地停止接收状态,开始游戏。
其他玩家将不能再加入这个游戏,除非服务器又打开一个游戏大厅。
这种结构使得游戏服务器十分方便地加入游戏引擎。
服务器的运行流程如下:
(1)创建一个套接字,绑定IP和端口。
(2)服务器监听端口,等待连接。创建一个游戏大厅。
(3)服务器处于等待状态,因此需要两个进程/线程在服务器端运行:一个界面线程,处理游戏菜单操作;一个网络线程,等待连接。
(4)在每个客户端创建一个Socket,连接游戏服务器。
(5)服务器更新连接信息,并在游戏大厅上显示。同时,将连接用户信息发送给每个连接用户。
(6)当所有的用户都连接到服务器上开始游戏,关闭服务器侦听的套接字,中断所有等待的连接,新的用户将不可能连接上服务器。
采用上面描述的方法可以容易地设计出类似星际争霸的网络游戏架构。
游戏服务器只在开始的时候处理连接请求,后继的所有工作是数据的传送。
然而这种方法也存在着一些隐患,如某个客户端在游戏中断掉,它将无法连接上服务器。
因此,服务器必须通过一些测试方法(如长时间没有收到某个客户端的数据,或者是套接字关闭的通知)来探知是否有客户端掉线。
此时,服务器必须打开一个临时的接收套接字,等待掉线客户端的重新连接。
下面以一个回合制游戏的运行过程为例进行简单分析,如图所示。
在这个典型的回合制网络游戏中,客户端设计和实现主要包括以下内容:
游戏的基本功能——处理声音,动画等。
游戏通信——客户与服务器之间的网络传输细节。
游戏应用程序——程序线程管理、各种显示对话框、图形的处理与显示。
游戏处理——处理游戏逻辑、解析和处理游戏数据、游戏运行维护等。
而游戏的服务器端设计则主要包括:
游戏通信——负责游戏中客户服务器之间的网络传输细节。
游戏协议——对传递的数据进行打包和解包,并根据所包含的指令进行相应的操作。
游戏逻辑——负责处理游戏逻辑。
线程管理——线程的生成、结束和分配任务等。
服务器数据库的内容则包括:
角色表——角色ID、账号ID、角色的名称、属性和帮派等。
道具表——道具ID、所属角色ID、道具各类属性等。
帮派表——帮派ID、名称、帮派头目、介绍、总人数等。
邮件表——邮件ID、发件人角色ID、收件人角色ID、邮件内容等。
整个游戏的运营与管理包含以下机制:
客户端下载和安装。
会员注册。
WEB大厅管理。
客户端管理。
身份验证。
房间。
用户信息。
广告。
大型网络游戏设计中的一个重要问题是负载平衡,要实现高效的网络游戏,需要大量的框架设计和底层优化设计。
除了网络编程方面的知识,三维游戏图形引擎设计也是一个很好的参考。
图形绘制是网络游戏中最耗时、最有可能造成网络堵塞的原因,因此对于二维大型网络游戏以及三维大型网络游戏,图形引擎设计和网络框架设计必须紧密结合,互相考虑,互为依存。
事实上大部分的网络即时战略游戏和网络体育竞技游戏都最多支持16人同时在线。
在小型网络游戏中,所有玩家都运行同一个游戏客户端程序,
其中一个玩家(通常是计算机配置最好、网速最快的那位)将同时运行服务器端程序,这也是限制同时在线人数的主要原因。
大量的玩家将使服务器消耗大量的资源,同时运行服务器和客户端程序会很不现实。
下图展示了小型网络游戏大厅的设计框架:
当服务器启动游戏后,服务器在游戏大厅中调用接收(accept)函数。
这时其他玩家可以加入这个游戏,一旦人数满足游戏要求,服务器可以方便地停止接收状态,开始游戏。
其他玩家将不能再加入这个游戏,除非服务器又打开一个游戏大厅。
这种结构使得游戏服务器十分方便地加入游戏引擎。
服务器的运行流程如下:
(1)创建一个套接字,绑定IP和端口。
(2)服务器监听端口,等待连接。创建一个游戏大厅。
(3)服务器处于等待状态,因此需要两个进程/线程在服务器端运行:一个界面线程,处理游戏菜单操作;一个网络线程,等待连接。
(4)在每个客户端创建一个Socket,连接游戏服务器。
(5)服务器更新连接信息,并在游戏大厅上显示。同时,将连接用户信息发送给每个连接用户。
(6)当所有的用户都连接到服务器上开始游戏,关闭服务器侦听的套接字,中断所有等待的连接,新的用户将不可能连接上服务器。
采用上面描述的方法可以容易地设计出类似星际争霸的网络游戏架构。
游戏服务器只在开始的时候处理连接请求,后继的所有工作是数据的传送。
然而这种方法也存在着一些隐患,如某个客户端在游戏中断掉,它将无法连接上服务器。
因此,服务器必须通过一些测试方法(如长时间没有收到某个客户端的数据,或者是套接字关闭的通知)来探知是否有客户端掉线。
此时,服务器必须打开一个临时的接收套接字,等待掉线客户端的重新连接。
下面以一个回合制游戏的运行过程为例进行简单分析,如图所示。
在这个典型的回合制网络游戏中,客户端设计和实现主要包括以下内容:
游戏的基本功能——处理声音,动画等。
游戏通信——客户与服务器之间的网络传输细节。
游戏应用程序——程序线程管理、各种显示对话框、图形的处理与显示。
游戏处理——处理游戏逻辑、解析和处理游戏数据、游戏运行维护等。
而游戏的服务器端设计则主要包括:
游戏通信——负责游戏中客户服务器之间的网络传输细节。
游戏协议——对传递的数据进行打包和解包,并根据所包含的指令进行相应的操作。
游戏逻辑——负责处理游戏逻辑。
线程管理——线程的生成、结束和分配任务等。
服务器数据库的内容则包括:
角色表——角色ID、账号ID、角色的名称、属性和帮派等。
道具表——道具ID、所属角色ID、道具各类属性等。
帮派表——帮派ID、名称、帮派头目、介绍、总人数等。
邮件表——邮件ID、发件人角色ID、收件人角色ID、邮件内容等。
整个游戏的运营与管理包含以下机制:
客户端下载和安装。
会员注册。
WEB大厅管理。
客户端管理。
身份验证。
房间。
用户信息。
广告。
大型网络游戏设计中的一个重要问题是负载平衡,要实现高效的网络游戏,需要大量的框架设计和底层优化设计。
除了网络编程方面的知识,三维游戏图形引擎设计也是一个很好的参考。
图形绘制是网络游戏中最耗时、最有可能造成网络堵塞的原因,因此对于二维大型网络游戏以及三维大型网络游戏,图形引擎设计和网络框架设计必须紧密结合,互相考虑,互为依存。
0 0
- 一个支持8~16人的小型网络游戏的编写
- 一个小型的搜索引擎
- 一个小型的操作系统
- 编写一个支持重定向的shell
- 一个小型的企业信息项目
- 一个小型的溢出实验
- 一个小型的安装脚本
- 如何使用AsyncSocket编写一个非常小型的群聊系统
- 准备开写一个小型的OS,从底层支持汉字输入输出
- 利用Digium卡搭建一个小型的asterisk电话系统 (二、添加Mysql支持)
- 一个扑克牌网络游戏的例子(C++)
- 一个小型VC项目的开发
- 一个小型管理系统的pb实现
- 一个小型的http代理程序
- 一个小型的电子时钟模拟程序
- 最近想开发一个小型的讨论
- 一个小型公司员工的信息系统(控制台版)
- 一个小型数据库的核心组件
- 临时表空间概念
- java资源摘录
- 炸弹人游戏_暴力枚举
- Ntrip协议相关(客户端软件或代码)
- GridLayoutManager高度无法设置为WRAP_CONTENT(Vertical情况下)
- 一个支持8~16人的小型网络游戏的编写
- Android中 Bitmap和Drawable相互转换的方法
- ExecutorService中submit和execute的区别
- C++实验1
- 新萝卜家园GHOST WIN7系统32,64位官方版下载
- mongodb丢失数据的原因剖析
- leetcode:N-Queens II
- Android设计模式系列-单例模式
- win7开机显示密码错误咋办?