如何在终端中自动执行代码

时间:2023-01-12 03:06:44

So i built this really simple game in c language, where you are a ship and need to avoid a bullet rising up the screen. Once I run it in terminal, every time I want to move the ship I enter a (left) s(straight) or d(right). I was wondering if there was a way to not be forced use the enter key after every move and rather have the bullet gradually rise up like one space a second or something automatically.

所以我用c语言构建了这个非常简单的游戏,你是一艘船,需要避免子弹上升到屏幕上。一旦我在终端运行它,每次我想移动船时,我输入(左)s(直)或d(右)。我想知道是否有一种方法可以在每次移动后不被强制使用回车键,而是让子弹逐渐上升,就像一秒钟或一些空间自动升起。

The code:

代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <assert.h>
#define height 20
#define width 15

int main (int argc, char *argv[]) {
    printf("Beginning Game\n");
    printf("Press 's' to start\n");
    char move = 0;
    int count = 6;
    int turn = 0;
    int row = 0;
    int col = 0;
    int left = 0;
    int right = 14;
    srand(time(NULL));
    int shootcol =  rand() % (width - 3) + 2 ;
    int shootrow = height + 1;
    int shoot2col = rand() % (width - 3) + 2 ;
    int shoot2row = height + 15; 



while (move != 'e') {
    printf("\n");
    scanf(" %c", &move);
    if (move == 's') {
        turn++;
    }
    else if (move == 'a') {
        count--;
        turn++;

    } else if (move == 'd') {
        count++;
        turn++;

    } 
    row = 0;
    col = 0;
    printf("TURN: %d\n", turn);
    while (row < height) {
        while (col < width) {
            //printf("%d", col );
            if (((row == shootrow) && (col == shootcol)) || ((row == shoot2row) && (col == shoot2col))) {
                printf(":");


            } else if (col == left) {

                printf("|");


            } else if (col == right) {
                printf("|");

            } else if (row < 5) {
                printf(" ");

            } else if (row == 5) {

                if (col < count) {
                    printf(" ");
                } else if (col == count) {
                    printf("|");

                } else if (col == count + 1) {
                    printf("-");

                } else if (col == count + 2) {
                    printf("|");

                } else if (col >= count + 3)    {
                    printf(" ");
                }
            } else if (row == 6) {

                if (col < count) {
                    printf(" ");
                } else if (col == count) {
                    printf("\\");

                } else if (col == count + 1) {
                    printf(" ");

                } else if (col == count + 2) {
                    printf("/");

                } else if (col >= count + 3)    {
                    printf(" ");
                }

            } else {
                printf(" ");

            }
            col++;

        }
        col = 0;
        printf("\n");
        row++;

    }
    shootrow--;
    shoot2row--;
    if ((count == left) || (count == right - 2)) {
        printf("YOU LOSE!!\n");
        move = 'e';
    } else if ((shootrow == 5) || (shootrow == 4)) {
        if ((count == shootcol) || (count == shootcol - 2 ) || (count == shootcol - 1)) {
            printf("YOU LOSE!!\n");
            move = 'e';
        } if ((count == shoot2col) || (count == shoot2col - 2 ) || (count == shoot2col - 1)) {
            printf("YOU LOSE!!\n");
            move = 'e';
        }

    } if (shootrow <= 0) {
        shootrow = height - 1;
        shootcol =  rand() % (width - 3) + 2 ;
    } if (shoot2row <= 0) {
        shoot2row = height - 1;
        shoot2col = rand() % (width - 3) + 2;
    }

}

return 0;
}

1 个解决方案

#1


2  

The simplest way is using the conio library

最简单的方法是使用conio库

#include <conio.h>
#define DELAY 300    // define here the amount of milliseconds to sleep

If you are using linux or mac

如果你使用的是linux或mac

#include <unistd.h>

If you are using Windows

如果您使用的是Windows

#include <windows.h>

and this is how the beginning of your loop would look like

这就是循环开始的样子

while (move != 's')
    scanf(" %c", &move);

move = ' ';

while (move != 'e') {
    printf("\n");

    //Sleep(DELAY);    // windows only sleep 's' lowercase for linux
    usleep(DELAY);     // for mac

    if (_kbhit())
    {
        move = _getch();
    }

    if (move == 's') {
        turn++;
    }

#1


2  

The simplest way is using the conio library

最简单的方法是使用conio库

#include <conio.h>
#define DELAY 300    // define here the amount of milliseconds to sleep

If you are using linux or mac

如果你使用的是linux或mac

#include <unistd.h>

If you are using Windows

如果您使用的是Windows

#include <windows.h>

and this is how the beginning of your loop would look like

这就是循环开始的样子

while (move != 's')
    scanf(" %c", &move);

move = ' ';

while (move != 'e') {
    printf("\n");

    //Sleep(DELAY);    // windows only sleep 's' lowercase for linux
    usleep(DELAY);     // for mac

    if (_kbhit())
    {
        move = _getch();
    }

    if (move == 's') {
        turn++;
    }