Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Программа перехватчик (https://javascript.ru/forum/offtopic/29211-programma-perekhvatchik.html)

skywalker 19.06.2012 21:47

Программа перехватчик
 
Ребятки, помогите, пожалуйста, написать программу. JS изучаю совсем недавно, но необходим курсовой

Перехватчик. Движение цели определяется случайными числами: -2(смещение влево), -1(смещение назад), -0(остановка), 1(смещение вперед), 2(смещение вправо). Каждое смещение равно выбранной единице. Перехватчик следит за целью и пытается поразить её. Максимальное смещение перехватчика равно трем единицам. Все перемещения происходят в плоскости. Начальное положение цели и перехватчика величины случайные. Отобразить их координаты в процессе перехвата.

Спасите кто чем сможет.

Gozar 19.06.2012 21:54

Удачи тебе отрок.

skywalker 19.06.2012 22:30

Суть в том что должна быть координатная плоскость, ограниченная только фантазией
По которой двигается цель
Маневр задается каждый ход рандомом от -2 до 2
А перехватчик должен оказаться в том же положение что и цель
для того чтобы завершить задачу, но с условием, что за ход может смещаться только на 3 клетки

9xakep 19.06.2012 22:54

skywalker,
итого:
1) если плоскость
2) есть цель, которая двигается в зависимости от цифр
3) есть перехватчик, который к этой цели должен подобраться.
Если все так. То 1000р. Скайп в пофиле.

skywalker 19.06.2012 23:07

Идёт как-бы пошаговое передвижение
И каждый ход перехватчик должен двигаться к цели, точнее к месту её положения
Вне зависимости от того, где будет находиться

Да не, хотя в потоке есть ракетчики, что-то им подобное тоже задавали, только для ракет)

9xakep 19.06.2012 23:13

Цитата:

Сообщение от Maxmaxmахimus
пытаться предугадать следующее положение на основе построенной модели?

Цитата:

Сообщение от Maxmaxmахimus
Перехватчику известен внутренний механизм поведения цели

Цитата:

Сообщение от Maxmaxmахimus
выявить закономерности поведения

лол, он же сказал движение рандомное

9xakep 19.06.2012 23:18

я вообще так понял:
делаем матицу в виде тэйблов,
var arr = [-2,-1,0,1,2]
var step = Math.round(Math.random()*arr.length)

Получаем заведомое число (как ему двигаться) И двигаем по нашей "матрице"

После, находим разницу в x,y между цели и перехватчиком, (например х:2,у:1) двигаем на 3 шага вправо. И так до тех пор, пока перехватчик не дойдет до цели

Deff 19.06.2012 23:23

Цитата:

Сообщение от 9xakep
После, находим разницу в x,y между цели и перехватчиком, (например х:2,у:1) двигаем на 3 шага вправо. И так до тех пор, пока перехватчик не дойдет до цели

При оптимизации перехвата, при расстоянии менее двух Vmax нун уменьшать скорость пропорционально расстоянию до цели (хотя если инерции нет ...

skywalker 19.06.2012 23:26

Принципа поведения не знает
Просто тупо каждый ход смещается к цели на три клетки

9xakep 19.06.2012 23:30

Deff,
так ему еще и анимацию надо)..Это еще бльше трахаться мучаться) Просто я сейчас тетрис делаю, так что тот метод что я предложил мне более знаком.
==============
skywalker,
тебе в подобной "графике" пойдет? (ссылка на тетрис). Если да, то могу описать в общем плане

skywalker 19.06.2012 23:31

Да не
графика то не нужна
я в принципе понимаю, как нужно составить код
Но именно в JS не могу представить как это сделать

Deff 19.06.2012 23:35

Цитата:

Сообщение от skywalker
Принципа поведения не знает
Просто тупо каждый ход смещается к цели на три клетки

Хм т.е его перемещение всегда три ? если он промазал с трешного расстояния - будет долго крутицо вокруг цели
Ксать перехватчик по диагонали пуляет или ? (на три клетки под 45 ?

skywalker 19.06.2012 23:37

Если промазал
то цикл повторяется заново, только с уже имеющихся позиций
т.е. заново перемещается цель, и он заново к ней прыгает

Deff 19.06.2012 23:39

Цитата:

Сообщение от skywalker
то цикл повторяется заново, только с уже имеющихся позиций

Это всё ясно - но в реальности - к примеру из разных углов - он быстро подлетает к цели - а затем медленно крутицо вокруг -пока она сама не напорется, если скорость перехватчика всегда три

9xakep 19.06.2012 23:40

skywalker,
эх...добрая моя душа.
Короче, посмотри в мой код(он конечно не идеален, но..), авось разберешься, там конечно ужас полный, коменты так, для приличия.
Тебе понадобиться:
1) Ф-ия создания матрицы (тэйбла)
function createTable(x, y) {
      window['x'] = x
      window['y'] = y

      var all = x * y
      var all2 = 0;

      document.write('<table id="tetris">')
      for (i = 0; i < y; i++) document.getElementById('tetris').innerHTML += "<tr id='tr" + i + "'></tr>";
      for (i = 0; i < y; i++) {
        for (k = 0; k < x; k++) {

          all2 += 1;

          document.getElementById("tr" + i).innerHTML += "<td id='td" + all2 + "'>" + w_sq + "</td>"
        }
      }
    }

Она сделана так, что все ячейки пронумерованы: с ид: td1,td2,td3...td(x*y). P.S. x*y - последняя ячейка (макс).
2)Далее...у меня есть массив, в котором содераться координаты данной фигуры, в твоем случае цели: условно: 4. Это будет означать, что цель(если она размером в одну ячйку) Находиться в document.getElementById('td4')
3) При каждом перемещении цели, ты должен очищать экран:
function clear() {
      for (i = 0; i < td_id.length; i++) {

        document.getElementById('td' + td_id[i]).innerHTML = w_sq
      }
    }
, где w_sq - это: "<div style='background:#D3D3D3;height:15px;width:15px;' ></div>". То бишь белая ячейка
4) После ты уже узнал куда переместиться твоя цель (допустим -2 - влево). Ты: координаты уменьшаешь на 1. Становиться 4-1=3. И document.getElementById('td'+твои координты).innerHTML = sq, где твои координаты, мы уже посчитали: 3. А sq - "<div style='background:red;height:15px;width:15px;'></div>"
5) Перехватчик перемещаешь аналогично. Я хз он у тебя там стреляет, не стреляет, пускай он тупо также перемещается условно.
6) Ставишь все это в var inter = setInterval(function () { //code.. },1000) А когда координаты перехватчика == координты цели, то clearInterval(inter). То бишь перехватчик достиг цели.

==========

Правда как сказал, Deff, не учитывает, что перехватчик может двигаться под углом 45 градусов.

skywalker 19.06.2012 23:51

9xakep,
Спасибо
Код понятен.
А с углом думаю сам разберусь

Dim@ 25.06.2012 15:48

2 дня поморочился по полтора часика кое-что получилось :) :)
http://learn.javascript.ru/play/KbhYFb

Deff 25.06.2012 18:27

Dim@,
:) Жулик по идее если постоянно три клетки , как грил ТС (горизонталь -вертикаль или даже диагональ) , - то на конечном этапе кручение было бы занчительно долее

Dim@ 25.06.2012 22:39

Deff,
не понял.:) что не так?

Deff 25.06.2012 23:11

Dim@,
Всё так - но ТС казал что у перехватчика скорость постоянная 3клетки
влево вправо - вверх вниз (про диагональ так и не уточнили)
(Я Спецом просил уточнить раз несколько
у тьву она меняется от 0 до 3

Dim@ 25.06.2012 23:29

Deff,
сказали 3 клетки, но три клетки очень большая скорость =) я специально еще сделал так что можно настраивать скорость на свой вкус, про диагональ действительно не уточнили ну и что с ней делать

Deff 25.06.2012 23:50

Dim@,
Да ничо - Вариант отличный - прост я спецом уточнял посколь был с пво раньше был связан

Dim@ 25.06.2012 23:52

Deff,
:lol: видимо я не зря поморочился :lol:


Часовой пояс GMT +3, время: 13:43.