Как нарисовать сетку на холсте со случайными препятствиями в каждом квадрате?

#javascript #canvas

#javascript #холст

Вопрос:

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

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

 var canvas = document.getElementById('canvas');
var c = canvas.getContext('2d');
var answer;
var cell = [10][10];
var history = new Array();
var cellString = [[" . "," . "," . "," / ", " \ "]];
var guessed = 0, total;
var random = Math.random() ;
function setup() {
    draw(10,10);
    drawScreen();
}


var bafflesPlaced = function(){
    this.total = 5;
    var placed = 0;

    while(placed < total){
        this.x = random(10);
        this.y = random(10);
        var type = random(2)   1;
        if(cell[x][y] == 0){
            cell[x][y] = type;
            placed  ;
        }
    }

    var choice = document.getElementById('yourOption');
    choice.innerHTML = "";
    while(true){
        drawScreen(false);
        choice = prompt("n1.) Shoot 2.) Guess 3.) Quit: ");
        alert(choice);
        if (choice == 1) shoot();
        if (choice == 2) guess();
        if (choice == 3) break;

    }

}

var guess = function(){
    drawScreen(true);
    var type;
    var x = 0, y = 0;
    x.innerHTML = "";
    y.innerHTML = "";

    var answer = document.getElementById('yourAnswer');
    while(true){
        answer = prompt("please enter coordinate (0-9): ");
        alert(answer);
        if (x >= 0 amp;amp; x <= 9) break;
    }

    while(true){
        answer = prompt("please enter coordinate (0-9): ");
        alert(answer);
        if (y >= 0 amp;amp; y <= 9) break;
    }
    answer = prompt("Please enter type (/ or \): ");
    alert(answer);
    var choice = type == '/' ? 1 : 2;
    if ($cell[x][y] == choice){
        alert("nCorrect!");
        $cell[x][y]  = 2;
        guessed  ;
        alert("nCorrect guesses: "   guessed);

        if (guessed == total){
            alert("nYou found all of the baffles! Congratualtions!");
            //window.close();
            document.location.reload();
            clearInterval(interval);
        }
    }
    else alert("nFalse!");

    var shoot = function(){
        choice = prompt("nEnter entry point: 0-39");
        alert(choice);
        var choice, x = 0, y = 0, xd = 0, yd = 0;

        while(true){
            if(choice >= 0 amp;amp; choice <= 39) break;
            choice = prompt("Please enter a number from 0-39: ");
            alert(choice);
        }

        var side = choice / 10;
        var where = choice % 10;
        switch (side){
            case 0:
                y = -1;
                xd = 0;
                yd = 1;
                break;
            case 1:
                y = where; 
                x = 10;
                xd = -1;
                yd = 0;
                break;
            case 2:
                x = 9 - where;
                y = 10;
                xd = 0;
                yd = -1;
                break;
            case 3: 
                x = -1;
                y = 9 - where;
                xd = 1;
                yd = 0; 
        }

        var t;
        while(true){
            //move one
            x  = xd;
            y  = yd; 
            if (x == -1 || x == 10 || y == -1 || y ==10) break;
            //baffle: /
            if (cell[x][y] == 1 || cell[x][y] == 3){
                t = xd; 
                xd = -yd;
                yd = -t;

            }
            //baffle: /
            if (cell[x][y] == 2 || cell[x][y] == 4){
                t = xd;
                xd = yd;
                yd = t;
            }

        }
        exit = draw(x,y);
        alert("Exit at"   exit   "n");
        history.add(console.log("%d > %s", choice, exit));

    }

}

var draw = function(x,y){
    c.empty = " ";
    if (x == -1){
        if (y == -1 || y == 10) return c.empty;
        return (c(c.empty, 39-y));
    }
    if (x == 10){
        if (y == -1 || y == 10) return c.empty;
        return (c(c.empty, y   10));
    }
    if (y == -1){
        return (c(c.empty, x));
    }
    if (x == 10){
        if (y == -1 || y == 10) return empty;
        return (c(c.empty, 29 - x));
    }
    return cellString[cell[x][y]];

}

var drawScreen = function(guess){
    //var canvas = document.getElementById("canvas");
    //var c = canvas.getContext("2d");
    c.fillStyle="grey";
    c.fillRect(0,0, canvas.width, canvas.height);
    c.stroke(0);
    c.strokeWeight(1);
    c.lineTo(x, 0, x, canvas.height);
    c.lineTo(0, y, canvas.width, y);

    if (guess){
        for (var y = -1; y < 10; y  = canvas.height / 10){
            for (var y = -1; y < 10; x  = canvas.width / 10){
                /*
                c.stroke(0);
                c.strokeWeight(1);
                c.line(this.x, 0, this.x, this.height);
                c.line(0, this.y, this.width, y);*/
                if ( y == -1){
                    if (x > -1){
                        console.log(" %d", x);
                    }
                    else
                    document.print(" ");
                } else if ( x == -1){
                    if (y > -1) 
                        console.log(" %d", y);
                } else
                 draw(x,y);
            }
            return;

        }
    } else {
        for (var y = -1; y <= 10; y  = canvas.height / 10){
            for (var x = -1; x <= 10; x  = canvas.width / 10){
                draw(x,y);
            }
            for ( var h = y   1; h < 100; h  =12){
                if (h < history.length()) document.print("t"   history.get(h)   "t");
            }
        }return;
    }
}
setup();
  

Я хочу иметь сетку размером 10X10 с номерами 0-39 по бокам и иметь скрытые препятствия, размещенные в сетке, которые не видны пользователю, если они не сделали правильное предположение в этом конкретном месте.

Комментарии:

1. «Я не могу заставить игру работать» неясно. Игра не запускается? Или вести себя не так, как предполагалось? Пожалуйста, будьте более конкретны

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