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,