作者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,系統就問您密碼,那表示這個帳號已經有人用了,請 ║
║ 換一個名稱。 ║
║ ║
╰═════════════════════════════════════╯
--
□ 本文章由 itoc 從 itoc.Dorm11.NCTU.edu.tw 發表