Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
QQshonOK
0 / 0 / 0
Регистрация: 23.05.2014
Сообщений: 4
1

Игра пятнашки, JavaScript, проверка на решаемость

23.05.2014, 17:06. Просмотров 1771. Ответов 11
Метки нет (Все метки)

Здравствуйте, попробовал сделать пятнашки с таймером и подсчетом ходов, но позже выяснилось, что решения при некоторых раскладах невозможно, как сделать проверку не знаю, помогите, пожалуйста.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE html>
<html>
<head> 
    <title>Игра "Пятнашки"</title> 
    <meta charset="utf-8"> 
    <style>
        #sample_timer, #steps {
            display:none;
            text-align:center;
            color:#FFF;
        }
    </style>
    <script> 
        var str_vict="ПОЗДРАВЛЯЕМ,ВЫ ЭТО СДЕЛАЛИ!!! "; 
        var m = 0;
        function hod(){
            m++;
            document.getElementById("steps").innerHTML = "Ходов:    " + m;
        }
        function zamen(n){ 
            var n2 ; 
            for ( var i=0; 16>i; ++i ){if (document.images[i].name=="16"){n2=i;}} 
            if ((n-n2==4) || (n2-n==4) || ((n-n2==1)&&(Math.floor(n/4)==Math.floor(n2/4))) || ((n2-n==1)&&(Math.floor(n/4)==Math.floor(n2/4))) ){ 
                document.images[n2].src = ""+document.images[n].name+".gif"; 
                document.images[n].src = "16.gif"; 
                document.images[n2].name = document.images[n].name; 
                document.images[n].name = "16"; 
                hod();
            } 
            n2=0 
            for ( var i=0; 13>i; ++i ){if (document.images[i].name==i+1){n2=++n2;}} 
            if ((n2==13) && (document.images[15].name==16)) {alert(str_vict);zan();} 
        } 
        function zan(){ 
            start_timer();
            document.getElementById('sample_timer').style.display = "block";
            document.getElementById('steps').style.display = "block";
            var s=0;p1 = new Image();var p2 = new Image();var imgs_ = new Image();var name_; 
            for ( var i=0; 50>i; ++i ){ 
                p1 = Math.floor(Math.random()*16);p2 = Math.floor(Math.random()*16); 
                imgs_ = document.images[p1].src;document.images[p1].src = document.images[p2].src;document.images[p2].src = imgs_; 
                name_ = document.images[p1].name;document.images[p1].name = document.images[p2].name;document.images[p2].name = name_; 
            } 
        }
        function simple_timer(sec, block, direction) {
            var time    = sec;
            direction   = direction || false;
                     
            var hour    = parseInt(time / 3600);
            if ( hour < 1 ) hour = 0;
            time = parseInt(time - hour * 3600);
            if ( hour < 10 ) hour = '0'+hour;
         
            var minutes = parseInt(time / 60);
            if ( minutes < 1 ) minutes = 0;
            time = parseInt(time - minutes * 60);
            if ( minutes < 10 ) minutes = '0'+minutes;
         
            var seconds = time;
            if ( seconds < 10 ) seconds = '0'+seconds;
         
            block.innerHTML ="Время игры: "+hour+':'+minutes+':'+seconds;
         
            if ( direction ) {sec++; setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);} 
            else {
                sec--;
                if ( sec > 0 ) {setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);} 
                else {alert('Время вышло!');}
            }
        }
        function start_timer() {
            var block = document.getElementById('sample_timer');
            simple_timer(0, block, true);
        }   
    </script> 
</head> 
<body bgcolor="003333"> 
    <div align="center">
    <center><table border="1"> 
      <tr> 
        <td><img src="1.gif" onclick="zamen(0)" name="1" width="100" height="100">
            <img src="2.gif" onclick="zamen(1)" name="2" width="100" height="100">
            <img src="3.gif" onclick="zamen(2)" name="3" width="100" height="100">
            <img src="4.gif" onclick="zamen(3)" name="4" width="100" height="100"><br> 
 
            <img src="5.gif" onclick="zamen(4)" name="5" width="100" height="100">
            <img src="6.gif" onclick="zamen(5)" name="6" width="100" height="100">
            <img src="7.gif" onclick="zamen(6)" name="7" width="100" height="100">
            <img src="8.gif" onclick="zamen(7)" name="8" width="100" height="100"><br>
     
            <img src="9.gif" onclick="zamen(8)" name="9" width="100" height="100">
            <img src="10.gif" onclick="zamen(9)" name="10" width="100" height="100">
            <img src="11.gif" onclick="zamen(10)" name="11" width="100" height="100">
            <img src="12.gif" onclick="zamen(11)" name="12" width="100" height="100"><br>
     
            <img src="13.gif" onclick="zamen(12)" name="13" width="100" height="100">
            <img src="14.gif" onclick="zamen(13)" name="14" width="100" height="100">
            <img src="15.gif" onclick="zamen(14)" name="15" width="100" height="100">
            <img src="16.gif" onclick="zamen(15)" name="16" width="100" height="100"><br> 
        </td> 
        <td>
            <div>
                <p align="center">
                <font color="#000000" size="5"><br>Передвигайте цифры (нажатием<br>кнопки мышки на кость рядом с пустой).<br></font>
                </p> 
                <p align="center">
                <input onclick="zan()" style="font-size: 30; font-weight: bold" type="button" value="Новая игра">
                <div id="sample_timer">00:00:00</div>   
                <div id="steps"></div>
                </p> 
            </div>
        </td> 
      </tr> 
    </table></center>
    </div>
</body>
</html>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 17:06
Ответы с готовыми решениями:

Игра пятнашки
Нужно вместо кнопки новая игра,чтобы было число проделанных ходов,т.е. нажимаем...

игра пятнашки
помогите пожалуста с пятнашками. Написал поле а как перемешать и потом...

Пятнашки на javascript
Уважаемые мастера JS, пожалуйста помогите советом (только в гугл не посылайте,...

Игра "Пятнашки", не работают кнопки
Доброй ночи, уважаемые программисты! Я делаю игру &quot;Пятнашки&quot; на Javascript,...

Игра Арканоид на JavaScript
Добрый день, проблема с созданием игры арканоид. Все было-бы хорошо если бы не...

11
kalabuni
Нарушитель
3242 / 2566 / 615
Регистрация: 18.04.2012
Сообщений: 7,708
24.05.2014, 04:10 2
см. Пятнашки на javascript -- проверка решаемости в строках ##28-34

и далее по теме есть изменения в коде:
-- ликвидация бага в Хроме
-- добавление возможности передвигать по 2-3 костяшки одновременно
0
QQshonOK
0 / 0 / 0
Регистрация: 23.05.2014
Сообщений: 4
25.05.2014, 00:02  [ТС] 3
Огромное вам спасибо)

Добавлено через 9 часов 53 минуты
Если кому-то интересно, вот что получилось)
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<!DOCTYPE html>
<html>
<head> 
    <title>Игра "Пятнашки"</title> 
    <meta charset="utf-8"> 
    <style>
        #sample_timer, #steps {
            display:none;
            text-align:center;
            color:#FFF;
        }
        
        #btns {
            text-align:center;
        }
    </style>
    <script>
    var m = 0;
    function hod()
    {
        m++;
        document.getElementById("steps").innerHTML = "Ходов:    " + m;
    }
    
    function igra (ev)
    {
        var e = ev || window.event, o = e.target || e.srcElement;
        if (o.tagName != 'INPUT') 
            return;
        var obj = document.getElementById('m15'), 
            btn = obj.getElementsByTagName('input');
        for (var sos = o.lang.split ('-'), j = k = 0, lj = sos.length; j < lj; j++)
           if (btn [sos [j]].value < 0) {k = 1; break}
        if (!k) return;
        btn [sos [j]].style.visibility = 'visible'; 
        btn [sos [j]].value = o.value;
        o.style.visibility = 'hidden';
        o.value = -1;
        hod();
        for (var j = 0; j < 15; j++) 
            if (btn [j].value != j + 1) 
                return;
        obj.onclick = null; 
        alert ('Головоломка решена!');
    }
    
    function simple_timer(sec, block, direction) 
    {
        var time    = sec;
        direction   = direction || false;
                 
        var hour    = parseInt(time / 3600);
        if ( hour < 1 ) hour = 0;
        time = parseInt(time - hour * 3600);
        if ( hour < 10 ) hour = '0'+hour;
     
        var minutes = parseInt(time / 60);
        if ( minutes < 1 ) minutes = 0;
        time = parseInt(time - minutes * 60);
        if ( minutes < 10 ) minutes = '0'+minutes;
     
        var seconds = time;
        if ( seconds < 10 ) seconds = '0'+seconds;
     
        block.innerHTML ="Время игры: "+hour+':'+minutes+':'+seconds;
     
        if ( direction ) {sec++; setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);} 
        else {
            sec--;
            if ( sec > 0 ) {setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);} 
            else {alert('Время вышло!');}
        }
    }
    
    function start_timer() 
    {
        var block = document.getElementById('sample_timer');
        simple_timer(0, block, true);
    }
        
    function start_game()
    {
        start_timer();
        document.getElementById('start').style.display = "none";
        document.getElementById('reset').style.display = "block";
        
        document.getElementById('sample_timer').style.display = "block";
        document.getElementById('steps').style.display = "block";
        
        (function ()
        {
            var shb = document.createElement ('input'); 
            shb.type = 'button';
            shb.style.cssText = 'height: 123px; width: 123px; font-weight: bold; font-size: 40px ';
            for (var obj = document.getElementById('m15'), btn = new Array (), j = 0; j < 16; j++)
            {
                btn [j] = obj.appendChild(shb.cloneNode (1));
                if (!((j + 1) % 4)) 
                    obj.appendChild(document.createElement('br'));
            }
            btn [j - 1].style.visibility = 'hidden'; 
            btn [j - 1].value = -1;
            var rnd = new Array (), 
                rsh = 1; 
            obj.onclick = igra;
            while (rsh % 2)
            {
                for (var j = 0; j < 15; j++) rnd [j] = j + 1;
                rnd.sort (new Function ('x', 'y', 'return Math.random () - Math.random ()'));
                for (var rsh = j = 0; j < 14; rsh += s, j++)
                    for (var s = 0, k = j + 1; k < 15; k++) 
                        if (rnd [k] < rnd [j]) 
                            s++;
            }
            for (var j = 0; j < 16; j++)
            {
                if (j < 15) 
                    btn [j].value = rnd [j];
                var lng = new Array ();
                if (j - 1 >= 0 && j % 4)       
                    lng [lng.length] = j - 1;
                    
                if (j + 1 < 16 && (j + 1) % 4) 
                    lng [lng.length] = j + 1;
                    
                if (j - 4 >= 0)                
                    lng [lng.length] = j - 4;
                    
                if (j + 4 < 16)                
                    lng [lng.length] = j + 4;
                    
                btn [j].lang = lng.sort ().join ('-');
            }
            
        }) ();
    }
    </script> 
</head> 
<body bgcolor="#69f">
    <center>
        <button id="start" type="button" style="display:block" onClick="start_game();">Начать новую игру</button>
        <button id="reset" type="button" style="display:none" onClick="location.reload();">Закончить игру</button>
    </center>
    <div id="sample_timer">00:00:00</div>   
    <div id="steps"></div>
    <center id="m15"></center>
</body>
</html>
0
kalabuni
Нарушитель
3242 / 2566 / 615
Регистрация: 18.04.2012
Сообщений: 7,708
25.05.2014, 01:16 4
а почему не реализовали передвижение 2-х-3-х одновременно?

и для #steps поменяйте управление с display = 'none|block' на visibility = 'hidden|visible'
а то страница "прыгает"
0
QQshonOK
0 / 0 / 0
Регистрация: 23.05.2014
Сообщений: 4
25.05.2014, 03:38  [ТС] 5
Я не понял, что значит передвижение 2-3, почему они должны перемещаться, если мы нажимаем только на одну ячейку? Или я не о том думаю? Во всяком случае, для сдачи, этой задачи никаких таких условий не было=)

Добавлено через 13 минут
Я правильно вас понял, страница "прыгает", когда мы первый раз делаем ход и появляется надпись "Ходов: 1"? Вы это имели ввиду? В этом случае я просто прописал в body <div id="steps">Ходов: 0</div>. И теперь надпис с самого начала на своем месте)) А что касается display = 'none|block' и visibility = 'hidden|visible' не совсем понял в чем разница, если вам не сложно, поясните пожалуйста=)

Добавлено через 1 минуту
Вот как получилось в итоге, + дополнено сообщение в случае победы=)
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!DOCTYPE html>
<html>
<head> 
    <title>Игра "Пятнашки"</title> 
    <meta charset="utf-8" /> 
    <style>
        #sample_timer, #steps {
            visibility = 'hidden'
            text-align:center;
            color:#FFF;
        }
    </style>
    <script>
    var m = 0;
    function hod()
    {
        m++;
        document.getElementById("steps").innerHTML = "Ходов:    " + m;
    }
    
    function simple_timer(sec, block, direction) 
    {
        var time    = sec;
        direction   = direction || false;
                 
        var hour    = parseInt(time / 3600);
        if ( hour < 1 ) hour = 0;
        time = parseInt(time - hour * 3600);
        if ( hour < 10 ) hour = '0'+hour;
     
        var minutes = parseInt(time / 60);
        if ( minutes < 1 ) minutes = 0;
        time = parseInt(time - minutes * 60);
        if ( minutes < 10 ) minutes = '0'+minutes;
     
        var seconds = time;
        if ( seconds < 10 ) seconds = '0'+seconds;
     
        block.innerHTML ="Время игры: "+hour+':'+minutes+':'+seconds;
     
        if ( direction ) {sec++; setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);} 
        else {
            sec--;
            if ( sec > 0 ) {setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);} 
            else {alert('Время вышло!');}
        }
    }
    
    function start_timer() 
    {
        var block = document.getElementById('sample_timer');
        simple_timer(0, block, true);
    }
    
    function igra (ev)
    {
        var tm = document.getElementById('sample_timer');
        var e = ev || window.event, o = e.target || e.srcElement;
        if (o.tagName != 'INPUT') 
            return;
        var obj = document.getElementById('m15'), 
            btn = obj.getElementsByTagName('input');
        for (var sos = o.lang.split ('-'), j = k = 0, lj = sos.length; j < lj; j++)
           if (btn [sos [j]].value < 0) {k = 1; break}
        if (!k) return;
        btn [sos [j]].style.visibility = 'visible'; 
        btn [sos [j]].value = o.value;
        o.style.visibility = 'hidden'; 
        hod();
        o.value = -1;
        for (var j = 0; j < 15; j++) 
            if (btn [j].value != j + 1) 
                return;
        obj.onclick = null; 
        alert ('Головоломка решена!\nВаше '+tm.innerHTML+'.\nКоличество ходов: '+m+'');
    }
        
    function start_game()
    {
        start_timer();
        document.getElementById('start').style.display = "none";
        document.getElementById('reset').style.display = "block";
        
        document.getElementById('sample_timer').style.display = "block";
        document.getElementById('steps').style.display = "block";
        
        (function ()
        {
            var shb = document.createElement ('input'); 
            shb.type = 'button';
            shb.style.cssText = 'height: 123px; width: 123px; font-weight: bold; font-size: 40px ';
            for (var obj = document.getElementById('m15'), btn = new Array (), j = 0; j < 16; j++)
            {
                btn [j] = obj.appendChild(shb.cloneNode (1));
                if (!((j + 1) % 4)) 
                    obj.appendChild(document.createElement('br'));
            }
            btn [j - 1].style.visibility = 'hidden'; 
            btn [j - 1].value = -1;
            var rnd = new Array (), 
                rsh = 1; 
            obj.onclick = igra;
            while (rsh % 2)
            {
                for (var j = 0; j < 15; j++) 
                    rnd [j] = j + 1;
                rnd.sort (new Function ('x', 'y', 'return Math.random () - Math.random ()'));
                for (var rsh = j = 0; j < 14; rsh += s, j++)
                    for (var s = 0, k = j + 1; k < 15; k++) 
                        if (rnd [k] < rnd [j]) 
                            s++;
            }
            for (var j = 0; j < 16; j++)
            {
                if (j < 15) 
                    btn [j].value = rnd [j];
                var lng = new Array ();
                if (j - 1 >= 0 && j % 4)       
                    lng [lng.length] = j - 1;
                    
                if (j + 1 < 16 && (j + 1) % 4) 
                    lng [lng.length] = j + 1;
                    
                if (j - 4 >= 0)                
                    lng [lng.length] = j - 4;
                    
                if (j + 4 < 16)                
                    lng [lng.length] = j + 4;
                    
                btn [j].lang = lng.sort ().join ('-');
            }
            
        }) ();
    }
    </script> 
</head> 
<body style="background:#69f">
    <center>
        <button id="start" type="button" style="display:block" onClick="start_game();">Начать новую игру</button>
        <button id="reset" type="button" style="display:none" onClick="location.reload();">Закончить игру</button>
        <div id="sample_timer">00:00:00</div>   
        <div id="steps">Ходов: 0</div>
    </center>
    <center id="m15"></center>
</body>
</html>
0
kalabuni
Нарушитель
3242 / 2566 / 615
Регистрация: 18.04.2012
Сообщений: 7,708
25.05.2014, 06:28 6
Цитата Сообщение от QQshonOK Посмотреть сообщение
Я не понял, что значит передвижение 2-3, почему они должны перемещаться, если мы нажимаем только на одну ячейку?
вы когда-нить играли в реальные пятнашки?
там одним движением пальца можно сдвинуть весь ряд из 3-х костяшек
я же написал выше, что мною уже был реализован этот вариант - посмотрите код - сразу после загрузки кликните мышью либо по левой нижней кнопке, либо по верхней правой - и увидите, как перемещаются одновременно три костяшки (а можно и по две, и по одной)
------
Цитата Сообщение от QQshonOK Посмотреть сообщение
что касается display = 'none|block' и visibility = 'hidden|visible' не совсем понял в чем разница, если вам не сложно, поясните пожалуйста
display: none не только не показывает тег, но и не оставляет под него место
а вот visibility: hidden только лишь не показывает тег (делает его невидимым, но место под него резервирует)

запустите код и всё поймёте:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<center>
<input type="button" value="Показать работу DISPLAY" onclick="document.getElementById ('DIS').style.display = 'block'; this.disabled = 1">
<input type="button" value="Показать работу VISIBILITY" onclick="document.getElementById ('VIS').style.visibility = 'visible'; this.disabled = 1">
</center>
 
<hr color="blue" size="5">
<div id="DIS" style="height: 234px; display: none">
   <p>контейнер невидим и места на странице НЕ занимает;
   <p>когда измените значение свойства display на block -- красная полоса и всё, что ниже неё прыгнут вниз на 234 пикселя</div>
<hr color="red" size="5">
<div id="VIS" style="height: 234px; visibility: hidden">
   <p>контейнер невидим, но место на странице ЗАНИМАЕТ;
   <p>когда измените значение свойства visibility на visible -- геометрически ничего не изменится
</div>
<hr color="green" size="5">
0
QQshonOK
0 / 0 / 0
Регистрация: 23.05.2014
Сообщений: 4
25.05.2014, 16:51  [ТС] 7
Спасибо большое, теперь все понятно=)
0
Dizzer123
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
20.08.2014, 09:46 8
QQshonOK, Исполнение очень понравилось, подскажите как можно вместо сообщения, что головоломка решена, отобразить картинку?

Добавлено через 26 минут
И ещё как можно сделать, чтобы фишки при начале игры, всегда были на одинаково расставлены?
0
kalabuni
Нарушитель
3242 / 2566 / 615
Регистрация: 18.04.2012
Сообщений: 7,708
20.08.2014, 11:13 9
Цитата Сообщение от Dizzer123 Посмотреть сообщение
как можно вместо сообщения, что головоломка решена, отобразить картинку?
в HTML-коде прописываете
HTML5
1
2
<img id="myPic`5" src="адрес_картинки"
     style="position: absolute; z-index: 89; top: 123px; left: 234px; display: none">
в скрипте вместо конечного alert (); пишете
Javascript
1
document.getElementById ('myPic15').style.display = '';
-------------

Цитата Сообщение от Dizzer123 Посмотреть сообщение
как можно сделать, чтобы фишки при начале игры, всегда были на одинаково расставлены?
что такое "на одинаково"?
1
Dizzer123
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
21.08.2014, 02:08 10
kalabuni,

спасибо за ответ

"на одинаково" это опечатка, я хотел сказать, чтобы расстановка фишек в начале игры была не рендом, а всегда одинаковая.
0
kalabuni
Нарушитель
3242 / 2566 / 615
Регистрация: 18.04.2012
Сообщений: 7,708
21.08.2014, 07:07 11
Лучший ответ Сообщение было отмечено Eva Rosalene как решение

Решение

в коде Пятнашки на javascript вместо строк ##41-47 пропишите нужную вам расстановку, например, так
Javascript
1
2
3
4
rnd = [12, 15, 10, 8, 
        2,  4,  3, 5,
        9,  7, 14, 1,
        6, 11, 13    ];
1
Dizzer123
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
21.08.2014, 07:13 12
kalabuni,

огромное тебе спасибо добрый человек
0
21.08.2014, 07:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 07:13

Игра на JavaScript (ваш совет)
Здравствуйте. Хочется создать простенькую игру на джава скрипт. В ней будет...

Ваша первая игра на JavaScript и Phaser (перевод)
Ваша первая игра на JavaScript и Phaser (перевод) Источник Запустить...

Ваша первая игра на JavaScript и Phaser (тема-обсуждение)
Тема для обсуждения темы http://www.cyberforum.ru/javascript/thread1815477.html...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru