每当我显示蛇的长度时,如何解决这个空白出现在两侧?

How would I fix this whitespace from appearing on the sides whenever I am showing the snakes length?

每当我 运行 我的程序时,我都会检查我是否会放下 3 os 它会向右移动。我知道问题是我有一堆 if 循环通过的语句,但是我有一个 for 循环在那里放置蛇迹。我知道所有这些os如果都不好。

我尝试将 for 循环的顶部更改为始终为真的 if 语句,但没有任何效果。我对如何检查所有坐标感到困惑,但两侧仍然没有弹出墙。

我是初学者,所以不要那么讨厌我的代码。

snake.cpp
    #include <iostream>
    #include <conio.h>
    #include <random>
    #include <time.h>
    #include "snake.hpp"
    void endGame(int score);
    
    const int KEY_ARROW_CHAR1 = 224;
    const int KEY_ARROW_UP = 72;
    const int KEY_ARROW_DOWN = 80;
    const int KEY_ARROW_LEFT = 75;
    const int KEY_ARROW_RIGHT = 77;
    
    void snake::input() {
        // checks for arrow key input
        if (_kbhit()) {
            //stores keycode
            int key = _getch();
            //checks if key is arrow key
            if (key == KEY_ARROW_CHAR1) {
                //stores arrow key
                key = _getch();
                //checks if arrow key is up
                if (key == KEY_ARROW_UP) {
                    direction = '^';
                }
                //checks if arrow key is down
                else if (key == KEY_ARROW_DOWN) {
                    direction = 'v';
                }
                //checks if arrow key is left
                else if (key == KEY_ARROW_LEFT) {
                    direction = '<';
                }
                //checks if arrow key is right
                else if(key == KEY_ARROW_RIGHT) {
                    direction = '>';
                }
            }
        } 
        switch (direction) {
        case '^':
            snakeCoords[2]--;
            break;
        case 'v':
            snakeCoords[2]++;
            break;
        case '>':
            snakeCoords[0]++;
            break;
        case '<':
            snakeCoords[0]--;
        }
        checkForObjects();
    }
    bool snake::checkForObjects() {
        if ((snakeCoords[0] == 40 || snakeCoords[0] ==  0) || (snakeCoords[2] == 20 || snakeCoords[2] == 0)) {
            endGame(score);
        }
        if (snakeCoords[0] == fruitCoords[0] && snakeCoords[2] == fruitCoords[2]) {
            score++;
            getFruitLoc();
            return true;
        }
        return false;
    }
    void snake::getFruitLoc() { 
        srand(time(0));
        fruitCoords[0] = rand() % 39;
        fruitCoords[2] = rand() % 19;
    }
    void endGame(int score) {
        std::cout << "you died, your score was  " << score;
        exit(0);
    }
    

```
#include <iostream>
#include <conio.h>
#include <random>
#include "snake.hpp"
#include <vector>
void createArena(char direction);
//Coordinates for snake
std::vector <std::vector<int>> previousCoords{
    {14, 10},
    {13, 10},
    {12, 10}
};

snake coordManager{};
int score{0};
int main()
{
    //make terminal green
    system("color 0a");
    while (true) {
        std::cout << "\t" << score;
        //pushes ascii arena down
        for (size_t i{}; i <= 5; i++) {
            std::cout << std::endl;
        }
        score = coordManager.score;
        //updates snake based on coordinates
        createArena(coordManager.direction);
        //manages all snake movements
        coordManager.input();
        //reminder this clears the screan
        system("CLS");
    }
    
}
void createArena(char direction) {
    //offsets screen
    
    std::cout << "\t\t\t\t";
    for (size_t y{}; y <= 20; y++) {
        for (size_t x{}; x <= 40; x++) {
            //checks if it hits the snakes coordinates
            for (size_t i{}; i < previousCoords.size();) {
                 if (x == previousCoords.at(i).at(0) && y == previousCoords.at(i).at(1)) {
                    std::cout << "O";
                 }
                 i++;
            }     
            if (coordManager.snakeCoords[0] == x && coordManager.snakeCoords[2] == y) {
                std::cout << direction;
            }  
            else if (x == 0 || x == 40) {
                std::cout << '|';
            }
            else if (y == 0 || y == 20) {
                std::cout << '-';
            }
            else if(coordManager.fruitCoords[0] == x && coordManager.fruitCoords[2] == y) {
                std::cout << "F";
            }
            
            else {
                std::cout << " ";
            }
        }
        
        //offsets again
        std::cout << std::endl << "\t\t\t\t";
    }
}

    #include <conio.h>
    #include <random>
    #include <time.h>
    
    class snake {
    public:
        void input();
        bool checkForObjects();
        int score{};
        int snakeCoords[2]{
            /* X */ 15,
            /* Y */ 10
        };
        int fruitCoords[2]{
            /* X */  rand() % 39,
            /* Y */  rand() % 19
        };
        char direction{'O'};
    private:
        void getFruitLoc();
    };


https://i.stack.imgur.com/bdSNf.png

我让它工作了,我使用了一个布尔值,如果它不同于空白,我会改变它。这是一个简单的修复抱歉。