How to use c++ to make a parkour game

1. Choice of game engine and development environment

There are many mature game engines available in the market today, such as Unity, Unreal Engine, Cocos2d-x, etc. These engines provide a complete game development framework, which can save a lot of low-level development work and make game development more efficient. Choose a game engine that suits you according to your needs and experience.

In addition to the game engine, you also need to choose a development environment that suits you. If you use popular game engines such as Unity or Unreal Engine, they provide a powerful development environment by themselves and do not require other additional configurations. If you use a lighter game engine such as Cocos2d-x, you also need to install an IDE (Integrated Development Environment) such as Visual Studio, Xcode or Eclipse.

2. Game production process

The core of the parkour game is that the player keeps running in the game, avoiding obstacles, and getting as high a score as possible. Therefore, the key to game development is to design the game rules, level settings and operation methods.

Game development is generally divided into the following steps:

(1) Game Design

In the game design stage, it is necessary to determine the general content, gameplay and style of the game. Parkour games mainly test the player’s reaction speed and operating skills, so it is necessary to set different levels and increase the difficulty, so that players can experience challenges and a sense of accomplishment.

(2) Write code

Write game codes according to game rules and design schemes. Using C++ language to implement parkour games can provide higher performance and flexibility.

(3) Add game resources

Resources are an integral part of game production, including pictures, music, sound effects, etc. In a parkour game, you need to add running characters, obstacles, backgrounds, etc.

(4) Testing and improvement

After finishing the game, it needs to be tested and optimized. Testing includes game logic, level design, game performance, and more. According to the test results, adjust and improve the game.

3. Key technical points

(1) Game state machine

The state machine is a commonly used model in game programming, which can effectively separate the relationship between game logic and views. In a parkour game, the state of a character includes standing, running, jumping, sliding, etc., which need to be managed in the state machine.

(2) Collision detection

In the parkour game, the character needs to avoid obstacles, so the collision detection function needs to be implemented. When the character collides with an obstacle, the game should end or the life should be deducted.

(3) Animation effect

Animation effects are very important to improve the playability and experience of the game, allowing players to feel more realistic game scenes and operation methods. In parkour games, actions such as running, jumping, and sliding need to be realized through animation.

4. Summary

Parkour is a simple but challenging game type, suitable for beginners to practice. Using C++ language and a suitable game engine, you can quickly build a parkour game and lay the foundation for your own game development. Of course, it is necessary to pay attention to the game rules and design during the development process, so as to improve the playability and fun of the game as much as possible.

Also

|

|

No

|

|

Yes

|

|

End

The following is a sample code for a simple C++ parkour game. Since the design and implementation of parkour games are relatively complicated, only the basic framework and the realization of key functions are given here.

#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <windows.h> // for clearing the screen

using namespace std;

// structure defining roles and obstacles
struct Role {
    int x; // abscissa
    int y; // vertical coordinate
    int v; // velocity
    int score; // score
    bool isJumping; // is jumping
};

struct Obstacle {
    int x; // abscissa
    int y; // vertical coordinate
};

// define global variables
int width = 60; // game interface width
int height = 20; // game interface height
int obstacleInterval = 15; // Interval between obstacles
int obstacleTimer = obstacleInterval; // obstacle timer
Role role = {1, height - 2, 0, 0, false}; // initialize role
Obstacle obstacle; // Initialize the obstacle

// Game initialization
void init() {
    srand((unsigned)time(NULL)); // initialize the random number seed
}

// game drawing
void draw(Role role, Obstacle obstacle) {
    system("cls"); // clear screen
    for (int i = 0; i < height; i ++ ) {
        for (int j = 0; j < width; j ++ ) {
            if (i == role.y & amp; & amp; j == role.x) { // draw the role
                cout << "O";
            } else if (i == obstacle.y & amp; & amp; j == obstacle.x) { // draw the obstacle
                cout << "*";
            } else if (i == height - 1) { // draw bottom border
                cout << "-";
            } else { // draw space
                cout << " ";
            }
        }
        cout << endl;
    }
    cout << "score: " << role.score << endl; // draw score
}

// character movement
void move(Role & amp;role) {
    role.x + = role.v; // change position according to velocity
    if (role.x < 1) {
        role.x = 1; // Don't allow crossing the left border
    } else if (role.x > width - 2) {
        role.x = width - 2; // not allowed to cross the right border
    }
}

// obstacle moves
void move(Obstacle & obstacle) {
    obstacle.x--; // obstacle moves to the left
    if (obstacle.x < 1) { // obstacle leaves the screen
        obstacleTimer = 0; // reset timer
    }
}

// Impact checking
bool isCollided(Role role, Obstacle obstacle) {
    if (role.x == obstacle.x & amp; & amp; role.y == obstacle.y) { // collision detection
        return true;
    } else {
        return false;
    }
}

// handle user input
void handleInput(Role & amp;role) {
    if (GetAsyncKeyState(VK_SPACE) & amp; & amp; !role.isJumping) { // space bar jumping
        role.v = 1; // velocity changes up
        role.isJumping = true; // token is jumping
    }
    if (GetAsyncKeyState(VK_DOWN)) { // Accelerate down the direction key
        role.v = -1; // velocity changes downward
    }
}

// update game state
void update() {
    move(role); // role moves
    obstacleTimer ++ ; // add 1 to the timer
    if (obstacleTimer >= obstacleInterval) { // Obstacle appears
        obstacleTimer = 0; // reset timer
        obstacle.x = width - 2; // obstacle enters the screen from the right
        obstacle.y = height - 2 - rand() % 3; // Randomly generate the ordinate of the obstacle
    }
    move(obstacle); // Obstacle moves
    if (isCollided(role, obstacle)) { // collision detection
        cout << "Game Over!" << endl;
        exit(0); // end the game
    }
    if (role.isJumping) { // Handle the jumping state
        role.v--; // Decrease in velocity
        if (role.v <= 0) { // end of jump
            role.isJumping = false; // mark the end of jumping
        }
    }
    role.score ++ ; // update score
}

// main function
int main() {
    init(); // Game initialization
    while (true) { // game loop
        draw(role, obstacle); // game drawing
        handleInput(role); // handle user input
        update(); // update game state
        Sleep(50); // a little delay
    }
    return 0;
}

I hope this article can bring you help, thank you for reading this blog post!