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(" [1;31m┌——————————————————————┐[m"); move(11, 0); prints(" [1;31m│ [37m英勇的小鸡 [33m%-10s [31m│[m", d.name); move(12, 0); prints(" [1;31m│ [37m打败了邪恶的怪物 [32m%-10s [31m│[m", p[n].name); } else { move(10, 0); prints(" [1;31m┌——————————————————————┐[m"); move(11, 0); prints(" [1;31m│ [37m武术大会的小鸡 [33m%-10s [31m│[m", d.name); move(12, 0); prints(" [1;31m│ [37m打败了强劲的对手 [32m%-10s [31m│[m", p[n].name); } move(13, 0); sprintf(inbuf1, "%d/%d", d.hexp - oldhexp, d.mexp - oldmexp); prints(" [1;31m│ [37m评价提升了 %-5s 点 技术增加了 %-2d/%-2d 点 [31m│[m", inbuf1, d.hskill - oldhskill, d.mskill - oldmskill); move(14, 0); sprintf(inbuf1, "%d 元", d.money - oldmoney); prints(" [1;31m│ [37m勇敢提升了 %-5d 点 金钱增加了 %-9s [31m│[m", d.brave - oldbrave, inbuf1); move(15, 0); prints(" [1;31m└——————————————————————┘[m"); 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(" [1;31m┌——————————————————————┐[m"); move(11, 0); prints(" [1;31m│ [37m可怜的小鸡 [33m%-10s [31m│[m", d.name); move(12, 0); prints(" [1;31m│ [37m在与 [32m%-10s [37m的战斗中, [31m│[m", p[n].name); move(13, 0); prints(" [1;31m│ [37m不幸地阵亡了,在此特别默哀.......... [31m│[m"); move(14, 0); prints(" [1;31m└——————————————————————┘[m"); pressanykey("小鸡阵亡了...."); pipdie("[1;31m战斗中被打死了...[m ", 1); } else if (d.death == 1 && mode == 2) { clear(); showtitle("电子养小鸡", BBS_FULL_NAME); move(10, 0); prints(" [1;31m┌——————————————————————┐[m"); move(11, 0); prints(" [1;31m│ [37m可怜的小鸡 [33m%-10s [31m│[m", d.name); move(12, 0); prints(" [1;31m│ [37m在与 [32m%-10s [37m的战斗中, [31m│[m", p[n].name); move(13, 0); prints(" [1;31m│ [37m不幸地打输了,记者现场特别报导......... [31m│[m"); move(14, 0); prints(" [1;31m└——————————————————————┘[m"); 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;44;37m 魔法选单 [46m [1]治疗 [2]雷系 [3]冰系 [4]火系 [5]土系 [6]风系 [Q]放弃: [m"); 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, "[1;31m┤[37;41m 可用[%s]一览表 [0;1;31m├————————————[m", 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, "[1;37m[[36m%d[37m] [33m%-10s [37m需要法力: [32m%-6d [37m恢复体力: [32m%-6d [37m恢复疲劳: [32m%-6d[m ", n, p[n].name, p[n].needmp, p[n].hp, p[n].tired); prints(buf); } else if (p[n].hpmode == 2) { sprintf(buf, "[1;37m[[36m%d[37m] [33m%-10s [37m需要法力: [32m%-6d [37m恢复体力到[35m最大值[37m 恢复疲劳到[35m最小值[m ", n, p[n].name, p[n].needmp); prints(buf); } else if (p[n].hpmode == 0) { sprintf(buf, "[1;37m[[36m%d[37m] [33m%-10s [37m需要法力: [32m%-6d [m ", 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 + -
显示快捷键?