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

📄 fxq.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
// fxq.c 飞行棋// Make by 猫部猫(Catyboy)#include <ansi.h>inherit ITEM;int has_start;mixed wake_point;			// 出机点数int cur_player;				// 当前的玩家IDint cur_se;					// 当前色子数目mixed *cur_qi;				// 当前移动的棋子mixed shadow_qi;			// 当前移动的棋子的影子int has_jump;				// 曾经跳跃过mixed player;				// 2 or 4个玩家 [{ id,id,id,id }]#define QI_SLEEP	0#define QI_WAIT		1#define QI_WALK		2#define QI_END		3#define QI_BACK		4#define QI_MOVE		10#define QI_FLAG		0#define QI_X		1#define QI_Y		2#define QI_PLAYER	3#define QI_ID		4#define QI_MAX		5mixed qizi;					// 棋子							// ({棋子状态,棋子位置X,棋子位置Y,player,qi_id})mixed player_start =		// 玩家的起点({	({14,10}),({4,14}),({0,4}),({10,0})});mixed player_ready =		// 玩家的出机位置({	({ ({14,12}),({13,12}),({12,12}),({11,12}) }),	({ ({2,14}),({2,13}),({2,12}),({2,11}) }),	({ ({0,2}),({1,2}),({2,2}),({3,2}) }),	({ ({12,0}),({12,1}),({12,2}),({12,3}) }),});mixed super_hit =			// 超级跳跃的攻击点({	({3,7}),({7,3}),({11,7}),({7,11})});mixed qi_view =					// 玩家的棋子的外观({	({"1","2","3","4"}),	// 其他人看的棋子	({"A","B","C","D"}),	// 当前活动的棋子});mixed clr =({	"",HIR,HIY,HIB,HIG});mixed bkclr =({	"",HBRED,HBMAG,HBBLU,HBGRN});#define P_LEFT	1			// 路径#define P_RIGHT	2#define P_UP	4#define P_DOWN	8#define B_NORMAL	0#define B_GATE		1		// 完成的道门#define B_ROAD		2		// 完成的道#define B_SJUMP		3		// 超级跳跃#define B_END		4		// 结束#define B_STOP		5		// 停机场#define B_READY		6		// 出机场#define BD_COLOR	0#define BD_PATH		1#define BD_FLAG		2#define BD_PLAYER	3#define BD_QI		4mixed board =				// ({属性,路径,标志,玩家号,棋子号})({({ ({3,0,5,0,0 }),({3,0,5,0,0 }),      0       ,      0       ,({1,2,0,0,0 }),({2,2,0,0,0 }),({3,2,0,0,0 }),({4,2,1,0,0 }),({1,2,0,0,0 }),({2,2,0,0,0 }),({3,8,0,0,0 }),      0       ,({4,0,6,0,0 }),({4,0,5,0,0 }),({4,0,5,0,0 }),}),({ ({3,0,5,0,0 }),({3,0,5,0,0 }),      0       ,      0       ,({4,4,0,0,0 }),      0       ,      0       ,({4,8,2,0,0 }),      0       ,      0       ,({4,8,0,0,0 }),      0       ,({4,0,6,0,0 }),({4,0,5,0,0 }),({4,0,5,0,0 }),}),({ ({3,0,6,0,0 }),({3,0,6,0,0 }),({3,0,6,0,0 }),({3,0,6,0,0 }),({3,4,0,0,0 }),      0       ,      0       ,({4,8,2,0,0 }),      0       ,      0       ,({1,8,0,0,0 }),      0       ,({4,0,6,0,0 }),      0       ,      0       ,}),({       0       ,      0       ,      0       ,      0       ,({2,4,3,0,0 }),      0       ,      0       ,({4,8,2,0,0 }),      0       ,      0       ,({2,10,0,0,0}),      0       ,({4,0,6,0,0 }),      0       ,      0       ,}),({ ({2,2,0,0,0 }),({3,2,0,0,0 }),({4,2,0,0,0 }),({1,6,0,0,0 }),      0       ,      0       ,      0       ,({4,8,2,0,0 }),      0       ,      0       ,      0       ,({3,2,3,0,0 }),({4,2,0,0,0 }),({1,2,0,0,0 }),({2,8,0,0,0 }),}),({ ({1,4,0,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({4,8,2,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({3,8,0,0,0 }),}),({ ({4,4,0,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({4,8,4,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({4,8,0,0,0 }),}),({ ({3,4,1,0,0 }),({2,2,2,0,0 }),({2,2,2,0,0 }),({2,2,2,0,0 }),({2,2,2,0,0 }),({2,2,2,0,0 }),({2,2,4,0,0 }),      0       ,({1,1,4,0,0 }),({1,1,2,0,0 }),({1,1,2,0,0 }),({1,1,2,0,0 }),({1,1,2,0,0 }),({1,1,2,0,0 }),({1,8,1,0,0 }),}),({ ({2,4,0,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({2,4,4,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({2,8,0,0,0 }),}),({ ({1,4,0,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({2,4,2,0,0 }),      0       ,      0       ,      0       ,      0       ,      0       ,      0       ,({3,8,0,0,0 }),}),({ ({4,4,0,0,0 }),({3,1,0,0,0 }),({2,1,0,0,0 }),({1,1,3,0,0 }),      0       ,      0       ,      0       ,({2,4,2,0,0 }),      0       ,      0       ,      0       ,({3,9,0,0,0 }),({2,1,0,0,0 }),({1,1,0,0,0 }),({4,1,0,0,0 }),}),({       0       ,      0       ,({2,0,6,0,0 }),      0       ,({4,5,0,0,0 }),      0       ,      0       ,({2,4,2,0,0 }),      0       ,      0       ,({4,8,3,0,0 }),      0       ,      0       ,      0       ,      0       ,}),({       0       ,      0       ,({2,0,6,0,0 }),      0       ,({3,4,0,0,0 }),      0       ,      0       ,({2,4,2,0,0 }),      0       ,      0       ,({1,8,0,0,0 }),({1,0,6,0,0 }),({1,0,6,0,0 }),({1,0,6,0,0 }),({1,0,6,0,0 }),}),({ ({2,0,5,0,0 }),({2,0,5,0,0 }),({2,0,6,0,0 }),      0       ,({2,4,0,0,0 }),      0       ,      0       ,({2,4,2,0,0 }),      0       ,      0       ,({2,8,0,0,0 }),      0       ,      0       ,({1,0,5,0,0 }),({1,0,5,0,0 }),}),({ ({2,0,5,0,0 }),({2,0,5,0,0 }),({2,0,6,0,0 }),      0       ,({1,4,0,0,0 }),({4,1,0,0,0 }),({3,1,0,0,0 }),({2,1,1,0,0 }),({1,1,0,0,0 }),({4,1,0,0,0 }),({3,1,0,0,0 }),      0       ,      0       ,({1,0,5,0,0 }),({1,0,5,0,0 }),}),});mixed board_view =				// 棋盘视图 红黄蓝绿({	({ HBWHT HIB "●" NOR,HBWHT HIB "●" NOR," "," "    ,HIR "●" NOR,HIY "●" NOR,HIB "●" NOR,HIG "◆" NOR,HIR "●" NOR,HIY "●" NOR,HIB "●" NOR,    "←"," ",HBWHT HIG "●" NOR,HBWHT HIG "●" NOR, }),	({ HBWHT HIB "●" NOR,HBWHT HIB "●" NOR," "," "    ,HIG "●" NOR,    " "    ,    " "    ,HIG "●" NOR,    " "    ,    " "    ,HIG "●" NOR,    " "," ",HBWHT HIG "●" NOR,HBWHT HIG "●" NOR, }),	({     " "    ,    " "    ,    " "    ,    " "    ,HIB "●" NOR,    " "    ,    " "    ,HIG "●" NOR,    " "    ,    " "    ,HIR "●" NOR,    " "    ,    " "    ,    " "    ,    " "    , }),	({     "↓"    ,    " "    ,    " "    ,    " "    ,HIY "★" NOR,HIY "→" NOR,HIY "→" NOR,HIG "●" NOR,HIY "→" NOR,HIY "→" NOR,HIY "●" NOR,    " "    ,    " "    ,    " "    ,    " "    , }),	({ HIY "●" NOR,HIB "●" NOR,HIG "●" NOR,HIR "●" NOR,    " "    ,    " "    ,    " "    ,HIG "●" NOR,    " "    ,    " "    ,    " "    ,HIB "★" NOR,HIG "●" NOR,HIR "●" NOR,HIY "●" NOR, }),	({ HIR "●" NOR,    " "    ,    " "    ,HIR "↑" NOR,    " "    ,    " "    ,    " "    ,HIG "●" NOR,    " "    ,    " "    ,    " "    ,HIB "↓" NOR,    " "    ,    " "    ,HIB "●" NOR, }),	({ HIG "●" NOR,    " "    ,    " "    ,HIR "↑" NOR,    " "    ,    " "    ,    " "    ,HIG "◎" NOR,    " "    ,    " "    ,    " "    ,HIB "↓" NOR,    " "    ,    " "    ,HIG "●" NOR, }),	({ HIB "◆" NOR,HIB "●" NOR,HIB "●" NOR,HIB "●" NOR,HIB "●" NOR,HIB "●" NOR,HIB "◎" NOR,HIC "※" NOR,HIR "◎" NOR,HIR "●" NOR,HIR "●" NOR,HIR "●" NOR,HIR "●" NOR,HIR "●" NOR,HIR "◆" NOR, }),	({ HIY "●" NOR,    " "    ,    " "    ,HIR "↑" NOR,    " "    ,    " "    ,    " "    ,HIY "◎" NOR,    " "    ,    " "    ,    " "    ,HIB "↓" NOR,    " "    ,    " "    ,HIY "●" NOR, }),	({ HIR "●" NOR,    " "    ,    " "    ,HIR "↑" NOR,    " "    ,    " "    ,    " "    ,HIY "●" NOR,    " "    ,    " "    ,    " "    ,HIB "↓" NOR,    " "    ,    " "    ,HIB "●" NOR, }),	({ HIG "●" NOR,HIB "●" NOR,HIY "●" NOR,HIR "★" NOR,    " "    ,    " "    ,    " "    ,HIY "●" NOR,    " "    ,    " "    ,    " "    ,HIB "●" NOR,HIY "●" NOR,HIR "●" NOR,HIG "●" NOR, }),	({     " "    ,    " "    ,    " "    ,    " "    ,HIG "●" NOR,HIG "←" NOR,HIG "←" NOR,HIY "●" NOR,HIG "←" NOR,HIG "←" NOR,HIG "★" NOR,    " "    ,    " "    ,    " "    ,    "↑"    , }),	({     " "    ,    " "    ,    " "    ,    " "    ,HIB "●" NOR,    " "    ,    " "    ,HIY "●" NOR,    " "    ,    " "    ,HIR "●" NOR,    " "    ,    " "    ,    " "    ,    " "    , }),	({ HBWHT HIY "●" NOR,HBWHT HIY "●" NOR," "," "    ,HIY "●" NOR,    " "    ,    " "    ,HIY "●" NOR,    " "    ,    " "    ,HIY "●" NOR,    " " ," ",HBWHT HIR "●" NOR,HBWHT HIR "●" NOR, }),	({ HBWHT HIY "●" NOR,HBWHT HIY "●" NOR," ","→"    ,HIR "●" NOR,HIG "●" NOR,HIB "●" NOR,HIY "◆" NOR,HIR "●" NOR,HIG "●" NOR,HIB "●" NOR,    " " ," ",HBWHT HIR "●" NOR,HBWHT HIR "●" NOR, }),});mixed toss_text = ({	({"","","","",""}),	({	    "┏━━━┐",        "│      │",        "│  ●  │",        "│      │",		"┖━━━┛",	}),	({		"┏━━━┐",        "│  ●  │",        "│      │",        "│  ●  │",		"┖━━━┛",	}),	({		"┏━━━┐",		"│●  │",        "│ ● │",        "│  ●│",		"┖━━━┛",	}),	({		"┏━━━┐",        "│● ●│",        "│   │",        "│● ●│",		"┖━━━┛",	}),	({		"┏━━━┐",        "│● ●│",        "│ ● │",        "│● ●│",		"┖━━━┛",	}),	({		"┏━━━┐",        "│● ●│",        "│● ●│",        "│● ●│",		"┖━━━┛",	})});int return_base(int pl_num,int qi_num){	int x,y;	x = (pl_num==3 || pl_num==2)?0:13;	y = (pl_num==1 || pl_num==2)?13:0;		x = (qi_num==1 || qi_num==3)?x:x+1;	y = (qi_num==1 || qi_num==2)?y:y+1;	qizi[pl_num-1][qi_num-1][QI_FLAG] = QI_SLEEP;	qizi[pl_num-1][qi_num-1][QI_X] = x;	qizi[pl_num-1][qi_num-1][QI_Y] = y;	board[y][x][BD_PLAYER] = pl_num;	board[y][x][BD_QI] = qi_num;		return 1;}int reset_game(int all){	int i,j;	string* idx;	object ob;	if(all)has_start = 0;	cur_player = 0;	if(all)player = ({0,0,0,0});	if(all)wake_point = ({6});	qizi = allocate(4);					// 4副棋子	for(i=0;i<4;i++)	{		qizi[i] = allocate(4);			// 4个棋子/1副		for(j=0;j<4;j++)			qizi[i][j] = ({0,0,0,i+1,j+1});	// 5个状态/1个棋子	}	for(i=0;i<15;i++)	{		for(j=0;j<15;j++)		if(board[i][j])		{			board[i][j][BD_PLAYER] = 0;			board[i][j][BD_QI] = 0;		}	}	for(i=0;i<4;i++)	{		for(j=0;j<4;j++)			return_base(i+1,j+1);	}}void msg(object me,object who,string msg){	if(me)		message_vision(msg,me,who);	else		tell_room(environment(this_object()),msg,0);}object get_player(string id){	object ob;	if(!id)return 0;	ob= find_player(id);	if( !ob || environment(ob) != environment(this_object()) )		return 0;	return ob;}string player_id(int num){	return player[num];}int player_number(string id){	int i;	for(i=0;i<sizeof(player);i++)		if(player[i] == id)			return i+1;	return 0;}object get_cur_player(){	return get_player(player_id(cur_player-1));}string player_info(int id){	object ob;	if(id<=4 && id>0)	{		if(player[id-1])		{			ob = get_player(player[id-1]);			return sprintf("%s%d"NOR" %s",clr[id],id,ob?ob->query("name")+"("+ob->query("id")+")":"???");		}	}	else	{		if(cur_player && ob = get_cur_player())		{			if(cur_se)				return sprintf("%s%d"NOR" %s [%d]",clr[cur_player],cur_player,ob->query("name")+"("+ob->query("id")+")",cur_se);			else				return sprintf("%s%d"NOR" %s",clr[cur_player],cur_player,ob->query("name")+"("+ob->query("id")+")");		}	}	return "";}int is_playing(object ob){	string id;	id = ob->query("id");	return player_number(id);}mixed qi2ge(mixed qi){	int x,y;	if(!qi)return 0;	x = qi[QI_X];	y = qi[QI_Y];	return board[y][x];}mixed ge2qi(mixed ge){	int pl,q;	if(!ge)return 0;	pl = ge[BD_PLAYER];	q =  ge[BD_QI];	if(pl&&q)		return qizi[pl-1][q-1];	return 0;}object qi2player(mixed* qi){	object ob;	string id;		id = player_id(qi[QI_PLAYER]-1);	if(!id)return 0;	ob= find_player(id);	if( !ob || environment(ob) != environment(this_object()) )		return 0;	return ob;}void shadow_it(mixed* qi){	int i;	shadow_qi = allocate(QI_MAX);	for(i=0;i<QI_MAX;i++)		shadow_qi[i] = qi[i];}// 开始构造物体void create(){	set_name("飞行棋", ({ "fei xing qi","qi","fxq"}) );	set_weight(10000000);    if( clonep() )		set_default_object(__FILE__);	else	{		set("unit", "副");        set("long", "这是一副飞行棋,使用方法请使用(helpqi)命令。\n");        set("value", 1);        set("no_get", 1);        set("material", "paper");	}	reset_game(1);    setup();}string build_qi(object who){	string id,t,r,cell;	int num,q;	int x,y;	mixed* ln;	mixed* ge;	mixed* qi;	if(who)		id = who->query("id");	r = "";	for(y=0;y<sizeof(board_view);y++)	{		ln = board_view[y];		for(x=0;x<sizeof(ln);x++)		{			ge = board[y][x];			qi = 0;			if(ge)			{				if(cur_qi)				{					if(cur_qi[QI_X] == x && cur_qi[QI_Y] == y)						qi = cur_qi;					else if(shadow_qi[QI_X] == x && shadow_qi[QI_Y] == y)						qi = shadow_qi;					else						qi = ge2qi(ge);				}				else					qi = ge2qi(ge);				if( qi && num = qi[QI_PLAYER])				{					q = qi[QI_ID];					if(qi==shadow_qi)						t = "S";					else if(player[num-1]==id && cur_player==num) // 自己的棋子						t = clr[num]+qi_view[1][q-1];					else						t = clr[num]+qi_view[0][num-1];					switch(qi[0])					{					case QI_END:						cell = sprintf("%s%s" NOR,clr[num],"〓");						break;					case QI_WAIT:						if(qi != shadow_qi)						{							cell = sprintf("%s" NOR,t);							break;						}					case QI_WALK:					case QI_BACK:						if(qi == cur_qi || qi == shadow_qi)						{							cell = sprintf(BLINK "%s%s" NOR,bkclr[ge[BD_COLOR]],t);							break;						}					case QI_SLEEP:					default:						cell = sprintf("%s%s" NOR,bkclr[ge[BD_COLOR]],t);						break;					}				}				else					cell = ln[x];			}			else				cell = ln[x];			r += cell;		}		if(y<4)			r+=" " + player_info(y+1);		if(y==7)			r+=" " + player_info(0);		r+="\n";	}	return r;}void init(){        add_action("do_help","helpqi");                 // 帮助		add_action("do_reset","reset");			// 重置游戏	add_action("do_start","start");			// 重新开始    add_action("do_join","join");			// 加入游戏	add_action("do_toss","toss");			// 摇色子	add_action("do_view","view");			// 查看情况	add_action("do_move","move");			// 移动	add_action("do_next","next");			// 催促}void show_se(int se){	msg(0,0,implode(toss_text[se],"\n")+"\n");}int do_next(string arg){	object ob;	object me;		me = this_player();	if(me)	{		if(!is_playing(me))			return notify_fail("你都不玩啊!\n");		if(!has_start)			return notify_fail("还没有开始了。\n");		if(!cur_player)			return notify_fail("????\n");		ob = get_cur_player();				if(ob==0)			return msg(0,0,"有玩家缺场了,请重新开始游戏(reset qi)。\n");		if(me!=ob)			msg(me,ob,"$N对$n说道:到你了。\n");		else			msg(me,0,"$N对自己说道:到我啦!\n");	}	else	{		ob = get_cur_player();		msg(0,ob,"到$n了。\n");	}	return 1;}void next_one(){	int i,j;	int cp;	cp = 0;	if(cur_se==6)		cp = cur_player;	else		cp = cur_player<4?cur_player+1:1;	cur_se = 0;	cur_qi = 0;	shadow_qi = 0;	has_jump = 0;		j = 0;	for(j=0;j<4;j++)	{		for(i=0;i<4;i++)		{			if(qizi[cp-1][i][QI_FLAG] != QI_END)			{				if(cp == cur_player)					msg(get_cur_player(),0,"$N投到六点,奖励一次。\n");				else				{					cur_player = cp;					do_next("");				}				return;			}		}		cp = cp<4?cp+1:1;

⌨️ 快捷键说明

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