游戏开发论坛

 找回密码
 立即注册
搜索
楼主: wuxiangwu

[讨论] 我的一个毕业论文游戏,大家帮我看看多提意见

[复制链接]

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:24:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

2.2 DB服务器的概念
     网络游戏的服务器端在处理大量的客户资料时,必然要使用数据库(DB)进行大量的数据的存储和查询,服务器在数据库中保存玩家注册信息,玩家的积分信息,玩家设置等信息。同时因为游戏服务器一般采用多台服务器。所以多台游戏服务器同时连接一台数据库(DB)服务器,进行玩家的数据查询和修改,并且保持客户数据的同步。在玩家注测帐号,登陆服务器,保存游戏结果,退出游戏时,游戏服务器都必须和数据服务器进行交互,查询和保存客户资料;当有大量玩家同时在线游戏时,必须保证数据库服务器的性能,以免造成因数据库处理缓慢而导致游戏服务器停止响应的后果。

2.3 DB服务器的架设
   



2.3.1 DB服务器相关规格
DB(Database):
Processor:         Intel Xeon Processor with 533 MHz System Bus For Dual Processor Server 2.4 G or above 2颗 (Including Hyper-Threading)
MainBoard:        Intel Server Board SE7500WV2  1颗
Memory:          ex. KingMax -- MPND42D-A4KX  2颗 共2 G
HardDisk:   ex. RAID-5  150GB
Adapter:          Intel Pro/100 S Dual Port Server Adapter  1颗
OS:        Microsoft Server 2000 or above
Application:        Microsoft SQL 2000

2.3.2 建立数据库
    由于本游戏在WIN32平台下开发,为保证系统高度可配置性及可维护性,在程序中使用Microsoft SQL Server2000 EnterPrise版本作为数据库服务器。
    首先建立数据库 Game。然后在该数据库下建立PlayerInfo表来保存玩家的个人信息:玩家名字(szName),玩家帐号(szID), 密码(szPwd),玩家等级(iLevel), 玩家积分(iScore),总局数(iTotal),胜局数(iVictory), 输局输(iFail), 平局数(iDraw)...

2.3.3 相关表的建立
PlayerInfo表用SQL实现为:
Create Table PlayerInfo(
              szName    char(13)  Not Null,
              szID      char(13)  Not Null   Primary Key  Clustered,
              szPwd     char(10)  Not Null,
              iLevel    int       Not Null  Default 0,
              iScore    int       Not Null  Default 0,
              iTotal    int       Not Null  Default 0,
              iVictory  int       Not Null  Default 0,
              iFail     int       Not Null  Default 0,
              iDraw     int       Not Null  Default 0
)


135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:36:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

2.4 DB服务器的相关运行机制
对于所有的DB(数据库),Visual C++6.0都提供了一些编程接口,如:ODBC 开放数据库连接;MFC ODBC类等。在MFC1.5的后期版本中引入封装了ODBC功能的类。通过这些类提供与ODBC的接口,使得用户可以不需要处理ODBC API中的繁杂处理就可以进行数据库操作。主要的MFC ODBC类有:

CDatabase类 : 这是主要用到的类。一个CDatabase对象表示一个数据库连接,通过它可以操作数据源。应用程序可以使用多个CDatabase对象,构造一个对象并调用OpenEx()成员函数打开一个连接。接着构造CrecordSet对象已操作连接的数据源,并向CDatabase对象传递记录的指针,使用完成后用Close()成员函数销毁CDatabase对象。

CRecordSet类 :一个CRecordSet对象代表从数据库选择的一组记录的集合—记录集。

CrecordSet类 :其对象是在空间中显示数据库视图。

CDBException类 :由Cexception类派生反映对数据库操作时的异常。

2.4.1 信息读写
这里直接对DBServer进行操作的时GameSerevr。GameServer通过Server程序接口与数据库之间进行数据信息的读取和存入。这里通过消息响应的形式来实现GameServer与DB之间的交流。如下图:

1.对于上图的说明:
(1).由GameServer发送消息给DataMgr;
(2).DataMgr传送消息给相应的Query Thread做数据查询;
(3).数据返回后由Data Conventor转换成相应的GameServer所需要的格式;
(4).DataMgr回传消息的回传。

2.上图反映了消息响应的3个处理模块:
  DataMgr模块 :做为和GameServer应用端的接口负责数据的接受,处理,响应;

  Thread 模块( Thread Queue ) :负责线程管理;

Data Convertor模块 :DataMgr根据Data Convertor对读取的数据转换成GameServer需要的格式。

3.对DataMgr实现的伪代码描述

Class DataMgr
  {
成员变量;
Thread Queue;
成员函数;
DispatchMsg(Msg);
}

DataMgr:ispatchMsg( Msg )
{
  switch( Msg )
  {
   case CONNET DB:        // 连接操作
break;
case QUERY DB:         // 访问DB操作
    break;
case DISCONNECT DB:   //  断线操作
    break;
}
}


4.消息的处理方案

DataMgr它控制着一个Thread Queue(线程队列),实现线程的管理和线程间的数据传输为保证线程执行效率,减少冲突时间。

设计思路:
为每一个数据库查询线程Queue Thread建立2个消息队列Read Msg Queue 和Send Msg Queue接受和发送消息。

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:37:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

2.4.2 收费平台
为了方便游戏的商业营运,在进入游戏后Server会给客户一个验证消息。而也是通过这种验证机构老保证玩家点数扣除,大部分网络游戏公司都有自己的收费验证系统,并且作为公司的最高机密存在。华义使用的是自行开发的WGS验证收费系统。
2.4.3 后台工具
为了方便管理与对数据库的操作,如:对玩家数据的查询,对玩家信息的修改等等。这里我们用ASP来作为后台来访问数据库。

3.架构GS服务器
整个游戏的网络流程如下表所示:

Server端        Client端
Listen服务器开始监听        Create创建Socket
        Connect连接服务器
OnAccept响应连接       
NewSocket创建一个服务Socket       
CptrArray::Add添加到指针数组中       
        数据加包
        SendMsg 发送数据包
FetchMsg 转发数据包       
解包       
SendMsg 转发数据包       
        FetchMsg 接受数据包
…        …
        Disconnect断线
Disconnect做善后工作       
  

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:38:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

3.1 GS服务器的概念
GS即GameServer-游戏服务器。GS主要负责游戏的Server端和Client端的通信来确保游戏的流程正确以及同数据库的读/写操作。大致该服务器端类可分为以下几个类:

.游戏通信类: 负责处理游戏中客户服务器之间的网络传输细节,从而在编程中我们就不需要考虑网络通信细节,达到客户端和服务器端的消息传输。(包含了MicroSoft的全部WinSock函数)
.游戏协议类:负责处理游戏中客户端和服务器端之间交互所传递的数据,并且对该数据格式进行打包和解包,同时根据包中的相应指令进行相应的操作。
.游戏逻辑类: 负责处理游戏的流程。
.线程池类:  主要负责管理线程的生成,结束和分配任务等工作。
.用户管理类:主要用于管理用户资料,在用户登陆后通过数据库验证用户名和密码,通过验证后从数据库中读取用户的资料。
.数据库类:  主要负责从数据库中读/写相应的数据。

这些类实现Showhand游戏的整个Server的功能。由于是基于对战模式的网络游戏所以游戏的流程是相当重要的,与之主要相关联的是以上的游戏逻辑类。

3.2 GS服务器的架设
游戏服务器主要是接受Client玩家的一系列请求,并进行相应的处理。这里的处理即通过Server程序实现,所以这里我们对GS架设不做太多的介绍。

3.2.1 GS服务器相关规格
Processor:         Intel Xeon Processor with 533 MHz System Bus For Dual Processor Server 2.4G or above 2颗 (Including Hyper-Threading)
MainBoard:        Intel Server Board SE7500WV2   1颗
Memory:          ex. KingMax -- MPND42D-A4KX  1颗 共1 G
HardDisk:   ex. Maxtor ? Atlas 15K  18.4GB
Adapter:          Intel Pro/1000 XT Server Adapter  2颗
OS:        Microsoft Server 2000 or above
Application: None

3.2.2 GS服务器运行机制
    在上面的通讯模式(通称为游戏的底层)确定下来之后,就该对游戏的整个过程做一定的处理了。通常基于对战模式的网络游戏客户端都需要通过Server对相应的信息做处理。一般Server在处于运行态(SERVER_STATE_RUN)的时候会同时连接或者是处理来自两个线程:Workerthread和Networkthread,二者起着不同的作用。其中Workerthread负责处理数据库的消息;而Networkthread负责处理与客户端的消息,所以游戏的逻辑也在该Networkthread线程中得到实现。

游戏的逻辑即游戏的进行的流程,基于C/S模式的情况下我们一般通过Server端和Client端的消息发送来协调游戏的正常进行。所以在底层通讯条件都搭建好的情况下,Server端在程序上我用CRecvGameMsg类,CGameLogic类,CsendGameMsg类,这三个类来处理游戏的逻辑。

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:38:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

4.Server编程
4.1 Server程序
    MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。

STL即Standard TemplateLibrary(标准模板库)是惠普公司推出的一套成熟的函数/模板库,因其高效的运算能力,完善的全类型兼容,便捷的使用方式成为C++标准。所以MFC也支持STL。

以Windows的消息响应机制为基础,在网络的通讯中MFC中的CSocket类起到了很大的作用。套接字是网络通讯的基本操作单元,是应用层到传输层的接口,可以将套接字看作不同主机间的进程进行全双工通信的端点。套接字之间的连接过程可以分为3个步骤:服务器监听,客户端请求,连接确认。 Csocket对象提供阻塞模式,这里对其做一个解释:一个Socket可以处于“阻塞模式”和“非阻塞模式” 。一般的情况下,套接字是阻塞方式的;所以当一个套接字调用不能立即完成时,进程进入睡眠状态,等待操作的完成。同时当我们不需要对套接字的调用使进程进入睡眠的状态,即调用的过程不能马上完成,那么调用函数将马上返回,而调用的过程则继续进行。在Win32环境下,如果要使用具有阻塞性质的套接字,应放在独立的线程中处理,利用多线程的方法使阻塞不至于干扰其他的线程,也不会把CPU浪费在阻塞上。多线程的方法既可以使程序员享受CSocket带来的简化编程的便利,也不会影响用户界面对用户的反应。

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:39:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

4.2 相关技术运用
4.2.1 TCP/IP
在TCP/IP网络中,传输控制协议(TCP,Transmission Control Protocol)提供的是一种可靠的面向连接的传送服务。计算机的网络应用,经常需要通过网络在两台计算机的应用程序间传输大量数据。许多网络应用程序正确工作的前提是数据的可靠传输。但是,现实世界中的网络通信往往不能够提供完全可靠的、无差错的数据传输。TCP协议软件的设计目标,就是要在传输层将IP协议服务在互联网层提供的点到点的、无连接的和不可靠的数据包传输服务,变为TCP协议软件间端到端的、面向连接的及可靠的数据分组传输服务。TCP向应用程序提供的可靠传输服务具备以下特点。

(1).面向数据流服务
TCP可以从应用程序接收任意长度的数据。两个应用程序相互传输大量数据时,可以将所传输的二进制数据流作为连续的字节流信息看待。接收端应用程序收到的字节流顺序同发送端送出的字节流顺序一样。

(2).虚电路连接
  数据流在传输前,收发端应用程序首先通知各自计算机的TCP协议软件,系统需要进行数据传输。双方负责应用程序数据传输的TCP协议软件先进行信息交换,建立连接,然后开始传输数据。在数据的传输过程中,双方的TCP协议软件继续通信,确保数据的正确到达。

(3).有缓冲的数据传输
在数据传输过程中,发送端应用程序不断向TCP协议软件传输数据字节流。在向TCP协议软件传输数据字节流时,应用程序按照自己认为合适的大小对数据流分段。为了提高数据传输效率,减小网络通信量,TCP协议软件通常将应用程序传来的数据重新组成长度适合数据分组,而不考虑应用程序原来的数据流分
段。TCP通常把它们组装成不超过64 KB的段(segment)。

(4).无结构的数据流
TCP协议软件将数据流组装到数据分组传输时,不考虑流中数据的结构划分,仅仅按照应用程序提供的流顺序传输,并且保证接收端的流顺序不变。数据流的结构由应用程序自己管理。

(5).全双工连接
TCP协议软件支持全双工数据通信,可以同时进行两个独立的、方向相反的数据流传输。流的控制信息可以放在相反方向的数据分组中发回到源节点计算机。这种捎带(Piggybacking)方式可以减少网络流量。

4.2.2 Windows Socket编程接口
    Socket原来是UNIX的Berkeley Software Distribution版本中的一个程序接口。它类似于C的函数库。CSocket类(父类为CAsyncSocket)提供一个高级的SOCKET支持,完成对低层函数的操作。通过继承API提供的CSocket类来实现自定义的CClientSocket,ClistenSocket,CrequestSocket 。CSocket封装了底层的实现,使我们自己定义的子类安全且功能强大,使用方便。

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:39:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

4.2.3 套接字I/O模型
对于在Socket,这里我们做一个介绍。在挖网络通讯中我们至少需要一对套接字(Socket),即运行于客户端的CliSocket和运行于服务器端的SerSocket。
其基本的步骤:
(1).首先加载WinSock库,这里涉及到两个函数:WSAStartup()和
WSACleanup()。使用WSAStartup函数可加载WinSock库;在使
用WinSock库之后用WSACleanup函数释放所使用的资源。
(2).创建套接字,建立一个于TCP服务器的连接。
    servsocket = socket(AF_INET, SOCK_STREAM, 0) 其中AF_INET是协议簇,SOCK_STREAM为套接字的类型。协议簇与不同的套接字类型组合,用于不同的通信协议。参数“0”的实际意义是指定套接字使用的协议。一般指定为0即可。
(3).填充服务器地址结构
sa为Socket地址结构对象,即struct sockaddr_in sa;

memset(&sa, 0, sizeof(sa));
        sa.sin_family                            = AF_INET;
        sa.sin_port                                    = htons(servport);       // u_long
        sa.sin_addr.S_un.S_addr        = htonl(INADDR_ANY);     // u_short
        绑定套接字到服务器地址结构
    bind(servsocket, (const sockaddr *)&sa,sizeof(sa));
(4).监听套接字,指示一个套接字进入连接。
Listen(servsock,5)该函数仅被TCP服务器端调用,等待Client端的请
求的到来。这里的参数“5”表示如果多于5个的连接请求同时出现,那
么头5个请求将被放入等待队列中,等候程序处理,而多出的连接将被丢
弃并产生一个错误(WSAECONNREFUSED)。
(5). 循环接受连接请求,
accept(servsocket, (struct sockaddr *)&cliaddr, &len)
该函数也由TCP服务器调用。它从以完成连接队列头返回下一个已完成的连接。如果已完成队列为空,则导致进程进入睡眠状态。这里servsocket即处于监听连接状态的Server端套接字;参数(struct sockaddr *)&cliaddr是接受连接方的地址;len一个整型指针,指向存放cliaddr的缓冲区的长度。
(6).将Buffer中的内容发给客户端和关闭客户端套接字连接
send(clisocket, buff, strlen(buff), 0); /* 发送给客户 */
         closesocket(clisocket); /* 关闭与客户的连接 */
(7)        .关闭服务套接字连接和释放资源
        closesocket(servsocket);
        WSACleanup();

以上是利用套接字进行网络通讯的全过程。

4.2.4 多线程编程
   Server采用CptrArray指针数组来存放与Client连接的Socket。转发消息的过程主要集中在CptrArray的操作上。对每一个新注册的Client都要穿件一个服务Socket与之相连,并为它分配一个ID同时回送它。这个ID与Socket在
CptrArray中的位置是相关联的。
    由于网络的是通过Socket来实现,所以服务器程序的运行更是离不开它。如图所示:

对于上图的单线程和多线程的选择,作如下考虑:
服务器端如果使用单线程,那么当某用户在进行一次更新时,其他的用户的请求将被屏蔽,因为如果同时处理有可能在接受顺序上出现问题而引起系统崩溃。所以服务器端的接收部分应该用线程的方式独立开来,对每次接收的信息起用一个单线程来处理,完成后系统将自动回收。

  具体的是方法是在服务器的Server类中建立一个OperateString的内部类,顾名思义,就是对从客户端发送过来的数据报中截取出数据段(String)的处理,

OperateString类继承自Thread类,可以通过Start()函数开启一个新线程执行run()函数中的内容。而run()函数则一个StringTokenizer类通过字符串“&&"把客户端发送过来的String分离为一个String[](数组),然后,按照按照客户端打包的顺序提取属性。这样,每个客户端发送的消息都可以同时进行处理而不需要等待。但是线程操作可能导致系统内数据的紊乱,比如某个函数需要修改数组,在这个时间段里,出现了另一个对该数组修改的请求,那么就有可能造成数据混乱而造引起系统的崩溃。

    所以在这里引进一个全局的变量作为标识符locked,在需要修改某个数据的与局前,先判断locked是否为false,是则执行,不是则一直重新判断,一直到该资源被释放,然后该标识设置为true 来锁定资源,在执行完该语句后再将该标识设置为false释放资源。

综上,通过线程的机制,套接字和TCP/IP协议得到简单的网络模型:

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:40:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

4.3 Server编程的实施
4.3.1 消息结构
    既然是基于消息模式的信息传递那么,定义消息的格式是必然的。虽然在 TCP/IP通讯协议中有诸如“数据报”等报文传输格式,但里面的内容可以根据自己的需要来定义:

typedef struct _SMsgData
{
  DWORD     m_dwMsgID;         
  DWORD     m_dwLen;            
  TMsgData  Mgs[2];
}SMsgData;

typedef struct
{
  DWORD m_Size;                  // Real Size of m_Data buffer
  char  m_Data[512];

}TMsgData;

以上的两个结构就是消息的结构:
m_dwMsgID表示消息的名字,区分各个消息;
m_dwLen表示传输的消息缓冲区号,在该Showhand游戏中消息量不是很大,所以两个消息缓冲区(Buffer)就足够了。
TmsgData结构主要是为消息提供适当的缓冲区大小,其中m_Size是消息内容的实际缓冲区空间占有值,数组m_Data[512]即前面将的消息缓冲区的尺寸。值得注意的是一个消息的发送最多使用2个Buffer,如果大小大于2*512(BYTE)那么就应该做相应的特殊处理,否则就可能导致游戏逻辑紊乱,无法进行游戏。
4.3.2消息响应
消息的发送是通过Server响应和Client响应来共同协调完成。做要做的前期的准备是与Client端协调好定义Showhand游戏所需要的MsgID即消息的编号。
在Showhand中我们要定义的消息有:

 A_SHOWHAND_READY;    // 玩家准备游戏开始
 A_SHOWHAND_RESET;    // 对数据得出初始化
 A_SHOWHAND_SEND_POKE;  // 发牌
 A_SHOWHAND_CLIPIN;    //  玩家下注
 A_SHOWHAND_RESULT;    //  游戏结果得到赢家

Server端的消息响应
对于Server端在程序的CRecvGameMsg类,CGameLogic类,CSendGameMsg类。一般服务器端对客户端发过来消息的接收通过CRecvGameMsg来实现;服务器端发送消息到客户端则通过CSendGameMsg来实现。对于Showhand 游戏来说它的玩法和流程是至关重要的,这方面的实现则在CGameLogic中实现。简单的说就是Server收到消息后,给CGameLogic做处理后如需要再发送给Client端那就把处理后的消息发送给Client端,同时游戏也在进行中。

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:40:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

5.整合系统
5.1 需要准备工作
Server和Client之间的整合并不是单独完成之后再开始整合,而是每一个功能模块的构建都是双方共同完成。

5.2 信息同步处理
信息同步,是指让服务器端和客户端共享的一些信息保持一致的操作,比如在线用户列表、图形元素的起点终点、颜色等等。服务器端主要有两个数组,一个用户数组,一个游戏数组。只要保持服务器端上述数组和客户端上述数组同步就能实现。
那么怎么才能达到数据同步呢?我们已开始的考虑是将整个服务器的数据封成一个包发送给客户端,其中包括了所有的用户数组和游戏数组以及一些其他信息。但是这样处理要求服务器向每一个用户都作广播,严重增加了服务器的负担。
因此,我们最后决定将更新方式由全部更新变为增量更新。即每次只传输修改以后的结果,比如客户登录了服务器,服务器上User数组则增加一条消息,就不需要将服务器所有信息一起广播给客户端了,只需要将添加用户的信息和添加的代码广播给各个客户端即可。不难发现,客户端对服务器的操作实际上是一个增量更新的过程。于是,我们在服务器和客户端之间建立一个类似于客户端向服务器端发送消息的机制,只是针对其特点作少量修改,然后再耨个用户对服务器端操作完毕以后,服务器将该用户的操作广播到各个客户端,各个客户端根据该操作进行相应的操作后,向该用户全部更新一次。
5.3 测试和Bug处理
5.3.1 测试的意义
测试是软件开发的基本环节,对于软件品质保障有至关重要的意义,如果没有测试,软件品质根本无法保证。现在软件功能越来越强大,其规模也越来越大,测试的压力和意义也日益显著。
游戏是一个特殊的软件行业,测试的意义也是一样重要的,如果游戏品质得不到保证,存在很多Bug,游戏根本不能达到娱乐玩家的目的。
5.3.2 对Bug进行分析
发现Bug以后应该分析造成这一个Bug的原因并且及时修正,在实际操作中应该有测试人员提供相应发生错误的条件(系统配置、相应的操作)以及相关发生错误的日志,再由技术人员分析,如果无法确认,可以采用断点方法,程序员通过对代码分析,修正错误。
5.3.3 修正存在的Bug
如果再游戏营运中发现错误,一般采用差量更新的方法进行修正,即玩家在进入游戏之前,现自动在服务器上下载相关的更新档案,以更新后的Client进入游戏,差量更新机制可以使得游戏在营运过程中进行Bug的修正和新功能的增加,可以弥补一些失误并且大大延续游戏的寿命。

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-1-5 10:41:00 | 显示全部楼层

Re:我的一个毕业论文游戏,大家帮我看看多提意见

6.系统运行报告
6.1 运行环境
客户端配置:














服务器端配置




服务器组的基本配置






    在此结构下服务器组共使用2台机器配置。建议在测试期先以此配置为基础,当营运人数增加时再对服务器组进行扩充。

6.2 性能报告
配置




状态        Cpu占用(取随机状态)        内存占用(取随机状态)
房间内        6%        23044KB
大厅中        2%        23896KB


Server端每台服务器可支持2000 - 3000人同时在线并同时支持30支游戏。每台DB可同时支持10000-30000人同时在线。









7、结束语
由于经验有限,这个软件的功能并不是十全十美,但是游戏制作水平足以媲美国内普通休闲游戏架构水平,当然,这并不是我们一两个人的功劳,而是四川华义软件有限公司第七开发部全体同仁努力的成果,也是总经理安砥中先生的关心与指导的结果。
游戏开发后期较多的Bug,暴露出架构略显混乱的问题,这是开发经验不足和时间仓促所造成的,在以后的开发中,应该完善这些方面并且做出相应的调整,以求出做更加出色的游戏。
通过这个游戏制作,我们深刻体会到团队协作的重要性,只有团队紧密配合,通过策划、程序、美术人员共同努力,才能做出最后结果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-5 09:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表