软件工程迭代开发第三篇

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

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

整合代码如下:

/*绘制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会出现一些问题。明日会着重解决这个问题。

时间: 2024-10-11 01:17:38

软件工程迭代开发第三篇的相关文章

软件工程迭代开发第五篇

今天开始同组员一起开发技能方面的内容,但还未出成果,所以内容较少. 修改了一个小小的bug,关于新建账号出生的人物经验不对的bug. 这是人物初始化函数(构造函数),exp代表经验,一开始写成了exp=maxexp,所以经验有问题. Player::Player() :tj(1.6,0.2, mapmax / 40.0, mapmax / 20.0){ wx = 1.6; wy = 0.2; movenum = 0; setlv(1); hp = maxhp; exp = 0; fightran

软件工程迭代开发第六篇

今天更新了整个玩耍界面,学会了如何通过二维纹理载入图片. 最终界面如下: 下面的十个框框,左边五个是技能栏,右边五个是道具.这俩要等到整合之后才能体现. 实现方法: 将一张由我们美工画好的界面图加载到程序中并用OpenGL画出. 通过OpenGL的二维纹理加载画出. 在init中加载图片: //加载用户界面 p1.load_UI(ATLLoadTexture("res/hp.png")); 这个load_UI()函数是这样的: void Player::load_UI(int i) {

软件工程课设迭代开发第三天

因为之前的开发中,需求分析没有做的很好,导致,代码结构非常的差,不易扩展,所以,我花费了一整天的时间,去优化代码结构,但仍未完成. 具体改动如下: (1)    在服务端加入map类,及其属性和方法 (2)    将monster类和player类放到map中 (3)    修改所有函数中设计到改变的内容,此部分工作量极大,明天继续

软件工程迭代开发第二篇

今天增加了一些显示上的内容,使我们的游戏更加便于理解.比如,我们加入了血条的显示,而且用颜色区分开自己的角色.别人的角色和怪物.如下图所示. 屏幕下方那一条紫紫的东西就是经验条,长满之后会升级. 下面我将逐个解释每个模块的实现方法. 首先是血条: 自己的血条: glColor3f(0.2, 1, 0.1); glRectf(wx - 0.025, wy + 0.1, wx - 0.025 + (hp / maxhp)* 0.05, wy + 0.085); //显示血条 其他玩家的血条: glC

软件工程迭代开发第一篇

今天我自己的任务是针对用户提的“输入用户名和密码的时候没有光标闪烁,导致我们用户不知道是否选中”问题做的修改. 我给出的初步解决方案是一个十分简单的办法,当鼠标点击框体内部,会将cur变量置1,而在draw()函数中判断,如果cur==1则在框体中画一个小的图形,提示选中.效果图如下图所示: 而具体的实现代码则为: if (cur) { //draw enter line signal glColor3f(1, 1, 1); glBegin(GL_POLYGON); for (int i = 0

(C/C++)基于SharpUI控件库的插件式框架开发--第三篇框架基础服务库

一个框架基础的东西,一般也是操作的最基础的类,比如char.int.bool等,有时出现内存泄露的问题导致错误的抛出,但是C++开发有的时候就算是抛出异常,那也是靠经验来积累才能非常快速准确的找出错误所在,这就需要在框架中需要添加日志管理的接口,日志管理的好处就是开发者自身在找异常时提供参考,另一个就是如果用户操作时出现问题,也可将日志反馈,帮助快速解决问题:总之了为了更好的扩展完善我的框架,我详细列一下这个基础服务库(XPCore)包含内容: 虽说sharpui控件库内封闭好string类,但

基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

上两章节简要的讲解了SIP组件开发接口和开发环境的搭建.在本节将实现Linux 32平台的UAS和UAC,当然该UAS和UAC只实现了注册功能,并且是基于自主开发SIP组件libGBT28181SipComponent.so的,没有这个组件是运行不了的.其他功能在后续章节中讲解. 首先简单讲解一下GBT28181关于注册描述 一. GBT28181注册的流程如下图 电力系统注册稍微复杂点,但原来基本相同.多了个刷新注册的过程. 二.GBT28181关于注册的解释如下 三.SIP协议简介 一个合法

Python开发第三篇

函数 一.函数参数传值 形参:函数在定义的时候给定的参数 实参:函数在运行时赋给的参数: 1 def func(i):#i为定义时的参数,为形参 2 pass 3 func(name)#name为运行时的参数,为实参,实参与形参的名字可以相同 传值方式: 位置传值:按照定义时的顺序,用实参给形参赋值 1 def func(x,y,z): 2 print("x->",x) 3 print("y->",y) 4 print("z->"

PowerBI开发 第三篇:报表设计技巧

最近做了几个PowerBI报表,对PowerBI的设计有了更深的理解,对数据的塑形(sharp data),不仅可以在Data Source中实现,例如在TSQL查询脚本中,而且可以在PowerBI中实现,例如,向数据模型中添加自定义字段,或者在报表数据显示时,根据数据表之间的关系做数据的统计.本文主要介绍数据的塑形和UI设计的微调. 一,创建数据列 PowerBI报表的数据分为数据源(Data Source),数据模型(Data Model),Query,数据从Data Source加载到Da