Как проверить Tic-Tac-Toe Winner - PullRequest
0 голосов
/ 10 апреля 2011

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

ВНУТРЕННЕЕ ТЕЛО:

<body>
    </table>

    <table id="matrix" border="1">
        <tr>
            <td class="cellCSS">
                <img alt="Click Here" class="imageCSS" onclick="imageClicked(this,0,0)"/>
            </td>
            <td class="cellCSS">
                <img alt="Click Here" class="imageCSS" onclick="imageClicked(this,0,1)"/>
            </td>
            <td class="cellCSS">
                <img alt="Click Here" class="imageCSS" onclick="imageClicked(this,0,2)"/>
            </td>
        </tr>
        ...
    </table>
</body>

И это соответствующая часть функции imageClicked:

...
same = false;
var r = 0;
tbl = document.getElementById("matrix");
//alert(tbl.rows.length);

for(r = 0; r < tbl.rows.length; r++) {
    // alert('Bob');
    var _tempmg = tbl.rows[r].cells[col].childNodes[0].src;
    alert(_tempmg);
    if (!_tempmg) break;
    if (_img.src != _tempmg) break;
    same = true;
}

if (r == tbl.rows.length && same) {
    alert(_img.src + "won");
    return;
}

same = false;
...

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

Вы должны включить немного больше функции imageClicked . Я предполагаю, что это начинается:

function imageClicked(element, row, col) {

и в вашем опубликованном коде:

same = false;

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

var r = 0;

Нет необходимости инициализировать r здесь (т. Е. Присваивать ему значение), если вы делаете это в цикле.

tbl = document.getElementById("matrix");

for(r = 0; r < tbl.rows.length; r++) {
    var _tempmg = tbl.rows[r].cells[col].childNodes[0].src;

    if (!_tempmg) break;

В вашем html вы не присвоили значение атрибуту image src, поэтому я бы подумал, что на этом этапе вы назначите ноль или крестик в зависимости от того, кто на него нажал. Назначив соответствующее изображение, я бы выполнил следующую строку.

    if (_img.src != _tempmg) break;
    same = true;

Возможно, было бы яснее добавить условие к выражению for (...), например:

for(r = 0; r < tbl.rows.length && !same; r++) {

Теперь вместо перерыва вы можете использовать:

    if (_img.src == _tempmg) same = true;

.

}

if (r == tbl.rows.length && same) {
    alert(_img.src + "won");
    return;
}

same = false;

Мне нужно увидеть больше функции imageClicked , чтобы понять, почему она не работает.

0 голосов
/ 10 апреля 2011

Ваша проблема в том, что r == tbl.rows.length всегда ложно, потому что цикл for повторяется, пока r

...