我已经构建了一个简单的基于网格的游戏,但目前仅适用于单个游戏,并且我希望它能够无缝运行于多个游戏而无需刷新页面,以便保留得分数据。
第一次加载时,我创建了一个变量以实例化新的“游戏”对象
public static class AttributeExtensions
{
#region Methods
public static T GetAttribute<T>(this Enum enumValue) where T : Attribute
{
var type = enumValue.GetType();
var memberInfo = type.GetMember(enumValue.ToString());
var member = memberInfo.FirstOrDefault(m => m.DeclaringType == type);
var attribute = Attribute.GetCustomAttribute(member, typeof(T), false);
return attribute is T ? (T)attribute : null;
}
#endregion
}
在“游戏”对象中,有一种方法可以创建一个5x4大小的网格,该网格由20个空格组成,其中每个空格的ID都从称为“位置”的数组中拉出。
const game = new Game();
还有一些代码可以识别单击网格的时间
createBoard() {
// Clear the board space
grid.innerHTML = ``;
// Create new board space
for (let i=0; i<20; i++) {
grid.innerHTML += `<div class="box" id="${this.positions[i]}"></div>`;
}
}
对于新游戏,我需要将变量更新为
grid.addEventListener("click", function clickEvent(e) {
if (game.ready == true) {
if (e.target !== e.currentTarget) {
game.clickGrid(e);
}
e.stopPropagation();
}
}, false);
并相应地在事件侦听器中更新该引用。
如何更新变量和关联的事件侦听器代码?
如果我以传统的程序样式构建游戏,而没有显式的类和方法,那么我可能只想创建一个函数来清除累积的数据并重新开始,但似乎应该更容易创建一个新的函数。类,尽管事实证明很难做到这一点。
答案 0 :(得分:0)
不确定这是否是最好的解决方案,但似乎可行。
不是使用
实例化游戏对象const game = new Game();
我将其更改为
let game = new Game();
这意味着在我的“新游戏”按钮事件处理程序中,我可以通过以下方式重新分配我的游戏变量来实例化一个新的游戏对象:
game = new Game();
的优点是我不需要更新网格单击事件处理程序。我已经将游戏中的结果数据插入到单独的全局对象中,这意味着我没有丢失任何东西。