C układ współrzędnych

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
aceb
Sędziwy Jeż
Sędziwy Jeż
Posty: 38
Rejestracja: 15 maja 2008, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

C układ współrzędnych

Post autor: aceb »

Witam
Na zajęcia laboratoryjne musiałem napisać program, który polegał na kierowaniu myszą która chciała dotrzeć do sera.
Sterowanie ustawiłem za pomocą klawiszy W,A,S,D.
Miała ona wykrywać odległość od sera i informować użytkownika.

Problem polega na tym, że gdy znajduje się w odp miejscu na osi x lub y to informuje ze jest na dobrej drodze ale w nast wykonaniu pokazuje znów aby skręcić np w prawo.
Najlepiej wykonajcie program i zobaczycie na czym polega błąd.
Mile widziane porady i sugestie:)

Kod: Zaznacz cały

#include <stdio.h>
#include <time.h>
#include <string.h>

int xs, ys, xm, ym;
char a;

int main()
 {
  printf("####################################\n");
  printf("#             W-góra               #\n");
  printf("#     A-lewo             D-prawo   #\n");
  printf("#             S-dół                #\n");
  printf("####################################\n");

  srand(time(NULL));
  xs= -10 + rand() % 21;
  ys= -10 + rand() % 21;
  xm= -10 + rand() % 21;
  ym= -10 + rand() % 21;

 while((xm != xs) || (ym != ys))
   {
     puts("");
     scanf("%c", &a);
    
     if(a == 'w') 
      {
       ym = ym + 1;

       if(xm < xs)
        puts("W prawo!");
       else
        puts("W lewo!");
   
       if(ym < ys)
        puts("W górę!");
       else
        puts("W dół!");

       if(ym == ys)
        puts("Oś Y jest ok!");

       if(xm == xs)
        puts("Oś x jest ok!");
      }       
   
  else if(a == 's') 
    {
      ym = ym - 1;

      if(xm < xs)
       puts("W prawo!");
      else
       puts("W lewo!");

      if(ym < ys)
       puts("W górę!");
      else
       puts("W dół!");

      if(ym == ys)                      
       puts("Oś Y jest ok!");    

      if(xm == xs)
       puts("Oś x jest ok!"); 
    }
 
  else if(a == 'a') 
    {
      xm = xm - 1;

      if(xm < xs)
       puts("W prawo!");
      else
       puts("W lewo!");

      if(ym < ys)
       puts("W górę!");
      else
       puts("W dół!");

      if(ym == ys)                      
       puts("Oś Y jest ok!");    

      if(xm == xs)
       puts("Oś x jest ok!"); 
    }

  else if(a == 'd') 
    {
      xm = xm + 1;

      if(xm < xs)
       puts("W prawo!");
      else
       puts("W lewo!");

      if(ym < ys)
       puts("W górę!");
      else
       puts("W dół!");

      if(ym == ys)                      
       puts("Oś Y jest ok!");    

      if(xm == xs)
       puts("Oś x jest ok!"); 
    }

  
  }
    
   
   puts("Udalo Ci sie!"); 
   printf("Współrzedne sera to: %d, %d", xs, ys);
 return(0);
 }
Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 8614
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 20.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: C układ współrzędnych

Post autor: mario_7 »

Kod: Zaznacz cały

      if(ym < ys)
       puts("W górę!");
      else
       puts("W dół!");

      if(ym == ys)                     
       puts("Oś Y jest ok!"); 
Gdy ym == ys pojawi się komunikat alternatywny z pierwszego warunku oraz komunikat z drugiego warunku. Zamień to na:

Kod: Zaznacz cały

      if(ym < ys)
       puts("W górę!");
      else if(ym == ys)                     
       puts("Oś Y jest ok!"); 
      else
       puts("W dół!"); 
analogicznie w innych warunkach.

Tak na oko to się rzuca, nie kompilowałem i nie sprawdzałem, czy coś jeszcze jest nie tak. ;)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość