рд░реЛрдмреЛрдХреЛрдб рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо

рдореИрдВрдиреЗ рдпрд╣ рд▓реЗрдЦ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ "рдореИрдВ рд░реЛрдмреЛрдХреЛрдб рдХрд╛ рдЪреИрдВрдкрд┐рдпрди рдХреИрд╕реЗ рдмрдирд╛" рдФрд░ рдЗрд╕рдореЗрдВ рд░реВрд╕реА-рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рд░реЛрдмреЛрдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп рдПрдХ рдЯреИрдВрдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдмреАрдЬ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреНрд▓рд┐рдк рджреЗ рджреВрдВрдЧрд╛ рдХрд┐ рдмрд╛рддрдЪреАрдд рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧреА:




рдкрд░рд┐рдЪрдп


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд╛рдардХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдпрд╛ рдЙрд╕ рдкрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

Robocode рдореЗрдВ 4 рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рд╣реИрдВ:

рджреНрд╡рдВрджреНрд╡рдпреБрджреНрдз рдореЗрдВ 4 рднрд╛рд░ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рдПрдХ рд▓рдбрд╝рд╛рдИ:

рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рдЬрди рд╢реНрд░реЗрдгреА рдореЗрдВ рджреНрд╡рдВрджреНрд╡рдпреБрджреНрдз рдХреЗ рд▓рд┐рдП рд░реЛрдмреЛрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд░реЛрдмреЛрдЯ рдорд╛рдЗрдХреНрд░реЛ рд╢реНрд░реЗрдгреА рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдпреЛрдЯреЗрдХ рдЖрдХрд╛рд░ рдЕрдиреБрдХреВрд▓рди рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЬреНрдЮрд╛рди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЬреНрдЮрд╛рди рд╕рдлрд▓ рдиреИрдиреЛрдмреЛрдЯреНрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЬрд┐рд╕рдХрд╛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЯреНрд░реЗрдирд┐рдВрдЧ


рдЕрдкрдиреЗ рдЪреИрдВрдкрд┐рдпрди рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:


рдЦреЗрд▓ рднреМрддрд┐рдХреА


рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЦрдВрдб рдХреЗ рд╕рд╛рде, рд▓реЗрдЦ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЦрдВрдб рдХрд╛рдлреА рдЙрдиреНрдирдд рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдЪрд░рдгреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрдврд╝рд╛ рдФрд░ рд╕рдордЭрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рд░рдЦрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рд╢реАрдШреНрд░ рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ред

UPD: рднреМрддрд┐рдХреА рдкрд░ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд http://habrahabr.ru/post/147956/

рд░реЛрдмреЛрдЯ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦреЗрд▓ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рд░реЛрдмреЛрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ "рд╕рд░рд▓" рд░реЛрдмреЛрдХреЛрдб рд╣реИред рд░реЛрдмреЛрдЯ рд╡рд░реНрдЧ рдЬреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрд╛ рддреЛ рдЪрд▓рддреЗ рд╣реИрдВ, рдпрд╛ рдШреБрдорд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдЧреЛрд▓реА рдорд╛рд░рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдмреЛрдирд╕ рд╣реИ - рдРрд╕реЗ рд░реЛрдмреЛрдЯ рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рдЯрдХрд░рд╛рд╡ рд╕реЗ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реЛрдмреЛрдЯ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ рдФрд░ рдореИрдВ рд▓реБрдЯреЗрдХреЛрдб.рдЖрдбрд╡рдВрдЯреЗрдбрд░реЛрдмреЙрдЯ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ (рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рд╣реИ) рд╕реЗ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рднрд╛рдЧреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред Robocode.TeamRobot рд╡рд░реНрдЧ рднреА рдирд┐рд░реНрдмрд╛рдз рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред

рд░реЛрдмреЛрдЯ рдХреЛ рдХрдИ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬрд╝ рджреВрдВрдЧрд╛:


рдкреНрд░рддреНрдпреЗрдХ рдореЛрдбрд╝ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд░реЛрдмреЛрдЯ рдХреЛ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬрд╝реЛрдВ рдХреЛ рджреВрдВрдЧрд╛:


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рддреИрдпрд╛рд░реА


рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЪреАрдВрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/aleksey-zhidkov/HabrahabrTutorial , рдпрд╛ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдирд┐рдореНрди рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ:
 / рд╣реИрдмреНрд░рд╣реНрд░рд╛рдЯреНрдпреВрдЯрд░реНрд╕
 + - / src
    - build.properties
    - build.xml


Build.properties рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рд╣реИ:
  bin.dir = рдмрд┐рди
 buildds.dir = рдмрдирд╛рддрд╛ рд╣реИ
 robocode.dir =;  Robocode рд╣реЛрдо рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдХрд╛ рдкрде, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ C: \\ Robocode (рдореИрдВ рдЬрд╛рд╡рд╛ рдЧреБрдг рдкреНрд░рд╛рд░реВрдк рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕реНрд▓реИрд╢ рдмрдЪ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)
 robocode.jar = $ {robocode.dir} \\ libs \\ robocode.jar 


рдмрд┐рд▓реНрдб.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рд╣реИ:
<?xml version="1.0" encoding="UTF-8"?> <project name="HabrahabrTutorial" basedir="." default="release"> <property file="build.properties"/> <property name="robot.version" value="0.1"/> <property name="robot.package" value="ru.jdev.habrahabr"/> <property name="robot.path" value="ru/jdev/habrahabr"/> <property name="robot.name" value="HabrahabrTutorial"/> <path id="src.files"> <pathelement location="src"/> </path> <target name="init"> <mkdir dir="${bin.dir}"/> </target> <target name="compile" depends="init" description="Compiles source files"> <javac destdir="${bin.dir}" debug="on" debuglevel="lines,vars,source" optimize="yes" target="1.6"> <src refid="src.files"/> <classpath> <pathelement location="${robocode.jar}"/> </classpath> </javac> </target> <target name="clean" description="Deletes all previous build artifacts"> <delete dir="${bin.dir}"/> </target> <target name="release" depends="clean, compile"> <copy todir="${bin.dir}"> <fileset dir="src"/> </copy> <echo file="${bin.dir}/${robot.path}/${robot.name}.properties">robocode.version=1.7.3 robot.java.source.included=true robot.version=${robot.version} robot.author.name=Alexey jdev Zhidkov robot.classname=${robot.package}.${robot.name} robot.name=${robot.name} robot.description=Tutorial robot for habrahabr.ru </echo> <jar destfile="${builds.dir}\${robot.package}.${robot.name}_${robot.version}.jar" compress="true"> <fileset dir="${bin.dir}"/> </jar> <copy todir="${robocode.dir}\robots\"> <fileset file="${builds.dir}\${robot.package}.${robot.name}_${robot.version}.jar"/> </copy> <delete includeEmptyDirs="true"> <fileset dir="${bin.dir}" includes="**/*"/> </delete> </target> </project> 


рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдЪреАрдВрдЯреА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ HabrahabrTutorial \ buildds \ ru.jdev.habrahabr.HabrahabrTutorial_0.1.jar рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ ru \ jdev \ habrahabr \ HabrahabrTutorial.properties рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЬрд╛рд╡рд╛ рд╕реЗ рджреВрд░ рд╣реИрдВ, рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд╛рд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

рдПрдХ рд░реЛрдмреЛрдЯ рдмрдирд╛рдирд╛


рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ $ {robocode_home} /libs/robocode.jar рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдлрд┐рд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдХреЛрдб рдХреЛ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗ, рдпрд╛ рдпрд╣ рдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ ru.jdev.habrahabr.HabrahabrTutorial рдмрдирд╛рдПрдВ:

 package ru.jdev.habrahabr; import robocode.AdvancedRobot; public class HabrahabrTutorial extends AdvancedRobot { @Override public void run() { while (true) { /** *      ,            *        */ execute(); } } } 


рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдмреИрдЯрд▓ рдХреЛ рдЪреБрдиреЗрдВ -> рдирдпрд╛ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ru.jdev.habrahabr.HabrahabrTutorial рд░реЛрдмреЛрдЯ рдХреА рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдЪрд░рдг рдПрдХ: рдореГрддреНрдпреБ рдХреЗ рдмрд╛рдж рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рджреБрд╢реНрдорди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рд░рдбрд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдбреНрд░рд╛ рдХрд░реЗрдВред


рд╣рдо рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рджреА рдЧрдИ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╛рдж рдореЗрдВ, рдЬреЛрдбрд╝рд╛ рд▓рд╛рдЗрдиреЛрдВ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ / * + * /, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ / * ~ * /):
 package ru.jdev.habrahabr; import robocode.AdvancedRobot; import robocode.DeathEvent; import robocode.ScannedRobotEvent; import robocode.util.Utils; import java.awt.*; import java.awt.geom.Point2D; import static java.lang.Math.signum; import static java.lang.Math.toRadians; public class HabrahabrTutorial extends AdvancedRobot { /*+*/private static final double RADIANS_5 = toRadians(5); /*+*/private boolean isAlive = true; /*+*/private double enemyX = -1; /*+*/private double enemyY = -1; @Override public void run() { /*+*/setTurnRadarRightRadians(Double.POSITIVE_INFINITY); //          /*~*/while (isAlive) { //         true,       /*+*/if (enemyX > -1) { //    /*+*/final double radarTurn = getRadarTurn(); /*+*/setTurnRadarRightRadians(radarTurn); /*+*/} /** *      ,            *        */ execute(); } } /*+*/private double getRadarTurn() { //       //     : final double alphaToEnemy = angleTo(getX(), getY(), enemyX, enemyY); //  ,     ,      (Utils,    Robocode ): final double sign = (alphaToEnemy != getRadarHeadingRadians()) ? signum(Utils.normalRelativeAngle(alphaToEnemy - getRadarHeadingRadians())) : 1; //  5         return Utils.normalRelativeAngle(alphaToEnemy - getRadarHeadingRadians() + RADIANS_5 * sign); //  ,     setTurnRadarRightRadians,          //    } @Override /*+*/public void onScannedRobot(ScannedRobotEvent event) { /** ScannedRobotEvent       , ,   ,   *  ,  (    -,     )     */ //     final double alphaToEnemy = getHeadingRadians() + event.getBearingRadians(); //     enemyX = getX() + Math.sin(alphaToEnemy) * event.getDistance(); enemyY = getY() + Math.cos(alphaToEnemy) * event.getDistance(); } @Override /*+*/public void onDeath(DeathEvent event) { isAlive = false; } @Override /*+*/public void onPaint(Graphics2D g) { // ,      //       ,            //       Paint if (enemyX > -1) { g.setColor(Color.WHITE); g.drawRect((int) (enemyX - getWidth() / 2), (int) (enemyY - getHeight() / 2), (int) getWidth(), (int) getHeight()); } } /** *  Robocode    - 0        : * 90 - , 180 - , 270 - , 360 - . * <p/> * -          . *  ,      , , ,    */ /*+*/private static double angleTo(double baseX, double baseY, double x, double y) { double theta = Math.asin((y - baseY) / Point2D.distance(x, y, baseX, baseY)) - Math.PI / 2; if (x >= baseX && theta < 0) { theta = -theta; } return (theta %= Math.PI * 2) >= 0 ? theta : (theta + Math.PI * 2); } } 


рдЪрд░рдг рджреЛ: рд╢реБрд░реВ рдХрд░рдирд╛


рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрдХреНрд╖реАрдп рдЖрдВрджреЛрд▓рди рдХреА рдЕрд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдХрдХреНрд╖реАрдп рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рджреБрд╢реНрдорди рдЕрднреА рднреА рдЦрдбрд╝рд╛ рд╣реИ, рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рджрд┐рд╢рд╛ рджреЗрдЧрд╛, рддреЛ рд╣рдорд╛рд░рд╛ рдЯреИрдВрдХ рджреБрд╢реНрдорди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рд░реНрдХрд▓ рдмрдирд╛ рджреЗрдЧрд╛ред рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдШрдЯрдХ рд╣рдорд╛рд░реЗ рдЯреИрдВрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдХрдард┐рди рд▓рдХреНрд╖реНрдп рдмрдирд╛ рджреЗрдЧрд╛ред рдЖрдВрджреЛрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
 private double getDistance() { //     return 200 - 400 * random(); } private double getBodyTurn() { //       final double alphaToMe = angleTo(enemyX, enemyY, getX(), getY()); //      (  ,  ) ... final double lateralDirection = signum((getVelocity() != 0 ? getVelocity() : 1) * Math.sin(Utils.normalRelativeAngle(getHeadingRadians() - alphaToMe))); //     final double desiredHeading = Utils.normalAbsoluteAngle(alphaToMe + Math.PI / 2 * lateralDirection); //     final double normalHeading = getVelocity() >= 0 ? getHeadingRadians() : Utils.normalAbsoluteAngle(getHeadingRadians() + Math.PI); //     return Utils.normalRelativeAngle(desiredHeading - normalHeading); } 


рдФрд░ рдЗрд╕ рд╢рд░реНрдд рдХреЗ рдЕрдВрджрд░ рдХрд┐ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рджреБрд╢реНрдорди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
  setTurnRadarRightRadians(radarTurn); /*+*/ final double bodyTurn = getBodyTurn(); /*+*/ setTurnRightRadians(bodyTurn); /*+*/ /*+*/ if (getDistanceRemaining() == 0) { /*+*/ final double distance = getDistance(); /*+*/ setAhead(distance); /*+*/ } } 


рддреАрди рдЪрд░рдг: рдЖрдЧ!


рд╣рдо рд╕рд░рд▓рддрдо рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рджреБрд╢реНрдорди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рд╢реВрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЛрдмреЛрдЯ рд╣рдореЗрд╢рд╛ рджреБрд╢реНрдорди рдХреЛ рдмрдВрджреВрдХ рдХреА рдиреЛрдХ рдкрд░ рд░рдЦреЗрдЧрд╛ рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЧреЛрд▓реА рдорд╛рд░ рджреЗрдЧрд╛ред рдХрд╛рд░реНрдп рдПрдХ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 private double getGunTurn() { //  :       ,      : return Utils.normalRelativeAngle(angleTo(getX(), getY(), enemyX, enemyY) - getGunHeadingRadians()); } 


рдФрд░ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рддреАрди рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдХрд░:
  setAhead(distance); } /*+*/ final double gunTurn = getGunTurn(); /*+*/ setTurnGunRightRadians(gunTurn); /*+*/ setFire(2); } 


рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ


рдФрд░ рдлрд┐рд░ рд░реЛрдмреЛрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдЦреЗрд▓ рдХреА рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдВрдд рддрдХ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХреАред

PS рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

Source: https://habr.com/ru/post/In147947/


All Articles