c - 如何在终端自动执行代码

标签 c time time.h

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

代码:

#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;
}

最佳答案

最简单的方法是使用 conio 库

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

如果您使用的是 linux 或 mac

#include <unistd.h>

如果您使用的是 Windows

#include <windows.h>

这就是循环开始的样子

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++;
    }

关于c - 如何在终端自动执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977908/

相关文章:

c - 简单的<Time.h>程序占用大量CPU

clock() 在 C 中返回一个负值

c - 使用指针访问嵌套结构中的数据

c - 为什么\b 在字符串中间使用时会删除在\b 之前写入的一个字符,但在末尾使用时却不会?

c# - 花时间运行程序

c++ - 以编程方式计算 Windows 上进程的开始时间

c - C中的进程间通信(IPC)

java - 如何在java或c中从8位样本中生成1个字节?

C++计算时间间隔

c++ - 64 位错误?