Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.List;
- import bwapi.*;
- import bwta.BWTA;
- import bwta.BaseLocation;
- public class TestBot1 extends DefaultBWListener {
- static int scvCount = 0;
- BaseLocation[] enemyBases;
- private Mirror mirror = new Mirror();
- static int barCount = 0;
- int barLimit = 2;
- private Game game;
- static int marineCount = 0;
- static int step = 0;
- int currentSCV = 0;
- int secondSCV = 0;
- int thirdSCV = 0;
- private Player self;
- static int marineLimit = 0;
- static int buildOrderPos = 0;
- UnitType[] buildings;
- List<Unit> badGuys;
- List<Unit> badList;
- boolean gotRef = false;
- public void run() {
- mirror.getModule().setEventListener(this);
- mirror.startGame();
- }
- // Returns a suitable TilePosition to build a given building type near
- // specified TilePosition aroundTile, or null if not found. (builder
- // parameter is our worker)
- public TilePosition getBuildTile(Unit builder, UnitType buildingType, TilePosition aroundTile) {
- TilePosition ret = null;
- int maxDist = buildingType.tileWidth();
- int stopDist = 40;
- // Refinery, Assimilator, Extractor
- if (buildingType.isRefinery()) {
- for (Unit n : game.neutral().getUnits()) {
- if ((n.getType() == UnitType.Resource_Vespene_Geyser)
- && (Math.abs(n.getTilePosition().getX() - aroundTile.getX()) < stopDist)
- && (Math.abs(n.getTilePosition().getY() - aroundTile.getY()) < stopDist))
- return n.getTilePosition();
- }
- }
- while ((maxDist < stopDist) && (ret == null)) {
- for (int i = aroundTile.getX() - maxDist; i <= aroundTile.getX() + maxDist; i++) {
- for (int j = aroundTile.getY() - maxDist; j <= aroundTile.getY() + maxDist; j++) {
- if (game.canBuildHere(new TilePosition(i, j), buildingType, builder, false)) {
- // units that are blocking the tile
- boolean unitsInWay = false;
- for (Unit u : game.getAllUnits()) {
- if (u.getID() == builder.getID())
- continue;
- if ((Math.abs(u.getTilePosition().getX() - i) < 4)
- && (Math.abs(u.getTilePosition().getY() - j) < 4))
- unitsInWay = true;
- }
- if (!unitsInWay) {
- return new TilePosition(i, j);
- }
- // creep for Zerg
- }
- }
- }
- maxDist += 2;
- }
- if (ret == null)
- game.printf("Unable to find suitable build position for " + buildingType.toString());
- return ret;
- }
- @Override
- public void onUnitCreate(Unit unit) {
- System.out.println("New unit discovered " + unit.getType());
- if (unit.getType() == UnitType.Terran_Barracks) {
- barCount++;
- buildOrderPos++;
- }
- if (unit.getType() == UnitType.Terran_Marine) {
- marineCount++;
- }
- if (unit.getType() == UnitType.Terran_Supply_Depot) {
- buildOrderPos++;
- }
- }
- @Override
- public void onStart() {
- game = mirror.getGame();
- self = game.self();
- // Use BWTA to analyze map
- // This may take a few minutes if the map is processed first time!
- System.out.println("Analyzing map...");
- BWTA.readMap();
- BWTA.analyze();
- System.out.println("Map data ready");
- int i = 0;
- for (BaseLocation baseLocation : BWTA.getBaseLocations()) {
- System.out.println("Base location #" + (++i) + ". Printing location's region polygon:");
- for (Position position : baseLocation.getRegion().getPolygon().getPoints()) {
- System.out.print(position + ", ");
- }
- System.out.println();
- }
- }
- @Override
- public void onFrame() {
- // game.setTextSize(10);
- game.drawTextScreen(10, 10, "Playing as " + self.getName() + " - " + self.getRace());
- StringBuilder units = new StringBuilder("My units:\n");
- goMine();
- currentSCV = buildDepot();
- buildOrder();
- buildRef();
- // buildBarracks();
- goodRefinery();
- buildMarine();
- // secondSCV = build2Depot();
- giverHell();
- // thirdSCV = build3Depot();
- totalMarineCount();
- // draw my units on screen
- game.drawTextScreen(10, 25, units.toString());
- }
- // public void runBuild(){
- // for(int i = 0; i < buildings.length; i++){
- //
- // }
- // }
- public UnitType marineRushBuild(int x) {
- int y = x;
- UnitType[] buildings = new UnitType[16];
- buildings[0] = UnitType.Terran_Supply_Depot;
- buildings[1] = UnitType.Terran_Barracks;
- buildings[2] = UnitType.Terran_Supply_Depot;
- buildings[3] = UnitType.Terran_Supply_Depot;
- buildings[4] = UnitType.Terran_Barracks;
- buildings[5] = UnitType.Terran_Barracks;
- buildings[6] = UnitType.Terran_Supply_Depot;
- buildings[7] = UnitType.Terran_Supply_Depot;
- buildings[8] = UnitType.Terran_Supply_Depot;
- buildings[9] = UnitType.Terran_Supply_Depot;
- buildings[10] = UnitType.Terran_Barracks;
- buildings[11] = UnitType.Terran_Supply_Depot;
- buildings[12] = UnitType.Terran_Supply_Depot;
- buildings[13] = UnitType.Terran_Barracks;
- buildings[14] = UnitType.Terran_Supply_Depot;
- buildings[15] = UnitType.Terran_Supply_Depot;
- return buildings[y];
- }
- // public void openFire(){
- // badList = enemy.getUnits();
- // for(Unit myUnit : self.getUnits()){
- // if(myUnit.getType() == UnitType.Terran_Marine){
- // badGuys = myUnit.getUnitsInRadius(1024);
- // for(int i = 0; i < badGuys.size();i++){
- // if(badGuys.get[i])
- //
- //
- // }
- // }
- // }
- // }
- // }
- public void giverHell() {
- Position basePosition = new Position((game.mapWidth() - self.getStartLocation().getX()) * 32,
- (game.mapHeight() - self.getStartLocation().getY()) * 32);
- Position homeBase = new Position(self.getStartLocation().getX() * 32, self.getStartLocation().getY() * 32);
- if (marineLimit > 26) {
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_Marine) {
- // myUnit.attack(new Position(enemyBase.getX()* 32,
- // enemyBase.getY() * 32));
- if (myUnit.isIdle())
- if (myUnit.getDistance(basePosition) < 175)
- myUnit.attack(randomPosition());
- else
- myUnit.attack(basePosition);
- }
- }
- }
- else{
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_Marine) {
- if (myUnit.isIdle()) {
- myUnit.attack(homeBase);
- }
- }
- }
- }
- }
- public Position randomPosition() {
- int x = 32 * (int) (Math.random() * (float) game.mapWidth());
- int y = 32 * (int) (Math.random() * (float) game.mapHeight());
- return new Position(x, y);
- }
- // public int build3Depot(){
- // int x = 0;
- // for (Unit myUnit : self.getUnits()) {
- //
- //
- //
- // if (myUnit.getType() == UnitType.Terran_SCV && self.supplyTotal() -
- // self.supplyUsed() < 3 + barCount && self.minerals() >= 100 &&
- // myUnit.getID() != currentSCV && myUnit.getID() != secondSCV ||
- // self.supplyUsed() == 20 || self.supplyUsed() == 28|| self.supplyUsed() ==
- // 39) {
- // x = myUnit.getID();
- // // get a nice place to build a supply depot
- // TilePosition buildTile = getBuildTile(myUnit,
- // UnitType.Terran_Supply_Depot, self.getStartLocation());
- // // and, if found, send the worker to build it (and leave
- // // others alone - break;)
- //
- // if (buildTile != null) {
- // myUnit.build(UnitType.Terran_Supply_Depot, buildTile);
- //
- // break;
- // }
- // }
- //
- // }
- // return x;
- //
- // }
- // public int build2Depot(){
- // int x = 0;
- // for (Unit myUnit : self.getUnits()) {
- //
- //
- //
- // if (myUnit.getType() == UnitType.Terran_SCV && self.supplyTotal() -
- // self.supplyUsed() < 5 + barCount && self.minerals() >= 100 &&
- // myUnit.getID() != currentSCV) {
- // // get a nice place to build a supply depot
- // TilePosition buildTile = getBuildTile(myUnit,
- // UnitType.Terran_Supply_Depot, self.getStartLocation());
- // // and, if found, send the worker to build it (and leave
- // // others alone - break;)
- //
- // if (buildTile != null) {
- // x = myUnit.getID();
- // myUnit.build(UnitType.Terran_Supply_Depot, buildTile);
- //
- // break;
- // }
- // }
- //
- // }
- // return x;
- //
- // }
- public int buildDepot() {
- int y = 0;
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_SCV && self.minerals() >= 150) {
- // get a nice place to build a supply depot
- if(buildOrderPos == 2 && gotRef == true){
- break;
- }
- y = myUnit.getID();
- TilePosition buildTile = getBuildTile(myUnit, marineRushBuild(buildOrderPos), self.getStartLocation());
- // and, if found, send the worker to build it (and leave
- // others alone - break;)
- if (buildTile != null) {
- myUnit.build(marineRushBuild(buildOrderPos), buildTile);
- break;
- }
- }
- }
- return y;
- }
- public void buildRef(){
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_SCV){
- secondSCV = myUnit.getID();
- if(currentSCV != secondSCV){
- if(buildOrderPos > 2 && gotRef == false){
- TilePosition buildTile = getBuildTile(myUnit, UnitType.Terran_Refinery, self.getStartLocation());
- // and, if found, send the worker to build it (and leave
- // others alone - break;)
- if (buildTile != null) {
- myUnit.build(UnitType.Terran_Refinery, buildTile);
- break;
- }
- }
- }
- }
- }
- }
- public void goodRefinery(){
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_Refinery){
- if(myUnit.isBeingConstructed()){
- gotRef = true;
- if(myUnit.isCompleted()){
- buildOrderPos++;
- }
- }
- }
- }
- }
- public void goMine() {
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType().isWorker() && myUnit.isIdle()) {
- Unit closestMineral = null;
- // find the closest mineral
- for (Unit neutralUnit : game.neutral().getUnits()) {
- if (neutralUnit.getType().isMineralField()) {
- if (closestMineral == null
- || myUnit.getDistance(neutralUnit) < myUnit.getDistance(closestMineral)) {
- closestMineral = neutralUnit;
- }
- }
- }
- // if a mineral patch was found, send the worker to gather it
- if (closestMineral != null) {
- myUnit.gather(closestMineral, false);
- }
- }
- }
- }
- public int buildBarracks() {
- int scvID = 0;
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_SCV && self.minerals() >= 200 && myUnit.getID() != currentSCV
- && self.supplyTotal() - self.supplyUsed() < 7) {
- // get a nice place to build a supply depot
- TilePosition buildTile = getBuildTile(myUnit, UnitType.Terran_Supply_Depot, self.getStartLocation());
- // and, if found, send the worker to build it (and leave
- // others alone - break;)
- if (buildTile != null) {
- scvID = myUnit.getID();
- myUnit.build(UnitType.Terran_Supply_Depot, buildTile);
- break;
- }
- }
- }
- return scvID;
- }
- // public void checkBar(){
- // for (Unit myUnit : self.getUnits()) {
- // if (myUnit.getType() == UnitType.Terran_Barracks)
- // if(myUnit.isCompleted())
- // barCount++;
- // }
- // }
- public void buildOrder() {
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_Command_Center && self.minerals() >= 50 && scvCount < 15
- && self.supplyTotal() - self.supplyUsed() > 1 && myUnit.isTraining() == false) {
- System.out.print(scvCount);
- myUnit.train(UnitType.Terran_SCV);
- scvCount++;
- }
- }
- }
- public void buildMarine() {
- for (Unit myUnit : self.getUnits()) {
- if (myUnit.getType() == UnitType.Terran_Barracks && self.minerals() >= 50
- && self.supplyTotal() - self.supplyUsed() >= 1 && myUnit.isTraining() == false) {
- myUnit.train(UnitType.Terran_Marine);
- }
- }
- }
- public void totalMarineCount(){
- marineLimit = 0;
- ArrayList<Integer> IDS = new ArrayList<Integer>();
- for(Unit myUnit : self.getUnits()){
- if(myUnit.getType() == UnitType.Terran_Marine){
- IDS.add(myUnit.getID());
- }
- }
- for(int i : IDS){
- marineLimit++;
- }
- System.out.println("Marine count is : " + marineLimit);
- System.out.println(buildOrderPos);
- }
- public static void main(String[] args) {
- new TestBot1().run();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement