软件工程迭代开发第五篇

今天开始同组员一起开发技能方面的内容,但还未出成果,所以内容较少。

修改了一个小小的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;
    fightrange = 0.01;
}

我还修改了怪物的移动AI。以前是怪物会移动到和玩家重合,现在改成了进入攻击范围就停下了。

效果图如下:

整个movaAI:

void monster::moveAI() {
    double dx, dy;
    int pid;
    int moveto=5;
    if (GetnearPlayer(&pid, &dx, &dy) > findenemyrange) {
        if (movefx == 0) {            //站在原地
            moveto = random(4);
            movef = 0;
        }
        else {                        //之前在移动
            if (movef <=2) {        //向移动方向走的步数小于3步,则继续朝这个方向前进
                movef++;
                if (movefx == 4)
                    moveto = 1;
                else if (movefx == 2)
                    moveto = 0;
                else if (movefx == 1)
                    moveto = 2;
                else if (movefx == 3)
                    moveto = 3;
                else
                    moveto = 4;
            }
            else {                    //否则随机
                movef = 0;
                moveto = random(15);    //临时存储
                if (moveto <= 6) {    //1/2几率继续朝该方向前进
                    if (movefx == 4)
                        moveto = 1;
                    else if (movefx == 2)
                        moveto = 0;
                    else if (movefx == 1)
                        moveto = 2;
                    else if (movefx == 3)
                        moveto = 3;
                    else
                        moveto = 4;
                }
                else {                //1/2几率随机方向移动或者停止
                    moveto = random(6);
                }
            }
        }
        switch (moveto)
        {
        case 0:
            movedown(movespeed);
            movefx = 2;
                break;
        case 1:
            moveup(movespeed);
            movefx = 4;
                break;
        case 2:
            moveleft(movespeed);
            movefx = 1;
                break;
        case 3:
            moveright(movespeed);
            movefx = 3;
                break;
        default:
            movefx = 0;
            sprintf(buffer, "MG %d %d %d %lf %lf %lf", curmap->id, id, 0, wx, wy, hp);
            GengXinMonster(buffer);
            break;
        }
    }
    else if (GetnearPlayer(&pid, &dx, &dy) < 0.06)
    {
    }
    else {
        if (abs(dx) >=abs(dy)) {
            if (dx < -movespeed) {
                if (moveleft(movespeed)) {

                }
                else {
                    if (dy < -movespeed) {
                        if (movedown(movespeed)) {

                        }
                    }
                    else if (dy >movespeed) {
                        if (moveup(movespeed)) {

                        }
                    }

                }
            }
            else if (dx > movespeed) {
                if (moveright(movespeed)) {

                }
                else {
                    if (dy < -movespeed) {
                        if (movedown(movespeed)) {

                        }
                    }
                    else if (dy >movespeed) {
                        if (moveup(movespeed)) {

                        }
                    }
                }
            }
        }
        else{
            if (dy < -movespeed) {
                if (movedown(movespeed)) {

                }
                else {
                        if (dx < -movespeed) {
                            if (moveleft(movespeed)) {

                            }
                        }
                        else if (dx > movespeed) {
                            if (moveright(movespeed)) {

                            }
                        }
                }
            }
            else if (dy >movespeed) {
                if (moveup(movespeed)) {

                }
                else {
                    if (dx < -movespeed) {
                        if (moveleft(movespeed)) {

                        }
                    }
                    else if (dx > movespeed) {
                        if (moveright(movespeed)) {

                        }
                    }
                }
            }
        }
    }
}

在整个moveAI中加入下面这段,只要距离足够近就啥也不做。

else if (GetnearPlayer(&pid, &dx, &dy) < 0.06)
    {
    }
时间: 2024-08-09 23:55:12

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

软件工程迭代开发第六篇

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

软件工程迭代开发第三篇

今天将之前的用户界面显示的内容集合到了一个函数中,并且增加了屏幕左上角的角色状态栏,并且加入了魔法这项状态.界面与下图所示: 因为还没有技能,所以魔法还不能减.这也是为之后加入技能做出准备.图中灰色的框是头像框,灰色方块是默认的头像. 整合代码如下: /*绘制UI界面*/ void Player::paintUI() { //计算用户界面的x,y值 double x, y; x = wx; y = wy; if (x < 1) x = 1; else if (x > mapmax - 1) x

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

(1)    优化客户端代码结构 (2)    优化通信协议 详情见小组日报 (3)    优化人物模型,使人物和怪物拥有体积 (4)    优化攻击方式,使得攻击范围判定更加合理 (1)    优化客户端代码结构 (2)    优化通信协议 详情见小组日报 (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

软件工程课设迭代开发第五至七天

继续编写技能部分,为了保证代码的整洁,所以把player.h的参数传传送给skill.h,在skill.cpp中进行代码修改. 所运用的知识: 构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法. 如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建. 构造原则如下:

API开发第五篇:服务端整合支付宝快捷移动支付接口

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"> </span>在开发中需要使用支付宝的快捷移动支付接口,通过文档知道,当完成客户端请求完成后,支付宝服务器会异步通知客户端的服务器.这里的关键是提供给支付宝的这个用于异步通知的con

微信开发第五篇手机端微信公众号自定义菜单及OAuth2.0授权页面

说到自定义菜单,首先要想到调用微信的接口,其实微信公众号开发本身就是看对不对微信公众号接口的熟悉程度,我也是在项目中才开始接触微信公众号开发的,很感谢公司能给我这个项目机会.其实对于一个程序员来说最宝贵的是他的学习能力,而不是经验,不扯没用的了. 菜单上一篇讲到了怎么查看微信开发文档,那么很容易找到自定义菜单管理,根据里面的内容可以做一下思路 手机微信客户端与微信服务器交互,再由微信服务器与咱们自己的服务器交互,在第一次交互时先删除原始的那种可以打字的那种菜单,之后设置自己新的菜单,最后把自己的

Swift开发第五篇——四个知识点(Struct Mutable方法&amp;Tuple&amp;autoclosure&amp;Optional Chain)

本篇分三部分: 一.Struct Mutable方法 二.多元组(Tuple) 的使用 三.autoclosure 的使用 四.Optional Chain 的使用 一.Struct Mutable方法 直接上代码: struct User { var weight: Int var height: Int // 这里会报错 Left side of mutating operator isn't mutable:'self' is immutable // 因为 Struct 出来的变量是 i