#include<bits/stdc++.h>
#include<conio.h> // 用于获取按键输入using namespace std;const int width = 20;
const int height = 20;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100]; // 蛇的身体位置数组
int nTail; // 蛇的长度
enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN};
eDirecton dir;void Setup() {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 << "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 << 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':dir = STOP;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;default:break; // do nothing}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)dir = STOP; // 如果蛇咬到自己,游戏结束if (x == fruitX && y == fruitY) {score += 10;fruitX = rand() % width;fruitY = rand() % height;nTail++; // 吃到果实,蛇长增加}
}int main() {Setup();while (dir != STOP) {Draw();Input();Logic();// 通过sleep调整游戏速度
#ifdef _WIN32Sleep(10); // Windows系统
#elseusleep(10000); // Unix/Linux系统
#endif}return 0;
}
完