キー入力

Roguelike 系のターンベースのゲームではキー入力を調べる時、入力キューにイベントがなければ入力があるまで待つ、という方法でも問題ないのでそうしてた。しかし Dungeon Crawl の travel コマンドとか途中でキー押してキャンセルする場合には押されてなかったら何もせず帰ってくる必要がある。ということで変更。

X11 の場合
  XNextEvent(display, &xev);
  の代わりに
  if (XCheckMaskEvent(display, KeyPressMask, &xev))
  {
      ほにゃ;
      XPutBackEvent(display, &xev);
  }
  とする

WINDOWSの場合
    GetMessage(&msg, NULL, 0, 0);
    の代わりに
    if (PeekMessage(&msg, NULL, WM_CHAR, WM_CHAR, PM_NOREMOVE) ||
        PeekMessage(&msg, NULL, WM_KEYDOWN, WM_KEYDOWN, PM_NOREMOVE)) ほにゃ

ちなみに ncurses では
    nodelay(stdscr, TRUE);
    timeout(0);
    i = wgetch(stdscr);
    nodelay(stdscr, FALSE);

    if (i == -1)
        i = 0;
    else
        ungetch(i);
    return (i);
となってた。