组合这些函数,使角色在C中的动态矩阵中移动

时间:2016-10-11 21:50:08

标签: c linux matrix

大家好,我是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}}

如何解决这个问题或者你将如何解决它的任何帮助将是一个很好的。

0 个答案:

没有答案