软件工程迭代开发第五篇

摘要:
今天开始同组员一起开发技能方面的内容,但还未出成果,所以内容较少。修改了一个小小的bug,关于新建账号出生的人物经验不对的bug。这是人物初始化函数,exp代表经验,一开始写成了exp=maxexp,所以经验有问题。Player::Player():tj{wx=1.6;wy=0.2;movenum=0;setlv;hp=maxhp;exp=0;fightrange=0.01;}我还修改了怪物的移动AI。以前是怪物会移动到和玩家重合,现在改成了进入攻击范围就停下了。

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

修改了一个小小的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。以前是怪物会移动到和玩家重合,现在改成了进入攻击范围就停下了。

效果图如下:

软件工程迭代开发第五篇第1张

整个movaAI:

voidmonster::moveAI() {
    doubledx, dy;
    intpid;
    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;
                elsemoveto = 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;
                    elsemoveto = 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)
    {
    }

免责声明:文章转载自《软件工程迭代开发第五篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Wireshark图解教程Hibernate的查询语言之HQL(一)——快速入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何使用 MQTT 报文实现发布订阅功能

MQTT 协议通过交换预定义的MQTT控制报文来通信。下面以 MQTTX 为例,展示如何通过 MQTT 报文实现发布订阅功能。 Connect 连接 MQTT 协议基于 TCP/IP 协议,MQTT Broker 和 Client 都有需要有 TCP/IP 地址。 Broker 如果你暂时没有一个可用的 MQTT Broker,EMQ X 提供了一个公共...

用 S5PV210 学习 Linux (一) 刷机(一)

简介: 习惯了 用 keil 或者 IAR  一键下载 (烧写) 代码,S5PV210 貌似就不能这么简单用 仿真器的 方式 下载代码了,因此 学习 S5PV210 的第一步就是 学习怎么下载代码,下面就是学习过程。2017年3月13日13:11:45,SUOZHANG. 1、因为我的 电脑是 win7 64位,官方三星  DNW刷机 软件没有 很好的 支...

详解angularJs中自定义directive的数据交互

就我对directive的粗浅理解,它一般用于独立Dom元素的封装,应用场合为控件重用和逻辑模块分离。后者我暂时没接触,但数据交互部分却是一样的。所以举几个前者的例子,以备以后忘记。 directive本身的作用域$scope可以选择是否封闭,不封闭则和其controller共用一个作用域$scope。例子如下: <body ng-app="myAp...

应用在App Store上被拒重新提交审核流程指南

1. 打开地址: https://itunesconnect.apple.com 2. 输入APPID和密码后,再输入绑定手机后的验证码。     3. 查看“”我的APP“”,如果显示拒绝,可能需打开Mac的Xcode重新修改部分代码。 4. 打开项目,按原因修改后,连接手机,查看Xcode桌上角是否已经连接手机 5. 如果显示了手机图标,则就可以进...

Linux新建用户并赋予文件读写权限

Linux命令 新建用户,并赋予文件夹权限 groupadd mvn #添加一个用户组 useradd -r -g mvn -s /bin/false mvn #添加一个用户 passwd mvn #修改mvn用户的密码 cd /usr/local/tomcat/apache-tomcat-7.0.54/webapps #...

Windows win32 API 类库 硬件

// 硬件 Win32_Processor, // CPU 处理器 Win32_PhysicalMemory, // 物理内存条 Win32_Keyboard, // 键盘 Win32_PointingDevice, // 点输入设备,包括鼠标。 Win32_FloppyDrive, // 软盘驱动器 Win...