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

📄 player2.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef lintstatic	char *sccsid = "@(#)player2.c	1.2 83/05/20";#endif#include "player.h"#define turnfirst(buf)  (*buf == 'r' || *buf == 'l')lost(){	if (scene[game].ship[player].file -> struck)		leave(0);	if (scene[game].ship[player].file -> captured > -1)		leave(1);	if (windspeed == 7)		leave(3);	if(scene[game].ship[player].file -> FS && (!specs[scene[game].ship[player].shipnum].rig1 || windspeed == 6))		Write(FILES + player, 0, 230, 0);}acceptmove(ma, ta, af)int ma, ta, af;{	register int n;	int moved = 0;	int full, vma, dir, ch;	char buf[60], last = '\0';	if (numscroll >= 22) numscroll = 18;	move(numscroll++, 0);	clearline();	printw("move (%d,%c%d): ", ma, (af ? '\'' : ' '), ta);	refresh();	n = 0;	while((ch = getch()) != '\n'){		if (ch != EOF){			buf[n++] = ch;			addch(ch);			refresh();		}		if(ch == '' && n > 1)			n -= 2;	}	buf[n] = '\0';	buf[9] = '\0';	dir = pos[player].dir;	vma = ma;	for (n = 0; buf[n]; n++)		if (!(buf[n] == 'r' || buf[n] == '\n' || buf[n] == 'l' || (buf[n] == '0' && !n) || isdigit(buf[n]) || buf[n] == 'b' || (buf[n] == 'd' && !n))){			if (isspace(buf[n])){				strcpy(buf+n, buf+n+1);				n--;			} else {				Signal("Syntax error.",0,0);				buf[n--] = '\0';			}		}		else			switch(buf[n]){				case 'l':					dir -= 2;				case 'r':					dir++;					if (!dir) dir = 8;					if (dir == 9) dir = 1;					if (last == 't'){						Signal("Error; ship can't turn that fast.", 0, 0);						buf[n--] = '\0';					}					last = 't';					ma--;					ta--;					vma = min(ma, maxmove(player, dir, 0));					if (ta < 0 && moved || vma < 0 && moved)						buf[n--] = '\0';					break;				case 'b':					ma--;					vma--;					last = 'b';					if (ta < 0 && moved || vma < 0 && moved)						buf[n--] = '\0';					break;				case '0':				case 'd':					buf[n--] = '\0';					break;				case '\n':					buf[n] = '\0';					break;				case '1':				case '2':				case '3':				case '4':				case '5':				case '6':				case '7':					if (last == '0'){						Signal("Error; value out of range.", 0, 0);						buf[n--] = '\0';					}					last = '0';					moved = 1;					ma -= buf[n] - '0';					vma -= buf[n] - '0';					if (ta < 0 && moved || vma < 0 && moved)						buf[n--] = '\0';					break;			} /* end switch and else and for */	if (ta < 0 && moved || vma < 0 && moved || af && turnfirst(buf) && moved){		Signal("Movement error.", 0, 0);		if (ta < 0 && moved){			if (scene[game].ship[player].file -> FS == 1){				Write(FILES + player, 0, 230, 0);				Signal("No hands to set full sails.", 0, 0);			}		}		else if (ma >= 0)			buf[1] = '\0';	}	if (af && !moved){		if (scene[game].ship[player].file -> FS == 1){			Write(FILES + player, 0, 230, 0);			Signal("No hands to set full sails.", 0, 0);		}	}	strcpy(movebuf, buf);	if (!*movebuf) strcpy(movebuf, "d");	Write(FILES + player, 1, 72, movebuf);	Signal("Helm: %s.", -1, movebuf);}boarding(){	register int n;	int crew[3];	int captured, men = 0;	struct shipspecs *ptr;	ptr = &specs[scene[game].ship[player].shipnum];	crew[0] = ptr -> crew1;	crew[1] = ptr -> crew2;	crew[2] = ptr -> crew3;	for(n=0; n < 3; n++){		if (scene[game].ship[player].file -> OBP[n].turnsent)			    men += scene[game].ship[player].file -> OBP[n].turnsent;	}	for(n=0; n < 3; n++){		if (scene[game].ship[player].file -> DBP[n].turnsent)			    men += scene[game].ship[player].file -> DBP[n].turnsent;	}	if (men){		crew[0] = men/100 ? 0 : crew[0] != 0;		crew[1] = (men%100)/10 ? 0 : crew[1] != 0;		crew[2] = men%10 ? 0 : crew[2] != 0;	} else {		crew[0] = crew[0] != 0;		crew[1] = crew[1] != 0;		crew[2] = crew[2] != 0;	}	for (n=0; n < scene[game].vessels; n++){		if ((captured = scene[game].ship[n].file -> captured) < 0)			captured = n;		if (n != player && pos[n].dir && range(player, n) <= 1 && scene[game].ship[player].nationality != scene[game].ship[captured].nationality){			if (meleeing(player, n) && crew[2]){				Signal("How many more to board the %s (%c%c)? ",n,0);				parties(crew, n, 200);			}			else if ((foul(player, n) || grapple(player, n)) && crew[2]){				Signal("Crew sections to board the %s (%c%c) (3 max) ?", n, 0);				parties(crew, n, 200);			}		}	}	if (crew[2]){		Signal("How many sections to repel boarders? ", 0, 0);		parties(crew, player, 260);	}}parties(crew, n, offset)int crew[3], n, offset;{	register int k, j, men; 	struct BP * ptr;	int  buf;	int temp[3];	for (k=0; k < 3; k++)		temp[k] = crew[k];	while((buf = getch()) == EOF);	addch(buf);	if (isdigit(buf)){		ptr = offset == 200 ? scene[game].ship[player].file -> OBP : scene[game].ship[player].file -> DBP ; 		for (j = 0; j < 3 && ptr[j].turnsent; j++);		if (!ptr[j].turnsent && buf > '0'){			men = 0;			for (k=0; k < 3 && buf > '0'; k++){				men += crew[k]*power(10, 2-k);				crew[k] = 0;				if (men) buf -= 1;			}			if (buf > '0')				Signal("Sending all crew sections.", 0, 0);			Write(FILES + player, 0, 30 + (offset > 200)*18 + 6*j, turn);			Write(FILES + player, 0, 30 + (offset > 200)*18 + 6*j + 2, n);			Write(FILES + player, 0, 30 + (offset > 200)*18 + 6*j + 4, men);			switch(offset){				case 200:					wmove(slot, 0, 0);					for (k=0; k < 3; k++)						if (temp[k] && !crew[k])							waddch(slot, k + '1');						else							wmove(slot, 0, 1 + k);					wmove(slot, 1, 0);					waddstr(slot, "OBP");					makesignal("boarding the %s (%c%c)", n, player);					break;				case 260:					wmove(slot, 2, 0);					for (k=0; k < 3; k++)						if (temp[k] && !crew[k])							waddch(slot, k + '1');						else							wmove(slot, 2, 1 + k);					wmove(slot, 3, 0);					waddstr(slot, "DBP");					makesignal("repelling boarders", 0, player);					break;			}			wrefresh(slot);		}		else			Signal("Sending no crew sections.", 0, 0);	}}power(base, exp)int base, exp;{	switch(exp){		case 0:			return(1);		case 1:			return(base);		case 2:			return(base * base);	}	return(0);}repair(){	int buf;	int *repairs;	struct shipspecs *ptr;	if (!repaired && !loaded && !fired && !changed && !turned()){		ptr = &specs[scene[game].ship[player].shipnum];		Signal("Repair (hull, guns, rigging)? ", 0, 0);		while((buf = getch()) == EOF);		addch(buf);		switch(buf){			case 'h':				repairs = &scene[game].ship[player].file -> RH;				break;			case 'g':				repairs = &scene[game].ship[player].file -> RG;				break;			case 'r':				repairs = &scene[game].ship[player].file -> RR;				break;			default:				Signal("Avast heaving!", 0, 0);				return;		}		repaired = 1;		*repairs += 1;		if (*repairs >= 3){			*repairs = 0;		}		if (!*repairs){			switch(buf){				case 'h':					if (ptr -> hull < ptr -> guns/4)						Write(SPECS + player, 0, 10, ptr -> hull + 2);					else buf = 0;					break;				case 'g':					if (ptr -> gunL < ptr -> gunR){						if (ptr -> gunL + ptr -> carL < ptr -> guns/5)							Write(SPECS + player, 0, 20, ptr -> gunL + 2);						else buf = 0;					} else						if (ptr -> gunR + ptr -> carR < ptr -> guns/5)							Write(SPECS + player, 0, 22, ptr -> gunR + 2);						else buf = 0;					break;				case 'r':					if (!ptr -> rig4)						Write(SPECS + player, 0, 34, ptr -> rig4 + 2);					else if (!ptr -> rig3)						Write(SPECS + player, 0, 32, 2);					else if (!ptr -> rig2)						Write(SPECS + player, 0, 30, 2);					else if (ptr -> rig1 < 4)						Write(SPECS + player, 0, 28, 2);					else buf = 0;					break;			}			if (!buf)				Signal("Repairs completed.", 0, 0);		}	}	else		Signal("No hands free to repair",0,0);}turned(){	register int n;	for (n=0; movebuf[n]; n++)		if (movebuf[n] == 'r' || movebuf[n] == 'l')			return(1);	return(0);}loadplayer(){	int buf;	int loadL, loadR, ready, load, *Ready, *Load;	if (!specs[scene[game].ship[player].shipnum].crew3){		Signal("out of crew",0,0);		return(0);	}	Load = &scene[game].ship[player].file -> loadL;	Ready = &scene[game].ship[player].file -> readyL;	loadL = *Load;	loadR = *(Load + 1);	if (!loadL && !loadR){		Signal("Load which broadside (left or right)? ", 0, 0);		while((buf = getch()) == EOF);		addch(buf);		if (buf == 'r')			loadL = 1;		else			loadR = 1;	}	if ((!loadL && loadR || loadL && !loadR)){		Signal("Reload with (round, double, chain, grape)? ", 0, 0);		while((buf = getch()) == EOF);		addch(buf);		switch(buf){			case 'r':				load = ROUND;				ready = 1;				break;			case 'd':				load = DOUBLE;				ready = 2;				break;			case 'c':				load = CHAIN;				ready = 1;				break;			case 'g':				load = GRAPE;				ready = 1;				break;			default:				Signal("Broadside not loaded.", 0, 0);				return;		}		if (!loadR){			*(Load + 1) = load;			*(Ready + 1) = ready;		}		else {			*Load = load;			*Ready = ready;

⌨️ 快捷键说明

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