pip_fight.c

来自「linux/unix环境下的建站系统」· C语言 代码 · 共 1,277 行 · 第 1/3 页

C
1,277
字号
							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;						temppress(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);						temppress(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);						temppress(buf);					} else {						m.mp -= 20;						m.hp += 130 + rand() % 20;						if (m.hp > m.maxhp)							m.hp = m.maxhp;						temppress						    ("对方使用魔法治疗了自己...");					}				} else {					mresistmore = 1;					temppress("对方加强防御....");				}				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, "对方先闪了..但掉了一些钱给你...");				temppress(buf);				break;            default:                break;			}		}		if (m.death == 1) {			clear();			showtitle("电子养小鸡", BBS_FULL_NAME);			if (mode == 1) {				move(10, 0);				prints				    ("            \033[1;31m┌——————————————————————┐\033[m");				move(11, 0);				prints				    ("            \033[1;31m│  \033[37m英勇的小鸡 \033[33m%-10s                     \033[31m│\033[m",				     d.name);				move(12, 0);				prints				    ("            \033[1;31m│  \033[37m打败了邪恶的怪物 \033[32m%-10s               \033[31m│\033[m",				     p[n].name);			} else {				move(10, 0);				prints				    ("            \033[1;31m┌——————————————————————┐\033[m");				move(11, 0);				prints				    ("            \033[1;31m│  \033[37m武术大会的小鸡 \033[33m%-10s                 \033[31m│\033[m",				     d.name);				move(12, 0);				prints				    ("            \033[1;31m│  \033[37m打败了强劲的对手 \033[32m%-10s               \033[31m│\033[m",				     p[n].name);			}			move(13, 0);			sprintf(inbuf1, "%d/%d", d.hexp - oldhexp,				d.mexp - oldmexp);			prints			    ("            \033[1;31m│  \033[37m评价提升了 %-5s 点  技术增加了 %-2d/%-2d 点  \033[31m│\033[m",			     inbuf1, d.hskill - oldhskill,			     d.mskill - oldmskill);			move(14, 0);			sprintf(inbuf1, "%d 元", d.money - oldmoney);			prints			    ("            \033[1;31m│  \033[37m勇敢提升了 %-5d 点  金钱增加了 %-9s \033[31m│\033[m",			     d.brave - oldbrave, inbuf1);			move(15, 0);			prints			    ("            \033[1;31m└——————————————————————┘\033[m");			if (m.hp <= 0)				temppress("对方死掉罗..所以你赢罗..");			else if (m.hp > 0)				temppress("对方落跑罗..所以算你赢罗.....");			winorlose = 1;		}		if (d.death == 1 && mode == 1) {			clear();			showtitle("电子养小鸡", BBS_FULL_NAME);			move(10, 0);			prints			    ("            \033[1;31m┌——————————————————————┐\033[m");			move(11, 0);			prints			    ("            \033[1;31m│  \033[37m可怜的小鸡 \033[33m%-10s                     \033[31m│\033[m",			     d.name);			move(12, 0);			prints			    ("            \033[1;31m│  \033[37m在与 \033[32m%-10s \033[37m的战斗中,                \033[31m│\033[m",			     p[n].name);			move(13, 0);			prints			    ("            \033[1;31m│  \033[37m不幸地阵亡了,在此特别默哀..........      \033[31m│\033[m");			move(14, 0);			prints			    ("            \033[1;31m└——————————————————————┘\033[m");			temppress("小鸡阵亡了....");			pipdie("\033[1;31m战斗中被打死了...\033[m  ", 1);		} else if (d.death == 1 && mode == 2) {			clear();			showtitle("电子养小鸡", BBS_FULL_NAME);			move(10, 0);			prints			    ("            \033[1;31m┌——————————————————————┐\033[m");			move(11, 0);			prints			    ("            \033[1;31m│  \033[37m可怜的小鸡 \033[33m%-10s                     \033[31m│\033[m",			     d.name);			move(12, 0);			prints			    ("            \033[1;31m│  \033[37m在与 \033[32m%-10s \033[37m的战斗中,                \033[31m│\033[m",			     p[n].name);			move(13, 0);			prints			    ("            \033[1;31m│  \033[37m不幸地打输了,记者现场特别报导.........   \033[31m│\033[m");			move(14, 0);			prints			    ("            \033[1;31m└——————————————————————┘\033[m");			temppress("小鸡打输了....");		}	}	while ((pipkey != '6') && (d.death != 1) && (m.death != 1)	       && (mankey != 8));	return winorlose;}/*---------------------------------------------------------------------------*//* 战斗魔法函式                                                              *//*                                                                           *//*---------------------------------------------------------------------------*//*进入使用魔法选单*/intpip_magic_menu(){				/*战斗中法术的应用 */	char buf[256];	int injure=0;		/*伤害力 */	int pipkey;	do {		move(b_lines, 0);		clrtoeol();		move(b_lines, 0);		sprintf(buf,			"\033[1;44;37m  魔法选单  \033[46m  [1]治疗 [2]雷系 [3]冰系 [4]火系 [5]土系 [6]风系 [Q]放弃: \033[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);			temppress("小鸡使用了炎系法术");			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(const struct magicset *p){	register int n = 1;	register const char *s;	char buf[256];	char ans[5];	int pipkey = 0;	int injure = 0;	d.nodone = 0;	clrchyiuan(6, 18);	move(7, 0);	sprintf(buf,		"\033[1;31m┤\033[37;41m   可用[%s]一览表   \033[0;1;31m├————————————\033[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,				"\033[1;37m[\033[36m%d\033[37m] \033[33m%-10s  \033[37m需要法力: \033[32m%-6d  \033[37m恢复体力: \033[32m%-6d \033[37m恢复疲劳: \033[32m%-6d\033[m   ",				n, p[n].name, p[n].needmp, p[n].hp, p[n].tired);			prints(buf);		} else if (p[n].hpmode == 2) {			sprintf(buf,				"\033[1;37m[\033[36m%d\033[37m] \033[33m%-10s  \033[37m需要法力: \033[32m%-6d  \033[37m恢复体力到\033[35m最大值\033[37m 恢复疲劳到\033[35m最小值\033[m  ",				n, p[n].name, p[n].needmp);			prints(buf);		} else if (p[n].hpmode == 0) {			sprintf(buf,				"\033[1;37m[\033[36m%d\033[37m] \033[33m%-10s  \033[37m需要法力: \033[32m%-6d \033[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,NULL,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,NULL,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 + -
显示快捷键?