JS [ OTV4 ] Сапёр

  • 258
  • 140
Левая кнопка мыши - Откопать бомбу
Колёсико - Поставить флаг
Правая кнопка мыши - снять флаг

JavaScript:
var TILE_STATUSES = {
    HIDDEN: "hidden",
    MINE: "mine",
    NUMBER: "number",
    MARKED: "marked"
}

function createBoard(boardSize, numberOfMines) {
    const board = new Array;
    const minePositions = getMinePositions(boardSize, numberOfMines)
    for(var x = 0; x < boardSize; x++) {
        const row = new Array;
        for(var y = 0; y < boardSize; y++) {
            const status = TILE_STATUSES["HIDDEN"]

            const tile = {
                status, color: [186, 186, 186, 255], color2: [115, 115, 115, 255], x, y, mine: minePositions.some(positionMatch.bind(null, {x, y}))
            }

            row.push(tile)
        }

        board.push(row)
    }

    return board
}

function getMinePositions(boardSize, numberOfMines) {
    const positions = new Array;

    while(positions.length < numberOfMines) {
        const position = {
            x: randomNumber(boardSize), y: randomNumber(boardSize)
        }

        if(!positions.some(positionMatch.bind(null, position))) {
            positions.push(position)
        }
    }

    return positions
}

var cache = new Object
var chislo = 0;

function revealTile(board, tile) {
    var count = 0
    if(tile.status !== TILE_STATUSES["HIDDEN"]) return

    if(tile.mine) {
        tile.status = TILE_STATUSES["MINE"];
        return;
    }

    tile.status = TILE_STATUSES["NUMBER"]
    const aT = nearbyTiles(board, tile)
    const mines = aT.filter(function(t) {
        if(t.mine == true) count++
    })

    cache[chislo++] = {
        x: tile.x * 25,
        y: tile.y * 25,
        count: count == 0 ? "" : count++
    }
}

function positionMatch(a, b) {
    return a.x === b.x && a.y === b.y
}

function randomNumber(size) {
    return Math.floor(Math.random() * size)
}

function nearbyTiles(board, tile) {
    const tiles = new Array

    for(var xOffset = -1; xOffset <= 1; xOffset++) {
        for(var yOffset = -1; yOffset <= 1; yOffset++) {
            if(board[tile.x + xOffset] == undefined || board[tile.x + xOffset][tile.y + yOffset] == undefined) continue;
            const tile2 = board[tile.x + xOffset][tile.y + yOffset]
            tiles.push(tile2)
        }
    }

    return tiles
}

var screen = Render.GetScreenSize()
UI.AddSubTab(["Visuals", "SUBTAB_MGR"], "MineSweeper")
UI.AddSliderInt(["Visuals", "MineSweeper", "MineSweeper"], "Position X", 5, screen[0])
UI.AddSliderInt(["Visuals", "MineSweeper", "MineSweeper"], "Position Y", 5, screen[1])
UI.AddCheckbox(["Visuals", "MineSweeper", "MineSweeper"], "Hardcore Mode (RageQuit On bomb)")

const BOARD_SIZE = 10
const NUMBER_OF_MINES = 10;
var breakGame = false
var board = createBoard(BOARD_SIZE, NUMBER_OF_MINES);
var cache = [0, 0]; var drg = 0
var CursorBox = function(mouse_pos, x, y, x2, y2) { return (mouse_pos[0] > x) && (mouse_pos[1] > y) && (mouse_pos[0] < x2) && (mouse_pos[1] < y2) }
function StringShadow(x, y, centered, text, color, font) {
    Render.String(x - 1, y - 1, centered, text, [0, 0, 0, color[3]], font)
    Render.String(x + 1, y - 1, centered, text, [0, 0, 0, color[3]], font)
    Render.String(x - 1, y + 1, centered, text, [0, 0, 0, color[3]], font)
    Render.String(x + 1, y + 1, centered, text, [0, 0, 0, color[3]], font)
    Render.String(x, y, centered, text, color, font)
}
function Drag(pos, x, y, x2, y2) {
    if(Input.IsKeyPressed(0x01)) {
        if(CursorBox(pos, x, y, x2, y2) && drg == 0) {
            cache[0] = x - pos[0]
            cache[1] = y - pos[1]
            drg = 1
        }
    }
    if (!Input.IsKeyPressed(0x01)) drg = 0
    if(UI.IsMenuOpen() > 0 && drg == 1) {
        UI.SetValue(["Visuals", "MineSweeper", "MineSweeper", "Position X"], pos[0] + cache[0])
        UI.SetValue(["Visuals", "MineSweeper", "MineSweeper", "Position Y"], pos[1] + cache[1])
    }
}

function draw() {
    if(!UI.IsMenuOpen()) return;
    var x_pos = UI.GetValue(["Visuals", "MineSweeper", "MineSweeper", "Position X"]);
    var y_pos = UI.GetValue(["Visuals", "MineSweeper", "MineSweeper", "Position Y"]);
    Drag(Input.GetCursorPosition(), x_pos, y_pos, x_pos + (25 * BOARD_SIZE + 5), y_pos + 40)
    var font = Render.GetFont("Verdanab.ttf", 12, true)
    Render.FilledRect(x_pos, y_pos, 25 * BOARD_SIZE + 5, 25 * BOARD_SIZE + 40, [25, 25, 25, 255])
    StringShadow(x_pos + 5, y_pos + 5, 0, "MineSweeper", [255, 255, 255, 255], font)

    if(breakGame){
        if(UI.GetValue(["Visuals", "MineSweeper", "MineSweeper", "Hardcore Mode (RageQuit On bomb)"])) {
            Cheat.ExecuteCommand("quit")
        }
        StringShadow(x_pos + 15, y_pos + (25 * BOARD_SIZE) / 2, 0, "You lost!\npress enter to play again!", [255, 255, 255, 255], font)
        if(Input.IsKeyPressed(0x0D)) {
            breakGame = false
            chislo = -1
            board = createBoard(BOARD_SIZE, NUMBER_OF_MINES)
        }

        return
    }

    board.forEach(function(row) {
        row.forEach(function(tile) {
            if(CursorBox(Input.GetCursorPosition(), x_pos + 5 + tile.x * 25, y_pos + 40 + tile.y * 25, x_pos + 5 + tile.x * 25 + 20, y_pos + 40 + tile.y * 25 + 20) && Input.IsKeyPressed(0x04) && tile.status !== "marked") {
                tile.status = "marked"
            }

            if(CursorBox(Input.GetCursorPosition(), x_pos + 5 + tile.x * 25, y_pos + 40 + tile.y * 25, x_pos + 5 + tile.x * 25 + 20, y_pos + 40 + tile.y * 25 + 20) && Input.IsKeyPressed(0x02) && tile.status == "marked") {
                tile.status = "hidden"
            }

            switch (tile.status) {
                case TILE_STATUSES["HIDDEN"]:
                    tile.color = [186, 186, 186, 255]
                    tile.color2 = [115, 115, 115, 255]
                break;

                case TILE_STATUSES["NUMBER"]:
                    tile.color = [115, 115, 115, 255]
                    tile.color2 = [186, 186, 186, 255]
                break;

                case TILE_STATUSES["MINE"]:
                    tile.color = [255, 105, 105, 255]
                    tile.color2 = [115, 115, 115, 255]
                break;

                case TILE_STATUSES["MARKED"]:
                    tile.color = [255, 246, 120, 255]
                    tile.color2 = [115, 115, 115, 255]
                break;
            }
          
            Render.FilledRect(x_pos + 5 + tile.x * 25, y_pos + 40 + tile.y * 25, 20, 20, tile.color)
            Render.Rect(x_pos + 5 + tile.x * 25, y_pos + 40 + tile.y * 25, 20, 20, tile.color2)
      
            if(CursorBox(Input.GetCursorPosition(), x_pos + 5 + tile.x * 25, y_pos + 40 + tile.y * 25, x_pos + 5 + tile.x * 25 + 20, y_pos + 40 + tile.y * 25 + 20) && Input.IsKeyPressed(0x01)) {
                revealTile(board, tile)
                if(tile.mine) {
                    breakGame = true
                }
            }
        })
    })

    for(var i = 0; i < chislo; i++) {
        Render.String(x_pos + 9 + cache[i].x, y_pos + 35 + cache[i].y, 0, cache[i].count.toString(), [255, 255, 255, 255], 3)
    }
}

Cheat.RegisterCallback("Draw", "draw")
 
Последнее редактирование:
Спасибо большое
 
  • 202
  • 78
слава богу что это дает понять что тот кто купил эту хуйню на голову ебанутый
 
Последнее редактирование модератором:
  • 22
  • 1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
лучше бы какие нибудь нормальные аа накинул чем это
 
Активность
Пока что здесь никого нет
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше...