软件工程迭代开发第四篇

由于周末我们更新了服务器系统,我周日晚上才拿到,所以这篇博客更新较晚。这篇是补的上周末的博客。

周末我做的内容就是存储下线经验值。

左侧的5是cout的具体经验值。经验条是紫色的那个。

我打一个怪之后会涨10点经验。

然后我关闭游戏,重新登录。

 经验条成功保存。

具体实现是,我们将获取经验的代码放到了服务端。就是用户杀死怪,传信息到服务器,服务器计算涨的经验,然后将数值发回客户端。客户端接收到数值之后,计算出现有经验然后显示。

下面是怪物被玩家打的函数:

bool monster::fight(double damage, int id) {        //被玩家打
    hp -= damage;
    if (hp <= 0) {
        hp = 10;
        initPosition();
        for (int i = 0; i < curmap->csz.size(); i++) {
            if (curmap->csz[i]->p.id == id) {
                curmap->csz[i]->p.getexp(getexp);
            }
        }
    }
    sprintf(buffer, "MG %d %d %d %lf %lf %lf", curmap->id, this->id, 0,wx, wy, hp);
    //Send to 所有玩家
    GengXinMonster(buffer);
    return true;
}

中间那段,if中的内容就是杀怪玩家调用getexp(int ge)函数。

服务端clientplayer.cpp下的getexp(int ge)函数实现如下:

void Player::getexp(int ge) {            //获得经验
    char buf[MAXSIZE + 1];
    exp += ge;
    sprintf(buf, "HE %d %d %d", curmap->id, id, ge);        //发送获得经验消息
    SendAcquireInfo(buf);
    while (exp > maxexp) {
        exp -= maxexp;
        lvup();
    }
}

服务端获得经验值,发送HE消息传给客户端。

而客户端接收信息的代码如下:

else if (c == 'H') {
    ss >> c;
    if (c == 'E') {
        ss >> temp;
        p1.exp += temp;
    }
}

显示经验条可见之前博客。

原文地址:https://www.cnblogs.com/Dmmuistirci/p/5640494.html