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

📄 verb.c

📁 minix软件源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*   WEAR.  Only good for jewels, ruby slippers, cloak & crown.   But he might try the sword.  Anything else is ridiculous.   Another variant of 'CARRY'. */void vwear(){    int msg;    if (object == SWORD && g.prop[SWORD] != 3)	msg = 209;    else if (worn(object)) {	if (object == CLOAK && g.prop[CLOAK] == 2)	    msg = 242;	else if (wearng(object))	    msg = (object == SHOES) ? 227 : 210;	else {	    g.prop[object] = 1;	    biton(object, WEARBT);	    if (enclosed(object))		extract(object);	    if (holding(object))		msg = 54;	    else {		vtake();		return;	    }	}    } else {	printf("Just exactly how does one wear a %s\n", otxt[objx]);	return;    }    rspeak(msg);    return;}/*   HIT. If not punching out telephone, assume attack. */void vhit(){    if (at(WUMPUS) && g.prop[WUMPUS] == 0) {	vwake();	return;    }    if (object != PHONE) {	vkill();	return;    } else {	if (g.closed) {	    rspeak(282);	    dwarfend();	    return;	}	if (g.prop[PHONE] == 2)	    rspeak(256);	else {	    drop(SLUGS, g.loc);	    g.prop[PHONE] = 2;	    g.prop[BOOTH] = 2;	    rspeak(257);	}    }    return;}/*   ANSWER (telephone). Smartass for anything else. */void vanswer(){    int msg;    switch (object) {    case DWARF:    case WUMPUS:    case SNAKE:    case BEAR:    case DRAGON:	msg = 259;	break;    case TROLL:	msg = 258;	break;    case BIRD:	msg = 260;	break;    case PHONE:	if (g.prop[PHONE] != 0)	    msg = 269;	else if (g.closed) {	    rspeak(283);	    normend();	    return;	} else {	    msg = 261;	    g.prop[PHONE] = 1;	    g.prop[BOOTH] = 2;	}	break;    default:	msg = actmsg[verb];	break;    }    rspeak(msg);    return;}/*   BLOW. Joshua fit de battle of Jericho, and de walls ... */void vblow(){    int msg, i, k;    msg = actmsg[verb];    if (object != 0 && iobj != 0) {	rspeak(msg);	return;    }    if (object == 0)	object = iobj;    iobj = 0;    if (object == 0)	msg = 268;    if (object == HORN) {	msg = outside(g.loc) ? 277 : 266;	if (at(WUMPUS)) {	    rspeak(msg);	    if (g.prop[WUMPUS] == 0)		vwake();	    return;	} else if (g.prop[WALL] != 1 && (g.loc == 102 || g.loc == 194)) {	    k = g.loc == 194 ? 195 : 196;	    msg = 265;	    g.prop[WALL] = 1;	    for (i = 1; i < MAXOBJ; i++)		if (g.place[i] == g.loc || g.fixed[i] == g.loc)		    move(i, k);	    g.newloc = k;	}    }    rspeak(msg);    return;}/*   DIAL. No effect unless at phone. */void vdial(){    if (object != PHONE)	actspk(verb);    else if (g.closed) {	rspeak(283);	normend();    } else	rspeak(271);    return;}/*   PLAY.  Only for horn or lyre. */void vplay(){    int msg;    msg = actmsg[verb];    if (object != 0 && iobj != 0) {	rspeak(confuz());	return;    }    if (object == 0)	object = iobj;    if (object == HORN) {	vblow();	return;    }    if (object == LYRE) {	msg = 287;	if (here(DOG) && !dead(DOG)) {	    g.prop[DOG] = 1;	    biton(DOG, DEADBT);	    g.fixed[AXE] = 0;	    g.prop[AXE] = 0;	    msg = 288;	}    }    rspeak(msg);    return;}/*   PICK/ PICK UP.  Can pick flower & mushrooms,   But must 'PICK UP' everything else. */void vpick(){    if (object == 0)	object = iobj;    iobj = 0;    if (object == FLOWER || object == MUSHRM || prep != 0)	vtake();    else	rspeak(confuz());    return;}/*   PUT DOWN: equivalent to drop   PUT IN: if liquid, means fill   PUT ON: wear of drop */void vput(){    if (prep == 0) {	printf("Where do you want to put the %s\n", otxt[objx]);	return;    }    if (prep == PREPIN)	vinsert();    else {	/* PUT ON: wear or put object on iobj */	if (prep == PREPON) {	    if (object == 0) {		object = iobj;		otxt[objx] = iotxt[iobx];		iobj = 0;	    }	    if (worn(object) || object == 0)		vwear();	    else		vdrop();	} else {	    /* PUT DOWN: "drop" */	    if (object == 0 && iobj == 0) {		if (object == 0)		    object = iobj;		iobj = 0;		vdrop();	    } else		rspeak(noway());	}    }    return;}/* turn on/off */void vturn(){    if (!prep)	rspeak(confuz());    else {	if (!object && iobj == LAMP)	    object = LAMP;	if (object != LAMP)	    rspeak(noway());	else if (prep == PREPON)	    von();	else	    voff();    }    return;}/*   GET (no prep): "take"   GET IN: "enter"   GET OUT: "leave" */void vget(){    if (prep == 0 || prep == PREPFR)	vtake();    else if (object == 0) {	object = iobj;	iobj = 0;	prep = 0;	vtake();    }    return;}/*   INSERT/PUT IN */void vinsert(){    int msg;    if (iobj == 0) {	printf("Where do you want to %s it?\n", vtxt[vrbx]);	return;    }    msg = noway();    if (object == SWORD && iobj == ANVIL && g.prop[SWORD] == 0)	msg = 350;    if (!vessel(iobj)) {	rspeak(msg);	return;    }    msg = ck_obj();    if (g.fixed[object]) {	rspeak(msg);	return;    }    if (object == iobj) {	rspeak(252);	return;    }    if (iobj == BOTTLE || iobj == CASK || iobj == VASE	|| iobj == GRAIL || (object >= WATER && object <= WINE + 1)) {	object = iobj;	iobj = objs[objx];	vfill();	return;    }    if (!ajar(iobj)) {	rspeak(358);	return;    }    if (iobj == CHEST) {	if (object == BOAT)	    msg = noway();	else {	    if (wearng(object))		bitoff(object, WEARBT);	    if (worn(object))		g.prop[object] = 0;	    if (enclosed(object))		extract(object);	    insert(object, iobj);	    msg = 54;	}	rspeak(msg);	return;    }    /* Bird goes into cage and only cage */    if (object == BIRD && iobj != CAGE) {	rspeak(351);	return;    }    if (object != BIRD && iobj == CAGE) {	rspeak(329);	return;    }    if (object == BIRD) {	prep = 0;	vtake();	return;    }    /* Bar vase & pillow from safe, to force putting down on florr */    if ((object == VASE || object == PILLOW) && iobj == SAFE) {	rspeak(329);	return;    }    if (object != RADIUM && iobj == SHIELD) {	rspeak(329);	return;    }    if (iobj == PHONE) {	if (object == COINS || object == SLUGS) {	    destroy(object);	    msg = 330;	} else	    msg = 329;	rspeak(msg);	return;    }    if (iobj == VEND) {	if (object == COINS || object == SLUGS) {	    destroy(object);	    move(BATTERIES, g.loc);	    if (g.prop[BATTERIES] == 1) {		rspeak(317);		g.prop[VEND] = 1;	    }	    g.prop[BATTERIES] = 0;	    pspeak(BATTERIES, 0);	} else	    rspeak(noway());	return;    }    /* Put batteries in lamp. There is a glitch here, in that if he       tries to get a third set of batteries before the second set has       been inserted, the second set disappears!       ***fix this some time ***     */    if (iobj == LAMP) {	if (object != BATTERIES || g.prop[BATTERIES] != 0)	    msg = noway();	else {	    g.prop[BATTERIES] = 1;	    if (enclosed(BATTERIES))		extract(BATTERIES);	    if (holding(BATTERIES))		drop(BATTERIES, g.loc);	    g.limit = 400;	    g.prop[LAMP] = 1;	    g.lmwarn = FALSE;	    msg = 188;	}	rspeak(msg);	return;    }    if (!small(object))	msg = 329;    else {	if (wearng(object))	    bitoff(object, WEARBT);	if (worn(object))	    g.prop[object] = 0;	if (enclosed(object))	    extract(object);	insert(object, iobj);	msg = 54;    }    rspeak(msg);    return;}/* Remove or take from */void vextract(){    int msg;    if (object == RING && g.prop[RING] == 2) {	prep = 0;	iobj = 0;	vtake();	return;    }    msg = 343;    if (iobj == 0) {	if (!enclosed(object))	    msg = 340;	iobj = -g.place[object];    }    if (g.place[object] != -iobj)	msg = 341;    if (!ajar(iobj))	msg = 335;    if (object == WATER || object == OIL || object == WINE)	msg = 342;    if (!toting(object) && ((burden(0) + burden(object)) > 15))	msg = 92;    if (msg == 343) {	if (object == BIRD) {	    vdrop();	    return;	}	extract(object);    }    rspeak(msg);    return;}/*   lock. chain, grate, chest, elfin door   Here are the current lock/unlock messages & numbers:   31	you have no keys.   32	it has no lock.   34	it's already locked.   35	the grate is now locked.   36	the grate is now unlocked.   37	it was allready unlocked.   55	you can't unlock the keys.   171	The chain is now unlocked.   172	The chain is now locked.   173	There is nothing here to which the chain can be locked.   224	Your keys are all too large.   234	The wrought-iron door is now locked.   235	The tiny door is now locked.   236	The wrought-iron door is now unlocked.   237	The tiny door is now unlocked.   375	You don't have the right key.   333	the chest is now locked.   334	the chest is now unlocked.   367	The safe's door swings shut.*/void vlock(){    int msg, k;    if (!hinged(object))    {	printf("I don't know how to lock or unlock the %s\n",	       otxt[objx]);	return;    }    else if (!locks(object))	msg = 32;    else if (locked(object))	msg = 34;    else if (!athand(KEYS) && !athand(SKEY) && object != SAFE)	msg = 31;    else {	msg = 375;	switch (object) {	case CHAIN:	    if (!athand(KEYS))		break;	    msg = 173;	    if (g.loc != plac[CHAIN])		break;	    msg = 172;	    g.prop[CHAIN] = 2;	    if (enclosed(CHAIN))		extract(CHAIN);	    if (holding(CHAIN))		drop(CHAIN, g.loc);	    g.fixed[CHAIN] = -1;	    biton(CHAIN, LOCKBT);	    bitoff(CHAIN, OPENBT);	    break;	case CHEST:	    if (!athand(KEYS))		break;	    msg = 334;	    biton(CHEST, LOCKBT);	    bitoff(CHEST, OPENBT);	    break;	case TDOOR:	case TDOOR2:	    msg = 224;	    if (!toting(SKEY))		break;	    g.prop[TDOOR] = 0;	    g.prop[TDOOR2] = 0;	    msg = 234 + (TDOOR2 - object);	    k = TDOOR + TDOOR2 - object;	    biton(k, LOCKBT);	    bitoff(k, OPENBT);	    biton(object, LOCKBT);	    bitoff(object, OPENBT);	    break;	case GRATE:	    if (!athand(KEYS))		break;	    g.prop[GRATE] = 0;	    msg = 35;	    biton(GRATE, LOCKBT);	    bitoff(GRATE, OPENBT);	    break;	case SAFE:	    g.prop[SAFE] = 0;	    msg = 367;	    biton(SAFE, LOCKBT);	    bitoff(SAFE, OPENBT);	    break;	}    }    rspeak(msg);}/*   UNLOCK. chain, grate, chest, elfin door.*/void vunlock(){    int msg, k;    if (object == KEYS || object == SKEY)	msg = 55;    else if (!hinged(object))    {	printf("I don't know how to lock or unlock the %s\n",	       otxt[objx]);	return;    }    else if (!locked(object))	msg = 37;    else if (!locks(object))	msg = 32;    else if (object == SAFE) {	if (iobj == KEYS || iobj == SKEY)	    msg = 368;	else	    msg = 342;    } else if (!athand(KEYS) && !athand(SKEY))	msg = 31;    else {	msg = 375;	switch (object) {	case CHAIN:	    if (!athand(KEYS))		break;	    if (g.prop[BEAR] == 0)		msg = 41;	    else {		msg = 171;		g.prop[CHAIN] = 0;		g.fixed[CHAIN] = 0;		if (g.prop[BEAR] != 3)		    g.prop[BEAR] = 2;		g.fixed[BEAR] = 2 - g.prop[BEAR];		bitoff(CHAIN, LOCKBT);		biton(CHAIN, OPENBT);	    }	    break;	case CHEST:	    if (athand(KEYS)) {		msg = 333;		bitoff(CHEST, LOCKBT);		biton(CHEST, OPENBT);	    }	    break;	case TDOOR:	case TDOOR2:	    /* Elvin door stuff to lock/unlock tiny door w/special key.	       the damn thing is really at four places, and we want the	       right messages if he only has 'BIG'keys (or no keys).	       Also, he can unlock it either while he is big or small. */	    msg = 224;	    if (!athand(SKEY))		break;	    if (g.closing) {		msg = 130;		if (!g.panic)		    g.clock2 = 15;		g.panic = TRUE;	    } else {		g.prop[TDOOR] = 1;		g.prop[TDOOR2] = 1;		msg = 234 + 2 + (TDOOR2 - object);		k = TDOOR + (TDOOR2 - object);		bitoff(k, LOCKBT);		biton(k, OPENBT);		bitoff(object, LOCKBT);		biton(object, OPENBT);	    }	    break;	case GRATE:	    if (!athand(KEYS))		break;	    if (g.closing) {		msg = 130;		if (!g.panic)		    g.clock2 = 15;		g.panic = TRUE;	    } else {		g.prop[GRATE] = 1;		msg = 36;		bitoff(GRATE, LOCKBT);		biton(GRATE, OPENBT);	    }	    break;	default:	    msg = 33;	}    }    rspeak(msg);}/*   LOOK.*/void vlook(){    int sloc;    if (object != 0) {	rspeak(confuz());	return;    }    /* Look into something (a container). */    if (vessel(iobj)) {	if (!ajar(iobj) && opaque(iobj))	    rspeak(actmsg[verb]);	else if (g.holder[iobj] == 0)	    rspeak(359);	else {	    putchar(' ');	    lookin(iobj);	}	/* Look at something. If written, read it. */    } else if (printed(iobj)) {	object = iobj;	iobj = 0;	vread();    } else if (iobj == SPHERE) {	if (!inside(g.loc) || athand(SAPPHIRE))	    rspeak(42);	else {	    rspeak(400);	    printf("  ");	    sloc = g.place[SAPPHIRE];	    if ((g.loc_attrib[sloc] % 2 == 0 || enclosed(SAPPHIRE))		&& sloc != 200		&& !g.place[LAMP] == sloc && g.prop[LAMP] != 0)		rspeak(401);	    else		desclg(sloc);	    if (sloc == 239 && !g.flg239) {		rspeak(403);		g.flg239 = TRUE;	    }	    printf("  ");	    rspeak(402);	}    } else	printf("I see nothing special about the %s?\n", iotxt[iobx]);    return;}

⌨️ 快捷键说明

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