作者SnowWolf.bbs@xeon.tfcis.org (靜夜) 看板: plan
標題[文件] 大富翁
時間動力核心 (Fri, 08 Aug 2003 22:24:43 +0800 (CST)) Updated: 2004/01/10
: rich.c
/************************************************/
/* 大富翁_v1.00_870619 */
/* */
/* Author: dsyan */
/* Create: 87/04/29 */
/* Update: xx/xx/xx */
/************************************************/
/* 本程式僅供學術測試及私人研究用途,嚴禁移作他用!! */
/* 若有任何問題歡迎討論.. u8511088@cc.nctu.edu.tw */
/* 如果你把它改得很棒的話, 要記得 mail 我一下呦! :) */
#include "bbs.h"
struct RICH_STRUCT
{
char lfx, lfy, nowuser, start, maxmax;
char station[10], wapow[10], posi[10];
char land[40], name[10][15], sym[10][3];
char sls[6][3], msg[12][80], map[40][20], readmsg[10][12];
char chance[15][60], fate[15][60], landst[6][5];
int mapidx[40], chanceidx[15], fateidx[15], fee[40][9], current;
long money[10];
};
static char inp[50], inpc, card, prec, delay, msgc, msgcc, editmode;
static char mymsg[6][80];
static struct RICH_STRUCT *ri;
/*-------------------------------------------------------*/
/* 螢幕控制 */
/*-------------------------------------------------------*/
static void
clrfromto(x, y)
int x, y;
{
int i;
i = x;
while (i <= y)
{
move(i, 0);
clrtoeol();
i++;
}
}
static int /* 1: 檔案在 0: 檔案不在 */
show_file(fpath, ln, lines) /* 從第 ln 列開始印檔案 lines 行 */
char *fpath;
int ln, lines;
{
FILE *fp;
char buf[ANSILINELEN];
int i;
if ((fp = fopen(fpath, "r")))
{
clrfromto(ln, ln + lines);
move(ln, 0);
i = lines;
while (fgets(buf, ANSILINELEN, fp) && i--)
outs(buf);
fclose(fp);
return 1;
}
return 0;
}
static void
showcursor()
{
char i, j, c[3];
for (i = 0; i < 40; i++)
{
c[0] = 32;
c[1] = 32;
c[2] = 0;
for (j = 0; j < ri->maxmax; j++)
{
if (ri->posi[j] == i)
strcpy(c, ri->sym[j]);
}
if (!i)
{
move(20, 64);
outs(c);
}
if (i > 0 && i < 10)
{
move(19, 67 - i * 6);
outs(c);
}
if (i == 10)
{
move(20, 10);
outs(c);
}
if (i > 10 && i < 20)
{
move(41 - i * 2, 12);
outs(c);
}
if (i == 20)
{
move(2, 10);
outs(c);
}
if (i > 20 && i < 30)
{
move(3, i * 6 - 113);
outs(c);
}
if (i == 30)
{
move(2, 64);
outs(c);
}
if (i > 30)
{
move(2 * i - 59, 62);
outs(c);
}
}
}
static void
showhouse()
{
int i, x;
for (x = 0; x < 40; x++)
{
i = ri->mapidx[x];
if (i < 0 || i > ri->maxmax - 1)
continue;
if (x > 0 && x < 10)
{
move(20, 66 - x * 6);
prints("%s%s", ri->sym[i], ri->sls[ri->land[x]]);
}
if (x > 10 && x < 20)
{
move(41 - x * 2, 0);
outs(ri->sls[ri->land[x]]);
move(41 - x * 2, 10);
outs(ri->sym[i]);
}
if (x > 20 && x < 30)
{
move(2, x * 6 - 114);
prints("%s%s", ri->sym[i], ri->sls[ri->land[x]]);
}
if (x > 30)
{
move(2 * x - 59, 74);
outs(ri->sls[ri->land[x]]);
move(2 * x - 59, 64);
outs(ri->sym[i]);
}
}
}
static void
my_turn()
{
if (prec == ri->current && editmode)
{
move(7 + ri->lfx, 13 + ri->lfy);
prints("%s[%s]請按空白鍵擲骰子..", ri->sym[prec], ri->name[prec]);
move(18, 16 + inpc);
}
}
static void
showmsg()
{
char i, j, buf[80];
for (i = 0; i < 12; i++)
{
if (!ri->readmsg[prec][i])
continue;
strcpy(mymsg[msgc], ri->msg[i]);
msgc = (msgc + 1) % 6;
ri->readmsg[prec][i] = 0;
}
if (msgc != msgcc)
{
showcursor();
showhouse();
refresh();
strcpy(buf, " ");
for (i = 0; i < 6; i++)
{
move(12 + i, 14);
j = 48 - strlen(mymsg[(msgc + i) % 6]);
buf[j] = 0;
prints("%s%s", mymsg[(msgc + i) % 6], buf);
buf[j] = 32;
}
msgcc = msgc;
}
alarm(1);
my_turn();
refresh();
}
static void
sendmsg2(mytxt)
char *mytxt;
{
FILE *fp;
char i, j, k;
fp = fopen("etc/rich", "a+");
fprintf(fp, "%s\n", mytxt);
fclose(fp);
for (i = 0; i < ri->maxmax; i++)
{
k = -1;
while (k)
{
for (j = 0; j < 12; j++)
{
if (ri->readmsg[i][j])
continue;
ri->readmsg[i][j] = 1;
strcpy(ri->msg[j], mytxt);
k = 0;
break;
}
}
}
}
static void
goprison()
{
char richbuf[100];
move(9 + ri->lfx, 13 + ri->lfy);
outs("哈哈哈! 你被關了!!!");
sprintf(richbuf, "%s%s坐牢了...", ri->sym[prec], ri->name[prec]);
sendmsg2(richbuf);
if (card)
{
vmsg(NULL);
move(9 + ri->lfx, 13 + ri->lfy);
outs("什麼?!有免獄卡..那算了...");
sendmsg2("什麼?!有免獄卡..那算了...");
card--;
}
else
{
ri->posi[prec] = 10;
delay = 3;
}
}
static void
de(mo)
long mo;
{
ri->money[prec] -= mo;
}
static void
reload()
{
clear();
show_file("etc/game/display", 0, 24);
showcursor();
showhouse();
}
static void
editmsg()
{
char i, mybuf[100];
refresh();
move(11, 18);
outs("↓訊息");
while (-1)
{
i = vkey();
switch (i)
{
case Ctrl('Q'):
if (!prec)
{
sendmsg2("桌長已落跑了..請按tab鍵跟著落跑吧!!");
ri->current = 1000;
ri->start = 0;
ri->maxmax = 0;
return;
}
break;
case Ctrl('L'):
reload();
break;
case KEY_TAB:
refresh();
move(11, 18);
outs("↑命令");
return;
break;
case KEY_BKSP:
move(18, 16 + inpc);
outs(" ");
inpc--;
if (inpc < 0)
inpc = 0;
move(18, 16 + inpc);
break;
case KEY_ENTER:
if (inpc)
{
inp[inpc] = 0;
if (!strcmp(inp, "/help"))
{
sendmsg2("桌長打 /bye 可跳出遊戲..");
sendmsg2("按 Tab 鍵可切換訊息及命令模式..");
sendmsg2("要跳出必須整組跳..");
}
else if (!prec && !strcmp(inp, "/bye"))
{
sendmsg2("桌長已落跑了..");
sendmsg2("請按tab鍵跟著落跑吧!!");
ri->current = 1000;
ri->start = 0;
ri->maxmax = 0;
return;
}
else
{
sprintf(mybuf, "%s%s> %s", ri->sym[prec], ri->name[prec], inp);
sendmsg2(mybuf);
}
}
inpc = 0;
move(18, 16);
outs(" ");
move(18, 16);
break;
default:
inp[inpc] = i;
move(18, 16 + inpc);
outc(i);
inpc++;
move(18, 16 + inpc);
if (inpc > 34)
inpc = 34;
break;
}
}
}
static void
log_rich(log)
char *log;
{
FILE *fp;
if (fp = fopen("etc/game/rich.log", "a+"))
{
fprintf(fp, "%s %s\n", Now(), log);
fclose(fp);
}
}
int
main_rich()
{
time_t now, startime;
char richbuf[200], card;
int i, j, k = -1, dice;
delay = card = msgc = 0;
FILE *fp;
more("etc/game/rich.welcome", NULL); /* 歡迎畫面 */
vs_bar("網路大富翁");
ri = shm_new(6665, sizeof(*ri));
srandom(time(NULL) + cuser.userno);
if (!ri->nowuser)
{
ri->nowuser = 22;
vget(1, 0, "幾個人要玩?? (2~10)", richbuf, 3, LCECHO);
i = atoi(richbuf);
ri->nowuser = 0;
if (i < 2 || i > 10)
return;
ri->maxmax = i;
}
move(19, 0);
if (ri->start)
{
prints("已經有一組共 %d 個人在玩了!..\n請等一下再進來..", ri->maxmax);
vmsg(NULL);
return 0;
}
if (!ri->maxmax && ri->nowuser)
{
outs("上一桌正在結束中!..\n請等一下再進來..");
vmsg(NULL);
return 0;
}
if (ri->nowuser == 22)
{
outs("設定玩家人數中..請稍後再試...");
vmsg(NULL);
return 0;
}
if (!ri->nowuser)
{
strcpy(ri->landst[0], "空地");
strcpy(ri->landst[1], "平房");
strcpy(ri->landst[2], "二樓");
strcpy(ri->landst[3], "三樓");
strcpy(ri->landst[4], "四樓");
strcpy(ri->landst[5], "旅館");
strcpy(ri->sym[0], "1");
strcpy(ri->sym[1], "2");
strcpy(ri->sym[2], "3");
strcpy(ri->sym[3], "4");
strcpy(ri->sym[4], "5");
strcpy(ri->sym[5], "6");
strcpy(ri->sym[6], "7");
strcpy(ri->sym[7], "8");
strcpy(ri->sym[8], "9");
strcpy(ri->sym[9], "0");
strcpy(ri->sls[0], "○");
strcpy(ri->sls[1], "Ⅰ");
strcpy(ri->sls[2], "Ⅱ");
strcpy(ri->sls[3], "Ⅲ");
strcpy(ri->sls[4], "Ⅳ");
strcpy(ri->sls[5], "★");
ri->lfx = ri->lfy = 1;
}
k = -1;
for (prec = 0; prec < ri->maxmax; prec++)
{
move(prec + 3, 10);
prints("%s [%s] ", ri->sym[prec], ri->name[prec]);
if (!ri->name[prec][0] && k < 0)
k = prec;
}
prec = k;
ri->name[prec][0] = 1;
ri->nowuser++;
move(19, 0);
outs("請輸入你的大名..");
vget(prec + 3, 12, " ", richbuf, 11, LCECHO);
if (!richbuf[0])
{
ri->name[prec][0] = 0;
ri->nowuser--;
return;
}
strcpy(ri->name[prec], richbuf);
if (!prec)
{
for (i = 0; i < 40; i++)
ri->land[i] = 0;
/* 地圖檔 */
fp = fopen("etc/game/map", "r");
for (i = 0; i < 40; i++)
fscanf(fp, "%s %d", ri->map[i], &ri->mapidx[i]);
fclose(fp);
/* 命運 */
fp = fopen("etc/game/fate", "r");
for (i = 0; i < 15; i++)
fscanf(fp, "%s %d", ri->fate[i], &ri->fateidx[i]);
fclose(fp);
/* 機會 */
fp = fopen("etc/game/chance", "r");
for (i = 0; i < 15; i++)
fscanf(fp, "%s %d", ri->chance[i], &ri->chanceidx[i]);
fclose(fp);
/* 費用 */
fp = fopen("etc/game/fee", "r");
for (i = 0; i < 40; i++)
{
fscanf(fp, "%d %d %d %d %d %d %d %d %d\n", &ri->fee[i][0], &ri->fee[i][1],
&ri->fee[i][2], &ri->fee[i][3], &ri->fee[i][4], &ri->fee[i][5], &ri->fee[i][6],
&ri->fee[i][7], &ri->fee[i][8]);
}
fclose(fp);
ri->current = 0; /* 清順序 */
for (i = 0; i < 6; i++)
ri->msg[i][0] = 0;
}
ri->money[prec] = 20000; /* 存錢 */
ri->station[prec] = 0; /* 存車站 */
ri->wapow[prec] = 0; /* 查電力水力 */
ri->posi[prec] = 0; /* 存位置 */
for (i = 0; i < 6; i++)
mymsg[i][0] = 0;
for (i = 0; i < 12; i++)
ri->readmsg[prec][i] = 0;
if (!prec)
{
sprintf(richbuf, "\033[32;1m%s\033[m 開了可容納 %d 人的\033[31;1m大富翁遊戲\033[m!..", cuser.userid, ri->maxmax);
log_rich(richbuf);
fp = fopen("etc/rich", "a+");
fprintf(fp, "%s %s (%s)\n", str_author1, "楓城站", "高雄應用科技大學");
fprintf(fp, "標題: %s\n時間: %s\n\n\n", "大富翁遊戲記錄", Btime(&now));
fclose(fp);
}
sprintf(richbuf, "\033[32;1m%s\033[m 加入了! 代號是 \033[33;1m%s\033[m ..", cuser.userid, ri->name[prec]);
log_rich(richbuf);
move(19, 0);
outs("等待其他的使用者加入... ");
strcpy(richbuf, "|/-\\");
while (-1) /* 查人數 */
{
k = -1;
for (i = 0; i < ri->maxmax; i++)
{
move(i + 3, 10);
j = ri->name[i][0];
if (j)
prints("%s [%s] ", ri->sym[i], (j == 1) ? "登錄中" : ri->name[i]);
else
prints("%s [空白] ", ri->sym[i]);
if (!ri->name[i][0] || ri->name[i][0] == 1)
k = i;
}
if (k < 0)
break;
move(19, 24);
prints("%c", richbuf[now % 4]);
refresh();
now = time(0);
while (time(0) - now < 1);
};
ri->start = 1;
show_file("etc/game/display", 0, 24);
move(11, 34);
prints("%s%s", ri->sym[prec], ri->name[prec]);
/* 進入訊息 */
sprintf(richbuf, "%s%s (%s) 進來了", ri->sym[prec], ri->name[prec], cuser.userid);
sendmsg2(richbuf);
if (!prec)
{
sendmsg2("簡易說明:");
sprintf(richbuf, "結束法..%s 在訊息欄按 Ctrl-Q", ri->name[prec]);
sendmsg2(richbuf);
sendmsg2("Tab 切換視窗,空白鍵擲骰子");
sendmsg2("在訊息欄打 /help 會有求助畫面出現...");
sendmsg2("Have fun!.. :)");
}
signal(SIGALRM, showmsg);
alarm(1);
editmode = 1;
my_turn();
startime = time(0);
/* 開始繞圈圈了 */
while (-1)
{
i = ri->posi[prec];
j = ri->mapidx[i];
move(3 + ri->lfx, 13 + ri->lfy);
prints("現在位置: [%d] %s (%s) ",
i, ri->map[i], ri->landst[ri->land[i]]);
move(4 + ri->lfx, 13 + ri->lfy);
if (j < 0 || j > ri->maxmax)
outs("目前屬於: ★" BBSNAME "☆");
else
prints("目前屬於: %s[%s] ", ri->sym[j], ri->name[j]);
move(5 + ri->lfx, 13 + ri->lfy);
prints("大富翁幣: %d 免獄卡: %d ", ri->money[prec], card);
while (ri->current != prec)
{
editmode = 1;
editmsg();
editmode = 0;
if (ri->current == prec)
break;
if (ri->current == 1000)
goto gameover;
}
sprintf(richbuf, " ");
sendmsg2(richbuf);
sprintf(richbuf, "輪到%s%s了..", ri->sym[prec], ri->name[prec]);
sendmsg2(richbuf);
if (delay)
{
move(7 + ri->lfx, 13 + ri->lfy);
outs("嗚嗚嗚..坐牢中... ");
move(8 + ri->lfx, 13 + ri->lfy);
prints("還要 %d 次才輪到你喔!!", delay);
sprintf(richbuf, "%s%s..嗚嗚嗚..還要%d次才出獄..:~",
ri->sym[prec], ri->name[prec], delay);
sendmsg2(richbuf);
delay--;
goto prison;
}
my_turn();
while ((i = igetch()) != 32)
if (ri->current == 1000)
goto gameover;
dice = random() % 11 + 2;
move(7 + ri->lfx, 13 + ri->lfy);
prints("擲出點數.. %d 點 ", dice);
sprintf(richbuf, "%s%s..擲出%d點..", ri->sym[prec], ri->name[prec], dice);
sendmsg2(richbuf);
ri->posi[prec] += dice;
move(8 + ri->lfx, 13 + ri->lfy);
if (ri->posi[prec] > 39) /* 繞了一圈?? */
{
outs("經過\"由此去\"..得獎金 2000 元!!");
sprintf(richbuf, "%s%s經過\"由此去\"..得2000", ri->sym[prec], ri->name[prec]);
sendmsg2(richbuf);
de(-2000);
ri->posi[prec] -= 40;
vmsg(NULL);
move(8 + ri->lfx, 13 + ri->lfy);
outs(" ");
move(8 + ri->lfx, 13 + ri->lfy);
}
prints("[%d]%s", ri->posi[i], ri->map[ri->posi[prec]]);
sprintf(richbuf, "%s%s走到[%d]%s", ri->sym[prec],
ri->name[prec], ri->posi[prec], ri->map[ri->posi[prec]]);
sendmsg2(richbuf);
move(9 + ri->lfx, 13 + ri->lfy);
checkplace:
if (ri->mapidx[ri->posi[prec]] < 0) /* 特殊地點?? */
{
switch (ri->mapidx[ri->posi[prec]])
{
case -2: /* 免費停車場 */
outs("免費的呦..休息一下吧... :)");
break;
case -3: /* 命運 */
dice = random() % 15;
prints("[命運]%s", ri->fate[dice]);
sprintf(richbuf, "%s%s..[命運]%s", ri->sym[prec],
ri->name[prec], ri->fate[dice]);
sendmsg2(richbuf);
if (dice > 4) /* 單純跟錢有關?? */
de(-ri->fateidx[dice]);
else
{
switch (dice)
{
case 0: /* 拘票 */
goprison();
break;
case 1: /* 修理自己所有房屋-2 */
vmsg(NULL);
move(9 + ri->lfx, 13 + ri->lfy);
j = k = 0;
for (i = 0; i < 40; i++)
{
if (ri->mapidx[i] == prec)
{
if (ri->land[i] > 0 && ri->land[i] < 5)
j++;
else if (ri->land[i] == 5)
k++;
}
}
prints("房屋 %d 幢..旅館 %d 幢..合計 %d ", j, k, j * 250 + k * 1000);
sprintf(richbuf, "%s%s..房屋%d..旅館%d..合計%d",
ri->sym[prec], ri->name[prec], j, k, j * 250 + k * 1000);
sendmsg2(richbuf);
de(j * 250 + k * 1000);
break;
case 2: /* 你的生日 */
de(-(ri->maxmax - 1) * 100);
for (k = 0; k < ri->maxmax; k++)
if (k != prec)
ri->money[k] -= 100;
break;
case 3: /* 出獄許可證 */
card++;
break;
case 4: /* 賣黃牛票 */
vmsg(NULL);
move(9 + ri->lfx, 13 + ri->lfy);
outs("取機會一張?? (Y/n) ");
j = igetch();
if (j == 'Y' || j == 'y')
{
move(10, 47);
outs("Yes");
i = -22222;
ri->mapidx[ri->posi[prec]] = -5;
goto checkplace;
}
/* 先把index改成機會,用i=-22222做記號,到時再改回來 */
{
move(10, 47);
outs("No");
de(1000);
break;
}
}
} /* 單純跟錢有關?? */
break;
case -4: /* 所得稅 */
de(2000);
break;
case -5: /* 機會 */
if (i == -22222)
ri->mapidx[ri->posi[prec]] = -3;
dice = random() % 15;
move(9 + ri->lfx, 13 + ri->lfy);
prints("[機會]%s ", ri->chance[dice]);
sprintf(richbuf, "%s%s..[機會]%s", ri->sym[prec],
ri->name[prec], ri->chance[dice]);
sendmsg2(richbuf);
if (dice > 6) /* 單純跟錢有關?? */
de(-ri->chanceidx[dice]);
else
{
switch (dice)
{
case 0: /* 拘票 */
goprison();
break;
case 1: /* 修理自己所有房屋 */
vmsg(NULL);
move(9 + ri->lfx, 13 + ri->lfy);
k = j = 0;
for (i = 0; i < 40; i++)
if (ri->mapidx[i] == prec)
{
if (ri->land[i] > 0 && ri->land[i] < 5)
i++;
else if (ri->land[i] == 5)
k++;
}
prints("房屋 %d 幢..旅館 %d 幢..合計 %d ", j, k, j * 250 + k * 1000);
sprintf(richbuf, "%s%s..房屋%d..旅館%d..合計%d",
ri->sym[prec], ri->name[prec], j, k, j * 250 + k * 1000);
sendmsg2(richbuf);
de(j * 250 + k * 1000);
break;
case 2: /* 付戶稅 */
vmsg(NULL);
move(9 + ri->lfx, 13 + ri->lfy);
k = j = 0;
for (i = 0; i < 40; i++)
if (ri->mapidx[i] == prec)
{
if (ri->land[i] > 0 && ri->land[i] < 5)
j++;
else if (ri->land[i] == 5)
k++;
}
prints("房屋 %d 幢..旅館 %d 幢..合計 %d ", j, k, j * 400 + k * 1150);
sprintf(richbuf, "%s%s..房屋%d..旅館%d..合計%d",
ri->sym[prec], ri->name[prec], j, k, j * 400 + k * 1150);
sendmsg2(richbuf);
de(j * 400 + k * 1150);
break;
case 3: /* 出獄許可證 */
card++;
break;
case 4: /* 前進到博愛路 */
if (ri->posi[prec] > 14)
de(-2000);
ri->posi[prec] = 14;
break;
case 5: /* 前進到民族路 */
if (ri->posi[prec] > 26)
de(-2000);
ri->posi[prec] = 26;
break;
case 6: /* 臺中車站 */
if (ri->posi[prec] > 15)
de(-2000);
ri->posi[prec] = 15;
break;
}
}
break;
case -6: /* 坐牢/路過 */
outs("呼..不可以做壞事呦... :)");
break;
case -7: /* 進牢 */
goprison();
break;
case -8: /* 財產稅 */
de(1000);
break;
case -9: /* 各大車站 */
if (ri->money[prec] >= 2000)
{
prints("%8s價值 2000 元,買?? (Y/n)", ri->map[ri->posi[prec]]);
j = igetch();
if (j != 'N' && j != 'n') /* 買 */
{
move(10, 47);
outs("Yes");
sprintf(richbuf, "%s%s..買下%8s", ri->sym[prec],
ri->name[prec], ri->map[ri->posi[prec]]);
sendmsg2(richbuf);
de(2000);
ri->mapidx[ri->posi[prec]] = prec;
ri->station[prec]++;
}
else /* 不買 */
{
move(10, 47);
outs("No");
}
}
else /* 買不起 */
{
outs("很抱歉,你的現金不夠...");
}
break;
case -10:
if (ri->money[prec] >= 1500)
{
prints("%8s價值 1500 元,買?? (Y/n)", ri->map[ri->posi[prec]]);
j = igetch();
if (j != 'N' && j != 'n') /* 買 */
{
move(10, 47);
outs("Yes");
sprintf(richbuf, "%s%s..買下%8s", ri->sym[prec],
ri->name[prec], ri->map[ri->posi[prec]]);
sendmsg2(richbuf);
de(1500);
ri->mapidx[ri->posi[prec]] = prec;
ri->wapow[prec]++;
}
else /* 不買 */
{
move(10, 47);
outs("No");
}
}
else /* 買不起 */
{
outs("很抱歉,你的現金不夠...");
}
break;
}
}
/* 非特殊地點 */
else
{
i = ri->posi[prec];
if (ri->mapidx[ri->posi[prec]] < 100) /* 已被買走?? */
{
if (ri->mapidx[ri->posi[prec]] == prec) /* 自己的地 */
{
if (i == 5 || i == 12 || i == 15 || i == 25 || i == 28 || i == 35) /* 車站、水廠、電廠 ..
* 不能蓋房子的地 */
outs("你自己的土地..休息一下吧... :)");
else if (ri->land[i] == 5) /* 旅館 */
outs("已經是[旅館]了!!");
else if (ri->fee[i][6] <= ri->money[prec])
{
prints("蓋\[%s]要 %d 元..要?? (Y/n)",
ri->landst[ri->land[i] + 1], ri->fee[i][6]);
j = igetch();
if (j != 'n' && j != 'N')
{
move(10, 47);
outs("Yes");
ri->land[i]++;
sprintf(richbuf, "%s%s..蓋\%s", ri->sym[prec], ri->name[prec],
ri->landst[ri->land[i]]);
sendmsg2(richbuf);
de(ri->fee[i][6]);
}
else
{
move(10, 47);
outs("No");
}
}
else
outs("你沒有足夠的錢喔!!");
}
else /* 別人的地 */
{
if (i == 5 || i == 15 || i == 25 || i == 35)
k = ri->station[prec] * 500; /* 車站 */
else if (i == 12 || i == 28)
k = dice * ((ri->wapow[prec] == 1) ? 10 : 100); /* 自水、電力 */
else
k = ri->fee[i][ri->land[i]];
prints("這是%s[%s]的[%s]..過路費 %d", ri->sym[ri->mapidx[i]],
ri->name[ri->mapidx[i]], ri->landst[ri->mapidx[i]], k);
sprintf(richbuf, "%s%s走到%s[%s]的地..過路費%d", ri->sym[prec],
ri->name[prec], ri->sym[ri->mapidx[i]], ri->name[ri->mapidx[i]], k);
sendmsg2(richbuf);
de(k);
ri->money[ri->mapidx[i]] += k;
}
}
else /* 未被買走 */
{
if (ri->mapidx[i] <= ri->money[prec]) /* 買得� */
{
prints("這塊空地價值 %d 元,買?? (Y/n)", ri->mapidx[i]);
j = igetch();
if (j != 'N' && j != 'n') /* 買 */
{
move(10, 47);
outs("Yes");
sprintf(richbuf, "%s%s..買下%s", ri->sym[prec], ri->name[prec], ri->map[i]);
sendmsg2(richbuf);
de(ri->mapidx[i]);
ri->mapidx[i] = prec;
}
else /* 不買 */
{
move(10, 47);
outs("No");
}
}
else /* 買不起 */
{
outs("很抱歉,你的現金不夠...");
}
}
}
prison:
if (ri->current == 1000)
goto gameover;
ri->current = (prec + 1) % ri->maxmax;
vmsg(NULL);
for (i = 3; i < 10; i++)
{
move(i + ri->lfx, 13 + ri->lfy);
outs(" ");
}
}
gameover:
if (ri->current == 1000)
{
alarm(0);
sprintf(richbuf, "\033[32;1m%s\033[m 落跑了! ..", cuser.userid, ri->name[prec]);
log_rich(richbuf);
clear();
more("etc/rich", NULL);
if (vans("移至備忘錄(Y/N)?[N] ") == 'y')
{
mail_self("etc/rich", cuser.userid, "[備 忘 錄] 大富翁遊戲記錄", MAIL_READ);
}
if (ri->nowuser == 1) /* 最後一個跑掉的人 */
{
sprintf(richbuf, "\033[35;1m大富翁遊戲順利結束\033[m!..");
log_rich(richbuf);
system("rm etc/rich");
}
ri->name[prec][0] = 0;
ri->nowuser--;
return 1;
}
}
--
=[﹎:�摃�◣��:﹎ Origin ]|[ �吨O�痐� processor.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊ Author ]|[ 218-172-173-190.hinet-ip.hinet ]|[���插�﹊:]=精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻