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