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; }
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 } }
/*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; }