JavaScript 增量游戏间隔循环

标签 javascript loops intervals

我正在制作一个非常简单的增量游戏,但我找不到实现升级的好方法。

我想制作一个按钮,使光标循环速度更快。基本上,每秒每个光标都会获得 1 个硬币。升级后应该可以使每个循环花费的毫秒数更少。

我正在尝试使用 window.setInterval 执行此操作,但我不知道如何使其可变,我的方法不起作用。

var coins = 0;

function coinClick(number){
	coins = coins + number;
	document.getElementById("coins").innerHTML = coins;
}

var cursors = 0;
var cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
var nextCost = Math.floor(10 * Math.pow(1.1,cursors));
var cursorUpgrades = 0;
var cursorUpgradeCost = Math.floor(100 * Math.pow(2,cursorUpgrades));

function buyCursor(){
	var cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
	if(coins >= cursorCost){
		cursors = cursors + 1;
		coins = coins - cursorCost;
		document.getElementById('cursors').innerHTML = cursors;
		document.getElementById('coins').innerHTML = coins;
	};
	var nextCost = Math.floor(10 * Math.pow(1.1,cursors));
	document.getElementById('cursorCost').innerHTML = nextCost;
};

function buyCursorUpgrade(){
	if(coins >= cursorUpgradeCost){
		cursorUpgrades = cursorUpgrades + 1;
		coins = coins - cursorUpgradeCost;
		document.getElementById('cursorUpgrades').innerHTML = cursorUpgrades;
		document.getElementById('coins').innerHTML = coins;
	};
	var nextUpgradeCost = Math.floor(100 * Math.pow(2,cursorUpgrades));
	document.getElementById('cursorUpgradeCost').innerHTML = nextUpgradeCost;
};

window.setInterval(function(){
	coinClick(cursors);
}, Math.round(1000 - 100 * cursorUpgrades));

function save(){
	localStorage.setItem("coins",JSON.stringify(coins));
	localStorage.setItem("cursors",JSON.stringify(cursors));
	localStorage.setItem("cursorCost",JSON.stringify(cursorCost));
	console.log('Saved.');
};

function load(){
	console.log('Loaded.');
	coins = JSON.parse(localStorage.getItem('coins'));
	cursors = JSON.parse(localStorage.getItem('cursors'));
	cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
	document.getElementById('cursors').innerHTML = cursors;
	document.getElementById('coins').innerHTML = coins;
	document.getElementById('cursorCost').innerHTML = cursorCost;
};

function resetgame(){
	coins = 0;
	cursors = 0;
	cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
	document.getElementById('cursors').innerHTML = cursors;
	document.getElementById('coins').innerHTML = coins;
	document.getElementById('cursorCost').innerHTML = cursorCost;
};

var savegamecoins = JSON.parse(localStorage.getItem("coins"));
var savegamecursors = JSON.parse(localStorage.getItem("cursors"));

if (coins == 0 && cursors == 0) {
		coins = savegamecoins;
		cursors = savegamecursors;
		cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
		document.getElementById('cursors').innerHTML = cursors;
		document.getElementById('coins').innerHTML = coins;
		document.getElementById('cursorCost').innerHTML = cursorCost;
};
<html>
	<head>
		<link rel="stylesheet" type="text/css" href="interface.css" />
	</head>
	<body>
		<button onClick="coinClick(1)">Click Me!</button>
		<br />
		Coins: <span id="coins">0</span>
		<br />
		<button onClick="buyCursor()">Buy cursor</button>
		<br />
		Cursors: <span id="cursors">0</span>
		<br />
		Cursor Cost: <span id="cursorCost">10</span>
		<br />
		<button onClick="buyCursorUpgrade()">Buy Cursor Upgrade</button>
		<br />
		Cursor Upgrades: <span id="cursorUpgrades">0</span>
		<br />
		Cursor Upgrade Cost: <span id="cursorUpgradeCost">100</span>
		<br />
		<button onClick="save()">Save Game</button>
		<br />
		<button onClick="load()">Load Game</button>
		<br />
		<button onClick="resetgame()">Reset Game</button>
		<br />
		<script type="text/javascript" src="main.js"></script>
	</body>
</html>

最佳答案

您的 js 代码中有几个错误。

  • 您永远不会更改coins的值:coins + number(在调用coinClick(cursors)时开始 coins = 0number=0 这解释了为什么您显示的硬币没有改变。
  • 如果您希望 setInterval 的计时器是可变的,您可以考虑使用 setTimeout 来代替,正如解释的那样 here .

以下是我在您的 js 代码中所做的一些更改

var coins = 0;

function coinClick(number){
    //I made a change here so as the variable "coins" could vary
    coins = coins + 1;
    document.getElementById("coins").innerHTML = coins;
}

var cursors = 0;
var cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
var nextCost = Math.floor(10 * Math.pow(1.1,cursors));
var cursorUpgrades = 0;
var cursorUpgradeCost = Math.floor(100 * Math.pow(2,cursorUpgrades));

function buyCursor(){
    var cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
    if(coins >= cursorCost){
        cursors = cursors + 1;
        coins = coins - cursorCost;
        document.getElementById('cursors').innerHTML = cursors;
        document.getElementById('coins').innerHTML = coins;
    };
    var nextCost = Math.floor(10 * Math.pow(1.1,cursors));
    document.getElementById('cursorCost').innerHTML = nextCost;
};

function buyCursorUpgrade(){
    if(coins >= cursorUpgradeCost){
        cursorUpgrades = cursorUpgrades + 1;
        coins = coins - cursorUpgradeCost;
        document.getElementById('cursorUpgrades').innerHTML = cursorUpgrades;
        document.getElementById('coins').innerHTML = coins;
    };
    var nextUpgradeCost = Math.floor(100 * Math.pow(2,cursorUpgrades));
    document.getElementById('cursorUpgradeCost').innerHTML = nextUpgradeCost;
};
/*
setInterval(function(){
    coinClick(cursors);
    console.log("execution")
}, Math.round(1000 - 100 * cursorUpgrades));*/

function periodicall() {
    coinClick(cursors);
    //if you change cursorUpgrades, your timer will change
    timer = Math.round(1000 - 100 * cursorUpgrades)
    console.log(timer);
    setTimeout(periodicall, timer);
};
periodicall();

function save(){
    localStorage.setItem("coins",JSON.stringify(coins));
    localStorage.setItem("cursors",JSON.stringify(cursors));
    localStorage.setItem("cursorCost",JSON.stringify(cursorCost));
    console.log('Saved.');
};

function load(){
    console.log('Loaded.');
    coins = JSON.parse(localStorage.getItem('coins'));
    cursors = JSON.parse(localStorage.getItem('cursors'));
    cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
    document.getElementById('cursors').innerHTML = cursors;
    document.getElementById('coins').innerHTML = coins;
    document.getElementById('cursorCost').innerHTML = cursorCost;
};

function resetgame(){
    coins = 0;
    cursors = 0;
    cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
    document.getElementById('cursors').innerHTML = cursors;
    document.getElementById('coins').innerHTML = coins;
    document.getElementById('cursorCost').innerHTML = cursorCost;
};

var savegamecoins = JSON.parse(localStorage.getItem("coins"));
var savegamecursors = JSON.parse(localStorage.getItem("cursors"));

if (coins == 0 && cursors == 0) {
    coins = savegamecoins;
    cursors = savegamecursors;
    cursorCost = Math.floor(10 * Math.pow(1.1,cursors));
    document.getElementById('cursors').innerHTML = cursors;
    document.getElementById('coins').innerHTML = coins;
    document.getElementById('cursorCost').innerHTML = cursorCost;
};

关于JavaScript 增量游戏间隔循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47113868/

相关文章:

Python:如何让用户输入自己的解决方案到答案键

loops - 去审核-循环变量我被func文字捕获

使用间隔的javascript开关

sql - Postgresql: "Offset"从 HH:MM:SS 到 00:HH:MM 的间隔

python - 按正确的顺序对间隔进行排序

javascript - 使用 javascript 驱动程序运行 RSpec/Capybara 时数据库超时

javascript - 关闭 Excel 加载项/文件/程序的事件或检查打开器是否仍然存在

javascript - AWS 预签名 URL

javascript - 过滤 Backbone 集合返回模型数组

python - 循环一列并填充函数 Pandas Dataframe Python 中的行