为什么我的矩阵会出现索引错误?

时间:2016-05-27 23:14:14

标签: python numpy matrix

我目前正在尝试为游戏制作代码,游戏很像跳棋。我将我的电路板表示为10 x 10矩阵。在这个游戏中有两种移动方式,你可以做一个步骤,检查你附近的所有位置,如果它们中的任何一个是空的,你可以进入它们。然后,如果你旁边的位置被占用但是该空间旁边的空间是空的,你可以跳到占据所述位置的玩家的顶部。到目前为止,我有三个重要的代码片段来完成我的游戏。我的第一段代码是电路板,第二段代码是两个变量,每个变量包含每个播放器芯片的坐标列表,第三部分是两个函数,一个允许我跳跃,另一个允许我跳跃一个允许我做的步骤。

这是我的代码:

    Traceback (most recent call last):

  File "<ipython-input-21-3429014a2777>", line 80, in <module>
    print hopper(chips2[i][0], chips2[i][1])#every single checker on the board

  File "<ipython-input-21-3429014a2777>", line 59, in hopper
    if x < 8 and matrix[x+1][y+1] != 0 and matrix[x+2][y-2] == 0: #up + right

IndexError: index 10 is out of bounds for axis 0 with size 10

for循环用于遍历我所有筹码的列表,并找到所有筹码的所有可能动作。当我使用位于棋盘左上方的1个筹码时,它会返回所有可能的游戏,如果有任何使用,则为32。但是,当我使用2个芯片运行相同的功能时,我得到以下错误:

#include<stdio.h>
#include<malloc.h>
typedef struct
{
    char Name[10];
    char Address[10];
    long Phone_number;
}Phonebook;
void main()
{
    int Counter, Number = 0;
    long Number_of_residents;
    Phonebook *Information = (Phonebook*)malloc(sizeof(Phonebook));
    scanf("%ld", &Number_of_residents);
    for (Counter = 0; Counter < Number_of_residents; Counter++)
    {
        Information = (Phonebook*)realloc(Information, sizeof(Phonebook)*(Counter + 1));
        gets(Information[Number].Name);
        Number++;
        gets(Information[Number].Address);
        Number++;
        scanf("%ld", &Information[Number].Phone_number);
        Number++;
    }
}

到目前为止,我已经设法发现它只发生在跳跃中,而且只有当你试图跳到右边时才会发生。我尝试将其更改为x&lt; 7并且x <= 8并且它仍然不起作用。在左侧,它工作得很好。有没有人知道为什么会这样?这显然是我身上的一个逻辑问题,但我对如何解决这个问题没有想法。

2 个答案:

答案 0 :(得分:0)

您应该在x功能中打印yhopper的值。由于chips2在矩阵中包含值为2的索引,因此索引[9][9]将包含在隐含chips2x = 9的{​​{1}}中。

因此y = 9意味着matrix[x+1][y+1]不存在。你应该检查你的代码。

你应该这样做:

matrix[10][10]

这样,您就不会对超出范围的索引执行检查

答案 1 :(得分:-1)

if x < 8 and matrix[x+1][y+1] != 0 and matrix[x+2][y-2] == 0: #up + right
#                         ^ typo - that's down, not up