Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Игра "Пятнашки" (https://javascript.ru/forum/project/12453-igra-pyatnashki.html)

Bolo1910 18.10.2010 17:07

Игра "Пятнашки"
 
Приглашаю посмотреть на разработанный мной учебный (не обучающий) проект разработки скрипта игры "Пятнашки" (альфа-версия):



Разработка: http://ru.wikiversity.org/wiki/15_puzzle

Демо: http://puzzlewikivers.sourceforge.net/15puzzle.html

Скрипт (версия 0.1): http://ru.wikiversity.org/wiki/15_puzzle_0.1

B@rmaley.e><e 18.10.2010 17:18

Как-то скучно. Пример похожего скрипта-плагина для jQuery.

P.S. А от выпадения неразрешимых комбинаций Вы как-нибудь защищаетесь?

Kolyaj 18.10.2010 17:33

Вы отстали от тенденций в web-разработке лет на 10. Вы не умеете верстать. Код ужасен.
Вам нужно читать учебные материалы, а не писать их.

Если бы это было подано, как "я написал свой первый скрипт, гляньте, что не так", было бы что обсуждать.

И ещё: не любая комбинация в пятнашках сходится. Надо перемешивать начальную комбинацию, а не придумывать произвольную.

Bolo1910 18.10.2010 18:10

Цитата:

Сообщение от Kolyaj (Сообщение 74827)
Вы отстали от тенденций в web-разработке лет на 10. Вы не умеете верстать. Код ужасен.
Вам нужно читать учебные материалы, а не писать их.

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

Критиковать просто, а что-то сделать полезное желающих мало.

Цитата:

Сообщение от Kolyaj (Сообщение 74827)
Вы не умеете верстать. Код ужасен.

Ну так исправьте код как надо, технология вики это позволяет. И другие на моём примере научатся как не надо делать.

Bolo1910 18.10.2010 18:15

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 74823)
А от выпадения неразрешимых комбинаций Вы как-нибудь защищаетесь?

Целью первой версии было достичь простой функциональности игры. Неразрешимыми комбинациями я ещё не занимался.

Kolyaj 18.10.2010 18:21

Цитата:

Сообщение от Bolo1910
Если я так плох, то напишите интерактивный курс, и учебные скрипты к ним. Тогда я у Вас поучусь.

А если вы по канату плохо ходите, то я должен сделать курс для канатоходцев?

Цитата:

Сообщение от Bolo1910
Критиковать просто, а что-то сделать полезное желающих мало.

Отсутствие курса лучше плохого курса.

Я не понимаю, почему люди, не разбирающиеся в предметной области, делает учебные материалы в этой области. А потом мы удивляемся, откуда новички набираются всего того бреда, с которым приходят на форум.

Bolo1910 18.10.2010 18:44

Цитата:

Сообщение от Kolyaj (Сообщение 74839)
Я не понимаю, почему люди, не разбирающиеся в предметной области, делает учебные материалы в этой области. А потом мы удивляемся, откуда новички набираются всего того бреда, с которым приходят на форум.

Видно Вы незнакомы с викитехнологиями. Первоначально Википедию критиковали за плохие статьи (написанные любителями), а теперь статьи улучшены специалистами и на них ссылаются как на авторитетные источники информации.

Также и с Викиверситетом. Сейчас Вы критикуете, позже придут специалисты и всё исправят, и через несколько лет везде будут ссылаться на курсы Викиверситета как на образец.

Kolyaj 18.10.2010 18:49

Цитата:

Сообщение от Bolo1910
Видно Вы незнакомы с викитехнологиями.

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

Gozar 18.10.2010 20:34

Цитата:

Сообщение от Bolo1910 (Сообщение 74846)
Первоначально Википедию критиковали за плохие статьи (написанные любителями), а теперь статьи улучшены специалистами и на них ссылаются как на авторитетные источники информации.

Как был бардак, так и остался. Большая часть статей плохо написана. Никогда не ссылался на вики как на авторитетный источник и не уверен что буду, будущее покажет. Единственное что узнал и запомнил из вики это то, что в жевачку титановые белила добавляют, чтобы она была белой. Не знаю как эти знания мне помогут в жизни.

Вы зря гоните на Kolyaj, у него есть сайт alljs.ru, на котором он старался и писал учебные материалы для таких нубов как Вы и Я. :)

ps: Ваш скрипт очень сомнителен с точки зрения обучающей способности, подача материала может быть, но не сам скрипт.

Проще создать массив из 15 элементов и перемешать их, а не придумывать очень сложный для понимания велосипед. Дальше мне просто лень писать, что там исправлять, т.к. Вы должны ещё открыть для себя мир js и html/css

subzey 18.10.2010 20:46

Bolo1910,
пожалуйста, воспринимайте конструктивную критику конструктивно.

Ваш код не тот, по которому стоит учиться. Используйте css, разделяйте логику и представление, не делайте кашу из тегов, не исользуйте document.write без необходимости, используйте методы DOM, забудьте про учебники по html, датированные ранее, чем 2005 годом, помните про кроссбраузерность.

micscr 19.10.2010 08:36

Этот код по праву можно назвать индусским. В обработчиках onclick одно и то же. Тут даже не знание js дико лажает, а в общем умение программировать, проектировать модель и т.д. Что например будешь делать если надо будет поле сделать 5*5? А должно решаться чисто сменой в конфигурации вместо 4 на 5.

MininAS 19.10.2010 15:28

Цитата:

Сообщение от subzey (Сообщение 74865)
Bolo1910,
пожалуйста, воспринимайте конструктивную критику конструктивно.

Ваш код не тот, по которому стоит учиться. Используйте css, разделяйте логику и представление, не делайте кашу из тегов, не исользуйте document.write без необходимости, используйте методы DOM, забудьте про учебники по html, датированные ранее, чем 2005 годом, помните про кроссбраузерность.

Ответ по взрослому, так сказать не обсирающий, а поучающий.
Такой на форумах критики мало.

micscr 19.10.2010 15:51

Цитата:

Сообщение от MininAS (Сообщение 74935)
Ответ по взрослому, так сказать не обсирающий, а поучающий.
Такой на форумах критики мало.

Мир вообще не идеален :) . Вот у тебя в тетрисе фигурки при повороте так и не отскакивают от стенок и друг друга.

Cr@ZyBoY 19.10.2010 18:39

Хм, какое совпадение... http://govnokod.ru/4389

DooMer 19.10.2010 20:58

както вы сильно жестко на парня накинулись...

MininAS 19.10.2010 21:35

Цитата:

Сообщение от micscr (Сообщение 74944)
Мир вообще не идеален :) . Вот у тебя в тетрисе фигурки при повороте так и не отскакивают от стенок и друг друга.

ННуууууууу я сначала и не планировал, для меня это как то не сущесственно.
Но если надо то по скрипту эту функцию добавить просто (могу сделать).

рони 20.10.2010 03:41

Пятнашки )))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
 <title>15</title>
<style type="text/css">
td{
   height: 40px; width: 40px; text-align: center; color: #FFFFF0;  font-weight: bold; font-size: large;
}
</style>
</head>
<body>
 <script language="JavaScript" type="text/javascript">
for (var m = [], l = 4, k = 1, z = [l - 1, l - 1], // l--размер поля
 b = ["background-color: #4169E1;", "background-color: #C0C0C0;color: #C0C0C0;"],
 t = document.createElement("table"), c = 0; c < l; c++) {
    var tr = t.insertRow(c);
    m[c] = [];
    for (var s = 0; s < l; s++) {
        var td = tr.insertCell(s);
        td.style.cssText = b[0];
        td.onclick = function (a, e) {
            return function () {
                cl_go(a, e)
            }
        }(c, s);
        m[c][s] = k;
        td.innerHTML = k++
    }
}
t.rows[l - 1].cells[l - 1].style.cssText = b[1];
t.rows[l - 1].cells[l - 1].innerHTML='';
m[l - 1][l - 1] = 0;
document.body.appendChild(t);
var end = m.toString().split(",").join(""),
    v = l * l * 2;

function go() {
    for (var a = [
        [-1, 0],
        [0, -1],
        [1, 0],
        [0, 1]
    ]; a.length;) {
        var e = Math.floor(Math.random() * a.length),
            d = a[e];
        a.splice(e, 1);
        if (m[z[0] + d[0]] && m[z[0] + d[0]][z[1] + d[1]]) break
    }
    m[z[0]][z[1]] = m[z[0] + d[0]][z[1] + d[1]];
    t.rows[z[0]].cells[z[1]].style.cssText = b[0];
    t.rows[z[0]].cells[z[1]].innerHTML = m[z[0]][z[1]];
    t.rows[z[0] + d[0]].cells[z[1] + d[1]].style.cssText = b[1];
    t.rows[z[0] + d[0]].cells[z[1] + d[1]].innerHTML = '';
    m[z[0] + d[0]][z[1] + d[1]] = 0;
    z = [z[0] + d[0], z[1] + d[1]];
    if (m[l - 1][l - 1] || v > 0) {
        v--;
        setTimeout(arguments.callee, 100)
    } else {
        alert("Please play!!!");
        v = l * l * 2
    }
}
function cl_go(a, e) {
    for (var d = [
        [-1, 0],
        [0, -1],
        [1, 0],
        [0, 1]
    ]; d.length;) {
        var g = Math.floor(Math.random() * d.length),
            f = d[g];
        d.splice(g, 1);
        if (m[a + f[0]] && m[a + f[0]][e + f[1]] == 0) {
            m[a + f[0]][e + f[1]] = m[a][e];
            m[a][e] = 0;
            t.rows[a].cells[e].style.cssText = b[1];
            t.rows[a].cells[e].innerHTML = '';
            t.rows[a + f[0]].cells[e + f[1]].style.cssText = b[0];
            t.rows[a + f[0]].cells[e + f[1]].innerHTML = m[a + f[0]][e + f[1]];
            z = [a, e];
            break
        }
    }
    end == m.toString().split(",").join("") && alert("Game over")
};
</script>
<input type="button" name="" value="Mix"  onclick="go()"/>
</body>
</html>

Gozar 20.10.2010 11:31

рони,
а почему время прохождения не выдает? Это же самое интересное :)

рони 20.10.2010 14:01

Gozar,
Будет Вам и дудка, будет и свисток )))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
 <title>15</title>
<style type="text/css">
td{
   height: 40px; width: 40px; text-align: center; color: #FFFFF0;  font-weight: bold; font-size: large;
}
</style>
</head>
<body>
 <script language="JavaScript" type="text/javascript">
for (var m = [], l = 4, k = 1, z = [l - 1, l - 1],start,step, // l--размер поля
 b = ["background-color: #4169E1;", "background-color: #C0C0C0;color: #C0C0C0;"],
 t = document.createElement("table"), c = 0; c < l; c++) {
    var tr = t.insertRow(c);
    m[c] = [];
    for (var s = 0; s < l; s++) {
        var td = tr.insertCell(s);
        td.style.cssText = b[0];
        td.onclick = function (a, e) {
            return function () {
                cl_go(a, e)
            }
        }(c, s);
        m[c][s] = k;
        td.innerHTML = k++
    }
}
t.rows[l - 1].cells[l - 1].style.cssText = b[1];
t.rows[l - 1].cells[l - 1].innerHTML='';
m[l - 1][l - 1] = 0;
document.body.appendChild(t);
var end = m.toString().split(",").join(""),
    v = l * l * 2;

function go() {
    for (var a = [
        [-1, 0],
        [0, -1],
        [1, 0],
        [0, 1]
    ]; a.length;) {
        var e = Math.floor(Math.random() * a.length),
            d = a[e];
        a.splice(e, 1);
        if (m[z[0] + d[0]] && m[z[0] + d[0]][z[1] + d[1]]) break
    }
    m[z[0]][z[1]] = m[z[0] + d[0]][z[1] + d[1]];
    t.rows[z[0]].cells[z[1]].style.cssText = b[0];
    t.rows[z[0]].cells[z[1]].innerHTML = m[z[0]][z[1]];
    t.rows[z[0] + d[0]].cells[z[1] + d[1]].style.cssText = b[1];
    t.rows[z[0] + d[0]].cells[z[1] + d[1]].innerHTML = '';
    m[z[0] + d[0]][z[1] + d[1]] = 0;
    z = [z[0] + d[0], z[1] + d[1]];
    if (m[l - 1][l - 1] || v > 0) {
        v--;
        setTimeout(arguments.callee, 100)
    } else {step=0;start = new Date();
        alert("Please play!!!");
        v = l * l * 2
    }
}
function cl_go(a, e) {
if(end == m.toString().split(",").join("")) {alert("Please Mix!!!");return};
step++;
for (var d = [
        [-1, 0],
        [0, -1],
        [1, 0],
        [0, 1]
    ]; d.length;) {
        var g = Math.floor(Math.random() * d.length),
            f = d[g];
        d.splice(g, 1);
        if (m[a + f[0]] && m[a + f[0]][e + f[1]] == 0) {
            m[a + f[0]][e + f[1]] = m[a][e];
            m[a][e] = 0;
            t.rows[a].cells[e].style.cssText = b[1];
            t.rows[a].cells[e].innerHTML = '';
            t.rows[a + f[0]].cells[e + f[1]].style.cssText = b[0];
            t.rows[a + f[0]].cells[e + f[1]].innerHTML = m[a + f[0]][e + f[1]];
            z = [a, e];
            break
        }
    }
    end == m.toString().split(",").join("") && alert("Game over "+Math.floor(((new Date()).getTime() - start.getTime())/1000)+" s "+step+" step")
};
</script>
<input type="button" name="" value="Mix"  onclick="go()"/>
</body>
</html>

True-Coder 23.02.2011 11:33

камрады, оцените, как вам наша реализация пятнашек?

ewg 02.11.2013 23:30

Мне как только начавшему писать на js (да и вообще писать что либо на каком-либо языке программирования) очень даже хороший пример. Мне не нужен сейчас для примеров классный код, с подключением каких-то заумных библиотек , мне нужна для начала простая "азбука" пусть даже в виде "индусского кода". Как использовать циклы, условия, переменные, объекты, как просто менять данные местами, используя функции. Тут всего понемногу, просто и прозрачно. А начинающему сразу забивать голову jQuery, как тут предлагают, считаю глупо.
Потому большое спасибо за пример!

nerv_ 03.11.2013 01:45

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

alexan0308 11.11.2013 13:45

Приехал =(



Тут минус в том, что автор очень неэффективно решил проблемы, возникающие перед ним в процессе разработки. Раскидал ячейки, хотя проще было циклом. Придумал неправильный алгоритм заполнения ячеек и вешает на него заплатку. Посоветовался бы на форуме, как лучше ее решить =)

MininAS 11.11.2013 23:43

Цитата:

Сообщение от nerv_ (Сообщение 279262)
согласно вашей логике:
- сначала нужно научиться машину водить плохо, чтобы потом переучиваться водить ее хорошо
- чтобы освоить английский, надо учить китайский
- чтобы приготовить амлет, надо зарезать свинью
...

Вы меня простите, но согласно логике "ewg" он хочет:
- водить машину зная принцип работы двигателя сгорания;
- использовать рацию зная как осуществляется передача радиоволн;
- жить в доме и знать что такое фундамент;
- ну и используя jQvery знать тот язык на котором он написан.
А ваши три примера "и не в склад и не в лад поцелуй дрова в живот".

nerv_ 29.06.2015 10:59

Решение пятнашек (вместо матрицы 3х3 ставите матрицу 4х4)

Взял пятнашки от рони, перетасовал их вручную, вроде работает :)

У "восьмерки" пространство состояний 3^22, у пятнашек оно больше)))

В целом решение писалось для любых квадратных матриц.

Косяки вида "если подать уже решенное состояние, алгоритм будет его решать в ~3 хода" не исправлял, т.к. делал на скорую руку.

рони 29.06.2015 11:45

nerv_,
:victory:

chrisscreate 13.08.2015 11:58

https://play.google.com/store/apps/d...jm.BarleyBreak

PeterNovik 14.08.2015 11:54

Надеюсь, тут заменят цифры картинками?

рони 14.08.2015 12:14

Цитата:

Сообщение от PeterNovik
Надеюсь, тут заменят цифры картинками?

тут это где?


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