Witam,

Piszę prościutką grę tekstową, tak żeby poznać głębiej tajniki języka. Wszystko szło świetnie, bo pisałem już kiedyś równie prościutkiego MUDa, ale w końcu pojawił się problem.

W MUDzie jest serwer i klient. Podczas gdy klient zaczyna coś pisać (jeszcze nie wysyła potwierdzając Enterem) serwer wciąż działa, a cała kraina żyje. Ponadto serwer może pisać do klienta nie przeszkadzając mu w pisaniu. Spróbuję to nakreślić trochę, pokazując coś w stylu loga z klienta:

> powiedz Cześ
Minęła godzina piętnasta.
> ć, co u ciebie? [ENTER]
Mówisz "Cześć, co u ciebie?".

Ci którzy grali kiedyś w muda, na pewno już załapali, a inni też pewnie są na dobrej drodze. ;)

Tak więc - nie mam pojęcia jak to zrobić, kiedy nie ma klienta i serwera, tylko pojedyncza aplikacja operująca na standardowych strumieniach.

W MUDzie robiło się to select() i poll() i podobno w tym wypadku też się da, ale ja nie mam pojęcia jak to zaimplementować. Google też milczy na ten temat. Byłby ktoś tak dobry i napisał mi przykładowy, krótki kod do tego? Założenia takie, że main() wyglądać ma mniej więcej tak:

int main()
{
    player->Login();

    do
    {
        // Sprawdzenie, czy npc mają coś do zrobienia i zrobienie tego
        // jeśli gracz (generalnie gracz jest klasą Player) coś napisał obsłużenie tego (jakieś player->ParseCommand())
    }
    while (!end);

    return 0;
}

I oczywiście jeżeli gracz nic nie napisał to program nie czeka, tylko robi pętlę dalej. W MUDzie w klasie Player byłby po prostu InBuffer i OutBuffer, a tu, nie mam pojęcia jak to zrobić.

Z góry stokrotne dzięki,