Tworzenie "międzymordzia" z poleceniami.[SOLVED]

0

Niestety nie za bardzo wiedziałem jak nazwać temat ale już tłumacze o co mi chodzi.

Mianowicie postanowiłem napisać sobie dla zabawy trochę niecodzienna grę. Mianowicie chcę stworzyć interfejs rodem z gier RPG ubiegłego stulecia, gdzie to podawało się jawną komendę np.

go left
open door
kick tree

Jednak chodzenie takim sposobem jest trochę upierdliwe i na dużej planszy jest monotonne. Chciałbym to trochę przyśpieszyć jednak aby komenda wyglądała
go left 15 i postać skacze o 15 pól. Niestety problem jest z kodem. Otóż aktualnie wygląda to mniej więcej tak

cin>>akcja;
switch(akcja){
case 'go':{cin>>akcja;
              switch(akcja){
                      case 'up':{...}
                      case 'down':{...}
                      ...
                  }
case 'show':{if(akcja=='lista')
                    showlista();
                  if(akcja=='godzina')
                 }
...

Oczywiście to powyższe to jest pseudokod ale pokazuje on jak rozwiązałem problem komend słownych jednak nie mam pomysłu jak wczytać ostatni parametr komendy go left 15 i aby funkcja dzialala nawet gdy jego brak.

Pozdrawiam.

EDYTKA

Sprawa rozwiązana. Wczytuję komendę całą linią i sprawdzam, czy ostatni znak nie mieści się w w przedziale 47-57 tablicy ASCII. Oznacza to, że jest to cyfra. Wystarczy, że od wartości jaką otrzymuję odejmę 47 i mam konkretną cyfrę.

Pozdrawiam.

0

No nie; Tak będzie jeżeli liczba będzie jednocyfrowa i umieścisz wskaźnik na niej, a nie na '\0'.

Wczytujesz całą linię i wczytujesz wyrazy po kolei.

// pseudokod

//define POMIJANE " ,.-"
char *linia;
size_t length = 0;
getline(&linia, &length, stdin);
int i =0;
char *p;
  p = strtok (str,POMIJANE);
  while (p)
  {
i++;
if (i == 3)
liczba_krokow = atoi(p);    
printf ("%s\n", p);
    p = strtok (NULL,  POMIJANE);
  }


if (linia)
  free(linia);

Coś w ten deseń.

0

BTW, robiąc interfejs CLI warto się zainteresować biblioteką readline. Ma dopełnianie, historię, aliasy, wyszukiwanie itp.

0

zainteresuj się też narzędziami typu bison/flex, antlr, itp. może to trochę armata na muchę w tym przypadku, ale wiedza że takie cos istnieje na pewno się przyda :-)

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