Snake game!!!
Mar 6, 2017 at 10:55pm UTC
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 Mar 6, 2017 at 10:55pm UTC
Mar 7, 2017 at 8:57am UTC
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.