pip_fight.c

来自「bbs server linux平台下软件源码」· C语言 代码 · 共 994 行 · 第 1/3 页

C
994
字号
            case 2:                if (rand() % 11 == 10) {                    pressanykey("对方没打中..:~~~");                } else {                    if (m.hp > 5) {                        if (dresistmore == 0)                            minjure = (m.attack / 5 - d.resist / 12 + rand() % 12 + 6 - d.speed / 30 + m.speed / 30 - d.hskill / 200 - d.hexp / 200);                        else                            minjure = (m.attack / 5 - d.resist / 8 + rand() % 12 + 6 - d.speed / 30 + m.speed / 30 - d.hskill / 200 - d.hexp / 200);                        if (minjure <= 15)                            minjure = 20;                        d.hp -= minjure;                        m.hp -= 5;                        sprintf(buf, "对方全力攻击, 生命力减低%d", minjure);                        d.tired += rand() % 4 + 4;                        pressanykey(buf);                    } else {                        if (dresistmore == 0)                            minjure = (m.attack / 9 - d.resist / 12 + rand() % 12 + 4 - d.speed / 30 + m.speed / 25 - d.hexp / 200 - d.hskill / 200);                        else                            minjure = (m.attack / 9 - d.resist / 8 + rand() % 12 + 3 - d.speed / 30 + m.speed / 25 - d.hexp / 200 - d.hskill / 200);                        if (minjure <= 0)                            minjure = 4;                        d.hp -= minjure;                        d.tired += rand() % 3 + 2;                        sprintf(buf, "对方普通攻击,生命力减低%d", minjure);                        pressanykey(buf);                    }                }                break;            case 3:                if (rand() % 5 > 0 && m.mp > 20) {                    if (rand() % 6 > 0 && m.mp >= 50) {                        if (m.mp >= 1000) {                            minjure = 500;                            m.mp -= (500 + rand() % 300);                            if (rand() % 2)                                sprintf(inbuf1, "热火魔");                            else                                sprintf(inbuf1, "寒气鬼");                        } else if (m.mp < 1000 && m.mp >= 500) {                            minjure = 300;                            m.mp -= (300 + rand() % 200);                            if (rand() % 2)                                sprintf(inbuf1, "狂水怪");                            else                                sprintf(inbuf1, "怒土虫");                        } else if (m.mp < 500 && m.mp >= 200) {                            minjure = 100;                            m.mp -= (100 + rand() % 100);                            if (rand() % 2)                                sprintf(inbuf1, "迷魂鬼差");                            else                                sprintf(inbuf1, "石怪");                        } else if (m.mp < 200 && m.mp >= 50) {                            minjure = 50;                            m.mp -= 50;                            if (rand() % 2)                                sprintf(inbuf1, "鬼木魂");                            else                                sprintf(inbuf1, "风妖");                        }                        minjure = minjure - d.resist / 50 - d.mresist / 10 - d.mskill / 200 - d.mexp / 200 + rand() % 10;                        if (minjure < 0)                            minjure = 15;                        d.hp -= minjure;                        d.mresist += rand() % 2 + 1;                        sprintf(buf, "对方招换了%s,你受伤了%d点", inbuf1, minjure);                        pressanykey(buf);                    } else {                        m.mp -= 20;                        m.hp += 130 + rand() % 20;                        if (m.hp > m.maxhp)                            m.hp = m.maxhp;                        pressanykey("对方使用魔法治疗了自己...");                    }                } else {                    mresistmore = 1;                    pressanykey("对方加强防御....");                }                break;            case 4:                d.money += (m.money + m.money / 2) / 3 + rand() % 10;                d.hskill += rand() % 4 + 3;                d.brave += rand() % 3 + 2;                m.death = 1;                sprintf(buf, "对方先闪了..但掉了一些钱给你...");                pressanykey(buf);                break;            }        }        if (m.death == 1) {            clear();            showtitle("电子养小鸡", BBS_FULL_NAME);            if (mode == 1) {                move(10, 0);                prints("            ┌——————————————————————┐");                move(11, 0);                prints("            │  英勇的小鸡 %-10s                     │", d.name);                move(12, 0);                prints("            │  打败了邪恶的怪物 %-10s               │", p[n].name);            } else {                move(10, 0);                prints("            ┌——————————————————————┐");                move(11, 0);                prints("            │  武术大会的小鸡 %-10s                 │", d.name);                move(12, 0);                prints("            │  打败了强劲的对手 %-10s               │", p[n].name);            }            move(13, 0);            sprintf(inbuf1, "%d/%d", d.hexp - oldhexp, d.mexp - oldmexp);            prints("            │  评价提升了 %-5s 点  技术增加了 %-2d/%-2d 点  │", inbuf1, d.hskill - oldhskill, d.mskill - oldmskill);            move(14, 0);            sprintf(inbuf1, "%d 元", d.money - oldmoney);            prints("            │  勇敢提升了 %-5d 点  金钱增加了 %-9s │", d.brave - oldbrave, inbuf1);            move(15, 0);            prints("            └——————————————————————┘");            if (m.hp <= 0)                pressanykey("对方死掉罗..所以你赢罗..");            else if (m.hp > 0)                pressanykey("对方落跑罗..所以算你赢罗.....");            winorlose = 1;        }        if (d.death == 1 && mode == 1) {            clear();            showtitle("电子养小鸡", BBS_FULL_NAME);            move(10, 0);            prints("            ┌——————————————————————┐");            move(11, 0);            prints("            │  可怜的小鸡 %-10s                     │", d.name);            move(12, 0);            prints("            │  在与 %-10s 的战斗中,                │", p[n].name);            move(13, 0);            prints("            │  不幸地阵亡了,在此特别默哀..........      │");            move(14, 0);            prints("            └——————————————————————┘");            pressanykey("小鸡阵亡了....");            pipdie("战斗中被打死了...  ", 1);        } else if (d.death == 1 && mode == 2) {            clear();            showtitle("电子养小鸡", BBS_FULL_NAME);            move(10, 0);            prints("            ┌——————————————————————┐");            move(11, 0);            prints("            │  可怜的小鸡 %-10s                     │", d.name);            move(12, 0);            prints("            │  在与 %-10s 的战斗中,                │", p[n].name);            move(13, 0);            prints("            │  不幸地打输了,记者现场特别报导.........   │");            move(14, 0);            prints("            └——————————————————————┘");            pressanykey("小鸡打输了....");        }    }    while ((pipkey != '6') && (d.death != 1) && (m.death != 1)           && (mankey != 8));    return winorlose;}/*---------------------------------------------------------------------------*//* 战斗魔法函式                                                              *//*                                                                           *//*---------------------------------------------------------------------------*//*进入使用魔法选单*/int pip_magic_menu(){                               /*战斗中法术的应用 */    char buf[256];    int magicnum = 0;    int injure;                 /*伤害力 */    int pipkey;    do {        move(b_lines, 0);        clrtoeol();        move(b_lines, 0);        sprintf(buf, "  魔法选单    [1]治疗 [2]雷系 [3]冰系 [4]火系 [5]土系 [6]风系 [Q]放弃: ");        move(b_lines, 0);        prints(buf);        pipkey = igetkey();        switch (pipkey) {        case '1':              /*治疗法术 */            d.magicmode = 1;            injure = pip_magic_doing_menu(treatmagiclist);            break;        case '2':              /*雷系法术 */            d.magicmode = 2;            injure = pip_magic_doing_menu(thundermagiclist);            break;        case '3':              /*冰系法术 */            d.magicmode = 3;            injure = pip_magic_doing_menu(icemagiclist);            break;        case '4':              /*炎系法术 */            d.magicmode = 4;            injure = pip_magic_doing_menu(firemagiclist);            show_fight_pic(341);            pressanykey("小鸡使用了炎系法术");            break;        case '5':              /*土系法术 */            d.magicmode = 5;            injure = pip_magic_doing_menu(earthmagiclist);            break;        case '6':              /*风系法术 */            d.magicmode = 6;            injure = pip_magic_doing_menu(windmagiclist);            break;#ifdef MAPLE        case Ctrl('R'):            if (currutmp->msgs[0].last_pid) {                extern screenline *big_picture;                screenline *screen0 = calloc(t_lines, sizeof(screenline));                memcpy(screen0, big_picture, t_lines * sizeof(screenline));                show_last_call_in();                my_write(currutmp->msgs[0].last_pid, "水球丢回去:");                memcpy(big_picture, screen0, t_lines * sizeof(screenline));                free(screen0);                redoscr();            }            break;#endif                          // END MAPLE        }    }    while ((pipkey != '1') && (pipkey != '2') && (pipkey != '3')           && (pipkey != '4') && (pipkey != '5') && (pipkey != '6')           && (pipkey != 'Q') && (pipkey != 'q') && (d.nodone == 0));    if ((pipkey == 'Q') || (pipkey == 'q')) {        d.nodone = 1;    }    return injure;}/*魔法视窗*/int pip_magic_doing_menu(p)     /*魔法画面 */struct magicset *p;{    register int n = 1;    register char *s;    char buf[256];    char ans[5];    int pipkey;    int injure = 0;    d.nodone = 0;    clrchyiuan(6, 18);    move(7, 0);    sprintf(buf, "┤   可用[%s]一览表   ├————————————", p[0].name);    prints(buf);    while ((s = p[n].name) && strcmp(s, "NULL") && (p[n].needmp <= d.mp)) {        move(7 + n, 4);        if (p[n].hpmode == 1) {            sprintf(buf, "[%d] %-10s  需要法力: %-6d  恢复体力: %-6d 恢复疲劳: %-6d   ", n, p[n].name, p[n].needmp, p[n].hp, p[n].tired);            prints(buf);        } else if (p[n].hpmode == 2) {            sprintf(buf, "[%d] %-10s  需要法力: %-6d  恢复体力到最大值 恢复疲劳到最小值  ", n, p[n].name, p[n].needmp);            prints(buf);        } else if (p[n].hpmode == 0) {            sprintf(buf, "[%d] %-10s  需要法力: %-6d              ", n, p[n].name, p[n].needmp);            prints(buf);        }        n++;    }    n -= 1;    do {        move(16, 4);        sprintf(buf, "你想使用那一个%8s呢?  [Q]放弃:", p[0].name);#ifdef MAPLE        getdata(16, 4, buf, ans, 2, 1, 0);#else        getdata(16, 4, buf, ans, 2, DOECHO, true);#endif                          // END MAPLE        if (ans[0] != 'q' && ans[0] != 'Q') {            pipkey = atoi(ans);        }    }    while (ans[0] != 'q' && ans[0] != 'Q' && (pipkey > n || pipkey <= 0));    if (ans[0] != 'q' && ans[0] != 'Q') {#ifdef MAPLE        getdata(17, 4, "确定使用吗? [Y/n]", ans, 2, 1, 0);#else        getdata(17, 4, "确定使用吗? [Y/n]", ans, 2, DOECHO, true);#endif                          // END MAPLE        if (ans[0] != 'n' && ans[0] != 'N') {            if (p[pipkey].hpmode == 1) {                d.hp += p[pipkey].hp;                d.tired -= p[pipkey].tired;                d.mp -= p[pipkey].needmp;                if (d.hp > d.maxhp)                    d.hp = d.maxhp;                if (d.tired < 0)                    d.tired = 0;                injure = 0;            } else if (p[pipkey].hpmode == 2) {                d.hp = d.maxhp;                d.mp -= p[pipkey].needmp;                d.tired = 0;                injure = 0;            } else {                injure = (p[pipkey].hp - rand() % 5);                d.mp -= p[pipkey].needmp;            }            d.mexp += rand() % 3 + pipkey;        } else {            d.nodone = 1;            injure = 0;        }    } else {        d.nodone = 1;        injure = 0;    }    return injure;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?