回精華區
作者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翻