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

📄 assorted.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic	char *sccsid = "@(#)assorted.c	1.1 83/03/17";#endif#define EXPLODE 5#include "externs.h"table(rig, shot, hittable, onship, fromship, roll)int rig, shot, hittable, onship, fromship, roll;{	register int hhits = 0, chits = 0, ghits = 0, rhits = 0;	int Ghit = 0, Hhit = 0, Rhit = 0, Chit = 0;	int guns, car, pc, hull;	int crew[3];	register int n;	int rigg[4];	char message[60];	struct shipspecs *ptr;	struct File *ptr1;	ptr = &specs[scene[game].ship[onship].shipnum];	ptr1 = scene[game].ship[onship].file;	pc = ptr1 -> pcrew;	hull = ptr -> hull;	crew[0] = ptr -> crew1;	crew[1] = ptr -> crew2;	crew[2] = ptr -> crew3;	rigg[0] = ptr -> rig1;	rigg[1] = ptr -> rig2;	rigg[2] = ptr -> rig3;	rigg[3] = ptr -> rig4;	if (shot == GRAPE)		Chit = chits = hittable;	else {		Chit = chits = rig ? RigTable[hittable][roll-1].C : HullTable[hittable][roll-1].C;		Rhit = rhits = rig ? RigTable[hittable][roll-1].R : HullTable[hittable][roll-1].R;		Hhit = hhits = rig ? RigTable[hittable][roll-1].H : HullTable[hittable][roll-1].H;		Ghit = ghits = rig ? RigTable[hittable][roll-1].G : HullTable[hittable][roll-1].G;		if (ptr1 -> FS)			rhits *= 2;		if (shot == CHAIN){			Ghit = ghits = 0;			Hhit = hhits = 0;		}	}	if (ptr1 -> captured > -1){		pc -= (chits + 1)/2;		chits /= 2;	}	for (n=0; n < 3; n++)		if (chits > crew[n]){			chits -= crew[n];			crew[n] = 0;		}		else {			crew[n] -= chits;			chits = 0;		}	for (n=0; n < 3; n++)		if (rhits > rigg[n]){			rhits -= rigg[n];			rigg[n] = 0;		}		else {			rigg[n] -= rhits;			rhits = 0;		}	if (rigg[3] != -1 && rhits > rigg[3]){		rhits -= rigg[3];		rigg[3] = 0;	} else if (rigg[3] != -1){		rigg[3] -= rhits;	}	if (rig && !rigg[2] && (!rigg[3] || rigg[3] == -1))		makesignal("dismasted!", 0, onship);	if (portside(fromship, onship, 0)){		guns = ptr -> gunL;		car = ptr -> carL;	} else {		guns = ptr -> gunR;		car = ptr -> carR;	}	if (ghits > car){		ghits -= car;		car = 0;	}	else {		car -= ghits;		ghits = 0;	}	if (ghits > guns){		ghits -= guns;		guns = 0;	}	else {		guns -= ghits;		ghits = 0;	}	hull -= ghits;	if (portside(fromship, onship, 0) && Ghit){		Write(SPECS + onship, 0, 20, guns);		Write(SPECS + onship, 0, 24, car);	}	else if (Ghit){		Write(SPECS + onship, 0, 22, guns);		Write(SPECS + onship, 0, 26, car);	}	hull -= hhits;	hull = hull < 0 ? 0 : hull;	if (ptr1 -> captured > -1 && Chit){		Write(FILES + onship, 0, 70, pc);	}	if (Hhit)		Write(SPECS + onship, 0, 10, hull);	if (Chit)		for (n=0; n < 3; n++)			Write(SPECS + onship, 0, 14 + 2*n, crew[n]);	if (Rhit)		for (n=0; n < 4; n++)			Write(SPECS + onship, 0, 28 + 2*n, rigg[n]);	switch(shot){		case ROUND:			strcpy(message, "firing round");			break;		case GRAPE:			strcpy(message, "firing grape");			break;		case CHAIN:			strcpy(message, "firing chain");			break;		case DOUBLE:			strcpy(message, "firing double");			break;		case EXPLODE:			strcpy(message, "exploding");	}	strcat(message, " shot on %s (%c%c)");	makesignal(message, onship, fromship);	if (roll == 6 && rig){		switch(Rhit){			case 0:				strcpy(message, "fore topsail sheets parted");				break;			case 1:				strcpy(message, "mizzen shrouds parted");				break;			case 2:				strcpy(message, "main topsail yard shot away");				break;			case 4:				strcpy(message, "fore topmast and foremast shrouds shot away");				break;			case 5:				strcpy(message, "mizzen mast and yard shot through");				break;			case 6:				strcpy(message, "foremast and spritsail yard shattered");				break;			case 7:				strcpy(message, "main topmast and mizzen mast shattered");				break;		}		makesignal(message, 0, onship);	}	else if (roll == 6) {		switch(Hhit){			case 0:				strcpy(message, "anchor cables severed");				break;			case 1:				strcpy(message, "two anchor stocks shot away");				break;			case 2:				strcpy(message, "quarterdeck bulwarks damaged");				break;			case 3:				strcpy(message, "three gun ports shot away");				break;			case 4:				strcpy(message, "four guns dismounted");				break;			case 5:				strcpy(message, "rudder cables shot through");				Write(SPECS + onship, 0, 4, 0);				break;			case 6:				strcpy(message, "shot holes below the water line");				break;		}		makesignal(message, 0, onship);	}	if ((Chit > 1 && ptr1 -> readyL <= -30000 && ptr1 -> readyR <= -30000) || Chit == 4){		ptr -> qual--;		if (ptr -> qual <= 0){			makesignal("crew mutinying!", 0, onship);			ptr -> qual = 5;			Write(FILES + onship, 0, 68, onship);		} else 			makesignal("crew demoralized", 0, onship);		Write(SPECS + onship, 0, 12, ptr -> qual);	}	if (!hull)		strike(onship, fromship);}cleanfoul(fromship, toship, offset)int fromship, toship, offset;{	register int n = -1;	Write(FILES + fromship, 0, 84 + offset*4, 0);	do {		n++;	} while ((!scene[game].ship[toship].file -> fouls[n].turnfoul || scene[game].ship[toship].file -> fouls[n].toship != fromship) && n < 10);	if (n < 10)		Write(FILES + toship, 0, 84 + 4*n, 0);	if (!grapple(fromship, toship) && !foul(fromship,toship)){		if (!fouled(fromship) && !grappled(fromship)){			unboard(fromship,fromship, 1);		/* defense */			unboard(fromship,fromship, 0);		/* defense */		} else			unboard(fromship,toship, 0);		/* defense */		if (!fouled(toship) && !grappled(toship)){	/* defense */			unboard(toship,toship, 1);			unboard(toship,toship, 0);		} else			unboard(toship, fromship, 0);			/* offense */	}}cleangrapple(fromship, toship, offset)int fromship, toship, offset;{	register int n = -1;	Write(FILES + fromship, 0, 124 + offset*4, 0);	do {		n++;	} while ((!scene[game].ship[toship].file -> grapples[n].turnfoul || scene[game].ship[toship].file -> grapples[n].toship != fromship) && n < 10);	if (n < 10)		Write(FILES + toship, 0, 124 + 4*n, 0);	if (!grapple(fromship, toship) && !foul(fromship,toship)){		if (!fouled(fromship) && !grappled(fromship)){			unboard(fromship,fromship, 1);		/* defense */			unboard(fromship,fromship, 0);		/* defense */		} else			unboard(fromship,toship, 0);		/* defense */		if (!fouled(toship) && !grappled(toship)){	/* defense */			unboard(toship,toship, 1);			unboard(toship,toship, 0);		} else			unboard(toship, fromship, 0);			/* offense */	}}strike(shipnum, fromship)int shipnum, fromship;{	int points;	if (!scene[game].ship[shipnum].file -> struck){		Write(FILES + shipnum, 0, 66, 1);		points = specs[scene[game].ship[shipnum].shipnum].pts + scene[game].ship[fromship].file -> points;		Write(FILES + fromship, 0, 20, points);		unboard(shipnum, shipnum, 0);		/* all offense */		unboard(shipnum, shipnum, 1);		/* all defense */		switch(die()){			case 3:			case 4:		/* ship may sink */				Write(FILES + shipnum, 0, 234, 1);				break;			case 5:			case 6:		/* ship may explode */				Write(FILES + shipnum, 0, 232, 1);				break;		}		Write(FILES + shipnum, 1, 164, "striking her colours!");	}}

⌨️ 快捷键说明

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