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

📄 seaf.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(x<1||x>WIDTH)		return notify_fail("X坐标错误\n");	if(y<1||y>HEIGHT)		return notify_fail("Y坐标错误\n");	id = this_player()->query("id");	sh = get_ship(id);	tb = get_table(id);	if(!sh||!tb)		return notify_fail("access date fail\n");	if(tb[x-1][y-1][0] == 1)		return notify_fail("该处已经布置了船只\n");	for(i=0;i<SHIP_NUM;i++)	{		if(!sh[i][1])		{			sh[i][1] = x;			sh[i][2] = y;			tb[x-1][y-1][0] = 1;			break;		}	}	if(i==SHIP_NUM)		return notify_fail("你已经没有空余的船只可以布置了。\n");	else	{		display(player_id(id));		if(!remain_place(id))			tell_object(this_player(),"\n使用[Finish]结束布置船只。\n");	}	return 1;}int do_unplace(string arg){	int i,x,y;	mixed *sh,*tb;	if(!is_playing(this_player()))		return notify_fail("你都不玩啊!\n");		if(game_mode!=0)		return notify_fail("现在不是布置船只的时候。\n");	if( !arg || sscanf(arg, "%d %d", x, y)!=2 )		return notify_fail("unplace X坐标 Y坐标\n");	if(x<1||x>WIDTH)		return notify_fail("X坐标错误\n");	if(y<1||y>HEIGHT)		return notify_fail("Y坐标错误\n");	sh = get_ship(this_player()->query("id"));	tb = get_table(this_player()->query("id"));	if(!sh||!tb)		return notify_fail("access date fail\n");	for(i=0;i<SHIP_NUM;i++)	{		if(sh[i][1]==x&&sh[i][2]==y)		{			sh[i][1] = 0;			sh[i][2] = 0;			tb[x-1][y-1][0] = 0;			display(player_id(this_player()->query("id")));			break;		}	}	if(i==SHIP_NUM)		return notify_fail("该位置没有布置船只。\n");	return 1;}int do_finish(string arg){	int i,x,y;	mixed *sh;	string id;	if(!is_playing(this_player()))		return notify_fail("你都不玩啊!\n");		if(!(game_mode==0||game_mode==1))		return notify_fail("???\n");	id = this_player()->query("id");	sh = get_ship(id);	if(!sh)		return notify_fail("access date fail\n");	if(game_mode==0)	{		if(remain_place(id))			return notify_fail("还有船只没有布置\n");	}	else if(game_mode==1)	{		if(remain_fire(id))			return notify_fail("还有火力没有布置\n");	}	if(game_mode==0)		msg(this_player(),0,"$N的船只布置完成\n");	else if(game_mode==1)		msg(this_player(),0,"$N的火力布置完成\n");	player_action[this_player()->query("id")] = 1;	if(sizeof(player_action)==2)	{		// all finish,go fire		if(game_mode==0)			before_fire();		else if(game_mode==1)			start_fire();	}	return 1;}int do_fire(string arg){	int i,x,y;	mixed *sh,*tb;	string id;	if(!is_playing(this_player()))		return notify_fail("你都不玩啊!\n");		if(game_mode!=1)		return notify_fail("现在不是布置火力的时候。\n");	if( !arg || sscanf(arg, "%d %d", x, y)!=2 )		return notify_fail("place X坐标 Y坐标\n");	if(x<1||x>WIDTH)		return notify_fail("X坐标错误\n");	if(y<1||y>HEIGHT)		return notify_fail("Y坐标错误\n");	id = this_player()->query("id");	sh = get_ship(id);	tb = get_table(enemy_id(id));	if(!sh||!tb)		return notify_fail("access date fail\n");	if(tb[x-1][y-1][1] != 0)		return notify_fail("该处已经布置了火力\n");	for(i=0;i<SHIP_NUM;i++)	{		if(!sh[i][0]&&!sh[i][3])		{			sh[i][3] = x;			sh[i][4] = y;			sh[i][5] = tb[x-1][y-1][1];			tb[x-1][y-1][1] = 2;			break;		}	}	if(i==SHIP_NUM)		return notify_fail("你已经没有空余的火力可以布置了。\n");	else	{		display(player_id(id));		if(i+1==SHIP_NUM)			tell_object(this_player(),"\n使用[Finish]结束布置火力。\n");	}	return 1;}int do_unfire(string arg){	int i,x,y;	mixed *sh,*tb;	string id;	if(!is_playing(this_player()))		return notify_fail("你都不玩啊!\n");		if(game_mode!=1)		return notify_fail("现在不是布置火力的时候。\n");	if( !arg || sscanf(arg, "%d %d", x, y)!=2 )		return notify_fail("unplace X坐标 Y坐标\n");	if(x<1||x>WIDTH)		return notify_fail("X坐标错误\n");	if(y<1||y>HEIGHT)		return notify_fail("Y坐标错误\n");	id = this_player()->query("id");	sh = get_ship(id);	tb = get_table(enemy_id(id));	if(!sh||!tb)		return notify_fail("access date fail\n");	for(i=0;i<SHIP_NUM;i++)	{		if(!sh[i][0]&&sh[i][3]==x&&sh[i][4]==y)		{			sh[i][3] = 0;			sh[i][4] = 0;			tb[x-1][y-1][1] = sh[i][5];			display(player_id(id));			break;		}	}	if(i==SHIP_NUM)		return notify_fail("该位置没有布置火力。\n");	return 1;}int which_ship(mixed* sh,int x,int y){	int i;	for(i=0;i<SHIP_NUM;i++)	{		if(sh[i][1]==x&&sh[i][2]==y)			return i;	}	return -1;}int fire_it(){	int i,j1,j2,x,y,bFire;	int r1,r2;	string key1,key2;	string m;	mixed *sh1,*sh2;	mixed *tb1,*tb2;		key1 = keys(player)[0];	key2 = keys(player)[1];	sh1 = get_ship(key1);	sh2 = get_ship(key2);	tb1 = get_table(key1);	tb2 = get_table(key2);	game_mode = 2;	m = 0;	bFire = 0;	fire_x = ({0,0});	fire_y = ({0,0});	if(sh1&&sh2)	{		for(i=0;i<SHIP_NUM;i++)		{			j1 = -1;			j2 = -1;			if(!sh1[i][0]&&sh1[i][3])			{				// fire it				x = sh1[i][3];				y = sh1[i][4];				fire_x[0] = x;				fire_y[0] = y;				sh1[i][3] = 0;				sh1[i][4] = 0;				tb2[x-1][y-1][1] = 1;				j2 = which_ship(sh2,x,y);				bFire = 1;			}			if(!sh2[i][0]&&sh2[i][3])			{				// fire it				x = sh2[i][3];				y = sh2[i][4];				fire_x[1] = x;				fire_y[1] = y;				sh2[i][3] = 0;				sh2[i][4] = 0;				tb1[x-1][y-1][1] = 1;				j1 = which_ship(sh1,x,y);				bFire = 1;			}			if(j1>=0)			{				m = BLINK HIY + key1 + "的船被击沉了。\n" NOR;				sh1[j1][0] = 1;	// be fired				if(sh1[j1][3])				{					x = sh1[j1][3];					y = sh1[j1][4];					sh1[j1][3] = 0;					sh1[j1][4] = 0;					tb2[x-1][y-1][1] = sh1[j1][5];				}			}			if(j2>=0)			{				if(!m)m="";				m = m + BLINK HIY + key2 + "的船被击沉了。\n" NOR;				sh2[j2][0] = 1;	// be fired				if(sh2[j2][3])				{					x = sh2[j2][3];					y = sh2[j2][4];					sh2[j2][3] = 0;					sh2[j2][4] = 0;					tb1[x-1][y-1][1] = sh2[j2][5];				}			}			if(bFire)break;		}	}	if(bFire)	{		msg(0,0,BLINK HIR"\n~~~~~ 攻击!! ~~~~~\n"NOR);		if(m)msg(0,0,m);		display(0);		remove_call_out("fire_it");		call_out("fire_it",4);	}	else	{		// fire finish		r1 = 0;		r2 = 0;		for(i=0;i<SHIP_NUM;i++)		{			if(!sh1[i][0])r1++;			if(!sh2[i][0])r2++;		}		if(r1==0||r2==0)		{			game_mode = 3;			if(r1==0)			{				if(r2==0)					who_win = -1;				else					who_win = 1;			}			else				who_win = 2;			display(0);			msg(0,0,HIR"\n\n 所有战斗结束了,使用(start)重新开始。\n"NOR);		}		else		{			msg(0,0,sprintf(HIC"\n该回合攻击结束...\n%s(%d) VS %s(%d)\n"NOR,key1,remain_ship(key1),key2,remain_ship(key2)));			before_fire();		}	}}int do_visitor(string arg){	string key;	object me,ob;	int del;	if(!arg)		return notify_fail("visit [-]玩家ID\n");	if(sscanf(arg, "-d %s", key)==1 )		del = 1;	else	{		del = 0;		key = arg;	}			me = this_player();	if(is_playing(me))	{		ob = present(key,environment(this_object()));		if(!ob)			return notify_fail("这里没有这个玩家啊?\n");		if(del)		{			if(!is_visitor(ob,me->query("id")))				return notify_fail("不是你的观战者了。\n");			msg(me,ob,"$N不再允许$n观看$N的战况。\n");			visitor[me->query("id")] = visitor[me->query("id")] - ({ob->query("id")});		}		else		{			if(is_visitor(ob,me->query("id")))				return notify_fail("已经是你的观战者了。\n");			msg(me,ob,"$N让$n观看$N的战况。\n");			if(!visitor[me->query("id")])				visitor[me->query("id")] = ({ ob->query("id") });			else				visitor[me->query("id")] += ob->query("id");		}	}	else	{		if(del)			return notify_fail("????\n");		ob = get_player(key);		if(!ob)			return notify_fail("没有这个玩家在玩啊?\n");		msg(me,ob,"$N希望成为$n的观战者。\n");		tell_object(ob,"接受使用[visit "+me->query("id")+"]。\n");	}	return 1;}int do_rplace(string arg){	int i,x,y;	mixed *sh,*tb;	if(!is_playing(this_player()))		return notify_fail("你都不玩啊!\n");		if(!has_start||game_mode!=0)		return notify_fail("现在不是布置船只的时候。\n");		sh = get_ship(this_player()->query("id"));	tb = get_table(this_player()->query("id"));	for(i=0;i<SHIP_NUM;i++)	{		if(!sh||!tb)			return notify_fail("access date fail\n");		if(!sh[i][1])		{			x = random(WIDTH)+1;			y = random(HEIGHT)+1;			if(tb[x-1][y-1][0] != 1)			{				sh[i][1] = x;				sh[i][2] = y;				tb[x-1][y-1][0] = 1;			}		}	}	display(player_id(this_player()->query("id")));	return 1;}int do_help(string arg){	this_player()->start_more( @HELP海战棋使用方法:——[开始游戏]———————————————帮助命令:helpboard加入命令:join     加入游戏开始命令:start     开始游戏重置命令:reset board  结束游戏——[船只布置]———————————————放置船只:place X坐标 Y坐标取消放置:unplace X坐标 Y坐标随机放置:rplace放置结束:finish——[火力布置]———————————————放置火力:fire X坐标 Y坐标取消放置:unfire X坐标 Y坐标放置结束:finish——[观战命令]———————————————观战命令:visit [-d] 玩家ID		邀请其它玩家观看你的游戏。		加参数 -d 表示删除该玩家的观看资格。——[游戏规则]———————————————该游戏是两人游戏。分为准备和战斗阶段两个阶段。在准备阶段,各人把自己的船放置于自己的棋盘上。当各人都准备好以后,进入战斗阶段。在战斗阶段,各人决定攻击的位置。每一艘船有 1次攻击机会。在完成攻击设置以后,进入战斗状态。系统根据双方的攻击设置进行攻击,当攻击位置上有敌方船,则可以把对方该船击毁。被击毁的船丧失攻击能力。在所有攻击结束以后,重新进入攻击设置。如此循环,直到一方的船全部被击毁。游戏开始时候,每人有10艘船。最后谁的船最先被全部消灭掉,谁为输者。——————————————————————			make by 猫部猫(Catyboy) v1.0HELP	);        return 1;}

⌨️ 快捷键说明

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