#include #include #include #include using namespace std; bool gameOver; const int width = 40; 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() { gameOver = false; dir = STOP; x = width / 2; y = height / 2; fruitX = rand() % width; fruitY = rand() % height; score = 0; } void draw() { SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), {0,0}); for(int i = 0; i < width + 2; i++) cout << "#"; cout << "\n"; 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 { bool print = false; for (int k = 0; k < ntail; k++) { if (tailX[k] == j && tailY[k] == i) { cout << "o"; print = true; } } if(!print) cout << " "; } if(j == width - 1) cout << "#"; } cout << "\n"; } for(int i = 0; i < width + 2; i++) cout << "#"; cout << "\n"; cout << "score:" << score << "\n"; } void input() { if(kbhit()) { char userInput = getch(); switch(toupper(userInput)) { case 'A': case 75: dir = LEFT; break; case 'D': case 77: dir = RIGHT; break; case 'W': case 72: dir = UP; break; case 'S': case 80: dir = DOWN; break; case 27: break; } } } void logic() { 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: x--; break; case RIGHT: x++; break; case UP: y--; break; case DOWN: y++; break; } if(x >= width) x = 0; else if(x < 0) x = width - 1; 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() { system("cls"); setup(); while(!gameOver){ draw(); input(); logic(); Sleep(100); } return 0; }