示例#1
0
 int maxKilledEnemies(vector<vector<char>>& grid) {
     if(grid.empty() == true || grid[0].empty() == true) {
         return 0;
     }
     
     int r = grid.size();
     int c = grid[0].size();
     
     vector<vector<int>> kills(r, vector<int>(c, 0));
     
     for(int i = 0; i < r; i++) {
         int enemy = 0;
         int begin = 0;
         for(int j = 0; j <= c; j++) {
             if(j < c && grid[i][j] == 'E') {
                 enemy++;
             }
             if (j == c || grid[i][j] == 'W') {
                 for(int k = begin; k < j; k++) {
                     kills[i][k] += enemy;
                 }
                 begin = j + 1;
                 enemy = 0;
             }
         }
     }
     
     for(int j = 0; j < c; j++) {
         int enemy = 0;
         int begin = 0;
         for(int i = 0; i <= r; i++) {
             if(i < r && grid[i][j] == 'E') {
                 enemy++;
             }
             if (i == r || grid[i][j] == 'W') {
                 for(int k = begin; k < i; k++) {
                     kills[k][j] += enemy;
                 }
                 begin = i + 1;
                 enemy = 0;
             }
         }
     }
     
     int maxEnemy = 0;
     for(int i = 0; i < r; i++) {
         for(int j = 0; j < c; j++) {
             if(grid[i][j] == '0') {
                 maxEnemy = max(maxEnemy, kills[i][j]);
             }
         }
     }
     
     return maxEnemy;
 }
示例#2
0
void cPlayer::postload( unsigned int version )
{
	cBaseChar::postload( version );

	if ( !pos_.isInternalMap() )
	{
		MapObjects::instance()->add( this );
	}

	// account removed?
	if ( account() == 0 )
	{
		Console::instance()->log( LOG_WARNING, tr( "Removing player %1 (0x%2) because of missing account.\n" ).arg( orgName_ ).arg( serial_, 0, 16 ) );
		remove();
		return;
	}

	if (kills() > 0) {
		setMurdererTime(Server::instance()->time()); // Reset murderer decay count
	}
}
示例#3
0
/*ARGSUSED*/
void
torped(int v __unused)
{
	int		ix, iy;
	double		x, y, dx, dy;
	double		angle;
	int		course, course2;
	int		k;
	double		bigger;
	double		sectsize;
	int		burst;
	int		n;

	if (Ship.cloaked) {
		printf("Federation regulations do not permit attack while "
		       "cloaked.\n");
		return;
	}
	if (check_out(TORPED))
		return;
	if (Ship.torped <= 0) {
		printf("All photon torpedos expended\n");
		return;
	}

	/* get the course */
	course = getintpar("Torpedo course");
	if (course < 0 || course > 360)
		return;
	burst = -1;

	/* need at least three torpedoes for a burst */
	if (Ship.torped < 3) {
		printf("No-burst mode selected\n");
		burst = 0;
	} else {
		/* see if the user wants one */
		if (!testnl()) {
			k = ungetc(getchar(), stdin);
			if (k >= '0' && k <= '9')
				burst = 1;
		}
	}
	if (burst < 0) {
		burst = getynpar("Do you want a burst");
	}
	if (burst) {
		burst = getintpar("burst angle");
		if (burst <= 0)
			return;
		if (burst > 15) {
			printf("Maximum burst angle is 15 degrees\n");
			return;
		}
	}
	sectsize = NSECTS;
	n = -1;
	if (burst) {
		n = 1;
		course -= burst;
	}
	for (; n && n <= 3; n++) {
		/* select a nice random course */
		course2 = course + randcourse(n);
		/* convert to radians */
		angle = course2 * 0.0174532925;
		dx = -cos(angle);
		dy =  sin(angle);
		bigger = fabs(dx);
		x = fabs(dy);
		if (x > bigger)
			bigger = x;
		dx /= bigger;
		dy /= bigger;
		x = Ship.sectx + 0.5;
		y = Ship.secty + 0.5;
		if (Ship.cond != DOCKED)
			Ship.torped -= 1;
		printf("Torpedo track");
		if (n > 0)
			printf(", torpedo number %d", n);
		printf(":\n%6.1f\t%4.1f\n", x, y);
		while (1) {
			ix = x += dx;
			iy = y += dy;
			if (x < 0.0 || x >= sectsize ||
			    y < 0.0 || y >= sectsize) {
				printf("Torpedo missed\n");
				break;
			}
			printf("%6.1f\t%4.1f\n", x, y);
			switch (Sect[ix][iy]) {
			  case EMPTY:
				continue;

			  case HOLE:
				printf("Torpedo disappears into a black "
				       "hole\n");
				break;

			  case KLINGON:
				for (k = 0; k < Etc.nkling; k++) {
					if (Etc.klingon[k].x != ix ||
					    Etc.klingon[k].y != iy)
						continue;
					Etc.klingon[k].power -= 500 + ranf(501);
					if (Etc.klingon[k].power > 0) {
						printf("*** Hit on Klingon at "
						       "%d,%d: extensive "
						       "damages\n",
							ix, iy);
						break;
					}
					killk(ix, iy);
					break;
				}
				break;

			  case STAR:
				nova(ix, iy);
				break;

			  case INHABIT:
				kills(ix, iy, -1);
				break;

			  case BASE:
				killb(Ship.quadx, Ship.quady);
				Game.killb += 1;
				break;

			  default:
				printf("Unknown object %c at %d,%d destroyed\n",
					Sect[ix][iy], ix, iy);
				Sect[ix][iy] = EMPTY;
				break;
			}
			break;
		}
		if (damaged(TORPED) || Quad[Ship.quadx][Ship.quady].stars < 0)
			break;
		course += burst;
	}
	Move.free = 0;
}