作者qazq.bbs@bbs.cs.nchu.edu.tw (*我要紅透自己房間*) 看板: plan
標題[功能] 亂數產生數字,以 ASCII 圖形顯示。
時間中興資科 e資獨秀 (2005/07/19 Tue 11:18:40) Updated: 2005/09/15
※ 引述《JayWilliam.bbs.NOSPAM@bbs.shu.edu.tw.SHU (#歡迎光臨翠谷風情#)》之銘言
> 站上疑似有廣告商使用自動程式連續註冊,
> 想請問有沒有辦法在註冊時做一點更動,
> 註冊前先要求輸入隨機產生的四位數,
> 如果輸入正確才能進下一步填資料?
: src/maple/bbsd.c:ascii_rand_num() 增加下面整個函式於 acct_apply() 前面
/* qazq.050719: 亂數產生 ascii 數字圖形 */
/* 傳入值: */
/* x: 圖形要開始顯示的 x 座標 */
/* y: 圖形要開始顯示的 y 座標 */
/* max_bit: 要亂數產生的最大位數 */
/* (傳入 4 的話就是產生 0 ~ 9999) */
/* pattern: 圖形要用什麼樣的字元顯示 */
/* (傳入 -1 為亂數顯示, 傳 '#' 就是用它 */
/* 回傳值: */
/* 亂數產生的整數 */
/* */
/* 注意事項: */
/* 1. 最大位不要超過 5,因為亂數最大到 32767 */
/* 要擴充的可以自己修改程式。 */
/* 2. 每一個 ascii 數字需要 5 * 5 的空間 */
/* 3. 每個 ascii 數字中間會空白一行 */
static int
ascii_rand_num(x, y, max_bit, pattern)
int x;
int y;
int max_bit;
char pattern;
{
static char numList[10][5][5] =
{
{
1,1,1,1,1,
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
1,1,1,1,1
},
{
0,0,0,1,0,
0,0,0,1,0,
0,0,0,1,0,
0,0,0,1,0,
0,0,0,1,0
},
{
1,1,1,1,1,
0,0,0,0,1,
1,1,1,1,1,
1,0,0,0,0,
1,1,1,1,1
},
{
1,1,1,1,1,
0,0,0,0,1,
1,1,1,1,1,
0,0,0,0,1,
1,1,1,1,1
},
{
1,0,0,0,1,
1,0,0,0,1,
1,1,1,1,1,
0,0,0,0,1,
0,0,0,0,1
},
{
1,1,1,1,1,
1,0,0,0,0,
1,1,1,1,1,
0,0,0,0,1,
1,1,1,1,1
},
{
1,0,0,0,0,
1,0,0,0,0,
1,1,1,1,1,
1,0,0,0,1,
1,1,1,1,1
},
{
1,1,1,1,1,
0,0,0,0,1,
0,0,0,0,1,
0,0,0,0,1,
0,0,0,0,1
},
{
1,1,1,1,1,
1,0,0,0,1,
1,1,1,1,1,
1,0,0,0,1,
1,1,1,1,1
},
{
1,1,1,1,1,
1,0,0,0,1,
1,1,1,1,1,
0,0,0,0,1,
0,0,0,0,1
}
};
/* 亂數 pattern 用 */
char pattern_list[5] = {'#','@','$','&','%'};
int i, j, k;
int rnd_num, numIndex;
char buf[32];
/* qazq: Linux 下面沒有 pow() 只好自己寫一個....^^a */
//rnd = rand() % (int)(pow(10, max_bit));
for (rnd_num = i = 1; i <= max_bit; i++)
rnd_num *= 10;
rnd_num = rand() % rnd_num;
sprintf(buf, "%0*d", max_bit, rnd_num);
for (i = 0; i <= 4; i++) /* 高度 5,一次顯示一列 */
{
move(x + i, y);
for (j = 0; j <= max_bit - 1; j++) /* 有 max_bit 個數字要顯示 */
{
numIndex = buf[j] - '0';
for (k = 0; k <= 4; k++) /* 每個數字寬度 5,一次顯示一個字元 */
{
prints("%c", numList[numIndex][i][k] == 1 ?
(pattern == -1 ? pattern_list[rand()%5] : pattern) : ' ');
}
outs(" "); /* 每個 ascii 數字間格一個空白 */
}
}
return rnd_num;
}
: src/maple/bbsd.c:acct_apply()
film_out(FILM_APPLY, 0);
+ vmsg(NULL);
+ try = ascii_rand_num(0, 0, 4, -1);
// move(11, 0) 開始顯示四位數字的 ASCII 圖形,圖形的字元用亂數產生。
+ vget(17, 0, "請輸入上方所顯示的四位數字", buf, 5, DOECHO);
+ if (atoi(buf) != try)
+ login_abort("\n再見 ...");
: src/maple/bbsd.c:tn_login()
sprintf(buf, "%s ip:%08x (%d)", fromhost, tn_addr, currpid);
+ srand(ap_start * tn_addr * currpid);
multi = login_user(buf);
...
...
- srand(ap_start * cuser.userno * currpid);
}
==============================================================================
貼一些結果...
@ &&%$@ % & $@#%#
# @ # @ $
#%$#$ &#%@$ &@&## @%%##
% % @ @ #
&@$## @&%&& @ &&&%&
##### ##### ##### ##### #####
# # # # # # #
# # ##### ##### ##### #####
# # # # # #
##### ##### # ##### #####
QQQQQ QQQQQ QQQQQ
Q Q Q Q
Q QQQQQ QQQQQ
Q Q Q
Q QQQQQ Q
大概就是這樣!^^
程式有寫不好的地方,希望大家可以幫忙修正!^^
--
╔╮ ▅▇▆▇█▆▅▇▅▄▇▆▅▆▄ ○ ‧ . 。 ο ˙ ﹒.ο . ˙﹒ ○β
╰╝╭╗▊ 天空之城 (qazq.twbbs.org) ▊ο 。 ξ期待在空中與你相會 。 δ▼
╚╯ ▄▃▄▅▄▂▅▆▄▂▆▄▂▅▆ 218-163-163-60.dynamic.hinet.net 〝精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻