网络游戏demo开发范例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)

网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)


本篇地址 http://blog.csdn.net/changjixiong/article/details/8065835,转载请注明出处

version17  csdn下载地址请猛击这里

主要内容:增加了玩家PK 重构了部分服务端代码

所属部分:客户端 服务器端

代码地址 https://github.com/changjixiong/MMO-RPGGame, 如何获得代码,请参考如何用SVN从github上检出代码的不同版本

邮件地址:changjixiong@gmail.com

本系列目录


本次更新,重构了服务端的部分代码,增加了玩家PK

使用方法:将代码编译,将GameClient.exepic文件夹,拷贝到文件夹role1(内含配置文件)、role2、role3中

运行GameServer文件夹中的GameServer.py(需要安装python2.X),点击role1的GameClient.exe,登陆玩家1,需要登陆玩家2,3,各位看官应该知道怎么做吧


增加玩家PK,只需要做几个步骤

Sprite部分

1.在Sprite中增加动作序列 int man_Attack[8][10],int man_Die[8][10]

2.添加资源 pic  120~169, 280~329,以及记录坐标偏移的txt文件

3.在Sprite中加载对应的资源,只需要在函数int SpriteResource::init()里面增加

	Load_Frame(120, 50);	
	for (i=0;i<DIRCOUNT;i++)
	{
		Load_Animation(ATTACK+i, 10, man_Attack[i]);
	}

	Load_Frame(280, 50);	
	for (i=0;i<DIRCOUNT;i++)
	{
		Load_Animation(DIE+i, 10, man_Die[i]);
	}
4.在函数void Sprite::Animate()里面增加判断,如果死了,就躺在地下,直到收到复活消息
5.增加函数void Sprite::Attack(int x, int y)用于切换攻击动作,增加函数void Sprite::Die(int x, int y)用于切换死亡动作

6.增加函数bool Sprite::NeedRevive()用于判断是否该复活了(需要复活了,就发消息给服务器,服务器确认以后,发回,客户端接收并复活玩家)


GameWorld部分

1.在enum Action中 增加ATTACK、DIE、SPRITEREVIVE 表示攻击、死亡、复活

2.在函数 GameWorld::HandleMsg()里面增加了对攻击消息,死亡消息和复活消息的处理

当然了,用循环查找比较低效,在以后的重构中,将把循环查找改为映射查找

		case ATTACK:
			for (iter=vecPplayer.begin(); iter!=vecPplayer.end();iter++)
			{
				if ((*iter)->GetID() == id)
				{
					(*iter)->Attack(x,y);
				}
			}	
			break;

		case DIE:
			for (iter=vecPplayer.begin(); iter!=vecPplayer.end();iter++)
			{
				if ((*iter)->GetID() == id)
				{
					(*iter)->Die(x,y);
				}
			}	
			break;

		case SPRITEREVIVE:
			for (iter=vecPplayer.begin(); iter!=vecPplayer.end();iter++)
			{
				if ((*iter)->GetID() == id)
				{
					(*iter)->ChangeAction(STAND);
					(*iter)->ChangePos(x, y);
				}
			}
			break;

3.增加函数GameWorld::GenerateMsg(),用来生产复活消息,发送给服务端(以后这个函数还将按逻辑产生其他非用户点击相关的消息)

4.增加函数GameWorld::haveSprite(int x, int y)用来判断是否点击到玩家(自己除外)

5.增加函数 GameWorld::SetMessageFromInput(UINT msg, int x, int y)用来判断是否攻击其他玩家并产生消息

服务器部分

1.actionDic 中增加 ATTACK、DIE、SPRITEREVIVE
2.增加处理器class HandlerDie 处理玩家死亡,等待复活的逻辑

玩家PK,HP为3,每次攻击HP减少1,也就是砍3刀就死,然后,在 320,240复活,如图:

网络游戏demo开发范例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)
1楼osoon6小时前
支持楼主,剥去浮华的动画设计,现在游戏还剩下什么?终有一天人们的内心会更期待有深度的东西,而不是眼球。