C++用vector和■打印SNAKE
时间: 2024-02-09 17:35:56 浏览: 130
c snake c++
以下是使用C++ STL的vector和Unicode字符集打印SNAKE的示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义SNAKE的长度和宽度
const int length = 10, width = 20;
// 定义SNAKE的初始位置和方向
int x = width / 2, y = length / 2;
int dx = -1, dy = 0;
// 定义SNAKE的身体,初始为3个格子
vector<pair<int, int>> body = {{x, y}, {x + 1, y}, {x + 2, y}};
// 打印SNAKE
while (true) {
// 清空屏幕
system("cls");
// 打印SNAKE
vector<vector<wchar_t>> screen(length, vector<wchar_t>(width, L' '));
for (auto b : body)
screen[b.second][b.first] = L'■';
for (auto row : screen) {
for (auto c : row)
wcout << c;
wcout << endl;
}
// 移动SNAKE的头部
x += dx;
y += dy;
// 检查是否撞墙或撞到自己的身体
if (x < 0 || x >= width || y < 0 || y >= length) {
cout << "Game over!" << endl;
break;
}
for (auto b : body) {
if (x == b.first && y == b.second) {
cout << "Game over!" << endl;
break;
}
}
// 在SNAKE的头部添加一个新的格子
body.insert(body.begin(), {x, y});
// 如果SNAKE的头部恰好撞到食物,就不需要删除尾部
bool eat = false;
// 检查是否撞到食物,并移动食物的位置
int fx = rand() % width, fy = rand() % length;
for (auto b : body) {
if (fx == b.first && fy == b.second) {
fx = rand() % width;
fy = rand() % length;
}
}
if (x == fx && y == fy)
eat = true;
else
body.pop_back();
// 如果SNAKE吃掉了食物,就在头部添加一个新的格子
if (eat)
body.insert(body.begin(), {x, y});
// 等待一段时间,控制SNAKE的速度
Sleep(100);
}
return 0;
}
```
这段代码使用vector表示SNAKE的身体,vector的每个元素是一个pair<int, int>,表示一个格子的坐标。使用vector可以方便地添加和删除格子。使用二维vector表示屏幕,每个元素是一个Unicode字符,使用L'■'表示一个方块。使用system("cls")清空屏幕。使用rand()生成随机数,使用Sleep()控制速度。
阅读全文