矢量比较超出范围

时间:2013-07-31 03:46:31

标签: c++ vector 2d curses

我正在制作一个简单的游戏,但我无法为玩家的动作创造界限。地图是2D矢量。当我将矢量与玩家当前位置进行比较时,我在运行期间遇到错误。错误告诉我矢量超出范围。

以下是创建地图的位置。它在自己的类构造函数中。

vector< vector<char> > map_parts;
map_parts.resize(25);
for ( int i = 0; i < 25; i++ )
{
    map_parts[i].resize(80);
}

//check if file open worked
ifstream map_reader ( "C:/Users/Ryan Melendez/Desktop/C++/programs/Curses/City.txt" );
if ( ! map_reader )
{
    printw( "Error.\n" );
}

//save map to memory
while ( ! map_reader.eof() )
{
    for ( int i = 0; i < 25; i++ )
    {
        for ( int j = 0; j < 80; j++ )
        {
            map_reader >> noskipws >> map_parts[i][j];
        }
    }
}
map_reader.close();

//print map
for ( int i = 0; i < 25; i++ )
{
    for ( int j = 0; j < 80; j++ )
    {
        printw( "%c", map_parts[i][j] );
    }
}

这里是比较矢量以确定玩家是否与墙碰撞的地方。此代码作为不同类中的方法编写。第一种情况有一个简单的IF测试,看看左边的坐标是否是墙。

//Move player
void player_class::movePlayer()
{
    int temp = getch();
    switch (temp)
    {
        case KEY_LEFT:
            if (map_parts[player.x - 1][player.y] == '|' || '_')
            {
                break;
            }
            move(player.y, player.x);
            addch(' ');
            player.x--;
            break;
        case KEY_UP:
            move(player.y, player.x);
            addch(' ');
            player.y--;
            break;
        case KEY_RIGHT:
            move(player.y, player.x);
            addch(' ');
            player.x++;
            break;
        case KEY_DOWN:
            move(player.y, player.x);
            addch(' ');
            player.y++;
            break;
    }
    move(player.y, player.x);
    addch(player_char);
}

0 个答案:

没有答案