以下是一个简单实现迷宫游戏的C++代码示例:

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <chrono>
#include <thread>

using namespace std;

const char WALL = '■';
const char PATH = ' ';
const char START = 'S';
const char END = 'E';

struct Position {
    int x;
    int y;
};

class MazeGame {
public:
    MazeGame(int size, int difficulty) {
        this->size = size;
        this->difficulty = difficulty;
        maze.resize(size, vector<char>(size, WALL));
        visited.resize(size, vector<bool>(size, false));
        srand(time(nullptr));
    }

    void generateMaze() {
        start = randomPosition();
        end = randomPosition();
        while (start.x == end.x && start.y == end.y) {
            end = randomPosition();
        }
        maze[start.x][start.y] = START;
        maze[end.x][end.y] = END;
        visited[start.x][start.y] = true;
        generateMazeRecursive(start.x, start.y);
    }

    void playGame() {
        Position current = start;
        int steps = 0;
        int score = 0;
        vector<Position> history;
        history.push_back(current);

        while (current.x != end.x || current.y != end.y) {
            printMaze();
            cout << "Score: " << score << endl;
            cout << "Steps: " << steps << endl;
            cout << "Enter the direction (WASD): ";
            char direction;
            cin >> direction;

            Position next = current;
            if (direction == 'w' || direction == 'W') {
                next.x--;
            } else if (direction == 'a' || direction == 'A') {
                next.y--;
            } else if (direction == 's' || direction == 'S') {
                next.x++;
            } else if (direction == 'd' || direction == 'D') {
                next.y++;
            }

            if (isValidMove(next)) {
                current = next;
                history.push_back(current);
                steps++;
                score += calculateScore();
            } else {
                cout << "Invalid move!" << endl;
            }
        }

        printMaze();
        cout << "Score: " << score << endl;
        cout << "Steps: " << steps << endl;
        cout << "Congratulations! You reached the end of the maze!" << endl;
    }

    void replayGame() {
        for (const Position& pos : history) {
            printMaze();
            cout << "Score: " << score << endl;
            cout << "Steps: " << steps << endl;
            cout << "Replaying..." << endl;
            maze[pos.x][pos.y] = '@'; // mark the path in replay
            this_thread::sleep_for(chrono::milliseconds(500));
        }
        printMaze();
        cout << "Score: " << score << endl;
        cout << "Steps: " << steps << endl;
        cout << "Replay finished!" << endl;
    }

private:
    int size;
    int difficulty;
    vector<vector<char>> maze;
    vector<vector<bool>> visited;
    Position start;
    Position end;
    vector<Position> history;
    int steps = 0;
    int score = 0;

    Position randomPosition() {
        Position pos;
        pos.x = rand() % size;
        pos.y = rand() % size;
        return pos;
    }

    void generateMazeRecursive(int x, int y) {
        vector<char> directions = {'U', 'D', 'L', 'R'};
        random_shuffle(directions.begin(), directions.end());

        for (char direction : directions) {
            int nextX = x;
            int nextY = y;

            if (direction == 'U') {
                nextX--;
            } else if (direction == 'D') {
                nextX++;
            } else if (direction == 'L') {
                nextY--;
            } else if (direction == 'R') {
                nextY++;
            }

            if (nextX >= 0 && nextX < size && nextY >= 0 && nextY < size && !visited[nextX][nextY]) {
                visited[nextX][nextY] = true;
                maze[nextX][nextY] = PATH;
                generateMazeRecursive(nextX, nextY);
            }
        }
    }

    bool isValidMove(const Position& pos) {
        if (pos.x < 0 || pos.x >= size || pos.y < 0 || pos.y >= size) {
            return false;
        }
        return maze[pos.x][pos.y] == PATH;
    }

    void printMaze() {
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                cout << maze[i][j] << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }

    int calculateScore() {
        int baseScore = size * difficulty;
        return baseScore - steps;
    }
};

int main() {
    int size, difficulty;
    cout << "Enter the size of the maze: ";
    cin >> size;
    cout << "Enter the difficulty level (1-3): ";
    cin >> difficulty;

    MazeGame game(size, difficulty);
    game.generateMaze();
    game.playGame();

    char replay;
    cout << "Do you want to replay the game? (Y/N): ";
    cin >> replay;

    if (replay == 'Y' || replay == 'y') {
        game.replayGame();
    }

    return 0;
}

该代码实现了一个简单的迷宫游戏,具备自动生成迷宫、游戏过程模拟和回放等功能。游戏通过递归回溯算法生成迷宫,使用随机算法配置起点和终点。玩家可以通过键盘输入选择上下左右移动,并实时显示迷宫、得分和步数。游戏结束后会输出最终得分,并询问是否进行回放操作

迷宫游戏:设计一个游戏让用户实现迷宫探索要求:; 使用c++进行编译 1程序能够自动生成一个NN的迷宫建议N可以由键盘录 入迷宫中墙体用字符■进行标识迷宫要有难度等级不 同难度等级的迷宫的大小规模和其中的岔路口数量互不相同 2生成的迷宫自动配置起点和终点起点到终点必须要有路径 相同程序能够统计从起点走到终点的次数以及每一次的得分 走迷宫的得分规则要与走迷宫用时、迷宫难度等级相关具体评判 规则请自行

原文地址: http://www.cveoy.top/t/topic/iL3S 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录