Instrukcja if i losowanie kierunku.

0

Witam. Mam problem z owym programem. Staram się ograniczyć ruch buźki po konsoli. W tym celu użyłem instrukcji warunkowej if w deklaracji funkcji "chodz". Problem polega na tym, iż buźka grzęźnie w jedynym z rogów pola po którym się porusza. Czy ktoś ma jakiś pomysł jak to poprawić?

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <Windows.h>

    typedef struct{//definicja nowego typu / struktury
            int x;
            int y;
    }wspolrzedne;

    //zmienna globalna
    wspolrzedne xy; //utworzenie zmiennej typu wspolrzedne

    int losowanie(){
            int i=0, seed;
            seed=time(NULL); //NULL wartość "nic", funkcja będzie się krzaczyła dla samych nawiasów
            srand(seed);
                    while(rand()%100<90){ //warunek losowania w przedziale do 90
                            i++; //liczba losowana aby otrzymac mniej niz 90
                    }
            return i;
    }

    int losowanieKierunku(){
            int seed;
            seed=time(NULL);
            srand(seed);
            return rand()%4;
    }

    enum kierunek{gora, dol, lewo, prawo}; //przypisuje reszcie z dzielenia kierunek

    void rysuj(int dlugosc, int wysokosc){
            system("cls");//czyszczenie ekranu
            for(int i=0; i<wysokosc; i++){//petla gora-dol
                    for(int j=0; j<dlugosc; j++){//petla prawo-lewo
                            if(i==xy.x&&j==xy.y){
                                    printf("%c", 1);//buzka
                            }
                            else{
                                    printf("%c", 219); //czarne pole
                            }
                    }
                    printf("\n");
            }
    }

    void chodz(int dlugosc, int wysokosc){
            int kierunek = losowanieKierunku();
            switch(kierunek){
            case gora:
                    xy.x=xy.x;
                    xy.y=xy.y+1;
					if(xy.y>=10){
						xy.y=xy.y--;}
                            break;
            case dol:
                    xy.x=xy.x;
                    xy.y=xy.y-1;
					if(xy.y<=10){
						xy.y=xy.y++;}
                            break;
            case prawo:
                    xy.x=xy.x+1;
                    xy.y=xy.y;
					if(xy.x>=10){
						xy.x=xy.x--;}
                            break;
            case lewo:
                    xy.x=xy.x-1;
                    xy.y=xy.y;
					if(xy.x<=10){
						xy.x=xy.x++;}
                            break;
            }
            rysuj(dlugosc, wysokosc);
            Sleep(100);//0,5 sekundy przerwy, zeby mozna bylo zobaczyc buzke
    }

     int main()
     {
             //poczatkowa pozycja buzki
             xy.x=4;
             xy.y=4;
            do{
                    chodz(10, 10);//pole 10x10
            }while(true);
             system ("pause");
            return 0;
     } 
0

srand - powinieneś robić tylko raz przy inicjalizacji programu.

@Edit - zle spojzalem - Ale srand nadal powinien być robiony tylko raz.

0

Losuj kierunek tylko w przypadku, gdy buźka jest od brzegu dalej niż X punktów. Gdy buźka zetknie się z brzegiem, zmień kierunek (albo jego "składową") na przeciwny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1