大家好,我是Linux上的C新手,作为一个学校项目,我必须以自上而下的方式制作赛车游戏,比如OutRun,但更简单。游戏应该在linux终端上运行,因为我没有同时学习C和SDL的心情。 至于项目,我打算做的是用一个充满零的动态矩阵绘制道路,当我按下右边一辆车(由twitter表情符号拍摄)将与旁边的案例交换价值,但是我我不知道如何正确地做到这一点,我已经找到了一个名为ncurses的函数,它创建了一个新窗口,让你移动光标,一个创建,填充和交换矩阵值的函数,以及一个函数让您在终端上从左向右移动光标。
打开一个新窗口
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#define KEY_ESCAPE 0x001b
#define KEY_ENTER 0x000a
#define KEY_UP 0x0105
#define KEY_DOWN 0x0106
#define KEY_LEFT 0x0107
#define KEY_RIGHT 0x0108
typedef struct carro CARRO;
struct carro {
int posx;
int posy;
char alignement;
char type;
char colour[10];
char custom[30];
char etat;
};
char key_pressed ()
{
struct termios oldterm, newterm;
int oldfd;
char c, result = 0;
tcgetattr (STDIN_FILENO, &oldterm);
newterm = oldterm;
newterm.c_lflag &= ~(ICANON | ECHO);
tcsetattr (STDIN_FILENO, TCSANOW, &newterm);
oldfd = fcntl (STDIN_FILENO, F_GETFL, 0);
fcntl (STDIN_FILENO, F_SETFL, oldfd | O_NONBLOCK);
c = getchar ();
tcsetattr (STDIN_FILENO, TCSANOW, &oldterm);
fcntl (STDIN_FILENO, F_SETFL, oldfd);
if (c != EOF) {
ungetc (c, stdin);
result = getchar ();
}
return result;
}
int main () {
char c;
c = key_pressed ();
printf ("%c", c);
return 0;
}
创造“可移动的”游标和汽车
#include <stdio.h>
#include <stdlib.h>
int **allocation_mat_dyn (int nb_l, int nb_c)
{
int **mat = malloc (nb_l * sizeof (int *));
int i;
for (i = 0; i < nb_l; i++) {
mat[i] = malloc (nb_c * sizeof (int));
}
return mat;
}
void chargement_mat (int nb_l, int nb_c, int **mat)
{
int i;
int j;
for (i = 0; i < nb_l; i++) {
for (j = 0; j < nb_c; j++) {
scanf ("%d", &mat[i][j]);
}
}
}
void affichage_mat (int nb_l, int nb_c, int **mat)
{
int i;
int j;
for (i = 0; i < nb_l; i++) {
for (j = 0; j < nb_c; j++) {
printf ("%d ", mat[i][j]);
}
printf ("\n");
}
}
void mat_changement_pos (int nb_l, int nb_c, int **matrice)
{
int tmp = 0;
matrice[34][21] = matrice[34][22];
matrice[34][22] = tmp;
}
void affichage_mat_ext (int nb_l, int nb_c, int **mat)
{
int i;
int j;
for (i = 0; i < nb_l; i++) {
for (j = 0; j < nb_c; j++) {
if (j > 20) {
printf ("%d ", mat[i][j]);
} else {
printf (" ");
}
}
printf ("\n");
}
}
void lib_mat (int nb_l, int **mat)
{
int i;
for (i = 0; i < nb_l; i++) {
free (mat[i]);
}
}
int main () {
int n, **mat;
int m;
scanf ("%d %d\n", &n, &m);
mat = allocation_mat_dyn (n, m);
chargement_mat (n, m, mat);
affichage_mat_ext (n, m, mat);
printf ("\n");
mat_changement_pos (n, m, mat);
affichage_mat_ext (n, m, mat);
lib_mat (n, mat);
free (mat);
return 0;
}
创建动态矩阵并允许两个整数
{{1}}
如何解决这个问题或者你将如何解决它的任何帮助将是一个很好的。