• 软件工程迭代开发第三篇


    今天将之前的用户界面显示的内容集合到了一个函数中,并且增加了屏幕左上角的角色状态栏,并且加入了魔法这项状态。界面与下图所示:

    因为还没有技能,所以魔法还不能减。这也是为之后加入技能做出准备。图中灰色的框是头像框,灰色方块是默认的头像。

    整合代码如下:

    /*绘制UI界面*/
    void Player::paintUI()
    {
        //计算用户界面的x,y值
        double x, y;
        x = wx;
        y = wy;
        if (x < 1)
            x = 1;
        else if (x > mapmax - 1)
            x = mapmax - 1;
        if (y < 1)
            y = 1;
        else if (y > mapmax - 1)
            y = mapmax - 1;
    
        /*下面是显示经验条模块*/
        //显示经验框
        glColor3f(0.8, 0.8, 0.8);
        glBegin(GL_POLYGON);
        glVertex2f(x - 1, y - 0.982);
        glVertex2f(x + 1, y - 0.982);
        glVertex2f(x + 1, y - 1);
        glVertex2f(x - 1, y - 1);
        glEnd();
        glColor3f(0.6, 0.2, 1);
    
        //显示经验条
        glRectf(x - 1, y - 0.985, x - 1 + ((double)exp / (double)maxexp) * 2, y - 0.998);
        /*显示经验条模块到此为止*/
    
        /*下面是显示屏幕左上角的头像及血量框*/
        //画出头像框
        glColor3f(1, 1, 1);
        glBegin(GL_LINE_LOOP);
        glVertex2f(x - 0.96, y + 0.925);
        glVertex2f(x - 0.83, y + 0.925);
        glVertex2f(x - 0.83, y + 0.73);
        glVertex2f(x - 0.96, y + 0.73);
        glEnd();
        //画状态框(血条什么的)
        //血条
        glColor3f(1, 1, 1);
        glBegin(GL_LINE_LOOP);
        glVertex2f(x - 0.83, y + 0.925);
        glVertex2f(x - 0.5, y + 0.925);
        glVertex2f(x - 0.5, y + 0.85);
        glVertex2f(x - 0.83, y + 0.85);
        glEnd();
        //魔法条
        glColor3f(1, 1, 1);
        glBegin(GL_LINE_LOOP);
        glVertex2f(x - 0.83, y + 0.85);
        glVertex2f(x - 0.5, y + 0.85);
        glVertex2f(x - 0.5, y + 0.78);
        glVertex2f(x - 0.83, y + 0.78);
        glEnd();
        //状态条(待加)
        /*左上角头像框模块显示完毕*/
    
        /*下面是显示屏幕左上角的头像及血量*/
        //画头像
        glColor3f(0.7, 0.7, 0.7);
        glBegin(GL_POLYGON);
        glVertex2f(x - 0.959, y + 0.924);
        glVertex2f(x - 0.8305, y + 0.924);
        glVertex2f(x - 0.8305, y + 0.731);
        glVertex2f(x - 0.959, y + 0.731);
        glEnd();
        //画实际血条
        glColor3f(1, 0, 0);
        glBegin(GL_POLYGON);
        glVertex2f(x - 0.829, y + 0.924);
        glVertex2f(x - 0.829 + (hp / maxhp)*0.3285, y + 0.924);
        glVertex2f(x - 0.829 + (hp / maxhp)*0.3285, y + 0.851);
        glVertex2f(x - 0.829, y + 0.851);
        glEnd();
        //画实际魔法条
        glColor3f(0, 0, 1);
        glBegin(GL_POLYGON);
        glVertex2f(x - 0.829, y + 0.849);
        glVertex2f(x - 0.829 + (mp / maxmp)*0.3285, y + 0.849);
        glVertex2f(x - 0.829 + (mp / maxmp)*0.3285, y + 0.781);
        glVertex2f(x - 0.829, y + 0.781);
        glEnd();
        /*头像及血量显示完毕*/
    
        /*显示血量数值以及魔法量数值*/
        //显示血量
        char buf[20];
        glColor3f(1, 1, 1);
        sprintf(buf, "%.0lf/%.0lf", hp, maxhp);
        glRasterPos2f(x - 0.69, y + 0.877);
        drawString(buf);
        //显示魔法
        glColor3f(1, 1, 1);
        sprintf(buf, "%.0lf/%.0lf", mp, maxmp);
        glRasterPos2f(x - 0.69, y + 0.805);
        drawString(buf);
        //显示等级
        glColor3f(1, 1, 1);
        sprintf(buf, "lv:%d", lv);
        glRasterPos2f(x - 0.915, y + 0.68);
        drawString(buf);
        /*显示状态数值完毕*/
    }

    因为所有用户界面都是跟着镜头走的,所以只要在一开始计算出视角位置,剩下的只是画图的话就很简单。耗费时间的只是试出位置与大小。

    至于mp和maxmp两项如何添加只能看最终版本,因为改动的地方实在是太多了。

    当然今天还修复了一个bug,就是当用户杀怪后只在客户端涨了经验值,服务器并没有计算增加的经验值。这个没办法截图显示。下面是代码:

    //查询杀死这个怪物的用户
    list<client>::iterator it3;
    for (it3 = CL1.begin(); it3 != CL1.end(); it3++) {
         if (id == it3->p.id) {
             break;
         }
    }
    it3->p.exp += getexp;            //加经验

    这个是在服务端的Monster.cpp中实现的。服务端当怪物被杀的时候会重新生成一个新的怪物,就是在这个时候给杀死这个怪的玩家加上相应的经验。我们通过杀死这个怪物的玩家的id在玩家链表中查找出相对应的玩家,把他的经验加上。

    此外关于人物下线时属性的记录(我们现在是将之写入txt),由于加入了一个mp属性,需要修改的地方略多,我还没有完全改完,所以在重新登陆时用户的mp会出现一些问题。明日会着重解决这个问题。

  • 相关阅读:
    C# 文件上传下载
    javaScript的三种储存方式
    XDocument常用属性
    NoSQL
    SQLserver 的分页存储过程
    Redis Wendows安装步骤
    C#和JS获取时间
    api跨域
    以太坊开发DApp入门教程——区块链投票系统(一)
    android和java以太坊开发区块链应用使用web3j类库
  • 原文地址:https://www.cnblogs.com/Dmmuistirci/p/5631012.html
Copyright © 2020-2023  润新知