gpt4 book ai didi

javascript - 在网络上复制游戏内库存

转载 作者:行者123 更新时间:2023-12-02 14:01:01 27 4
gpt4 key购买 nike

我正在尝试从网络上名为 CABAL 的 MMORPG 在线游戏复制库存,该游戏的库存如下所示:

enter image description here

基本上,库存有 4 个选项卡,每个选项卡大小为 8x8,因此每个选项卡上总共有 64 个单元格,总共 256 个单元格,不过,每个选项卡上的索引从 0 到 63 开始,总数从 0 到 255。

正如你所看到的,有些元素占据 1:1 (rowspan:colspan),有些是 2:2,有些甚至可以是 2:6,例如盔甲,无论如何,重点是我尝试过 here尽我所能复制,尽管我只制作了 1 个选项卡。

    function createCells(rows, cols) {
var cells = {},
x = 0,
startRow = 0,
endRow = 0;

for (var i = 0; i < rows; i++) {
cells[i] = {};
for (var j = 0; j < cols; j++) {
cells[i][j] = { id: "e" + x };

if (angular.isDefined(items[x])) {
cells[i][j] = items[x];
if (items[x].colspan > 1 && items[x].rowspan > 1) {
startRow = x % rows;
endRow = parseInt(x / cols, 10) + items[x].rowspan;
console.log(j);
console.log("Start column " + startRow + " end rowspan " + endRow + " x = " + x);
}
// console.log();
// if (j >= 5 && j <= 8) {
// x += j;
// }
}

if (!angular.equals(cells[i][j], {})) {
console.log(cells[i][j]);
}


x++;
}
}

return cells;
}

所以问题是,如果一个项目占用的 rowspan 和 colspan 大于 1,它会将其他单元格推到后面,我需要将它们删除(e7、e14、e15、e39、e46、e47、e54、e55、e62、e63 )。我需要循环根据库存的行跨度和列跨度自动进行计算。 var items 中的项目是 API 响应的示例,因此 3、6、12、240、105 是选项卡 1 的项目。

那么有人可以进一步帮助我吗?我在这件事上被困了好几天。

最佳答案

如果您不介意稍微改变一下方法,您可以尝试一下:

  • 在创建单元格之前,循环遍历所有项目
  • 对于每个项目,确定将被阻止的组合

现在,您已经有了所有被阻止(即:非空)单元格的 map 。在 createCells 循环中,您可以使用此映射来确定是否需要占位符。现在每个单元格有三种情况:

  • 这是元素所在的确切位置:添加元素
  • 这是一个被项目阻塞的槽位:不执行任何操作
  • 与项目无关:插入占位符

我是这样做的:

function createCells(rows, cols) {
var cells = {};

// Create an object that holds all cell codes blocked by an item
var itemMap = Object.keys(items).reduce(function(map, key) {
var item = items[key],
cStart = item.slot % cols,
rStart = Math.floor(item.slot / cols)
for (var c = 0; c < item.colspan; c += 1) {
for (var r = 0; r < item.rowspan; r += 1) {
map[(r + rStart) + ";" + (c + cStart)] = item;
}
}
return map;
}, {});

var currentNr;
for (var i = 0; i < rows; i++) {
cells[i] = {};

for (var j = 0; j < cols; j++) {
currentNr = i * cols + j;

// If there's an item with this slot, place it
if (items[currentNr]) {
// Add item
cells[i][j] = items[currentNr];

} else if (itemMap[i + ";" + j]) { // The item isn't in the exact spot, but blocks it
// Block square, do nothing
} else {
// Add empty square
cells[i][j] = {
id: "e" + currentNr
}
}
}
}
return cells;
}

在工作 fiddle 中:http://jsfiddle.net/q1ba3x4h/

关于javascript - 在网络上复制游戏内库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com