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

📄 global.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
	subroutine to ask if the player really wants to quit */quit()	{	register int i;	cursors();	strcpy(lastmonst,"");	lprcat("\n\nDo you really want to quit?");	while (1)		{		i=getchar();		if (i == 'y')	{ died(300); return; }		if ((i == 'n') || (i == '\33'))	{ lprcat(" no"); lflush(); return; }		lprcat("\n");  setbold();  lprcat("Yes");  resetbold();  lprcat(" or ");		setbold();  lprcat("No");  resetbold();  lprcat(" please?   Do you want to quit? ");		}		}/*	function to ask --more-- then the user must enter a space */more()	{	lprcat("\n  --- press ");  standout("space");  lprcat(" to continue --- ");	while (getchar() != ' ');	}/*	function to put something in the players inventory	returns 0 if success, 1 if a failure */take(itm,arg)	int itm,arg;	{	register int i,limit;/*	cursors(); */	if ((limit = 15+(c[LEVEL]>>1)) > 26)  limit=26;	for (i=0; i<limit; i++)		if (iven[i]==0)			{			iven[i] = itm;  ivenarg[i] = arg;  limit=0;			switch(itm)				{				case OPROTRING:	case ODAMRING: case OBELT: limit=1;  break;				case ODEXRING:		c[DEXTERITY] += ivenarg[i]+1; limit=1;	break;				case OSTRRING:		c[STREXTRA]  += ivenarg[i]+1;	limit=1; break;				case OCLEVERRING:	c[INTELLIGENCE] += ivenarg[i]+1;  limit=1; break;				case OHAMMER:		c[DEXTERITY] += 10;	c[STREXTRA]+=10;									c[INTELLIGENCE]-=10;	limit=1;	 break;				case OORBOFDRAGON:	c[SLAYING]++;		break;				case OSPIRITSCARAB: c[NEGATESPIRIT]++;	break;				case OCUBEofUNDEAD: c[CUBEofUNDEAD]++;	break;				case ONOTHEFT:		c[NOTHEFT]++;		break;				case OSWORDofSLASHING:	c[DEXTERITY] +=5;	limit=1; break;				};			lprcat("\nYou pick up:"); srcount=0;  show3(i);			if (limit) bottomline();  return(0);			}	lprcat("\nYou can't carry anything else");  return(1);	}/*	subroutine to drop an object  returns 1 if something there already else 0 */drop_object(k)	int k;	{	int itm;	if ((k<0) || (k>25)) return(0);	itm = iven[k];	cursors();	if (itm==0) { lprintf("\nYou don't have item %c! ",k+'a'); return(1); }	if (item[playerx][playery])		{ beep(); lprcat("\nThere's something here already"); return(1); }	if (playery==MAXY-1 && playerx==33) return(1); /* not in entrance */	item[playerx][playery] = itm;	iarg[playerx][playery] = ivenarg[k];	srcount=0; lprcat("\n  You drop:"); show3(k); /* show what item you dropped*/	know[playerx][playery] = 0;  iven[k]=0; 	if (c[WIELD]==k) c[WIELD]= -1;		if (c[WEAR]==k)  c[WEAR] = -1;	if (c[SHIELD]==k) c[SHIELD]= -1;	adjustcvalues(itm,ivenarg[k]);	dropflag=1; /* say dropped an item so wont ask to pick it up right away */	return(0);	}/*	function to enchant armor player is currently wearing */enchantarmor()	{	register int tmp;	if (c[WEAR]<0) { if (c[SHIELD] < 0)		{ cursors(); beep(); lprcat("\nYou feel a sense of loss"); return; }					else { tmp=iven[c[SHIELD]]; if (tmp != OSCROLL) if (tmp != OPOTION) { ivenarg[c[SHIELD]]++; bottomline(); } } }	tmp = iven[c[WEAR]];	if (tmp!=OSCROLL) if (tmp!=OPOTION)  { ivenarg[c[WEAR]]++;  bottomline(); }	}/*	function to enchant a weapon presently being wielded */enchweapon()	{	register int tmp;	if (c[WIELD]<0)		{ cursors(); beep(); lprcat("\nYou feel a sense of loss"); return; }	tmp = iven[c[WIELD]];	if (tmp!=OSCROLL) if (tmp!=OPOTION)		{ ivenarg[c[WIELD]]++;		  if (tmp==OCLEVERRING) c[INTELLIGENCE]++;  else		  if (tmp==OSTRRING)	c[STREXTRA]++;  else		  if (tmp==ODEXRING)    c[DEXTERITY]++;		  bottomline(); }	}/*	routine to tell if player can carry one more thing	returns 1 if pockets are full, else 0 */pocketfull()	{	register int i,limit; 	if ((limit = 15+(c[LEVEL]>>1)) > 26)  limit=26;	for (i=0; i<limit; i++) if (iven[i]==0) return(0);	return(1);	}/*	function to return 1 if a monster is next to the player else returns 0 */nearbymonst()	{	register int tmp,tmp2;	for (tmp=playerx-1; tmp<playerx+2; tmp++)		for (tmp2=playery-1; tmp2<playery+2; tmp2++)			if (mitem[tmp][tmp2]) return(1); /* if monster nearby */	return(0);	}/*	function to steal an item from the players pockets	returns 1 if steals something else returns 0 */stealsomething()	{	register int i,j;	j=100;	while (1)		{		i=rund(26);		if (iven[i]) if (c[WEAR]!=i) if (c[WIELD]!=i) if (c[SHIELD]!=i)			{			srcount=0; show3(i);			adjustcvalues(iven[i],ivenarg[i]);  iven[i]=0; return(1);			}		if (--j <= 0) return(0);		}	}/*	function to return 1 is player carrys nothing else return 0 */emptyhanded()	{	register int i;	for (i=0; i<26; i++)		if (iven[i]) if (i!=c[WIELD]) if (i!=c[WEAR]) if (i!=c[SHIELD]) return(0);	return(1);	}/*	function to create a gem on a square near the player */creategem()	{	register int i,j;	switch(rnd(4))		{		case 1:	 i=ODIAMOND;	j=50;	break;		case 2:	 i=ORUBY;		j=40;	break;		case 3:	 i=OEMERALD;	j=30;	break;		default: i=OSAPPHIRE;	j=20;	break;		};	createitem(i,rnd(j)+j/10);	}/*	function to change character levels as needed when dropping an object	that affects these characteristics */adjustcvalues(itm,arg)	int itm,arg;	{	register int flag;	flag=0;	switch(itm)		{		case ODEXRING:	c[DEXTERITY] -= arg+1;  flag=1; break;		case OSTRRING:	c[STREXTRA]  -= arg+1;  flag=1; break;		case OCLEVERRING: c[INTELLIGENCE] -= arg+1;  flag=1; break;		case OHAMMER:	c[DEXTERITY] -= 10;	c[STREXTRA] -= 10;						c[INTELLIGENCE] += 10; flag=1; break;		case OSWORDofSLASHING:	c[DEXTERITY] -= 5;	flag=1; break;		case OORBOFDRAGON:		--c[SLAYING];		return;		case OSPIRITSCARAB:		--c[NEGATESPIRIT];	return;		case OCUBEofUNDEAD:		--c[CUBEofUNDEAD];	return;		case ONOTHEFT:			--c[NOTHEFT]; 		return;		case OLANCE:		c[LANCEDEATH]=0;	return;		case OPOTION:	case OSCROLL:	return;		default:	flag=1;		};	if (flag) bottomline();	}/*	function to read a string from token input "string"	returns a pointer to the string */gettokstr(str)	register char *str;	{	register int i,j;	i=50;	while ((getchar() != '"') && (--i > 0));	i=36;	while (--i > 0)		{		if ((j=getchar()) != '"') *str++ = j;  else i=0;		}	*str = 0;	i=50;	if (j != '"') while ((getchar() != '"') && (--i > 0)); /* if end due to too long, then find closing quote */	}/*	function to ask user for a password (no echo)	returns 1 if entered correctly, 0 if not */static char gpwbuf[33];getpassword()	{	register int i,j;	register char *gpwp;	extern char *password;	scbr();	/*	system("stty -echo cbreak"); */	gpwp = gpwbuf;	lprcat("\nEnter Password: "); lflush();	i = strlen(password);	for (j=0; j<i; j++) read(0,gpwp++,1);	  gpwbuf[i]=0;	sncbr(); /* system("stty echo -cbreak"); */	if (strcmp(gpwbuf,password) != 0)		{	lprcat("\nSorry\n");  lflush(); return(0);	}	else  return(1);	}/*	subroutine to get a yes or no response from the user	returns y or n */getyn()	{	register int i;	i=0; while (i!='y' && i!='n' && i!='\33') i=getchar();	return(i);	}/*	function to calculate the pack weight of the player	returns the number of pounds the player is carrying */packweight()	{	register int i,j,k;	k=c[GOLD]/1000; j=25;  while ((iven[j]==0) && (j>0)) --j;	for (i=0; i<=j; i++)		switch(iven[i])			{			case 0:												break;			case OSSPLATE:   case OPLATEARMOR:		k += 40;	break;			case OPLATE:							k += 35;	break;			case OHAMMER:							k += 30;	break;			case OSPLINT:							k += 26;	break;			case OSWORDofSLASHING:	case OCHAIN:			case OBATTLEAXE:   		case O2SWORD:	k += 23;	break;			case OLONGSWORD:   		case OSWORD:			case ORING:				case OFLAIL:	k += 20;	break;			case OLANCE: 		case OSTUDLEATHER:	k += 15;	break;			case OLEATHER:   		case OSPEAR:	k += 8;		break;			case OORBOFDRAGON:   	case OBELT:		k += 4;		break;			case OSHIELD:							k += 7;		break;			case OCHEST:		k += 30 + ivenarg[i];			break;			default:								k++;			};	return(k);	}#ifndef MACRORND	/* macros to generate random numbers   1<=rnd(N)<=N   0<=rund(N)<=N-1 */rnd(x)	int x;	{	return((((randx=randx*1103515245+12345)>>7)%(x))+1);	}rund(x)	int x;	{	return((((randx=randx*1103515245+12345)>>7)%(x))  );	}#endif MACRORND

⌨️ 快捷键说明

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