simple snake game

I'm trying to get the game to start over by using a while loop but I keep running into problems if anyone can help me it would be greatly appreciated.

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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
  #include <iostream>
#include <conio.h> 
#include <Windows.h>

using namespace std;

bool gameOver;
const int width =20;
const int height = 20;
int x,y, fruitX, fruitY, score;
int tailX[100], tailY[100];   //this variable will keep track of where the tail is at on the map.
int ntail; //this variable will tell the length of the tail.
enum eDirection {STOP = 0, LEFT, RIGHT, UP, DOWN}; //this enum is help the snake move.
eDirection dir;  //and this variable is to hold the direction of the snake.

void setup()
{
	gameOver = false;
	dir = STOP;
	x = width / 2;    //those two functions is so the snake head will be centered on the map
	y = height / 2;
	fruitX = rand() % width;    //and those two variable is so the fruit will appear all over the map.
	fruitY = rand() % height;
	score = 0;
}

void draw()
{
	system("cls"); 

	for (int i = 0; i < width + 2; ++i)  
		cout << "#";
	cout << endl;

	for (int i = 0; i < height; ++i)
	{
		for (int j = 0; j < width; j++)
		{
			if (j == 0)
				cout << "#";
			if (i == y && j ==x)               
				cout << "O";
			else if (j == fruitX && i == fruitY)   
				cout << "F";
			else
			{
                bool print = false;
				for (int k = 0; k < ntail; k++)
				{	
					if (tailX[k] == j && tailY[k] == i)
					{
						cout << "o";
						print = true;
					}
				}
				if (!print)
						cout << " ";
			}

			if (j == width - 1)
				cout << "#";
		}
        cout << endl;
	}
	

	for (int i = 0; i < width + 2; ++i)
		cout << "#";
	cout << endl;
	cout << "Score:" << score << endl;
}

void input()
{
	if (_kbhit())  //this will handle the controls.
	{
		switch (_getch())
		{
		case 'a':
			dir = LEFT;
			break;

		case 'd': 
			dir = RIGHT;
			break;

		case 's':
			dir = DOWN;
			break;

		case 'w':
			dir = UP;
			break;

		case 'x':
			gameOver = true;
			break;
		}
	}
}

void logic() 
{
	int prevX = tailX[0];
	int prevY = tailY[0];
	int prev2X, prev2Y;
    tailX[0] = x;  //those two functions are telling the tail to follow the head.
	tailY[0] = y;
	for (int i = 1; i < ntail; i++)  //this for loop is telling what happens when the snake eat the fruit.
	{
		prev2X = tailX[i];
		prev2Y = tailY[i];
		tailX[i] = prevX;
		tailY[i] = prevY;
		prevX = prev2X;
		prevY = prev2Y;	
	}

	switch (dir) //this actual makes the snake move when you run the program.
	{
	case LEFT:
		x--;
		break;

	case RIGHT:
		x++;
		break;

	case UP:
		y--;
		break;

	case DOWN:
		y++;
		break;

	default:
		break;
	}

	if (x >= width) x = 0; else if (x < 0) x = width - 1; 
	if (y >= height) y = 0; else if (y < 0) y = height - 1;
	for (int i = 0; i < ntail; i++)
		if (tailX[i] == x && tailY[i] == y)
			gameOver = true;
	if (x == fruitX && y == fruitY)
	{
		score += 10;               
		fruitX = rand() % width;   
	    fruitY = rand() % height;
		ntail++;
	}
	
}

int main() 
{
	setup();

	while (!gameOver)
	{
		draw();   
		input();   
		logic();  
	    Sleep(15); 
    }

	return 0;
}
I am also new to c++ but maybe you could do this. You will have to make a new function to clear the "board" or modify the draw function, but if you want to ask the player to play again thats how i would do it.

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
int main()
{
	setup();

	do
    {
        do
        {
            draw();
            input();
            logic();
            Sleep(15);

        }while(gameOver == false);

    char answer;
        
    cout<<"Would you like to play again?(y/n)"<<endl;
    cin>>answer;
        
    if(answer == 'y')
        gameOver = false;

    else if(answer == 'n')
        gameOver = true;
            
    else
        cin>>answer;

    }while(gameOver == false);

	return 0;
}


Hope it helps
Last edited on
No it is not a school assignment
Topic archived. No new replies allowed.