From db2b720074d199d3bd5274626eb70010fe91a341 Mon Sep 17 00:00:00 2001 From: Yumibyte Date: Sat, 9 Jan 2021 14:00:55 -0800 Subject: [PATCH 1/3] first commit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d1486e..eb9024b 100644 --- a/README.md +++ b/README.md @@ -33,3 +33,4 @@ This is the Battlecode 2021 scaffold, containing an `examplefuncsplayer`. Read h - `./gradlew update` Update to the newest version! Run every so often +# MinneCal From 38050b09fbb8d3bfc5b84bc48e1029991c275f5a Mon Sep 17 00:00:00 2001 From: Yumibyte Date: Sat, 9 Jan 2021 20:31:37 -0800 Subject: [PATCH 2/3] creating mainRobot --- .java-version | 1 + gradle/wrapper/gradle-wrapper.jar | Bin 54224 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 51 ++-- gradlew.bat | 184 +++++++------- maps/DefaultMap.map17 | Bin 0 -> 3368 bytes src/.gitignore | 1 + src/README.md | 14 ++ src/ashTest/RobotPlayer.java | 299 +++++++++++++++++++++++ src/examplefuncsplayer/RobotPlayer.java | 29 ++- src/mainRobot/RobotPlayer.java | 185 ++++++++++++++ version.txt | 2 +- 12 files changed, 622 insertions(+), 146 deletions(-) create mode 100644 .java-version create mode 100644 maps/DefaultMap.map17 create mode 100644 src/.gitignore create mode 100644 src/README.md create mode 100644 src/ashTest/RobotPlayer.java create mode 100644 src/mainRobot/RobotPlayer.java diff --git a/.java-version b/.java-version new file mode 100644 index 0000000..012e496 --- /dev/null +++ b/.java-version @@ -0,0 +1 @@ +openjdk64-1.8.0.275 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d6e2637affb74a80bfbe87bd2da57e81b2f3c661..736fb7d3f94c051b359fc7ae7212d351bc094bdd 100644 GIT binary patch delta 20053 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 delta 19659 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9492014..52dd1f0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.2-bin.zip diff --git a/gradlew b/gradlew index 2fe81a7..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -1,21 +1,5 @@ #!/usr/bin/env sh -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - ############################################################################## ## ## Gradle start up script for UN*X @@ -44,7 +28,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -125,8 +109,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -154,19 +138,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then else eval `echo args$i`="\"$arg\"" fi - i=`expr $i + 1` + i=$((i+1)) done case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,9 +159,14 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=`save "$@"` +APP_ARGS=$(save "$@") # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9618d8d..e95643d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,100 +1,84 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/maps/DefaultMap.map17 b/maps/DefaultMap.map17 new file mode 100644 index 0000000000000000000000000000000000000000..439937adc6f712099142ddc2b25bdb9d322ca591 GIT binary patch literal 3368 zcmb1OfB*po6$S+c2?hZM9tIW$4j|3IAPB@dKzx9Qfx*O&f#FRq1A_vPz5%3JfZ|+0 z?2?+6SejGfn^?fWFo6*$00s~2M`=(9jE2K#Iv7m{qxoR892hMJM$3WGa$vL^7%c}z y%K_S#1AM@qj0m_d!vXB6@BxEd1c+sT7}TGEVIULO)8PSPP>%=1hG395IsgD%LCdiK literal 0 HcmV?d00001 diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/src/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..ef26768 --- /dev/null +++ b/src/README.md @@ -0,0 +1,14 @@ +# MIT BattleCode 2021 + +## Stored test robots + +- Ash --> src/ashTest + - Capabailities: + - pathfinding, based on Twitch stream +- +- +- + +## Main Robot +- Under... + - diff --git a/src/ashTest/RobotPlayer.java b/src/ashTest/RobotPlayer.java new file mode 100644 index 0000000..f236ffc --- /dev/null +++ b/src/ashTest/RobotPlayer.java @@ -0,0 +1,299 @@ +package ashTest; +import battlecode.common.*; + +public strictfp class RobotPlayer { + static RobotController rc; + + static final RobotType[] spawnableRobot = { + RobotType.POLITICIAN, + RobotType.SLANDERER, + RobotType.MUCKRAKER, + }; + + static final Direction[] directions = { + Direction.NORTH, + Direction.NORTHEAST, + Direction.EAST, + Direction.SOUTHEAST, + Direction.SOUTH, + Direction.SOUTHWEST, + Direction.WEST, + Direction.NORTHWEST, + }; + + static int turnCount; + + /** + * run() is the method that is called when a robot is instantiated in the Battlecode world. + * If this method returns, the robot dies! + **/ + @SuppressWarnings("unused") + + //MARK:- method will create robots + public static void run(RobotController rc) throws GameActionException { + + // This is the RobotController object. You use it to perform actions from this robot, + // and to get information on its current status. + RobotPlayer.rc = rc; + + turnCount = 0; + +// System.out.println("I'm a " + rc.getType() + " and I just got created!"); + while (true) { + turnCount += 1; + // Try/catch blocks stop unhandled exceptions, which cause your robot to freeze + try { + // Here, we've separated the controls into a different method for each RobotType. + // You may rewrite this into your own control structure if you wish. +// System.out.println("I'm a " + rc.getType() + "! Location " + rc.getLocation()); + switch (rc.getType()) { + case ENLIGHTENMENT_CENTER: runEnlightenmentCenter(); break; + case POLITICIAN: runPolitician(); break; + case SLANDERER: runSlanderer(); break; + case MUCKRAKER: runMuckraker(); break; + } + + // Clock.yield() makes the robot wait until the next turn, then it will perform this loop again + Clock.yield(); + + } catch (Exception e) { +// System.out.println(rc.getType() + " Exception"); + e.printStackTrace(); + } + } + } + + static void runEnlightenmentCenter() throws GameActionException { + + // create a random robot that it will build next + RobotType toBuild = randomSpawnableRobotType(); + int influence = 50; + for (Direction dir : directions) { + if (rc.canBuildRobot(toBuild, dir, influence)) { + rc.buildRobot(toBuild, dir, influence); + } else { + break; + } + } + } + + static void runPolitician() throws GameActionException { + Team enemy = rc.getTeam().opponent(); + int actionRadius = rc.getType().actionRadiusSquared; + RobotInfo[] attackable = rc.senseNearbyRobots(actionRadius, enemy); + if (attackable.length != 0 && rc.canEmpower(actionRadius)) { +// System.out.println("empowering..."); + rc.empower(actionRadius); +// System.out.println("empowered"); + return; + } + + // will move directly after empowering whatever pieces are nearby it + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } + } + + //TODO: is there anything else the slanderer should be trying? + // congregate nearby the e'mnt center and make them not move around as much... + static void runSlanderer() throws GameActionException { + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } + } + + static void runMuckraker() throws GameActionException { + Team enemy = rc.getTeam().opponent(); + int actionRadius = rc.getType().actionRadiusSquared; + + + // TODO: setup a flag + // sense any nearby robots... exposes the location of a slanderer + // returns the location... what if I place a flag where it was found and this directs politicians there? + for (RobotInfo robot : rc.senseNearbyRobots(actionRadius, enemy)) { + System.out.println(enemy); + if (robot.type.canBeExposed()) { + // It's a slanderer... go get them! + if (rc.canExpose(robot.location)) { +// System.out.println("e x p o s e d"); + rc.expose(robot.location); + return; + } + } + } + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } + } + + /** + * Returns a random Direction. + * + * @return a random Direction + */ + + // MARK:- TODO: implement path finding functionality right here + //******* + static Direction randomDirection() { + return directions[(int) (Math.random() * directions.length)]; + } + + /** + * Returns a random spawnable RobotType + * + * @return a random RobotType + */ + + //MARK:- Spawns a random robot + // ****** + // create ratio algorithm for determining how many of each unit is necessary + static RobotType randomSpawnableRobotType() { // spawns a random robot + return spawnableRobot[(int) (Math.random() * spawnableRobot.length)]; + } + + /** + * Attempts to move in a given direction. + * + * @param dir The intended direction of movement + * @return true if a move was performed + * @throws GameActionException + */ + static boolean tryMove(Direction dir) throws GameActionException { +// System.out.println("I am trying to move " + dir + "; " + rc.isReady() + " " + rc.getCooldownTurns() + " " + rc.canMove(dir)); + if (rc.canMove(dir)) { + rc.move(dir); + return true; + } else return false; + } + + // MARK:- Location finding algorithm!! + static void sendLocation() throws GameActionException { + MapLocation location = rc.getLocation(); + int x = location.x, y = location.y; + int encodedLocation = (x % 128) * 128 + (y % 128); + if (rc.canSetFlag(encodedLocation)) { + rc.setFlag(encodedLocation); + } + } + + // inserts NBITS # of 0's to make a 7 bit number + static final int NBITS = 7; + static final int BITMASK = (1 << NBITS) - 1; + + // if desire to use last 10 bits to send more info + static void sendLocation(int extraInformation) throws GameActionException { + MapLocation location = rc.getLocation(); + int x = location.x, y = location.y; + + // * 128 is shifting 7 bits to the left + // 6 bits tells a location and the last bit tells you the map boundary. + int encodedLocation = (x % 128) * 128 + (y % 128) + extraInformation * 128 + 128; + if (rc.canSetFlag(encodedLocation)) { + rc.setFlag(encodedLocation); + } + } + + static MapLocation getLocationFromFlag(int flag) throws GameActionException { + int y = flag % 128; + int x = (flag / 128) % 128; + int extraInformation = flag / 128 / 128; + + // figure out where in relation to our current offset, so compare to current location + MapLocation currentLocation = rc.getLocation(); + // we know x, will get close to offset + int offsetX128 = currentLocation.x / 128; + int offsetY128 = currentLocation.y / 128; + + // multiply by x then divide by 128 so java throws away the remainder + // offsetX128 now definitely has 0 remainder, could find exact location that matched the flag + MapLocation actualLocation = new MapLocation(offsetX128 * 128 + x, offsetY128 + 128 + y); + + // this part could be coded more efficiently + MapLocation alternative = actualLocation.translate(-128, 0); + if (rc.getLocation().distanceSquaredTo(alternative) < rc.getLocation().distanceSquaredTo(actualLocation)) { + actualLocation = alternative; + } + + alternative = actualLocation.translate(128, 0); + if (rc.getLocation().distanceSquaredTo(alternative) < rc.getLocation().distanceSquaredTo(actualLocation)) { + actualLocation = alternative; + } + + alternative = actualLocation.translate(0, -128); + if (rc.getLocation().distanceSquaredTo(alternative) < rc.getLocation().distanceSquaredTo(actualLocation)) { + actualLocation = alternative; + } + + alternative = actualLocation.translate(0, 128); + if (rc.getLocation().distanceSquaredTo(alternative) < rc.getLocation().distanceSquaredTo(actualLocation)) { + actualLocation = alternative; + } + return actualLocation; + } + // actual location would be retrieved from the flag placed + + public static void run() { +// while (true) { +// //TODO: determine flag +// MapLocation target = getLocationFromFlag(flag); +// try { +// basicBug(target); +// } catch (GameActionException e) { +// // TODO +// } +// Clock.yield(); +// } + } + + // we can almost always move so lets make a threshold + static final double passabilityThreshold = 0.7; // sqaure that we're happy to walk on and above + static Direction bugDirection = null; + + + static void basicBug(MapLocation target) throws GameActionException { + Direction d = rc.getLocation().directionTo(target); + if (rc.getLocation().equals(target)) { + // do something else + } else if (!rc.isReady()) { + if (rc.canMove(d) && rc.sensePassability(rc.getLocation().add(d)) >= passabilityThreshold) { + rc.move(d); + bugDirection = null; // reset after every move + } else { + // if it can't move start going around obstacles + // code a left handed bug + if (bugDirection == null) { + bugDirection = d.rotateRight(); + } + for (int i = 8; i < 8; i ++) { // at most 8 dirs + if (rc.canMove(bugDirection) && rc.sensePassability(rc.getLocation().add(bugDirection)) >= passabilityThreshold) { + rc.move(bugDirection); + break; + } + // if you can't rotate again + bugDirection = bugDirection.rotateRight(); + } + bugDirection = bugDirection.rotateLeft(); + } + + Clock.yield(); + } + } + static int expensive = 0; + static void somethingExpensive() { + for (int i = 0; i < 10000 && Clock.getBytecodesLeft() >= 1500; i ++) { + // does some hard work + + + } + } + + // NOTES + // x2 % 128, then you can do (x2- x1) % 128 + // Then need to figure out if x1 or x2 is bigger, only differ by at most 64 then x2 > x1 if the value is < 64 + // And vise versa + // then you can figure out exactly what x2 - x1 is (problem with the 4 corners and not having an exact spot) + + // can combine three values of the x, y, and extra information into a flag. + // Bit shifting: x % 128 by 7 bits and the extra information is shifted by 7 bits, they're all therefore stored in the flag + +} diff --git a/src/examplefuncsplayer/RobotPlayer.java b/src/examplefuncsplayer/RobotPlayer.java index ca48ca7..186ef04 100644 --- a/src/examplefuncsplayer/RobotPlayer.java +++ b/src/examplefuncsplayer/RobotPlayer.java @@ -36,14 +36,14 @@ public static void run(RobotController rc) throws GameActionException { turnCount = 0; - System.out.println("I'm a " + rc.getType() + " and I just got created!"); +// System.out.println("I'm a " + rc.getType() + " and I just got created!"); while (true) { turnCount += 1; // Try/catch blocks stop unhandled exceptions, which cause your robot to freeze try { // Here, we've separated the controls into a different method for each RobotType. // You may rewrite this into your own control structure if you wish. - System.out.println("I'm a " + rc.getType() + "! Location " + rc.getLocation()); +// System.out.println("I'm a " + rc.getType() + "! Location " + rc.getLocation()); switch (rc.getType()) { case ENLIGHTENMENT_CENTER: runEnlightenmentCenter(); break; case POLITICIAN: runPolitician(); break; @@ -55,7 +55,7 @@ public static void run(RobotController rc) throws GameActionException { Clock.yield(); } catch (Exception e) { - System.out.println(rc.getType() + " Exception"); +// System.out.println(rc.getType() + " Exception"); e.printStackTrace(); } } @@ -78,18 +78,20 @@ static void runPolitician() throws GameActionException { int actionRadius = rc.getType().actionRadiusSquared; RobotInfo[] attackable = rc.senseNearbyRobots(actionRadius, enemy); if (attackable.length != 0 && rc.canEmpower(actionRadius)) { - System.out.println("empowering..."); +// System.out.println("empowering..."); rc.empower(actionRadius); - System.out.println("empowered"); +// System.out.println("empowered"); return; } - if (tryMove(randomDirection())) - System.out.println("I moved!"); + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } } static void runSlanderer() throws GameActionException { - if (tryMove(randomDirection())) - System.out.println("I moved!"); + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } } static void runMuckraker() throws GameActionException { @@ -99,14 +101,15 @@ static void runMuckraker() throws GameActionException { if (robot.type.canBeExposed()) { // It's a slanderer... go get them! if (rc.canExpose(robot.location)) { - System.out.println("e x p o s e d"); +// System.out.println("e x p o s e d"); rc.expose(robot.location); return; } } } - if (tryMove(randomDirection())) - System.out.println("I moved!"); + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } } /** @@ -135,7 +138,7 @@ static RobotType randomSpawnableRobotType() { * @throws GameActionException */ static boolean tryMove(Direction dir) throws GameActionException { - System.out.println("I am trying to move " + dir + "; " + rc.isReady() + " " + rc.getCooldownTurns() + " " + rc.canMove(dir)); +// System.out.println("I am trying to move " + dir + "; " + rc.isReady() + " " + rc.getCooldownTurns() + " " + rc.canMove(dir)); if (rc.canMove(dir)) { rc.move(dir); return true; diff --git a/src/mainRobot/RobotPlayer.java b/src/mainRobot/RobotPlayer.java new file mode 100644 index 0000000..68c18c0 --- /dev/null +++ b/src/mainRobot/RobotPlayer.java @@ -0,0 +1,185 @@ +package mainRobot; +import battlecode.common.*; + +public strictfp class RobotPlayer { + static RobotController rc; + + static final RobotType[] spawnableRobot = { + RobotType.POLITICIAN, + RobotType.SLANDERER, + RobotType.MUCKRAKER, + }; + + static final Direction[] directions = { + Direction.NORTH, + Direction.NORTHEAST, + Direction.EAST, + Direction.SOUTHEAST, + Direction.SOUTH, + Direction.SOUTHWEST, + Direction.WEST, + Direction.NORTHWEST, + }; + + static int turnCount; + + /** + * run() is the method that is called when a robot is instantiated in the Battlecode world. + * If this method returns, the robot dies! + **/ + @SuppressWarnings("unused") + public static void run(RobotController rc) throws GameActionException { + + // This is the RobotController object. You use it to perform actions from this robot, + // and to get information on its current status. + RobotPlayer.rc = rc; + + turnCount = 0; + +// System.out.println("I'm a " + rc.getType() + " and I just got created!"); + while (true) { + turnCount += 1; + // Try/catch blocks stop unhandled exceptions, which cause your robot to freeze + try { + // Here, we've separated the controls into a different method for each RobotType. + // You may rewrite this into your own control structure if you wish. +// System.out.println("I'm a " + rc.getType() + "! Location " + rc.getLocation()); + switch (rc.getType()) { + case ENLIGHTENMENT_CENTER: runEnlightenmentCenter(); break; + case POLITICIAN: runPolitician(); break; + case SLANDERER: runSlanderer(); break; + case MUCKRAKER: runMuckraker(); break; + } + + // Clock.yield() makes the robot wait until the next turn, then it will perform this loop again + Clock.yield(); + + } catch (Exception e) { +// System.out.println(rc.getType() + " Exception"); + e.printStackTrace(); + } + } + } + + static void runEnlightenmentCenter() throws GameActionException { + RobotType toBuild = randomSpawnableRobotType(); + int influence = 50; + for (Direction dir : directions) { + if (rc.canBuildRobot(toBuild, dir, influence)) { + rc.buildRobot(toBuild, dir, influence); + } else { + break; + } + } + } + + static void runPolitician() throws GameActionException { + Team enemy = rc.getTeam().opponent(); + int actionRadius = rc.getType().actionRadiusSquared; + RobotInfo[] attackable = rc.senseNearbyRobots(actionRadius, enemy); + if (attackable.length != 0 && rc.canEmpower(actionRadius)) { +// System.out.println("empowering..."); + rc.empower(actionRadius); +// System.out.println("empowered"); + return; + } + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } + } + + static void runSlanderer() throws GameActionException { + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } + } + + static void runMuckraker() throws GameActionException { + Team enemy = rc.getTeam().opponent(); + int actionRadius = rc.getType().actionRadiusSquared; + for (RobotInfo robot : rc.senseNearbyRobots(actionRadius, enemy)) { + if (robot.type.canBeExposed()) { + // It's a slanderer... go get them! + if (rc.canExpose(robot.location)) { +// System.out.println("e x p o s e d"); + rc.expose(robot.location); + return; + } + } + } + if (tryMove(randomDirection())) { +// System.out.println("I moved!"); + } + } + + /** + * Returns a random Direction. + * + * @return a random Direction + */ + static Direction randomDirection() { + return directions[(int) (Math.random() * directions.length)]; + } + + /** + * Returns a random spawnable RobotType + * + * @return a random RobotType + */ + static RobotType randomSpawnableRobotType() { + return spawnableRobot[(int) (Math.random() * spawnableRobot.length)]; + } + + /** + * Attempts to move in a given direction. + * + * @param dir The intended direction of movement + * @return true if a move was performed + * @throws GameActionException + */ + static boolean tryMove(Direction dir) throws GameActionException { +// System.out.println("I am trying to move " + dir + "; " + rc.isReady() + " " + rc.getCooldownTurns() + " " + rc.canMove(dir)); + if (rc.canMove(dir)) { + rc.move(dir); + return true; + } else return false; + } + + //////////////////////////////////////////////////////////////////////////// + // BASIC BUG - just follow the obstacle while it's in the way + // not the best bug, but works for "simple" obstacles + // for better bugs, think about Bug 2! + + static final double passabilityThreshold = 0.7; + static Direction bugDirection = null; + + static void basicBug(MapLocation target) throws GameActionException { + Direction d = rc.getLocation().directionTo(target); + if (rc.getLocation().equals(target)) { + // do something else, now that you're there + // here we'll just explode + if (rc.canEmpower(1)) { + rc.empower(1); + } + } else if (rc.isReady()) { + if (rc.canMove(d) && rc.sensePassability(rc.getLocation().add(d)) >= passabilityThreshold) { + rc.move(d); + bugDirection = null; + } else { + if (bugDirection == null) { + bugDirection = d; + } + for (int i = 0; i < 8; ++i) { + if (rc.canMove(bugDirection) && rc.sensePassability(rc.getLocation().add(bugDirection)) >= passabilityThreshold) { + rc.setIndicatorDot(rc.getLocation().add(bugDirection), 0, 255, 255); + rc.move(bugDirection); + bugDirection = bugDirection.rotateLeft(); + break; + } + rc.setIndicatorDot(rc.getLocation().add(bugDirection), 255, 0, 0); + bugDirection = bugDirection.rotateRight(); + } + } + } + } +} diff --git a/version.txt b/version.txt index 4b27b79..b625f1e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2021.1.0.0 \ No newline at end of file +2021.2.0.2 \ No newline at end of file From d39ec3e03e75443cb4fce67873c0c3bd40c7ab39 Mon Sep 17 00:00:00 2001 From: Yumibyte Date: Sat, 9 Jan 2021 20:33:25 -0800 Subject: [PATCH 3/3] changes before commit --- src/mainRobot/RobotPlayer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mainRobot/RobotPlayer.java b/src/mainRobot/RobotPlayer.java index 68c18c0..a36586e 100644 --- a/src/mainRobot/RobotPlayer.java +++ b/src/mainRobot/RobotPlayer.java @@ -145,6 +145,7 @@ static boolean tryMove(Direction dir) throws GameActionException { } else return false; } + //////////////////////////////////////////////////////////////////////////// // BASIC BUG - just follow the obstacle while it's in the way // not the best bug, but works for "simple" obstacles