Как сделать, чтобы класс if ничего не делал, если в прямоугольнике ничего не написано? - PullRequest
0 голосов
/ 09 февраля 2020

Итак, я делаю Ti c Ta c Toe, и я сделал так, чтобы при нажатии на пустые прямоугольники (плитки) на плитку наносилась метка X или O, но если плитка помечена (не пустой) Я хочу, чтобы код ничего не писал.

Вот так выглядит фрагмент кода:

 if (!this.empty ()) {
        exit ();
    }

Проблема в том, что когда я нажимаю на плитку с меткой, программа полностью останавливается, и я больше не вижу X или O при нажатии на пустую плитку. Есть ли альтернатива для выхода (); что не делает этого?

Вот полный код (этот код на самом деле не мной, это практика из KhanAcademy): https://www.khanacademy.org/computing/computer-programming/programming-games-visualizations/memory-game/pc/challenge-tic-tac-toe

var playerTurn = 0;
var NUM_COLS = 3;
var NUM_ROWS = 3;
var SYMBOLS =["X","O"];
var tiles = [];

var checkWin = function() {

};

var Tile = function(x, y) {
    this.x = x;
    this.y = y;
    this.size = width/NUM_COLS;
    this.label = "";
};

Tile.prototype.draw = function() {
    fill(214, 247, 202);
    strokeWeight(2);
    rect(this.x, this.y, this.size, this.size, 10);
    textSize(100);
    textAlign(CENTER, CENTER);
    fill(0, 0, 0);
    text(this.label, this.x+this.size/2, this.y+this.size/2);
};

Tile.prototype.empty = function() {
    return this.label === "";
};

Tile.prototype.onClick = function() {
    // If the tile is not empty, exit the function
    if (!this.empty ()) {
        exit();
    }
    // Put the player's symbol on the tile

        this.label = SYMBOLS[playerTurn];

    // Change the turn
    playerTurn ++;
    if (playerTurn >= 1) {
        playerTurn = 0;
    }
};

Tile.prototype.handleMouseClick = function(x, y) {
    // Check for mouse clicks inside the tile
    if (x >= this.x && x <= this.x + this.size &&
    y >= this.y && y <= this.y + this.size)
    {
        this.onClick();
    }
};

for (var i = 0; i < NUM_COLS; i++) {
    for (var j = 0; j < NUM_ROWS; j++) {
        tiles.push(new Tile(i * (width/NUM_COLS-1), j * (height/NUM_ROWS-1)));
    }
}

var drawTiles = function() {
    for (var i in tiles) {
        tiles[i].draw();
    }
};

mouseReleased = function() {
    for (var i in tiles) {
        tiles[i].handleMouseClick(mouseX, mouseY);
    }
};

draw = function() {
    background(143, 143, 143);
    drawTiles();

};

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Хорошо, я решил это косвенно xD

Что я сделал, так это изменил

Tile.prototype.onClick = function() {
    // If the tile is not empty, exit the function
    if (!this.empty ()) {
        exit();
    }
    // Put the player's symbol on the tile

        this.label = SYMBOLS[playerTurn];

    // Change the turn
    playerTurn ++;
    if (playerTurn >= 1) {
        playerTurn = 0;
    }
};

на

Tile.prototype.onClick = function() {
    // If the tile is not empty, exit the function
    if (this.empty ()) {
        // Put the player's symbol on the tile
        this.label = SYMBOLS[0];
        SYMBOLS.reverse();
    }
};

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

Да, я знаю, что это было глупо, но, по крайней мере, теперь это решено.

0 голосов
/ 09 февраля 2020

Функция exit не является родной функцией для javascript. Это ничего не значит в этом контексте, так как нигде не определено. Вы можете использовать слово return, чтобы завершить выполнение функции - она ​​делает то, что, я думаю, вы пытаетесь выполнить sh с exit()


Tile.prototype.onClick = function() {
    // If the tile is not empty, exit the function
    if (!this.empty ()) {
        return
    } else {
    // Put the player's symbol on the tile

        this.label = SYMBOLS[playerTurn];

    // Change the turn

    playerTurn ++;
    if (playerTurn >= 1) {
        playerTurn = 0;
    }

  }

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...