我正在用Javascript、HTML和CSS编写一个井字游戏应用程序,我必须在其中练习将所有功能放置在模块或工厂中。目前我在访问其他模块内的工厂创建对象时遇到问题。
我的完整代码可以在这里找到: https ://codepen.io/wulfenn/pen/xxVqGrW
我的代码细分:
我有两个模块和一个工厂;gameBoard
是负责任何与板相关的模块。(读板、修改板、视觉效果等)
该game
模块负责功能(开始新回合、处理玩家回合、检查获胜者等)
最后,Player
我的工厂用于创建新播放器并具有简单的功能,例如检索名称或检索分配给它的标记。(X 或 O)
我目前遇到的问题是在模块const p1 = Player('P1Name', 'X')
内部创建播放器时,特别是其中的函数。如果我尝试在所述函数中访问它,我没有问题,但其余代码无法访问它。game
soloPlay()
const p1 = Player('P1Name', 'X')
如果我要在我的工厂和模块之外创建一个,所有代码都可以访问它。但问题是我需要能够在模块内的soloPlay()
函数中创建一个新播放器。game
我怎样才能进行调用soloPlay()
并且仍然能够访问 P1 和 P2 对象以及它们在代码之外的功能?
感谢您的帮助,如果我的代码混乱或糟糕,我深表歉意,我仍在学习。
如果您不想浏览我的所有项目,请使用相关代码:
游戏模块中的 soloPlay()。
// Our second menu for solo play, to set the P1 name, and start the game once done.
const soloPlay = () => {
const enterBtn = document.querySelector('.enter-btn');
enterBtn.addEventListener('click', function () {
const p1 = Player(document.querySelector('.p1').textContent, 'X');
const p2 = Player('AI', 'O');
const soloMenu = document.querySelector('.solo-menu');
soloMenu.style.display = 'none';
const gameMenu = document.querySelector('.menu-bg');
gameMenu.style.display = 'none';
game.setup(); // Sets our grid listeners
game.newRound(); // Starts a new round.
});
}
播放器工厂
/* Our player factory in charge of creating new players, and assigning them functions to obtain their names and marks */
const Player = (name, mark) => {
const hasTurn = true;
const getName = () => name;
const getMark = () => mark;
return { getName, getMark, hasTurn };
}