回精華區
作者itoc (cygreadline4.dll), 信區: plan
標題[功能] QKMJ 麻將
時間2004/05/21 Fri 08:53:06 Updated: 2004/05/21
: menu.c:menu_net[]

+ "bin/xyz.so:x_qkmj", PERM_INTERNET, - M_GAME,
+ "QKMJ       ♂ 國粹麻將 ♀",

: etc/game/qkmj

  去 ftp://ftp.csie.nctu.edu.tw/pub/CSIE/qkmj/ 抓 qkmj 的執行檔
  要抓適當的 OS 版本

: xyz.c 加上這一整段

/* ----------------------------------------------------- */
/* QKMJ 網路麻將                                         */
/* ----------------------------------------------------- */
/* author : visor.bbs@bbs.yzu.edu.tw                     */
/*-------------------------------------------------------*/

#define QKMJ_SERVER     "140.113.209.32 7001"


/* itoc.010825: 其他的版本請至 ftp://ftp.csie.nctu.edu.tw/pub/CSIE/qkmj/
   抓取,放在 etc/game/,並更名為 qkmj (注意要 chmod 可執行) */

#if defined(LINUX)
#define QKMJ_EXECUTE    "etc/game/qkmj95p5-linux"
#elif defined(BSD44)
#define QKMJ_EXECUTE    "etc/game/qkmj95p5-freebsd"
#else
#define QKMJ_EXECUTE    "etc/game/qkmj"    /* 請自行抓適當版本的執行檔 */
#endif

int
x_qkmj()                /* itoc.010825: QKMJ -- 連線打麻將 */
{
  int size, fd, nfds;
  char buf[256];
  FILE *fp;
  fd_set rd;
  struct timeval to;

  /* itoc.010825.註解: qkmj 有個問題是要按 ^C 結束,可是 popen() 裡面不能用
     ^C,只好用 "/quit",但是一進入 qkmj 輸入 ID 時無法以 ^C 或 "/quit"
     離開,只好註冊一個 ID 來玩,再 "/quit" 離開
     所以在一開始的時候就確定玩家真的要執行 QKMJ 連線,連去 qkmj server  */

  if (vans("是否連線開打麻將(Y/N)?[N] ") != 'y')
    return XEASY;

  more("etc/game/qkmj.welcome", NULL);

  if (fp = popen("env HOME=" BBSHOME " TERM=vt100 "
    QKMJ_EXECUTE " " QKMJ_SERVER, "r+"))
  {
    cutmp->status |= STATUS_REJECT;   /* 玩麻將時不收水球 */
    fd = fileno(fp);

    while(1)
    {
      FD_ZERO(&rd);
      FD_SET(fd, &rd);
      FD_SET(0, &rd);
      to.tv_sec = 10;
      to.tv_usec = 0;

      nfds = fd;
      nfds = select(nfds + 1, &rd, NULL, NULL, &to);

      if (nfds <= 0)
        continue;

      if (FD_ISSET(0, &rd))
      {
        if (size = read(0, buf, sizeof(buf)))
          write(fd, buf, size);
        else
          break;
      }
      else if (FD_ISSET(fd, &rd))
      {
        if (size = read(fd, buf, sizeof(buf)))
          write(0, buf, size);
        else
          break;
      }
    }

    close(fd);
    pclose(fp);
    cutmp->status ^= STATUS_REJECT;
  }
  return 0;           /* 要 redraw screen */
}

: etc/game/qmkj.welcome 新增這檔案

╭═════════════════════════════════════╮
║                                                                          ║
║ ★ 離開遊戲                                                              ║
║                                                                          ║
║   您無法以 CTRL-C 離開,請試試 "/quit"。                                 ║
║                                                                          ║
║ ★ 要如何開始打牌?                                                      ║
║                                                                          ║
║   在 QKMJ 中,一定要湊足四人一桌才能開始打牌。您要湊足一桌,有兩種方式: ║
║                                                                          ║
║   一、加入尚未湊滿四人的桌                                               ║
║         您可以打 "/free" 查看目前網路上有哪些上未湊滿四人的桌,找到以後  ║
║       就可打 "/join <桌長名稱>" 來加入此桌。                             ║
║                                                                          ║
║   二、自己開桌等別人加入                                                 ║
║         如果您找不到尚未湊滿四人的桌,也可以打 "/serv" 自己開一桌等別人  ║
║       加入,此時您就是桌長,擁有將此桌的使用者踢出去的權力。             ║
║         在開桌時,您可以用 "/note <公告內容>" 來設定這桌的公告,讓別人   ║
║       知道這桌的一些規定。                                               ║
║         當您自己開桌之後,就耐心的等待別人的加入. 如果目前上線的人數有   ║
║       幾十個人的話,通常很快就能湊滿一桌。                               ║
║                                                                          ║
║   當一桌的人數湊滿四人之後,畫面就會自動變成打牌模式。在這個模式下,您   ║
║   可以用 <TAB> 鍵來切換要打牌或和別人交談。輪到您打牌時,您可以用方向鍵  ║
║   選擇自己所想打的牌,再按 <Space> 或 <Enter> 打出去,或者您也可以按下   ║
║   那張牌的代號,就直接打出去。                                           ║
║                                                                          ║
║ ★ 畫面說明                                                              ║
║                                                                          ║
║   當您進入打牌畫面時,您會看到畫面中央是每個人的牌,下面是交談視窗。畫   ║
║   面的右上角有四個小欄位,是目前圈風、門風、連莊數及目前離海底還剩幾張   ║
║   牌。右邊中間所表示的是每個人位置、代號以及他目前所擁有的金額。在莊家   ║
║   的名字右邊會有一個反白的 "莊",代表他目前是莊家。                      ║
║                                                                          ║
║   畫面右下角所顯示的是四家的相關位置,您可以和上面的位置、代號比對,來   ║
║   找出誰坐在哪一邊。在每家的旁邊還有顯示數字,代表每個人打牌所花的時間。 ║
║   這個時間是輪到您打牌的時候才開始計算。這樣大家在一起打的時候,就知道   ║
║   誰打得快,誰打得慢了。                                                 ║
║                                                                          ║
║   右下角為每人打牌速度,遇到亂碼時請切換至另一畫面再切回來               ║
║                                                                          ║
║ ★ 指令說明                                                              ║
║                                                                          ║
║   指令列表請進 QKMJ 後打 "/help" 查看                                    ║
║                                                                          ║
║   左右鍵或 ',' & '.'      選牌                                           ║
║   <TAB>                   切換對話或打牌                                 ║
║   Ctrl-U                  清除對話緩衝區                                 ║
║   Ctrl-C                  離開                                           ║
║   Ctrl-L                  重繪螢幕  (遇到畫面亂掉時使用)                 ║
║   上下鍵或 Ctrl-P,Ctrl-N  尋找以前用過的命令                             ║
║   Ctrl-A                  跳到一行最前端                                 ║
║   Ctrl-E                  跳到一行最末端                                 ║
║                                                                          ║
║ ★ 註冊新帳號                                                            ║
║                                                                          ║
║   當您進去 QKMJ 之後,首先輸入您的名稱 [ID]。這時候系統會檢查您的名稱是  ║
║   否在資料庫中。如果找不到,就會認為您是新的使用者,要您輸入所想要的密   ║
║   碼。這樣就算完成註冊了。                                               ║
║                                                                          ║
║   如果您是第一次上 QKMJ,系統就問您密碼,那表示這個帳號已經有人用了,請  ║
║   換一個名稱。                                                           ║
║                                                                          ║
╰═════════════════════════════════════╯



--
□ 本文章由 itocitoc.Dorm11.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻