您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
2048 level editor
- // ==UserScript==
- // @name 2048 grid edit
- // @namespace http://tampermonkey.net/
- // @version 0.2
- // @description 2048 level editor
- // @author pigPen
- // @match http*://play2048.co/*
- // @icon https://www.google.com/s2/favicons?domain=play2048.co
- // @grant none
- // ==/UserScript==
- (function() {
- function c(n){
- let s = n;
- let x = 0
- while (n > 2){
- s+=n*2;
- n/=2;
- x+=1
- }
- s+=x*2.4;
- return s;
- }
- 'use strict';
- if (location.pathname == "/edit"){
- let grid = JSON.parse( localStorage.getItem("gameState")).grid.cells;
- document.querySelector(".container").remove();
- let center = document.createElement("center");
- let header = document.createElement("h1");
- header.innerHTML = "?";
- header.setAttribute("id", "score");
- center.appendChild(header);
- let table = document.createElement("table");
- for (let x = 0; x < 4; x++){
- let row = document.createElement("tr");
- for (let y = 0; y < 4; y++){
- let thisslot = grid[y][x];
- let slot = document.createElement("td");
- let text = document.createElement("textarea");
- if (thisslot == undefined)
- text.value = "";
- else
- text.value = thisslot.value
- text.style.width = "100px";
- text.style.height = "100px";
- text.style.resize = "none";
- text.style.fontSize = "20px";
- text.style.textAlign = "center";
- //text.setAttribute("maxlength", 6);
- text.setAttribute("id", y+"x"+x)
- text.oninput = ()=>{
- let score = 0;
- for (let tarr of document.querySelectorAll("textarea"))
- if (!isNaN(parseInt(tarr.value)))
- score+=c(parseInt(tarr.value));
- document.querySelector("#score").innerHTML = "Score: " + score;
- };
- //text.setAttribute("readonly", true);
- slot.appendChild(text);
- row.appendChild(slot);
- }
- table.appendChild(row);
- }
- center.appendChild(table);
- let booleanAttrs = [["Is won", "won"], ["Is over", "over"], ["Keep Playing", "keepPlaying"]];
- for (let i = 0; i<booleanAttrs.length; i++){
- center.appendChild(document.createElement("br"));
- let label = document.createElement("label");
- label.setAttribute("for", booleanAttrs[i][1]);
- label.innerHTML = booleanAttrs[i][0];
- center.appendChild(label);
- let check = document.createElement("input");
- check.setAttribute("id", booleanAttrs[i][1]);
- check.setAttribute("type", "checkbox");
- check.checked=JSON.parse( localStorage.getItem("gameState"))[booleanAttrs[i][1]];
- center.appendChild(check);
- document.querySelector("body").appendChild(center);
- document.querySelector("textarea").oninput();
- }
- center.appendChild(document.createElement("br"));
- let btn = document.createElement("button");
- btn.classList.add("btn");
- btn.classList.add("btn-primary");
- btn.innerHTML = "Save";
- btn.style.fontSize = "20px";
- center.appendChild(btn);
- btn.onclick = ()=>{
- let ngrid = [];
- let newfile = JSON.parse( localStorage.getItem("gameState"))
- for (let y = 0; y < 4; y++){
- let colum = [];
- for (let x = 0; x < 4; x++){
- let score = parseInt(document.getElementById(""+y+"x"+x).value);
- if (isNaN(score))
- colum.push(undefined);
- else
- colum.push({position:{x:y, y:x}, value:score});
- }ngrid.push(colum);
- }
- newfile.grid = {size: 4,cells: ngrid};
- newfile.score = parseInt(document.querySelector("h1").innerHTML.split(" ")[1]);
- console.log(JSON.stringify(newfile));
- for (let attr of booleanAttrs){
- newfile[attr[1]] = document.getElementById(attr[1]).checked;
- }
- console.log(JSON.stringify(newfile));
- localStorage.setItem("gameState", JSON.stringify(newfile));
- };
- btn = document.createElement("button");
- btn.classList.add("btn");
- btn.classList.add("btn-primary");
- btn.innerHTML = "Reset";
- btn.style.fontSize = "20px";
- center.appendChild(btn);
- btn.onclick = ()=>{
- if (confirm("Are you sure you wish to reset?")){
- localStorage.removeItem("gameState");
- history.back()
- // location.reload();
- }
- }
- }
- if (location.pathname == "/"){
- localStorage.removeItem = (r)=>{};
- let center = document.createElement("center");
- let span = document.createElement("button");
- span.classList.add("pp-donate");
- span.style.fontSize = "25px";
- span.innerHTML = "<a href='/edit'>Save editor</a>";
- center.appendChild(span);
- document.querySelector("footer.links").appendChild(document.createElement("br"));
- document.querySelector("footer.links").appendChild(document.createElement("br"));
- document.querySelector("footer.links").appendChild(document.createElement("br"));
- document.querySelector("footer.links").appendChild(document.createElement("br"));
- document.querySelector("footer.links").appendChild(center);
- `
- span = document.createElement("button");
- span.classList.add("pp-donate");
- span.style.fontSize = "25px";
- span.innerHTML = "Save";
- document.querySelector(".game-message").appendChild(span);
- `
- }
- })();