⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fxq.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
	}}int toss(object who,int se){	string r,cmd;	string cmd1,cmd2;	int i,pid;	int c;	pid = cur_player;	r = build_qi(who);	c = 0;	for(i=0;i<4;i++)	{		switch(qizi[pid-1][i][QI_FLAG])		{		case QI_SLEEP:			if(member_array(se,wake_point)!=-1)			{				if(cmd1)					cmd1 = sprintf("%s|%c",cmd1,'a'+i);				else					cmd1 = sprintf("出机 move %c",'a'+i);				c = 1;			}			break;		case QI_WAIT:		case QI_WALK:		case QI_BACK:			if(cmd2)				cmd2 = sprintf("%s|%c",cmd2,'a'+i);			else				cmd2 = sprintf("移动 move %c",'a'+i);			c = 1;			break;		case QI_END:			break;		default:			msg(0,0,"\n错误飞机状态!!!\n");			break;		}	}	cmd = sprintf("%d点\n",se);	if(cmd1)cmd = sprintf("%s%s\n",cmd,cmd1);	if(cmd2)cmd = sprintf("%s%s\n",cmd,cmd2);	if(c)	{		tell_object(who,r);		tell_object(who,cmd);	}	else		next_one();	return 1;}int do_toss(string arg){	int se,pid;	object me;	me = this_player();	if(!(pid = is_playing(me)))		return notify_fail("你都不玩啊!\n");	if(!has_start)		return notify_fail("游戏还没有开始了。\n");	if(cur_se)		return notify_fail("不是投色子的时候。\n");	if(!cur_player||me->query("id")!=player[cur_player-1])		return notify_fail("还没有开始到你了。\n");	msg(me,0,"$N拿起色子在手中摇了两摇。\n");	se = random(6)+1;	show_se(se);	cur_se = se;	toss(me,se);		return 1;}string extra_long(){	object me;	object who;	string r,r2;	int i;	me = this_player();	r = "\n"+build_qi(me);	return r;}int do_reset(string arg){	int i;	mixed* idx;	if(!this_object()->id(arg))		return 0;	if(!is_playing(this_player()))	{		for(i=0;i<sizeof(idx);i++)		{			if(get_player(player[i]))				return notify_fail("你都不玩啊!\n");		}	}	reset_game(1);	msg(this_player(),0,"$N重置了游戏。\n");	return 1;}int do_start(string arg){	int i,c;	if(!is_playing(this_player()))		return notify_fail("你都不玩啊!\n");	for(i=0;i<sizeof(player);i++)		if(!player[i])break;	switch(i)	{	case 2:		player[2] = player[0];		player[3] = player[1];		break;	case 4:		break;	default:		return notify_fail("游戏人数只能是2人 或者 4人。\n");		break;	}		reset_game(0);	has_start = 1;	cur_player = 1;	msg(this_player(),0,"$N开始游戏了\n");	msg(get_cur_player(),0,"$N首先投色。\n");			return 1;}int do_view(string arg){	write(build_qi(this_player()));	return 1;}int do_join(string arg){	int i;	object me;	me = this_player();	if(has_start)		return notify_fail("游戏已经开始,不能加入了,请使用(reset)命令重置。\n");	if(is_playing(me))		return notify_fail("你已经参加了。\n");	for(i=0;i<sizeof(player);i++)	{		if(!player[i])		{			player[i] = me->query("id");			msg(me,0,"$N加入游戏了。\n");			if(i==3)				msg(0,0,"请使用(start)命令开始游戏。\n");			return 1;		}	}	return notify_fail("人数已满\n");}void show_qi(){	string r;	r = build_qi(0);	msg(0,0,"\n\n"+r);}void put_down(mixed* qi){	mixed* ge;	ge = qi2ge(qi);	if(ge)	{		ge[BD_PLAYER] = qi[QI_PLAYER];		ge[BD_QI] = qi[QI_ID];	}}void pick_out(mixed* qi){	mixed* ge;	ge = qi2ge(qi);	if(ge && ge[BD_PLAYER] == qi[QI_PLAYER] && ge[BD_QI] == qi[QI_ID])	{		ge[BD_PLAYER] = 0;		ge[BD_QI] = 0;	}}int check_finish(){	int i,j;	for(i=0;i<4;i++)		for(j=0;j<4;j++)			if(qizi[i][j][QI_FLAG] != QI_END)return 0;	return 1;}int reach(mixed* qi){	mixed* ge;	mixed* qi2;	ge = qi2ge(qi);	if(ge[BD_PLAYER])	{		// 有其他棋子?		if(ge[BD_PLAYER] == qi[QI_PLAYER])		{			// 自己,奖励一步			msg(get_cur_player(),0,"$N和自己的飞机相遇,前进一步。\n");			call_out("jump_to",0,qi,1);			return 1;		}		else		{			// hit it			qi2 = ge2qi(ge);			msg(get_cur_player(),qi2player(qi2),BLINK HIR "\n$N击毁了$n的飞机!!!\n\n" NOR);			return_base(qi2[QI_PLAYER],qi2[QI_ID]);		}	}	else	{		switch(ge[BD_FLAG])		{		case B_NORMAL:			if(qi[QI_PLAYER] == ge[BD_COLOR] && !has_jump)			{				msg(get_cur_player(),0,"$N的飞机进行跳跃...\n");				call_out("jump_to",0,qi,4);				return 1;			}			break;		case B_SJUMP:		// 超级跳跃			if(qi[QI_PLAYER] == ge[BD_COLOR] && !has_jump)			{				msg(get_cur_player(),0,HIY "\n$N的飞机进行超级跳跃!\n");				qi2 = ge2qi(ge);				if(qi2)				{					msg(get_cur_player(),qi2player(qi2),BLINK HIR "\n$N击毁了$n的飞机!!!\n\n" NOR);					return_base(qi2[QI_PLAYER],qi2[QI_ID]);				}				call_out("jump_to",0,qi,12);				return 1;			}			break;		case B_END:			// 结束			msg(get_cur_player(),0,"$N的一架飞机到终点了。\n");			return_base(qi[QI_PLAYER],qi[QI_ID]);			qi[QI_FLAG] = QI_END;			if(check_finish())				return 1;			next_one();			return 1;		default:			break;		}	}	put_down(qi);	next_one();	return 1;}int jump_to(mixed* qi,int w){	int i;	int ox,oy,p;	mixed* ge;	has_jump = 1;	for(i=0;i<w;i++)	{		ge = qi2ge(qi);		p = ge[BD_PATH];		ox = 0;		oy = 0;		if(p & P_LEFT)ox --;		if(p & P_RIGHT)ox ++;		if(p & P_UP)oy --;		if(p & P_DOWN)oy ++;		qi[QI_X]+=ox;		qi[QI_Y]+=oy;	}	show_qi();	reach(qi);	return 1;}int move_qi(mixed* qi,int pt){	int i,x,y;	int ox,oy,p,q;	mixed* ge;	switch(qi[0])	{	case QI_SLEEP:		if(member_array(pt,wake_point)==-1)			return notify_fail("不能移动该棋子。\n");		qi[QI_FLAG] = QI_WAIT;		pick_out(qi);		q = qi[QI_PLAYER];		for(i=0;i<4;i++)		{			x = player_ready[q-1][i][0];			y = player_ready[q-1][i][1];			if(!board[y][x][BD_PLAYER])			{				qi[QI_X] = x;				qi[QI_Y] = y;				i = 5;			}		}		put_down(qi);		msg(get_cur_player(),0,"$N准备出动一架飞机。\n");		next_one();		return 1;	case QI_WAIT:		pt--;		x = player_start[cur_player-1][0];		y = player_start[cur_player-1][1];		pick_out(qi);		qi[QI_FLAG] = QI_WALK;		qi[QI_X] = x;		qi[QI_Y] = y;				if(pt==0)		{			show_qi();			reach(qi);		}		else		{			if(!move_qi(qi,pt))				return 0;		}		break;	case QI_WALK:		pick_out(qi);						pt --;		ge = qi2ge(qi);		if(ge[BD_FLAG] == B_GATE && qi[QI_PLAYER] == ge[BD_COLOR])		{			switch(ge[BD_COLOR])			{			case 1:				p = 1;				break;			case 2:				p = 4;				break;			case 3:				p = 2;				break;			case 4:				p = 8;				break;			}		}		else			p = ge[BD_PATH];		ox = 0;		oy = 0;		if(p & P_LEFT)ox --;		if(p & P_RIGHT)ox ++;		if(p & P_UP)oy --;		if(p & P_DOWN)oy ++;		qi[QI_X]+=ox;		qi[QI_Y]+=oy;		ge = qi2ge(qi);				if(pt==0)		{			show_qi();			reach(qi);		}		else		{			if(ge[BD_FLAG] == B_END)				qi[QI_FLAG] = QI_BACK;			if(!move_qi(qi,pt))				return 0;		}		break;	case QI_BACK:		{			ge = qi2ge(qi);			p = ge[BD_PATH];			ox = 0;			oy = 0;			if(p & P_LEFT)ox --;			if(p & P_RIGHT)ox ++;			if(p & P_UP)oy --;			if(p & P_DOWN)oy ++;			qi[QI_X]-=ox;			qi[QI_Y]-=oy;			pt--;			if(pt==0)			{				qi[QI_FLAG] = QI_WALK;				show_qi();				reach(qi);			}			else			{				if(!move_qi(qi,pt))					return 0;			}		}		break;	case QI_END:		return notify_fail("不能移动该棋子。\n");	default:		msg(0,0,"\n错误飞机状态!!!\n");		break;	}	return 1;}int do_move(string arg){	int pid;	int w;	object me;	mixed* qi;	me = this_player();	if(!(pid = is_playing(me)))		return notify_fail("你都不玩啊!\n");	if(!has_start)		return notify_fail("游戏还没有开始了。\n");	if(!cur_se)		return notify_fail("是投色子的时候。\n");	if(!cur_player||me->query("id")!=player[cur_player-1])		return notify_fail("还没有开始到你了。\n");	if(!arg)		return notify_fail("你要移动哪个棋子啊(a|b|c|d)?\n");	w = 0;	if(arg=="a")		w = 1;	if(arg=="b")		w = 2;	if(arg=="c")		w = 3;	if(arg=="d")		w = 4;	if(!w)		return notify_fail("你要移动哪个棋子啊(a|b|c|d)\n");	qi = qizi[cur_player-1][w-1];	cur_qi = qi;	shadow_it(qi);	if(!move_qi(qi,cur_se))		return 0;	return 1;}mixed t(int x,int y){	return board[x][y];}int do_help(string arg){	this_player()->start_more( @HELP飞行棋使用方法:——[开始游戏]———————————————帮助命令:helpqi加入游戏:join     开始游戏:start重置游戏:reset qi——[游戏命令]——————————————— 摇色子:toss查看情况:view移动棋子:move a|b|c|d催促玩家:next——[游戏规则]———————————————普通的飞行棋。——————————————————————			make by 猫部猫(Catyboy) v1.0HELP	);        return 1;}

⌨️ 快捷键说明

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