### Console Snake. Snake can crawl in opposite direction

I have tried to make simple Snake from example and find one bug: snake can crawl in oppostie direction. I have tried to fix it by true-fals variables, but something wrong. Can you show me another methods of solving this problem or try to fix my method)

 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171`` ``````#include "stdafx.h" #include #include #include #include using namespace std; bool gameOver; const int width = 30; const int height = 20; int x, y, fruitX, fruitY, score; int tailX[100], tailY[100]; int nTail; enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; eDirection dir; void Setup() { srand(time(NULL)); gameOver = false; dir = STOP; x = width / 2 - 1; y = height / 2 - 1; fruitX = rand() % width; fruitY = rand() % height; score = 0; } void Draw() { Sleep(75); 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 || j == width - 1) cout << "#"; if (i == y && j == x) cout << "S"; else if (i == fruitY && j == fruitX) cout << "F"; else { bool print = false; for (int k = 0; k < nTail; k++) { if (tailX[k] == j && tailY[k] == i){ print = true; cout << 's'; } } if(!print) 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 'w': dir = UP; break; case 's': dir = DOWN; break; case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'x': gameOver = true; } } } void Logic() { bool keyA = true, keyD = true, keyW = true, keyS = true; int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = x; tailY[0] = y; for (int i = 1; i < nTail; i++) { prev2X = tailX[i]; prev2Y = tailY[i]; tailX[i] = prevX; tailY[i] = prevY; prevX = prev2X; prevY = prev2Y; } switch (dir) { case LEFT: if (keyA = true) x--; keyD = false; keyS = true; keyW = true; break; case RIGHT: if (keyD = true) x++; keyA = false; keyW = true; keyS = true; break; case UP: if (keyW = true) y--; keyA = true; keyD = true; keyS = false; break; case DOWN: if (keyS = true) y++; keyA = true; keyD = true; keyW = false; break; } //if (x > width || x < 0 || y > height || y < 0) // gameOver = true; if (x >= width - 1) x = 0; else if (x < 0) x = width - 2; 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(); } return 0; }``````
Topic archived. No new replies allowed.