snake game
Jan 1, 2018 at 4:20pm UTC
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;
}
Jan 1, 2018 at 5:18pm UTC
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.
Topic archived. No new replies allowed.