Сравнение таблиц в c и использование проблемы с часами - PullRequest
0 голосов
/ 13 января 2019

У меня есть проблема с моими препятствиями, потому что, когда я пытаюсь сравнить возможность моего объекта с возможностью препятствия, это не работает, я пытался что-то вроде этого:

int x, y;
        for(x=0; x<24; x++){
            if(tab[2][x]==tab[S.y][S.y]){
            gra=0;
            }
        }

но он перестает работать, когда я опускаюсь, потому что у меня будет 2, и я не знаю, как с этим справиться.

И я хотел бы перемещать свой объект по таймеру, не нажимая стрелки все время, просто нажимайте их, когда я хочу изменить направление своего движения.

utworz_tablice();
    plansza();
    time_t ostatnia_zmiana= clock();
    time_t teraz= clock();
    int gra=1;
    int speed=300;

    while (gra==1){
        while (teraz - ostatnia_zmiana < speed)
        {
            teraz= clock();
            if (kbhit()){
                int c = getch();
                //printf("%d",c);
                if (c==224){
                    c = getch();
                    //printf("%d",c);
                    switch (c){
                        case 72: 
                            if (S.y>0) {
                                S.y--;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                        case 80: 
                            if (S.y>0) {
                                S.y++;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                        case 77: 
                            if (S.x>0) {
                                S.x++;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                        case 75: 
                            if (S.x>0) {
                                S.x--;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                    }
                }
            };
        }
        ostatnia_zmiana= clock();

Вот весь код:

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#define wysokosc 15
#define szerokosc 25
int **tab;
COORD coord = {0, 0};

void plansza(){
    system("CLS");
    int i, j;
    printf("#");
    for(i=1; i<=szerokosc; i++){
        printf("=");
    }
    printf("#\n");
    for(j=1; j<=wysokosc; j++){
        printf("|");
        for(i=1; i<=szerokosc; i++){
            if(tab[j-1][i-1]==1){
                printf(">");
            }
            else if(tab[j-1][i-1]==2){
                printf("=");
            }
            else if(tab[j-1][i-1]==3){
                printf("|");
            }
            else if(tab[j-1][i-1]==4){
                printf("$");
            }
            else{
                printf(" ");
            }
        }
        printf("|\n");
    }
    printf("#");
    for(i=1; i<=szerokosc; i++){
        printf("=");
    }
    printf("#\n");  
}
struct Statek{
    int x, y;
}Statek;
struct Statek S;

void print(){
    system("CLS");
    coord.X = 0;
    coord.Y = 0;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    printf(">");
}
void utworz_tablice(){
    tab=malloc(sizeof(int*)*wysokosc);
    int i,j;
    for (i=0; i<wysokosc; i++)
        tab[i] = malloc(sizeof(int)*szerokosc);
    for(i = 0; i<wysokosc; i++)
        for(j = 0; j<szerokosc; j++)
            tab[i][j] = 0;
    tab[0][0]=1; // statek
    for(j=0; j<24; j++){
            tab[1][j]=2;
        }
    for(i=2; i<4; i++){
        for(j=23; j<24; j++){
            tab[i][j]=3;
        }
    }
    for(i=4; i<5; i++){
        for(j=19; j<24; j++){
            tab[i][j]=2;
        }
    }
    for(i=2; i<4; i++){
        for(j=20; j<23; j++){
            tab[i][j]=4;        // 4 -> $
        }
    }
    for(i=2; i<4; i++){
        tab[i][19]=3;
    }
    //slimak
    for(j=1; j<=17; j+=4){
        for(i=3; i<6; i++){
            tab[i][j]=3;
        }
    }
    for(j=3; j<=15; j+=4){
        for(i=2; i<5; i++){
            tab[i][j]=3;    // (3 -> |)  (2 -> -)
        }
    }
    //koniec slimaka
    for(j=1; j<=szerokosc; j++){
            tab[6][j]=2;
    }
    for(j=1; j<szerokosc; j+=2){
        tab[8][j]=4;
    }
    for(j=0; j<24; j++){
        tab[10][j]=2;
    }
    // plotki
    for(j=3; j<=23; j+=4){
        tab[11][j]=3;
    }
    for(j=1; j<=21; j+=4){
        tab[12][j]=3;
    }
    // koniec plotkow
    for(j=1; j<szerokosc; j++){
        tab[13][j]=2;
    }
    S.x=1, S.y=1;
}
void gotoxy (int x, int y)
{
    coord.X = x; coord.Y = y; // X and Y coordinates
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

int main(){
    utworz_tablice();
    plansza();
    time_t ostatnia_zmiana= clock();
    time_t teraz= clock();
    int gra=1;
    int speed=300;

    while (gra==1){
        while (teraz - ostatnia_zmiana < speed)
        {
            teraz= clock();
            if (kbhit()){
                int c = getch();
                //printf("%d",c);
                if (c==224){
                    c = getch();
                    //printf("%d",c);
                    switch (c){
                        case 72: 
                            if (S.y>0) {
                                S.y--;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                        case 80: 
                            if (S.y>0) {
                                S.y++;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                        case 77: 
                            if (S.x>0) {
                                S.x++;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                        case 75: 
                            if (S.x>0) {
                                S.x--;
                                gotoxy(S.x, S.y);
                                printf(">");
                            }
                        break;
                    }
                }
            };
        }
        ostatnia_zmiana= clock();
        if(S.x>szerokosc || S.y>wysokosc || S.x<=0 || S.y<=0){
            gra=0;
            system("CLS");
            gotoxy(15, 7);
            printf("Game over\n\n");
        }
        int x, y;
        for(x=0; x<24; x++){
            if(tab[2][x]==tab[S.y][S.y]){
            gra=0;
            }
        }

    }   
}

1 Ответ

0 голосов
/ 15 января 2019

Попробуйте вставить его в if (внизу основного офиса)

tab[S.y-1][S.x-1] != 1 && tab[S.y-1][S.x-1] != 0
...