Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C+上独立运行函数+; 我试图用C++在控制台上做游戏。目前,我主要有三个功能 int main() { ... while (!level1 && !player.dead) { drowing(l1_map); PlayerMovements(empty, l1_map); Enemy1Movements(enemy1, l1_map, lastloc); cls(); } }_C++ - Fatal编程技术网

如何在C+上独立运行函数+; 我试图用C++在控制台上做游戏。目前,我主要有三个功能 int main() { ... while (!level1 && !player.dead) { drowing(l1_map); PlayerMovements(empty, l1_map); Enemy1Movements(enemy1, l1_map, lastloc); cls(); } }

如何在C+上独立运行函数+; 我试图用C++在控制台上做游戏。目前,我主要有三个功能 int main() { ... while (!level1 && !player.dead) { drowing(l1_map); PlayerMovements(empty, l1_map); Enemy1Movements(enemy1, l1_map, lastloc); cls(); } },c++,C++,第一个函数绘制地图: void drowing(char l1_map[26][50]) { for (unsigned int i = 0; i < 26; i++) { cout << endl; for (unsigned int x = 0; x < 50; x++) { if (x == 0) { cout << " ";

第一个函数绘制地图:

void drowing(char l1_map[26][50]) {


    for (unsigned int i = 0; i < 26; i++) {

        cout << endl;

        for (unsigned int x = 0; x < 50; x++) {

            if (x == 0) {
                cout << " ";
            }


            //Draws the map and change colours;
            //player
            if (l1_map[i][x] == player.character) {
                if (l1_map[player.locX][player.locY] == l1_map[enemy1.locX][enemy1.locY]) {

                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 252);
                    cout << l1_map[i][x];
                }

                if (l1_map[player.locX][player.locY] != l1_map[enemy1.locX][enemy1.locY]) {

                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 250);
                    cout << l1_map[i][x];
                }

            }//wall
            else if (l1_map[i][x] == wall) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 128);
                cout << l1_map[i][x];
            }//enemy
            else if (l1_map[i][x] == enemy1.character) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 252);
                cout << l1_map[i][x];
            }//empty space
            else if (l1_map[i][x] == 32) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 509);
                cout << l1_map[i][x];
            }//key1
            else if (l1_map[i][x] == key1.character && !key1.picked) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 509);
                cout << l1_map[i][x];
            }//key2
            else if (l1_map[i][x] == key2.character && !key1.picked) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 253);
                cout << l1_map[i][x];
            }//key3
            else if (l1_map[i][x] == key3.character && !key1.picked) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 253);
                cout << l1_map[i][x];
            }//doors1
            else if (l1_map[i][x] == doors1.character) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 253);
                cout << l1_map[i][x];
            }//doors2
            else if (l1_map[i][x] == doors2.character) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 240);
                cout << l1_map[i][x];
            }//doors3
            else if (l1_map[i][x] == doors3.character) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 240);
                cout << l1_map[i][x];
            }//doors4
            else if (l1_map[i][x] == doors3.character) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 240);
                cout << l1_map[i][x];
            }//exit
            else if (l1_map[i][x] == get_out1.character && !get_out1.open) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 139);
                cout << l1_map[i][x];

            }
            else
            {

                cout << l1_map[i][x];
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);

            }


        }

    }

}
第三个功能是上下移动的敌人:

int Enemy1Movements(enemy& enemy1, char l1_map[26][50], char& lastloc) {

    //this_thread::sleep_for(chrono::milliseconds(500));
    char empty = ' ';

    bool ValidUp = false;
    bool ValidDown = false;
    bool ValidLeft = false;
    bool ValidRight = false;



    if (l1_map[enemy1.locX + 1][enemy1.locY] != wall && l1_map[enemy1.locX + 1][enemy1.locY] != '-') {

        ValidDown = true;
    }
    if (l1_map[enemy1.locX - 1][enemy1.locY] != wall && l1_map[enemy1.locX - 1][enemy1.locY] != '-') {
        ValidUp = true;
    }
    if (l1_map[enemy1.locX][enemy1.locY - 1] != wall && l1_map[enemy1.locX - 1][enemy1.locY] != '-') {
        ValidLeft = true;
    }
    if (l1_map[enemy1.locX][enemy1.locY + 1] != wall && l1_map[enemy1.locX + 1][enemy1.locY] != '-') {
        ValidRight = true;
    }


    ////enemy move up and down
    //////////////////////////


    if (lastloc != 'u' && ValidDown) {


        enemy1.locX++;
        lastloc = 'd';




        if (l1_map[enemy1.locX - 1][enemy1.locY] == enemy1.character) {

            l1_map[enemy1.locX - 1][enemy1.locY] = 32;

        }

    }
    else if (lastloc == 'd' && ValidUp) {

        enemy1.locX--;
        lastloc = 'u';


        if (l1_map[enemy1.locX + 1][enemy1.locY] == enemy1.character) {

            l1_map[enemy1.locX + 1][enemy1.locY] = 32;

        }


    }
    else {

        if (ValidUp) {

            enemy1.locX--;
            lastloc = 'u';


            if (l1_map[enemy1.locX + 1][enemy1.locY] == enemy1.character) {

                l1_map[enemy1.locX + 1][enemy1.locY] = 32;

            }

        }
        else {

            enemy1.locX++;
            lastloc = 'd';

            if (l1_map[enemy1.locX - 1][enemy1.locY] == enemy1.character) {

                l1_map[enemy1.locX - 1][enemy1.locY] = 32;

            }



        }
    }



    return NULL;



}
我正在努力实现的目标:

我需要减慢
EnemyMovemens()
功能的速度,因为敌人移动得很快。或者使
PlayerMovements()
函数独立于其他函数

问题:

我尝试过使用线程。函数,如
this\u thread::sleep\u for()
sleep()
。将它们放入
EnemyMovements()
函数中。在这种情况下,它会减慢所有的应用程序和我的播放器移动非常缓慢

我不需要代码,因为我喜欢自学。我只是需要一个指引,告诉我现在该往哪个方向走


OS:Win 10

基本问题是游戏循环中没有任何计时,因此一切都以相同的速度发生。网上有一些讨论游戏计时循环的好文章,例如:这篇文章将引导您完成从现在使用的方法到将游戏更新计时与显示计时分离的更好方法的步骤

这篇文章并没有告诉你如何让你的敌人相对于你的玩家慢下来——一种方法是使用一个EneySpeed变量,并使用类似于:

// outside main loop
int enemySlowness = 20;  // adjust this as needed
int enemyMoveTimer = 0;

...
if (++enemyMoveTimer > enemySlowness)
{
    Enemy1Movements(enemy1, l1_map, lastloc);
    enemyMoveTime = 0;
}

这种方法存在一些问题,但再加上那篇文章中的一些想法,应该会让您走上正轨。

非常感谢。这就解决了我的问题。这个链接也非常有用。我已经改进了我的游戏:)
// outside main loop
int enemySlowness = 20;  // adjust this as needed
int enemyMoveTimer = 0;

...
if (++enemyMoveTimer > enemySlowness)
{
    Enemy1Movements(enemy1, l1_map, lastloc);
    enemyMoveTime = 0;
}