Vector subscript out of range

Hi i have a problem with my game.When i shoot the first ship it works fine but when i shoot the second ship it gives me this error Vector subscript out of range.The thing is that the same code on code blocks works fine.Can someone explain me why this error appears.Here is the source code (Oh and btw you might want to maximize the console window):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#include <windows.h>
struct Projectile
{
    int y,x;
};
const int MAP_SZ=24;
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
int Counter,Dounter,Thounter;
bool hitted=false;
int ShipCordx=40,ShipCordy=20;
static char Rof=0;
string Holder;
string Ship[]=
{
    "   ^   ",
    " /| |\\ ",
    "/_| |_\\",
    "  /*\\  "
};
string EShip[]=
{
	"   .---.   ",
	" _/__~0_\\_ ",
	"(_________)",
};
struct ESpaceShip
{
	int y,x;
	int health;
	char direction;
	bool IsHit(int ycoord,int xcoord)
	{
		if(xcoord>=x && xcoord<=x+10)
			if(ycoord>=y && ycoord<=y+2)
				return (EShip[ycoord-y][xcoord-x]!=' ');
		return false;
	}
};
vector<ESpaceShip> EnemyShips;
ESpaceShip NewShip;
string StarField[]=
{

    " .                            .                                                 ",
    "                                                                                ",
    "                                                                        .       ",
    "                                        .                                       ",
    "           .     .            .                                                 ",
    "                                                                                ",
    "                                 .               .                              ",
    "         .                                                                      ",
    "                  .                        .                 .        .         ",
    "                                                                                ",
    "                                                                                ",
    "   .                         .                                                  ",
    "                       .                                             .          ",
    "                                         .                    .                 ",
    "                         .                    .                                 ",
    "                                                                                ",
    "                       .                                                        ",
    "                                       .                                        ",
    "                                                                                ",
    "          .                  .                                                  ",
    "                                                                                ",
    "                                              .                                  ",
    "                                                                                ",
    "             .                         .                .              .        ",
    "                                                                                ",
    "    .                                                                           ",
    "                           .           .                                        ",
    "              .                                                                 ",
    "                                                                          .     ",
    "                                                                                ",
    "                                                                                ",
    "   .                                                                            ",
    "                               .                                                ",
    "                                              .                        .        ",
    "                                                        .                       ",
    "                      .                                                         ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                        .               .       ",
    "   .                                                                            ",
    "                  .                                                              ",
    "                                        .                                       ",
    "                                                                                ",
    "                                  .                                             "
};
string Map[MAP_SZ]=
{
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
    "                                                                                ",
};

vector<Projectile> PlayerProjectiles;
vector<Projectile> EnemyProjectiles;
Projectile Shoot;
void Afisare()
{
    for(Counter=0;Counter<MAP_SZ;Counter++)
        cout<<Map[Counter]<<endl;
}
void Controale()
{
    if(GetAsyncKeyState(VK_RIGHT))
        if(ShipCordx!=73)
            ShipCordx++;
    if(GetAsyncKeyState(VK_LEFT))
        if(ShipCordx!=0)
            ShipCordx--;
    if(GetAsyncKeyState(VK_DOWN))
         if(ShipCordy!=20)
            ShipCordy++;
    if(GetAsyncKeyState(VK_UP))
        if(ShipCordy!=1)
            ShipCordy--;
    if(!GetAsyncKeyState(VK_SPACE)) Rof=3;
    if(GetAsyncKeyState(VK_SPACE))
        if(Rof++ %3==0)
    {
        Shoot.x=ShipCordx+1;Shoot.y=ShipCordy;
        if(Shoot.y>0)
        PlayerProjectiles.push_back(Shoot);
		Shoot.x=ShipCordx+5;Shoot.y=ShipCordy;
		if(Shoot.y>0)
		PlayerProjectiles.push_back(Shoot);
    }
}


part 2 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
void MoveShips()
{
    for(Dounter=0;Dounter<=3;Dounter++)
        for(Counter=0;Counter<=6;Counter++)
            if(Ship[Dounter][Counter]!=' ')
            Map[Dounter+ShipCordy][Counter+ShipCordx]=Ship[Dounter][Counter];
    for(Thounter=0;Thounter<EnemyShips.size();Thounter++)
    {
        if(EnemyShips[Thounter].direction%2)
        EnemyShips[Thounter].x++;
        else EnemyShips[Thounter].x--;
        if(EnemyShips[Thounter].x==70||EnemyShips[Thounter].x==0)
        {
            EnemyShips[Thounter].y++;
            EnemyShips[Thounter].direction++;
        }
        for(Dounter=0;Dounter<=2;Dounter++)
            for(Counter=0;Counter<=10;Counter++)
                if(EShip[Dounter][Counter]!=' ')
                Map[Dounter+EnemyShips[Thounter].y][Counter+EnemyShips[Thounter].x]=EShip[Dounter][Counter];
    }
    for(Counter=0;Counter<PlayerProjectiles.size();Counter++)
    {
		hitted=false;
         for(Thounter=0;Thounter<EnemyShips.size();Thounter++) // i think the problem is somewhere in this area
            if(EnemyShips[Thounter].IsHit( PlayerProjectiles[Counter].y , PlayerProjectiles[Counter].x ) )
        {
            PlayerProjectiles.erase(PlayerProjectiles.begin()+Counter); Counter--; EnemyShips[Thounter].health--;
            if(EnemyShips[Thounter].health==0) { EnemyShips.erase(EnemyShips.begin()+Thounter); Thounter--; }
			hitted=true;
        }
			if(hitted!=true){
        if(PlayerProjectiles[Counter].y==0) {PlayerProjectiles.erase(PlayerProjectiles.begin()+Counter);
        Counter--; }
        else Map[PlayerProjectiles[Counter].y--][PlayerProjectiles[Counter].x]='o';
			}
    }
}
void Curatare()
{
    COORD Home={0,0};
    Holder=StarField[43];
    for(Counter=43;Counter>0;Counter--)
        StarField[Counter]=StarField[Counter-1];
    StarField[0]=Holder;
    for(Counter=0;Counter<MAP_SZ;Counter++)
        Map[Counter]=StarField[Counter];
    SetConsoleCursorPosition(hOut,Home);
}
int main()
{
	NewShip.x=0;NewShip.y=0;
	NewShip.health=30;NewShip.direction=1;
	EnemyShips.push_back(NewShip);
	NewShip.x=20;NewShip.y=0;
	NewShip.health=30;NewShip.direction=1;
	EnemyShips.push_back(NewShip);
    while(true)
    {
        Controale();
        MoveShips();
        Afisare();
        Curatare();
        Sleep(70);
    }
    return 0;
}
Last edited on
If you are using a debugger, the debugger will snap on the exact line of code that this error is occurring on. Then you can use the 'watch' window to see what your index variable is... and can see the size of the vector. This will show you how you are stepping out of bounds of your vector.


Also... you really should not be using the console for this. This would be much, much easier to make this program if you just used normal graphics. Take a look at SFML.
Thanks for looking through this.I will try to debug the program and i know its easier to do in sfml but its more challenging to do it in console.I will do my best to debug the program but if someone sees the problem sooner please post a comment !
Ok after putting break point all over the place and watching how the code progresses i found out why it crashed : Aparrently somehow the Counter variable got the value -1 and as we know you cannot acces a container with a negative index .Now i must find out why it got that value and fix it.
OK i fixed all the problems ! Phew that was a real headache..... I will post it here on the forums when i finish it. I still have some stuff to do :make the enemy shoot you , maybe i will add more levels ,meteorites ,etc;
Last edited on
Topic archived. No new replies allowed.