当前位置:实例文章 » 其他实例» [文章]200行代码写一个简易的C++小黑窗贪吃蛇游戏

200行代码写一个简易的C++小黑窗贪吃蛇游戏

发布人:shili8 发布时间:2025-02-01 06:28 阅读次数:0

**贪吃蛇游戏实现**
=====================### **游戏规则**

* 游戏背景是一个简单的黑白窗口,玩家控制一个方向向上的蛇。
* 蛇可以移动、吃食物并增长长度。
* 当蛇撞到墙壁或自身时,游戏结束。

### **代码实现**

#### **头文件和类定义**

cpp// snake_game.h#ifndef SNAKE_GAME_H#define SNAKE_GAME_H#include <iostream>
#include <vector>

class SnakeGame {
public:
 SnakeGame();
 ~SnakeGame();

 void run();

private:
 int width_;
 int height_;
 std::vector<std::pair<int, int>> snake_;
 std::pair<int, int> food_;

};

#endif // SNAKE_GAME_H


#### **类实现**
cpp// snake_game.cpp#include "snake_game.h"

SnakeGame::SnakeGame() : width_(20), height_(10) {
 // 初始化游戏窗口大小}

SnakeGame::~SnakeGame() {}

void SnakeGame::run() {
 // 游戏主循环 while (true) {
 // 清屏 std::cout << "033[2J033[H";

 // 绘制蛇和食物 for (int i =0; i < height_; ++i) {
 for (int j =0; j < width_; ++j) {
 bool isSnake = false;
 for (auto& pos : snake_) {
 if (pos.first == j && pos.second == i) {
 std::cout << "*";
 isSnake = true;
 break;
 }
 }
 if (!isSnake) {
 if (food_.first == j && food_.second == i) {
 std::cout << "F";
 } else {
 std::cout << " ";
 }
 }
 }
 std::cout << "
";
 }

 // 获取用户输入 int dir =0;
 std::cin >> dir;

 // 更新蛇位置 switch (dir) {
 case1: // 上 snake_.push_back({snake_[snake_.size() -1].first, snake_[snake_.size() -1].second -1});
 break;
 case2: // 右 snake_.push_back({snake_[snake_.size() -1].first +1, snake_[snake_.size() -1].second});
 break;
 case3: // 下 snake_.push_back({snake_[snake_.size() -1].first, snake_[snake_.size() -1].second +1});
 break;
 case4: // 左 snake_.push_back({snake_[snake_.size() -1].first -1, snake_[snake_.size() -1].second});
 break;
 }

 // 判断是否吃到食物 if (snake_[snake_.size() -1] == food_) {
 // 吃到食物,生成新食物 food_ = {rand() % width_, rand() % height_};
 } else {
 // 不吃到食物,移除蛇尾部 snake_.erase(snake_.begin());
 }

 // 判断是否撞墙或自身 if (snake_[snake_.size() -1].first < 0 || snake_[snake_.size() -1].first >= width_ ||
 snake_[snake_.size() -1].second < 0 || snake_[snake_.size() -1].second >= height_) {
 // 撞墙,游戏结束 std::cout << "Game Over!
";
 return;
 }
 for (int i = snake_.size() -2; i >=0; --i) {
 if (snake_[i] == snake_[snake_.size() -1]) {
 // 撞自身,游戏结束 std::cout << "Game Over!
";
 return;
 }
 }

 // 等待下一帧 std::this_thread::sleep_for(std::chrono::milliseconds(100));
 }
}


#### **main函数**
cpp// main.cpp#include "snake_game.h"

int main() {
 SnakeGame game;
 game.run();
 return0;
}

### **游戏运行**

1. 编译代码:`g++ -std=c++11 snake_game.cpp main.cpp -o snake_game`
2. 运行游戏:`./snake_game`

### **注意事项**

* 游戏窗口大小可以通过修改 `width_` 和 `height_` 变量来调整。
* 食物的生成位置是随机的,可以通过修改 `food_` 变量来改变。
* 当蛇撞到墙壁或自身时,游戏会自动结束。

### **贡献**

感谢您阅读本文档!如果您有任何问题或建议,请在下面的评论区留言。

相关标签:c++游戏开发语言
其他信息

其他资源

Top