Javascript通过一个函数多次写表

标签 javascript html-table

我正在尝试学习 js,因此我决定创建一些简单的十字架游戏圈。 这是代码:

(JS)

var tab = [[0,0,0],[0,0,0],[0,0,0]];
var x = 0;
var y = 0;
var xz = 0;
var yz = tab[0].length - 1;
var xu = 1;
var yu = 1;
var val = '';
var gd = 0;
var body = document.body;
var div = document.getElementById("content");
var tbl = document.createElement('table');
tbl.border = '1px';
tbl.style.width = '75px';
div.insertAdjacentHTML('beforeend', 'Actually chosen coordinates: ' + xu + ',' + yu); //Easter egg for smartest- why Quokka plugin in VS Code is returning '​​Cannot read property 'insertAdjacentHTML' of null'. When none of things used in this line is null. :)

function go() {
    //if (tab[xu][yu] == 0) {
        //system to secure writing on already used cells
        get();
        var yu = 1;
        var xu = 1;
    //} else {
        //div.insertAdjacentHTML('beforeend', 'This cell is used.');
    //}
    draw();
    var x = 0;
    var y = 0;
    var xz = 0;
    var yz = tab[0].length - 1;
    var val = '';
}

function get() {
    tab[xu][yu] = 2;
    if(gd < 5){
        do{
            x = Math.floor(Math.random()*tab.length);
            y = Math.floor(Math.random()*tab[0].length);
        }while(tab[x][y]!=0)
        gd++;
        tab[x][y] = 1;
    }else{
        document.write('<h3>GAME OVER</h3>');
    }
}

function draw() {
    div.innerHTML = '<p>Remember U are X.</p>';
    while (xz < tab.length) {
        var tr = tbl.insertRow();
        while (yz >= 0) {
            switch (tab[xz][yz]) {
                case 0:
                    val = '.';
                    break;

                case 1:
                    val = 'O';
                    break;

                case 2:
                    val = 'X';
                    break;
            }
            var td = tr.insertCell();
            td.appendChild(document.createTextNode(val));
            yz--;
        }
        yz = tab[0].length - 1;
        xz++;
    }
    div.appendChild(tbl);
    div.insertAdjacentHTML('beforeend', 'Actually chosen coordinates: ' + xu + ',' + yu);
}


function drawt() {
    div.innerHTML = '<p>Remember U are X.</p>';
    while (xz < tab.length) {
        var tr = tbl.insertRow();
        while (yz >= 0) {
            switch (tab[xz][yz]) {
                case 0:
                    val = '.';
                    break;

                case 1:
                    val = 'O';
                    break;

                case 2:
                    val = 'X';
                    break;
            }
            var td = tr.insertCell();
            td.appendChild(document.createTextNode(val));
            yz--;
        }
        yz = tab[0].length - 1;
        xz++;
    }
    div.appendChild(tbl);
    div.insertAdjacentHTML('beforeend', 'Actually chosen coordinates: ' + xu + ',' + yu);
}



function Right() {
    if (xu < 2) {
        xu++;
    } else {
        div.insertAdjacentHTML('beforeend', 'Nope');
    }
    draw();
    var x = 0;
    var y = 0;
    var xz = 0;
    var yz = tab[0].length - 1;
    var val = '';
}


function Left() {
    if (xu > 0) {
        xu--;
    } else {
        div.insertAdjacentHTML('beforeend', 'Nope');
    }
    draw();
    var x = 0;
    var y = 0;
    var xz = 0;
    var yz = tab[0].length - 1;
    var val = '';
}


function Up() {
    if (yu < 2) {
        yu++;
    } else {
        div.insertAdjacentHTML('beforeend', 'Nope');
    }
    draw();
    var x = 0;
    var y = 0;
    var xz = 0;
    var yz = tab[0].length - 1;
    var val = '';
}


function Down() {
    if(yu > 0){
        yu--;
    } else {
        div.insertAdjacentHTML('beforeend', 'Nope');
    }
    draw();
    var x = 0;
    var y = 0;
    var xz = 0;
    var yz = tab[0].length - 1;
    var val = '';
}

(HTML)

<!DOCTYPE html>
<head>
    <title>karta</title>
</head>
<body>
    <div id="content">
        <p>Jesteś X.</p>
        <table border = '1px' width = '75px'>
            <tr>
                <td>.</td>
                <td>.</td>
                <td>.</td>
            </tr>
            <tr>
                <td>.</td>
                <td>.</td>
                <td>.</td>
            </tr>
            <tr>
                <td>.</td>
                <td>.</td>
                <td>.</td>
            </tr>
        </table>
    </div>
    <a id="myLink" href="#" onclick="go()">Accept</a><br>
    <a id="myLink" href="#" onclick="Right()">Right</a><br>
    <a id="myLink" href="#" onclick="Left()">Left</a><br>
    <a id="myLink" href="#" onclick="Up()">Up</a><br>
    <a id="myLink" href="#" onclick="Down()">Down</a>
    <script src = kod.js></script>
</body>
</html>

我发现要写表格(我制作 3x3 表格,只在单元格中写“X”和“O”)我需要制作类似函数绘制的东西。

所以它奏效了……第一次。当我再次使用此函数时,它只是不绘制任何东西(我检查了选项卡值已更改),但是 draw() 绘制了相同的东西或者什么也没做。当然,我对如何显示此表的所有想法持开放态度,但仍然想知道什么不起作用。

可能好主意是使用与我制作当前表格相同的方式并向所有单元格添加 ID,而不是仅向这些单元格添加值(但这可能只是疲倦的初学者的一些愚蠢想法,抱歉我没有自己检查但是不管怎样,我想先问问这件事,所以...)。

最佳答案

从实用的 Angular 来看,这似乎并不是您真正想要使用 JS 的目的。

我会为带有 X、O 或什么都没有的元素制作一些 css 类。

然后把轮到谁的状态存储在JS中。当用户点击一个元素时,为该回合向该元素添加适当的类。

你也可以制作一个获胜检查器函数来尝试自动计算谁赢了

关于Javascript通过一个函数多次写表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54337338/

相关文章:

javascript - 背景动画在 JQuery 1.4.1 中不起作用

javascript - Bootstrap 的 slider 添加和删除 jQuery

html - 将 html TD 宽度设置为字符数

html - 如何根据下一个 sibling 的高度自动调整DIV高度?

html - 将 <td> 中的文本输入与 twitter bootstrap 中的右侧对齐?

Javascript/PHP,使用文本文件作为数据库,将内容组织成一个数组表

javascript - Google 图表在 mozilla 中无法使用

javascript - 如何读取当前页面的 HTML 以从 Chrome 扩展程序访问元素?

javascript - 我有一个带有随机显示标记的 SVG map 。我可以准确地放置它们以告诉 SVG map 上的实际位置吗?

jQuery 数据表检查