Need help with space shooter game

Hello everyone, I need some help with my game, after I shoot once the main character can't move anymore.

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
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    char Map[15][50]={"#################################################",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#>                                              #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#################################################"};

    int x=1,y=6;
    int score=0;

    int gamespeed=50;
    bool playgame=true;

    system("color 0b");
    system("Title Space");

    while (playgame==true)
    {
        system("cls");

        cout<<"SCORE: "<<score<<"\n\n";

        for(int screen=0;screen<15;screen++)
        {
            cout<<Map[screen]<<endl;
        }

        switch(Map[y][x])
        {
            case '>':

                if (GetAsyncKeyState(VK_RIGHT)!=0)
                {
                    int x2=x+1;

                    switch(Map[y][x2])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        x++;
                        Map[y][x2]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_LEFT)!=0)
                {
                    int x2=x-1;

                    switch(Map[y][x2])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        x--;
                        Map[y][x2]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_UP)!=0)
                {
                    int y2=y-1;

                    switch(Map[y2][x])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        y--;
                        Map[y2][x]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_DOWN)!=0)
                {
                    int y2=y+1;

                    switch(Map[y2][x])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        y++;
                        Map[y2][x]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_SPACE)!=0)
                {
                    x++;
                    Map[y][x]='*';
                }
            break;

            case '*':

                Map[y][x]=' ';
                x++;
                if (Map[y][x]!='#')
                {
                    Map[y][x]='*';
                }
            break;
        }

        Sleep(gamespeed);
    }
    return 0;
}
The problem is that you use the same x/y coordinate for the player and the shoot object (the *). You need coordinates for both.
Can you help me out, please, I just can't figure it out, it keeps giving me errors
There you go:
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
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    char Map[15][50]={"#################################################",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#>                                              #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#################################################"};

    int x=1,y=6;
    int x_shot=-1,y_shot=-1; // Note
    int score=0;

    int gamespeed=50;
    bool playgame=true;

    system("color 0b");
    system("Title Space");

    while (playgame==true)
    {
        system("cls");

        cout<<"SCORE: "<<score<<"\n\n";

        for(int screen=0;screen<15;screen++)
        {
            cout<<Map[screen]<<endl;
        }

        switch(Map[y][x])
        {
            case '>':

                if (GetAsyncKeyState(VK_RIGHT)!=0)
                {
                    x_shot=-1; y_shot=-1; // Note
                    int x2=x+1;

                    switch(Map[y][x2])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        x++;
                        Map[y][x2]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_LEFT)!=0)
                {
                    x_shot=-1; y_shot=-1; // Note
                    int x2=x-1;

                    switch(Map[y][x2])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        x--;
                        Map[y][x2]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_UP)!=0)
                {
                    x_shot=-1; y_shot=-1; // Note
                    int y2=y-1;

                    switch(Map[y2][x])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        y--;
                        Map[y2][x]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_DOWN)!=0)
                {
                    x_shot=-1; y_shot=-1; // Note
                    int y2=y+1;

                    switch(Map[y2][x])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        y++;
                        Map[y2][x]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_SPACE)!=0) // Note
                {
                  if((x_shot >= 0) && (y_shot >= 0))
                    Map[y_shot][x_shot]=' ';

                  if(x_shot < 0)
                    x_shot = x;
                  if(y_shot < 0)
                    y_shot = y;

                    x_shot++;
                    Map[y_shot][x_shot]='*';
                }
            break;

            case '*':

                Map[y][x]=' ';
                x++;
                if (Map[y][x]!='#')
                {
                    Map[y][x]='*';
                }
            break;
        }

        Sleep(gamespeed);
    }
    return 0;
}
Thanks but the bullet(the *) only moves if the character(>) stays in the same line and the player holds space in your program, is there no way to make the bullet move independently?
Last edited on
So this is how it moves independently (note that you need for each object on the screen another x/y pair. Even if you shoot another bullet):
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
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    char Map[15][50]={"#################################################",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#>                                              #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#                                               #",
                      "#################################################"};

    int x=1,y=6;
    int x_shot=-1,y_shot=-1;
    int score=0;

    int gamespeed=50;
    bool playgame=true;

    system("color 0b");
    system("Title Space");

    while (playgame==true)
    {
        system("cls");

        cout<<"SCORE: "<<score<<"\n\n";

        for(int screen=0;screen<15;screen++)
        {
            cout<<Map[screen]<<endl;
        }

        switch(Map[y][x])
        {
            case '>':

                if (GetAsyncKeyState(VK_RIGHT)!=0)
                {
                    int x2=x+1;

                    switch(Map[y][x2])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        x++;
                        Map[y][x2]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_LEFT)!=0)
                {
                    int x2=x-1;

                    switch(Map[y][x2])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        x--;
                        Map[y][x2]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_UP)!=0)
                {
                    int y2=y-1;

                    switch(Map[y2][x])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        y--;
                        Map[y2][x]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_DOWN)!=0)
                {
                    int y2=y+1;

                    switch(Map[y2][x])
                    {
                        case ' ':
                        Map[y][x]=' ';
                        y++;
                        Map[y2][x]='>';
                        break;
                    }
                }

                if(GetAsyncKeyState(VK_SPACE)!=0)
                {
                  if(x_shot < 0)
                    x_shot = x;
                  if(y_shot < 0)
                    y_shot = y;

                    x_shot++;
                    Map[y_shot][x_shot]='*';
                }
            break;

            case '*':

                Map[y][x]=' ';
                x++;
                if (Map[y][x]!='#')
                {
                    Map[y][x]='*';
                }
            break;
        }
        if((x_shot >= 0) && (y_shot >= 0))
        {
          if (Map[y_shot][x_shot]!='#')
          {
            Map[y_shot][x_shot]=' ';
            x_shot++;
            if (Map[y_shot][x_shot]!='#')
              Map[y_shot][x_shot]='*';
            else
            {
              x_shot=-1; y_shot=-1;
            }
          }
          else
          {
            x_shot=-1; y_shot=-1;
          }
        }

        Sleep(gamespeed);
    }
    return 0;
}
Thanks a lot!
I f you continue pressing the space bar, the entire game breaks
Topic archived. No new replies allowed.