做一个C++游戏开发高手

为了帮助大家更好地理解和掌握C++游戏开发的基础知识,我将通过两个例子帮助大家了解,这两个例子我都非常详细给大家写清楚步骤了。

1、一个简单的控制台游戏——猜数字游戏。这个游戏的目标是让用户猜测一个随机生成的数字,直到猜对为止。

2、一个稍微复杂一点的控制台游戏——“贪吃蛇”。这个游戏的目标是控制一条蛇吃掉食物,蛇每吃掉一个食物就会变长,同时避免撞到墙壁或自己的身体。

1、猜数字游戏

项目准备

1. 开发环境设置
  • 编译器:确保安装了C++编译器,例如GCC或Clang。
  • IDE:推荐使用Visual Studio、Code::Blocks或CLion。
2. 创建项目
  • 在IDE中创建一个新的C++控制台项目。
  • 创建一个源文件,例如main.cpp

所需知识点

  1. 基本输入输出:使用std::cinstd::cout进行输入输出。
  2. 随机数生成:使用<cstdlib><ctime>库生成随机数。
  3. 循环和条件语句:使用while循环和if条件语句来控制游戏逻辑。
  4. 函数:将代码组织成函数,提高代码的可读性和可维护性。

示例代码

#include <iostream>
#include <cstdlib>
#include <ctime>

// 函数声明
void playGame();

int main() {
    // 设置随机数种子
    std::srand(std::time(0));

    char playAgain = 'y';
    while (playAgain == 'y' || playAgain == 'Y') {
        playGame();
        std::cout << "Do you want to play again? (y/n): ";
        std::cin >> playAgain;
    }

    std::cout << "Thanks for playing! Goodbye!" << std::endl;
    return 0;
}

void playGame() {
    // 生成一个1到100之间的随机数
    int secretNumber = std::rand() % 100 + 1;
    int guess;
    int numberOfTries = 0;

    std::cout << "Welcome to the Guess the Number game!" << std::endl;
    std::cout << "I have chosen a number between 1 and 100." << std::endl;

    do {
        std::cout << "Enter your guess: ";
        std::cin >> guess;
        numberOfTries++;

        if (guess > secretNumber) {
            std::cout << "Too high! Try again." << std::endl;
        } else if (guess < secretNumber) {
            std::cout << "Too low! Try again." << std::endl;
        } else {
            std::cout << "Congratulations! You guessed the number in " << numberOfTries << " tries!" << std::endl;
        }
    } while (guess != secretNumber);
}

代码解释

  1. 头文件

    • <iostream>:用于输入输出操作。
    • <cstdlib>:包含生成随机数的函数。
    • <ctime>:包含获取当前时间的函数,用于设置随机数种子。
  2. 主函数

    • std::srand(std::time(0)):设置随机数种子,确保每次运行程序时生成的随机数不同。
    • playAgain:控制是否重新开始游戏。
    • while循环:如果用户选择继续玩,就调用playGame函数。
  3. playGame函数

    • secretNumber:生成1到100之间的随机数。
    • guess:存储用户的猜测。
    • numberOfTries:记录用户尝试的次数。
    • do-while循环:不断提示用户输入猜测,直到猜对为止。
    • if-else条件语句:根据用户的猜测给出相应的提示。

运行项目

  • 在IDE中编译并运行项目。
  • 按照提示输入数字进行猜测,直到猜对为止。
  • 选择是否重新开始游戏。

以上就是一个简单的C++控制台猜数字游戏的完整实现。通过这个示例,你可以学习到基本的C++编程知识,包括输入输出、随机数生成、循环和条件语句等。

2、贪吃蛇游戏

项目准备

1. 开发环境设置
  • 编译器:确保安装了C++编译器,例如GCC或Clang。
  • IDE:推荐使用Visual Studio、Code::Blocks或CLion。
2. 创建项目
  • 在IDE中创建一个新的C++控制台项目。
  • 创建一个源文件,例如main.cpp

所需知识点

  1. 基本输入输出:使用std::cinstd::cout进行输入输出。
  2. 二维数组:用于表示游戏地图。
  3. 结构体:用于表示蛇的身体部分和食物的位置。
  4. 循环和条件语句:用于控制游戏逻辑。
  5. 函数:将代码组织成函数,提高代码的可读性和可维护性。
  6. 字符操作:使用字符表示蛇和食物。
  7. 定时器:使用std::this_thread::sleep_for来控制游戏速度。
  8. 键盘输入:使用_getch()函数获取用户输入。

示例代码

#include <iostream>
#include <vector>
#include <conio.h>  // 用于_getch()
#include <thread>
#include <chrono>

const int width = 20;
const int height = 20;
bool gameOver;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;

void Setup() {
    gameOver = false;
    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++)
        std::cout << "#";
    std::cout << std::endl;

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            if (j == 0)
                std::cout << "#";
            if (i == y && j == x)
                std::cout << "O";
            else if (i == fruitY && j == fruitX)
                std::cout << "F";
            else {
                bool print = false;
                for (int k = 0; k < nTail; k++) {
                    if (tailX[k] == j && tailY[k] == i) {
                        std::cout << "o";
                        print = true;
                    }
                }
                if (!print)
                    std::cout << " ";
            }

            if (j == width - 1)
                std::cout << "#";
        }
        std::cout << std::endl;
    }

    for (int i = 0; i < width + 2; i++)
        std::cout << "#";
    std::cout << std::endl;
    std::cout << "Score:" << score << std::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':
            gameOver = true;
            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;
    }

    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)
            gameOver = true;
    }

    if (x == fruitX && y == fruitY) {
        score += 10;
        fruitX = rand() % width;
        fruitY = rand() % height;
        nTail++;
    }
}

int main() {
    Setup();
    while (!gameOver) {
        Draw();
        Input();
        Logic();
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
    return 0;
}

代码解释

  1. 常量定义

    • width 和 height:定义游戏地图的宽度和高度。
    • tailX 和 tailY:用于存储蛇的身体部分坐标。
    • nTail:蛇的身体长度。
    • dir:蛇的移动方向。
  2. Setup函数

    • 初始化游戏状态,包括蛇的初始位置、食物的位置、分数等。
  3. Draw函数

    • 清屏并绘制游戏地图,包括墙壁、蛇、食物和分数。
  4. Input函数

    • 获取用户的键盘输入,控制蛇的移动方向。
  5. Logic函数

    • 更新蛇的位置,检查是否吃到食物,检查是否撞到墙壁或自己的身体。
  6. main函数

    • 调用Setup函数初始化游戏。
    • 使用while循环不断更新游戏状态,直到游戏结束。

运行项目

  • 在IDE中编译并运行项目。
  • 使用WASD键控制蛇的移动。
  • 尽量让蛇吃到更多的食物,同时避免撞到墙壁或自己的身体。

以上就是一个简单的C++控制台贪吃蛇游戏的完整实现。通过这个示例,你可以学习到基本的C++编程知识,包括二维数组、结构体、循环和条件语句、字符操作、定时器和键盘输入等。

猜你喜欢

转载自blog.csdn.net/speaking_me/article/details/143189770