如何根据填充数组动态填充值数组?

时间:2015-05-24 03:36:53

标签: javascript arrays

已经有一段时间了,所以我决定走出nodejs并走到jsfiddle,看看你们是否可以解决这些问题。

以下是代码:

 inventory = [ // 50 Slot inventory 10 HORIZONTAL / 5 SLOTS VERTICAL
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 ]
 items = {
    "1": {
        name: "Short Sword",
        slot_position: 5,
        slot_size: [1, 3]
    },
    "2": {
        name: "Heavy Leather Boots",
        slot_position: 1,
        slot_size: [2, 2]
    },
    "3": {
        name: "Potion 1",
        slot_position: 26,
        slot_size: [1, 1]
    }
 }

 for (i in items) {
    inventory[items[i].slot_position] = 1; // Fill in the used inventory slots to 1 (The easy part)

    if (items[i].slot_size) {
        if (items[i].slot_size[0] > 1) {
            /*
            The X slot_size has to be greater than '1' because we already filled in their current positon.
            Now I need to fill in the inventory slots based on their item_slot_size [X,Y] values... (I'm              stuck here)
            */



        }
    }


 }

 console.log(inventory);
 console.log(inventory.length); // 50 is correct.

和jsfiddle:http://jsfiddle.net/68w1w0s8/8/

在第42行,我被困在这里,因为我需要根据商品slot_size维度动态地将广告资源中的广告位填充到1

例如,短剑的slot_size为[1,3](向下3个方格),如何在我的inventory数组中动态填写适当的值?

我的图表最好留下我的slot_size数组的使用示例:enter image description here

2 个答案:

答案 0 :(得分:2)

首先,您的广告资源应该是一个矩阵(集合集合)

 inventory = [ // 50 Slot inventory 10 HORIZONTAL / 5 SLOTS VERTICAL (HARDCODE) 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
 ]

然后您可以使用您的插槽大小进行迭代。此外,插槽位置应存储在坐标中:

 items = {
    "1": {
        name: "Short Sword",
        slot_position: [5,0],
        slot_size: [1, 3]
    },
    "2": {
        name: "Heavy Leather Boots",
        slot_position: [1,0],
        slot_size: [2, 2]
    },
    "3": {
        name: "Potion 1",
        slot_position: [6,2],
        slot_size: [1, 1]
    }
 }

 for (i in items) {
    var item = items[i];
    if (item.slot_size) {
            for (var x = 0; x < item.slot_size[0]; x++) {
                for (y = 0; y < item.slot_size[1]; y++) { 
                     inventory[y+item.slot_position[1]][x+item.slot_position[0]] = item;               
            }
        }
    }
 }

JSfiddle

答案 1 :(得分:1)

这是我想到的第一件事:

// slot_to_coords(n) returns (n%10, n/10)
// coords_to_lot(x, y) returns (y*10 + x)
coords = slot_to_coords(items[i].slot_position);
for (int x = 0; x < items[i].slot_size[0]; x++) {
    for (int y = 0; y < items[i].slot_size[1]; y++) {
        slot = coords_to_slot(x+coords[0], y+coords[1]);
        inventory[slot] = 1;
    }
}

这与您尝试做的相似吗?确保你获得所有边缘案例。