Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

amount — расстояние, которое необходимо пройти (любое натуральное число);direction — если ровна 1 робот идёт вперёд. Если указанно другое значение — назад;// 10 Шагов вперёд
r.move(10, 1);
// 20 Шагов назад
r.move(20, 0);
// 30 Шагов назад
r.move(30, -1);
robot.cannonAbsoluteAngle может не совпадать с robot.angle даже с учетом их 90 градусов сдвинутостиМожет проблема в том что Вы вызываете
robot.log(robot.cannonAbsoluteAngle) перед тем как танк успевает поворачивать пушку?а всё крутится непонятно кудаКак Вы уже заметили, есть замечательная функция
robot.log() — очень помогает понять как вообще работают остальные функции. Используйте глобальные переменные и функции чтобы удобнее управлять этим процессом.Ещё прикол, кстати с углами — врезаюсь в стену четко под 90 градусов, а ev.bearing дает (через ev.robot.log) — 0.Попробуйте столкутся перед другим углом, например 45 и увидите что
ev.bearing = -45. Это связано с тем, что ev.bearing возвращает угол стены относительно роботом, а не наоборот.var Robot = function () {},
bot = Robot.prototype,
botStopped, // узнаем если можно продолжить движение вперёд
gunRotated; // чтобы убедится что пушка будет перевернута лишь один раз
bot.onIdle = function (ev) {
if (!botStopped) {
var r = ev.robot;
// Ждём пока робот не будет перевернут на 90 градусов
if (r.angle == 90) {
if (!gunRotated) {
// Не забываем что пушка уже перевёрнута
gunRotated = true;
// Не забываем, что робот перевёрнут уже на 90 градусов
// и чтобы пушка также была перевёрнута на 90 градусов
// вращаем её на 90 градусов влево
r.turnGunLeft(90);
// Не смотря на то, что мы задали новое значение для угла пушки,
// здесь показывает старое значение, так как пушка не успела перевернутся
r.log(r.cannonAbsoluteAngle); // -> 180
}
// Пока есть возможность, идём вперёд маленькими шагами
r.ahead(1);
} else {
// Будем вращать танк в наименьшую сторону
r.turn((r.angle > 180) ? 1 : -1);
}
}
};
bot.onWallCollision = function (ev) {
// Врезались в стену, нужно остановится
botStopped = true;
// Так как пушка уже перевёрнута, показывает правильное значение
ev.robot.log(ev.robot.cannonAbsoluteAngle); // -> 90
};
onScannedRobot() обновите её значение. Если прежнее значение и текущее отличаются, значит противник движется.var Robot = function (robot) {},
bot = Robot.prototype,
enemy = {
position : ''
};
bot.onIdle = function (ev) {
// Вращаем пушку дабы найти наш противник
ev.robot.rotateCannon(1);
};
bot.onScannedRobot = function (ev) {
// Получаем текущее местоположение противника
var pos = ev.scannedRobot.position,
// Правильнее, сохранить данные в виде массива
// чтобы было удобнее использовать их в дальнейшим
// Но для простого примера, сохраняем местоположение в виде строки
currentPosition = pos.x + '/' + pos.y;
// Проверяем если противник изменил своё местоположение
if (currentPosition != enemy.position) {
// Проверяем если задано предыдущее местоположение
if (enemy.position) {
// Кажется, противник двигается
// Что приказываете делать?
}
// Сохраняем новое местоположение противника
enemy.position = currentPosition;
}
};
FightCode: танковые войны на JavaScript