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