Snake game!!!

I set two if statements in the logic function in case i hit the wall or i eat a fruit represented with "F" but when i run my program nothing happens.Why?


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
#include<iostream>
#include<conio.h>
#include<string>
#include<cstring>
#include<cstdlib>
using namespace std;

bool gameOver;
const int width=20;
const int height=20;

int x,y,fruitX,fruitY,score; 

enum direction{Stop=0,Left,Right,Up,Down};
direction 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+1;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(i==fruitY&&j==fruitX) 
		{
		  cout<<"F";  
		} 
		else cout<<" ";
		if(j==width-1)
		cout<<"#";  
	  }
	  cout<<endl;  
	}
  
  for(int i=0;i<width+1;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=score+10;
	 fruitX=rand()%width;
	 fruitY=rand()%height;  
	}	
				
		
  }
  
  
  
  
  
}

int main() // {  }  \  ||  ~
{
  
 Setup();
 while(!gameOver)
 {
   Draw();
   Input();
   Logic();  
 }
 
 
 

 return 0;  
}
Last edited on
The ifs on line 103/107 are within the switch statement. They will never be executed.

I suggest that after you processed dir in the switch on line 83 set it to dir=Stop;.

In order to avoid flicker I suggest that you call Draw(); only when something changed.
Topic archived. No new replies allowed.