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

📄 turn.c

📁 操作系统源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
       locations outside or meet the bear or following him into dead       end in maze.  And of couse, dead dwarves don't do much of       anything.  */    dtotal = attack = stick = 0;    for (i = 1; i <= DWARFMAX; ++i) {	if (g.dloc[i] == 0)	    continue;	/* Move a dwarf at random.  we don't have a matrix around to do	   it as in the original version... */	do	    j = ranz(106) + 15;	/* allowed area */	while (j == g.odloc[i] || j == g.dloc[i]	       || g.loc_attrib[j] & NOPIRAT);	if (j == 0)	    bug(36);	g.odloc[i] = g.dloc[i];	g.dloc[i] = j;	g.dseen[i] = ((g.dseen[i] && inside(g.newloc))		      || g.dloc[i] == g.newloc		      || g.odloc[i] == g.newloc);	if (g.dseen[i]) {	    g.dloc[i] = g.newloc;	    if (i == DWARFMAX)		dopirate();	    else {		++dtotal;		if (g.odloc[i] == g.dloc[i]) {		    ++attack;		    if (g.knfloc >= 0)			g.knfloc = g.newloc;		    if (ranz(1000) < (45 * (g.dflag - 2)))			++stick;		}	    }	}    }    /* Now we know shat's happing, let's tell the poor sucker about it */    if (dtotal == 0)	return;    if (dtotal > 1)	printf("There are %d threatening little dwarves in the room with you!\n", dtotal);    else	rspeak(4);    if (attack == 0)	return;    if (g.dflag == 2)	++g.dflag;    if (attack > 1) {	printf("%d of them throw knives at you!!\n", attack);	k = 6;    } else {	rspeak(5);	k = 52;    }    if (stick <= 1) {	rspeak(stick + k);	if (stick == 0)	    return;    } else	printf("%d of them get you !!!\n", stick);    g.oldloc2 = g.newloc;    death();    return;}/*  pirate stuff*/void dopirate(){    int j;    boolean k;    if (g.newloc == g.chloc || g.prop[CHEST] >= 0)	return;    k = FALSE;    /* Pirate won't take pyramid from plover room or dark room  (too       easy! ) */    for (j = 1; j < MAXOBJ; ++j)	if (treasr(j) && !(j == CASK && liq(CASK) == WINE)	    && !(j == PYRAMID && (g.newloc == g.place[PYRAMID]				  || g.newloc == g.place[EMERALD]))) {	    if (toting(j) && athand(j))		goto stealit;	    if (here(j))		k = TRUE;	}    if (g.tally == g.tally2 + 1 && k == FALSE && g.place[CHEST] == 0 &&	athand(LAMP) && g.prop[LAMP] == 1) {	rspeak(186);	move(CHEST, g.chloc);	move(MESSAGE, g.chloc2);	g.dloc[DWARFMAX] = g.chloc;	g.odloc[DWARFMAX] = g.chloc;	g.dseen[DWARFMAX] = 0;	return;    }    if (g.odloc[DWARFMAX] != g.dloc[DWARFMAX] && pct(30))	rspeak(127);    return;stealit:    rspeak(128);    /* don't steal chest back from troll! */    if (g.place[MESSAGE] == 0)	move(CHEST, g.chloc);    move(MESSAGE, g.chloc2);    for (j = 1; j < MAXOBJ; ++j) {	if (!treasr(j) || !athand(j)	    || (j == PYRAMID &&	     (g.newloc == plac[PYRAMID] || g.newloc == plac[EMERALD]))	    || (j == CASK && (liq(CASK) != WINE)))	    continue;	if (enclosed(j))	    extract(j);	if (wearng(j)) {	    g.prop[j] = 0;	    bitoff(j, WEARBT);	}	insert(j, CHEST);    }    g.dloc[DWARFMAX] = g.chloc;    g.odloc[DWARFMAX] = g.chloc;    g.dseen[DWARFMAX] = FALSE;    return;}/*  special time limit stuff...*/int stimer(){    int i, spk;    static int clock3;    g.foobar = g.foobar > 0 ? -g.foobar : 0;    g.combo = g.combo > 0 ? -g.combo : 0;    if (g.turns > 310 && g.abbnum != 10000 && !g.terse)	rspeak(273);    /* Bump all the right clocks for reconning battery life and closing */    if (g.closed) {	clock3--;	if (clock3 == 0) {	    g.prop[PHONE] = 0;	    g.prop[BOOTH] = 0;	    rspeak(284);	} else if (clock3 < -7) {	    rspeak(254);	    normend();	    return (TRUE);	}    }    if (g.tally == 0 && inside(g.loc) && g.loc != Y2)	--g.clock;    if (g.clock == 0) {	/* Start closing the cave */	g.prop[GRATE] = 0;	biton(GRATE, LOCKBT);	bitoff(GRATE, OPENBT);	g.prop[FISSURE] = 0;	g.prop[TDOOR] = 0;	biton(TDOOR, LOCKBT);	bitoff(TDOOR, OPENBT);	g.prop[TDOOR2] = 0;	biton(TDOOR2, LOCKBT);	bitoff(TDOOR2, OPENBT);	for (i = 1; i <= DWARFMAX; ++i) {	    g.dseen[i] = FALSE;	    g.dloc[i] = 0;	}	move(TROLL, 0);	move((TROLL + MAXOBJ), 0);	move(TROLL2, plac[TROLL]);	move((TROLL2 + MAXOBJ), fixd[TROLL]);	juggle(CHASM);	if (g.prop[BEAR] != 3)	    destroy(BEAR);	g.prop[CHAIN] = 0;	g.fixed[CHAIN] = 0;	g.prop[AXE] = 0;	g.fixed[AXE] = 0;	rspeak(129);	g.clock = -1;	g.closing = TRUE;	return (FALSE);    }    if (g.clock < 0)	--g.clock2;    if (g.clock2 == 0) {	/* Set up storage room... and close the cave... */	g.prop[BOTTLE] = put(BOTTLE, 115, 8);	g.holder[BOTTLE] = WATER;	g.place[WATER] = -BOTTLE;	g.hlink[WATER] = 0;	bitoff(BOTTLE, OPENBT);	g.prop[PLANT] = put(PLANT, 115, 0);	g.prop[OYSTER] = put(OYSTER, 115, 0);	g.prop[LAMP] = put(LAMP, 115, 0);	g.prop[ROD] = put(ROD, 115, 0);	g.prop[DWARF] = put(DWARF, 115, 0);	g.loc = 115;	g.oldloc = 115;	g.newloc = 115;	/* Leave the grate with normal (non-negative property). */	put(GRATE, 116, 0);	biton(GRATE, LOCKBT);	bitoff(GRATE, OPENBT);	g.prop[SNAKE] = put(SNAKE, 116, 1);	g.prop[BIRD] = put(BIRD, 116, 1);	g.prop[CAGE] = put(CAGE, 116, 0);	g.prop[ROD2] = put(ROD2, 116, 0);	g.prop[PILLOW] = put(PILLOW, 116, 0);	g.prop[BOOTH] = put(BOOTH, 116, -3);	g.fixed[BOOTH] = 115;	g.prop[PHONE] = put(PHONE, 212, -4);	g.prop[MIRROR] = put(MIRROR, 115, 0);	g.fixed[MIRROR] = 116;	g.prop[BOOK2] = put(BOOK2, 115, 0);	for (i = 1; i < MAXOBJ; ++i) {	    if (toting(i) && enclosed(i))		extract(i);	    if (toting(i))		destroy(i);	}	rspeak(132);	g.closed = TRUE;	clock3 = 20 + ranz(20);	newtravel = TRUE;	return (TRUE);    }    if (g.prop[LAMP] == 1)	--g.limit;    if (g.limit == 0) {	--g.limit;	g.prop[LAMP] = 0;	if (here(LAMP))	    rspeak(184);	return (FALSE);    }    if (g.limit < 0 && outside(g.loc)) {	rspeak(185);	normend();	return (TRUE);    }    if (g.limit <= 40) {	if (g.lmwarn || !here(LAMP))	    return (FALSE);	g.lmwarn = TRUE;	spk = 187;	if (g.prop[BATTERIES] == 1)	    spk = 323;	if (g.place[BATTERIES] == 0)	    spk = 183;	if (g.prop[VEND] == 1)	    spk = 189;	rspeak(spk);	return (FALSE);    }    return (FALSE);}/* HINTS   come here if he's been long enough at required location(s)   for some unused hint,  hint number is in variable "hint".   Branch to quick test for additional conditions, then   do neet stuff. If conditions are met and we want to offer   hint.  Clear hintlc if no action is taken. */#define MASE 1#define DARK 2#define WITT 3#define H_SWORD 4#define SLIDE 5#define H_GRATE 6#define H_BIRD 7#define H_ELFIN 8#define RNBOW 9#define STYX  10#define H_SNAKE 11#define CASTLE 12void do_hint(hint)int hint;{    g.hintlc[hint] = 0;    switch (hint + 1 - HNTMIN) {    case MASE:	if (!at(g.loc) && !at(g.oldloc)	    && !at(g.loc) && burden(0) > 1)	    break;	else	    return;    case DARK:	if (g.prop[EMERALD] != -1 && g.prop[PYRAMID] == -1)	    break;	else	    return;    case WITT:	break;    case H_SWORD:	if ((g.prop[SWORD] == 1 || g.prop[SWORD] == 5)	    && !toting(CROWN))	    break;	else	    return;    case SLIDE:	break;    case H_GRATE:	if (g.prop[GRATE] == 0 && !athand(KEYS))	    break;	else	    return;    case H_BIRD:	if (here(BIRD) && athand(ROD) && object == BIRD)	    break;	else	    return;    case H_ELFIN:	if (!g.visited[159])	    break;	else	    return;    case RNBOW:	if (!toting(SHOES) || g.visited[205])	    break;	else	    return;    case STYX:	if (!athand(LYRE) && g.prop[DOG] != 1)	    break;	else	    return;    case H_SNAKE:	if (here(SNAKE) && !here(BIRD))	    break;	else	    return;    case CASTLE:	break;    default:	printf("  TRYING TO PRINT HINT # %d\n", hint);	bug(27);    }    if (!yes(g.hints[hint][3], 0, 54))	return;    printf("\nI am prepared to give you a hint,");    printf(" but it will cost you %2d points\n", g.hints[hint][2]);    g.hinted[hint] = yes(175, g.hints[hint][4], 54);    if (g.hinted[hint] && g.limit > 30)	g.limit += 30 * g.hints[hint][2];    return;}

⌨️ 快捷键说明

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