Javascript 基于矩阵的游戏设计

Javascript 基于矩阵的游戏设计,javascript,algorithm,matrix,Javascript,Algorithm,Matrix,你好,StackOverflow 我正在编写一个流行游戏的JavaScript版本,作为一个附带项目,然后在秋季返回课堂。不幸的是,对于如何从我目前的项目进展着手,我完全感到困惑 我的方法 当我开始写这个项目时,我认为这个游戏的最佳方法是实例化四个矩阵并将它们放入一个列表中。每个矩阵代表Pentago板的一个部分。当我考虑如何迭代矩阵并确定是否放置了一行5个游戏令牌时,我发现这种方法给我带来了很多麻烦 重新评估我的方法 然后,我决定从外部的角度来看待如何处理这个问题,使其更容易解决。建议我使用一

你好,StackOverflow

我正在编写一个流行游戏的JavaScript版本,作为一个附带项目,然后在秋季返回课堂。不幸的是,对于如何从我目前的项目进展着手,我完全感到困惑

我的方法

当我开始写这个项目时,我认为这个游戏的最佳方法是实例化四个矩阵并将它们放入一个列表中。每个矩阵代表Pentago板的一个部分。当我考虑如何迭代矩阵并确定是否放置了一行5个游戏令牌时,我发现这种方法给我带来了很多麻烦

重新评估我的方法

然后,我决定从外部的角度来看待如何处理这个问题,使其更容易解决。建议我使用一个矩阵而不是四个矩阵。然而,这似乎使旋转每个部分有点困难,但并非不合理

我的问题…

话虽如此,但我真正需要知道的是,我应该如何确定一名玩家在将“令牌”放置在某个位置后是否赢得了比赛

以下是我认为我知道的:

  • 确定游戏是否结束的功能将在玩家旋转象限后执行

  • 鉴于此,我将知道哪个玩家放置了最后一个令牌。我只需要考虑那个玩家放置的令牌。

  • 我必须从矩阵中放置最后一个标记的位置迭代矩阵,并确定标记是否与其相邻。然后,递归地对每个相邻的标记执行此操作,直到我找到对角、垂直或水平的五个相邻标记

下面是我已经为这个游戏编写的代码。我真的非常感谢任何帮助,我可以在这一部分的项目。。。这真让我难堪! 谢谢


到目前为止的代码

var游戏=(函数(玩家){
var self={};
self.numTokensPlaced=0;
//实例化pentago板,使其全部为空
self.board=[];

对于(var i=0;i给定一个固定板,我将通过创建一个可能轴的数组来解决它:

var axes = [];

// rows
for (var i = 0; i < 6; ++i) {
    axes.push(self.board[i]);
}
// columns
for (var j = 0; j < 6; ++j) {
    var column = [];
    for (var i = 0; i < 6; ++i) {
        column.push(self.board[i][j]);
    }
}
// diagonals
axes.push([self.board[0][1], self.board[1][2], ...])
// two more
var轴=[];
//排
对于(变量i=0;i<6;++i){
轴推(自板[i]);
}
//纵队
对于(var j=0;j<6;++j){
var列=[];
对于(变量i=0;i<6;++i){
柱推(self.board[i][j]);
}
}
//对角线
轴推送([self.board[0][1],self.board[1][2],…]))
//再来两个

使用该数组,您可以简单地遍历所有轴,并找到特定玩家的连续填充。

请在此处发布相关代码片段。我怀疑github链接是否会很快中断,但如果您不能选择一小部分代码作为重点,您的问题可能太广泛。我将创建一个包含12个遍历每个轴,找到5个特定颜色的连续球;一旦你命中,游戏结束…假设你不计算对角线:)这篇文章是关于函数/方法的在旋转棋盘的一部分后决定玩家是否获胜的游戏。谢谢你的建议!Jack,它必须考虑对角线,所以…15个函数。我将对此实现进行一些思考。谢谢你的输入!如果每个人都把一半的时间放在制定这些问题上,这将是一个更好的地方是的。不客气。有时候它只是需要一个新的视角:)
var axes = [];

// rows
for (var i = 0; i < 6; ++i) {
    axes.push(self.board[i]);
}
// columns
for (var j = 0; j < 6; ++j) {
    var column = [];
    for (var i = 0; i < 6; ++i) {
        column.push(self.board[i][j]);
    }
}
// diagonals
axes.push([self.board[0][1], self.board[1][2], ...])
// two more