超经典C++益智游戏Number Maze

下面是一个复杂的C++益智游戏,名为"Number Maze",玩家需要通过移动数字来解决迷宫。

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <ctime>
#include <cstdlib>

class NumberMaze {
    
    
private:
    std::vector<std::vector<int>> maze;
    std::pair<int, int> playerPos;
    int stepsCount;
    int targetNumber;

public:
    NumberMaze(int size)
        : maze(size, std::vector<int>(size)), stepsCount(0) {
    
    }

    void generateMaze() {
    
    
        srand(static_cast<unsigned>(time(nullptr)));
        int size = maze.size();

        // Generate random numbers for the maze
        std::vector<int> numbers;
        for (int i = 0; i < size * size; i++) {
    
    
            numbers.push_back(i);
        }

        std::random_shuffle(numbers.begin(), numbers.end());

        // Fill in the maze with numbers
        int index = 0;
        for (int i = 0; i < size; i++) {
    
    
            for (int j = 0; j < size; j++) {
    
    
                maze[i][j] = numbers[index++];
            }
        }

        // Set player position and target number
        playerPos = std::make_pair(size - 1, size - 1);
        targetNumber = 0;
    }

    void displayMaze() const {
    
    
        int size = maze.size();

        // Display the maze
        for (int i = 0; i < size; i++) {
    
    
            for (int j = 0; j < size; j++) {
    
    
                if (i == playerPos.first && j == playerPos.second) {
    
    
                    std::cout << " P ";
                } else {
    
    
                    std::cout << " " << maze[i][j] << " ";
                }
            }
            std::cout << std::endl;
        }

        // Display the steps count and target number
        std::cout << "Steps: " << stepsCount << std::endl;
        std::cout << "Target: " << targetNumber << std::endl;
        std::cout << std::endl;
    }

    bool isGameOver() const {
    
    
        int size = maze.size();
        return playerPos == std::make_pair(0, 0) && maze[0][0] == targetNumber;
    }

    bool isValidMove(int row, int col) const {
    
    
        int size = maze.size();
        return row >= 0 && row < size && col >= 0 && col < size && maze[row][col] <= targetNumber;
    }

    void makeMove(int row, int col) {
    
    
        if (isValidMove(row, col)) {
    
    
            playerPos = std::make_pair(row, col);
            stepsCount++;
            targetNumber = std::max(targetNumber, maze[row][col]);
        } else {
    
    
            std::cout << "Invalid move!" << std::endl;
        }
    }
};

int main() {
    
    
    int size;
    std::cout << "Enter the size of the maze: ";
    std::cin >> size;

    NumberMaze game(size);
    game.generateMaze();

    while (!game.isGameOver()) {
    
    
        game.displayMaze();

        int row, col;
        std::cout << "Enter the row and column to move: ";
        std::cin >> row >> col;

        game.makeMove(row, col);
    }

    std::cout << "Congratulations! You solved the maze in " << game.getStepsCount() << " steps." << std::endl;

    return 0;
}

此示例中的"Number Maze"游戏是一个基于数字移动的益智游戏。玩家需要通过移动来解决迷宫。迷宫由数字填充,玩家初始位置是迷宫的右下角,目标是移动到迷宫的左上角并达到目标数字。玩家只能移动到比目标数字小的位置。每次移动后,玩家的步数会增加,并且目标数字会更新为当前位置的数字和目标数字中较大的那个。

玩家可以选择移动到迷宫中的任意位置,但是必须遵守以下规则:

  • 移动只能在迷宫的上方、下方、左侧或右侧进行,不能进行斜角移动。
  • 移动只能到达数字小于或等于目标数字的位置。

游戏截至条件是玩家移动到迷宫的左上角位置,并且该位置的数字等于目标数字。

在游戏过程中,会显示迷宫的当前状态,包括玩家的位置、步数以及目标数字。玩家需要根据这些信息进行移动。

一旦玩家解决完迷宫,会显示出所用的步数。

这个复杂的益智游戏示例展示了如何使用C++编程构建一个需要策略和思考的互动游戏。玩家需要制定移动策略来解决迷宫,并尽可能减少所用的步数。

猜你喜欢

转载自blog.csdn.net/yaosichengalpha/article/details/131633482