snake game

I'm working through a youtube tutorial on making a snake game and have came accross an error I can't seem to solve.

when 0 passes over 'F' a new 'F' should spawn at a different random location. My code seems to be the same as the video(There's is working).

any help is appriciated.


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
 #include <iostream>
#include <stdlib.h>
#include <conio.h> 
#include <windows.h>
#include <ctime>
using namespace std;
	
	bool gameOver;
	const int width = 20;
	const int height = 20;
	int x,y, fruitX, fruitY, score;
	enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN};
	eDirection dir;

void setup()
{
	gameOver = false;
	dir = STOP;
	x = width / 2;
	y = height / 2;
	fruitX = rand()% width;
	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 << "0";
			else if(i==fruitX && j ==fruitY)
				cout <<"F";
			else	
				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())
	{
		switch(_getch())
		{
			case 'a':
				dir = LEFT;
				break;
			case 'd':
				dir = RIGHT;
				break;
			case 'w':
				dir = UP;
				break;
			case 's':
				dir = DOWN;
				break;
			case 'x':
				gameOver= true;
				break;
		}
	}
}

void Logic()
{
	switch(dir)
	{
		case LEFT:
			x--;
			break;
		case RIGHT:
			x++;
			break;
		case UP:
			y--;
			break;
		case DOWN:
			y++;
			break;
			
		default:
			break;
	}
	
	if(x>width || x<0 || y>height || y<0)
		gameOver= true;
		
	if(x==fruitX && y==fruitY)
	{
		score +=10;
		fruitX = rand()% width;
		fruitY = rand()% height;
	}
}

int main()
{
	setup();
	while (!gameOver)
	{
		Draw();
		Input();
		Logic();
		Sleep(50);
	}
	return 0;
}
One problem i see is at line 43 if (i == fruitX && j == fruitY)
i represents row and fruitX the column.
Using more meaningful names can prevent this kind of problem.

Another problem is that you don't seed the random generator - best place would be setup.
Registered users can post here. Sign in or register to post.