Jump to content
  • 0

Помогите плз с пятнашками


DasBit
 Share

Question

Доброго времени суток. Наведите пожалуйста на мысль как заставить в пятнашках элементы головоломки двигаться :unsure:

Я понимаю что нужно принимать функцией значение элемента при клике на нем, вот:

<img src="images/1.gif" name="1" onClick="imgChange(1)" />

И вот так:

function imgChange(imgNumber) { }

Дальше завис :blush: натолкните хоть просто на мысль как. Я догадываюсь, что ответ очень прост, но не могу до него допереть.

З.Ы. Стыд и позор :facepalmxd:

Link to comment
Share on other sites

Recommended Posts

  • 0

Можете взглянуть код и подсказать почему не пашет? Вот не хотят двигаться и все тут :facepalmxd:

архив с пятнашками

Нет. Залей на нормальный хост.

Готово

Да нееет)) Я имел ввиду на хост, чтобы не скачивать твои архивы, а сразу по ссылке увидеть результат.

Link to comment
Share on other sites

  • 0

Ссылку на хост без реги можно? Конечно если есть такие)

Народ.ру

Я на хостингере создал акк. Как только активируют его сразу залью туда пятнашки и выложу тут линк.

Давай. Сразу шансы того, что тебе помогут - возрастут.

Link to comment
Share on other sites

  • 0

В этой версии пятнашек не учтено, что могут быть начальные варианты при которых пятнашки собрать невозможно.

И ещё не понял зачем такая сложная проверка возможности хода?! у меня это одна строка


if( (Math.abs(free.x-x)+Math.abs(free.y-y))==1 )
{
/* —— */
}

free.x, free.y - координаты свободной клетки, x, y - координаты пятнашки соотвественно.

и смысла в Bottom, Left, Right и Top тоже не вижу, я их заменил одной функцией move


function move( el, xf, yf, xt, yt )
{
var sm = 0;
timer = setInterval( function()
{
el.style["top"] = yf*size+sm*(yt-yf)+"px";
el.style["left"] = xf*size+sm*(xt-xf)+"px";
sm+=10;
if( sm > size ) {
el.style["top"] = yt*size+"px";
el.style["left"] = xt*size+"px";
clearInterval(timer);
}
}, 10
);
}

здесь el - пятнашка, xf, yf - начальные координаты(0-3), xt, yt - конечные координаты, size - размер пятнашки(ширина = высота)

Link to comment
Share on other sites

  • 0

CalvinKlein, К сожалению я почти не знаю JS, отсюда и бредовый код.

Но спасибо за советы, обязательно учту.

А скажи, что означает эта строка?

Math.abs(free.x-x)+Math.abs(free.y-y))==1

Link to comment
Share on other sites

  • 0

kontakt4kontakt.narod.ru/15.html вот кстати мои пятнашки, правда ещё не доделал до конца, но думаю DasBit найдёт что искал.

CalvinKlein, К сожалению я почти не знаю JS, отсюда и бредовый код.

Но спасибо за советы, обязательно учту.

А скажи, что означает эта строка?

Math.abs(free.x-x)+Math.abs(free.y-y))==1

Math.abs(free.x-x) - это расстояние между пустой клеткой и пятнашкой по оси x

Math.abs(free.y-y) - соответственно расстояние по оси y

если их сумма равна 1, то расстояние по оси y или расстояние по оси x равно 1, то есть пятнашка может ходить.

Link to comment
Share on other sites

  • 0

А скажи, что означает эта строка?

Math.abs(free.x-x)+Math.abs(free.y-y))==1

До меня кажется дошло, как это работает :)

Сейчас попробую объяснить, если не понял.

CalvinKlein,

У меня, например, еще проблемы с математикой. Поэтому тоже зачастую километровые коды проверок и вообще коды :)

Link to comment
Share on other sites

  • 0

CalvinKlein,

У меня, например, еще проблемы с математикой. Поэтому тоже зачастую километровые коды проверок и вообще коды :)

Вооо, воо. А у меня траблы ещё какие))

kontakt4kontakt.narod.ru/15.html вот кстати мои пятнашки, правда ещё не доделал до конца, но думаю DasBit найдёт что искал.

CalvinKlein, К сожалению я почти не знаю JS, отсюда и бредовый код.

Но спасибо за советы, обязательно учту.

А скажи, что означает эта строка?

Math.abs(free.x-x)+Math.abs(free.y-y))==1

Math.abs(free.x-x) - это расстояние между пустой клеткой и пятнашкой по оси x

Math.abs(free.y-y) - соответственно расстояние по оси y

если их сумма равна 1, то расстояние по оси y или расстояние по оси x равно 1, то есть пятнашка может ходить.

Понял, но всё равно для меня это тёмный лес :blush:

А откуда берутся эти значения все? Что за "х" и free.x ?

Link to comment
Share on other sites

  • 0
А откуда берутся эти значения все? Что за "х" и free.x ?

kontakt4kontakt.narod.ru/15.html тут вроде всё понятно в коде.

free - глобальный объект, free = {"x": число, "y": число }.


var y = Math.floor(parseInt(el.style["top"])/106);
var x = Math.floor(parseInt(el.style["left"])/106);

расчитывается исходя из координат пятнашки

Edited by CalvinKlein
Link to comment
Share on other sites

  • 0

DasBit


One = Math.floor(Math.random() * (16 - 1) + 1);
Two = Math.floor(Math.random() * (16 - 1) + 1);

число не от 1 до 16, а от 1 до 15, правильно так


One = Math.floor(Math.random() * (16 - 1)) + 1;
Two = Math.floor(Math.random() * (16 - 1)) + 1;

и кстати 16-1 = 15 почему бы сразу не написать?!

document.images - это массив, а индексы элементов массива в JS с 0 начинаются, так что пиши так


One = Math.floor(Math.random() * 15);
Two = Math.floor(Math.random() * 15);


for (var i=0; i<16; i++)
{
if(document.images[i].name=="16") moveImg = i;
}

не проще сделать глобальную переменную moveImg ?!

И ещё "при рандомизации" возникают ситуации, когда пятнашки собрать невозможно!

Edited by CalvinKlein
Link to comment
Share on other sites

  • 0

Ну единица хоть теперь задвигалась :yahoo: изменил на:

One = Math.floor(Math.random() * 15);
Two = Math.floor(Math.random() * 15);

А зачем переменную делать глобальной? Разницы по моему особенной нет локальная переменная или глобальная.

И ещё "при рандомизации" возникают ситуации, когда пятнашки собрать невозможно!

И как с этим бороться?

Edited by DasBit
Link to comment
Share on other sites

  • 0

А зачем переменную делать глобальной? Разницы по моему особенной нет локальная переменная или глобальная.


for (var i=0; i<16; i++)
{
if(document.images[i].name=="16") moveImg = i;
}

Чтобы этот кусок не писать.

kontakt4kontakt.narod.ru/15.html

Ты мой код посмотрел?

И ещё "при рандомизации" возникают ситуации, когда пятнашки собрать невозможно!

И как с этим бороться?

Здесь нужен алгоритм, или имитировать клики по пятнашкам.

Link to comment
Share on other sites

  • 0

Имеешь в виду создать глобальную переменную:

var moveImg = 16;

Так что ли?

да, и менять значение при перестановке.

Смотрел, только ничего толком в нем не понял :blush:

а что там непонятного, вроде всё просто?!

Edited by CalvinKlein
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy