荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: spider.bbs@dragon.seed.net.tw (网中人), 信区: BBSAdmin
标  题: [转载] 来自 spider@beef.tcu.edu.tw (转载)(转寄)
发信站: 种子网 BBS (Fri Sep 17 10:51:19 1999)
转信站: ShenZhen-University!Egg.mm.ntut!dragon
出  处: dragon.seed.net.tw

【 以下文字转载自 spider 的信箱 】
【 原文由 spider.bbs@beef.tcu.edu.tw 所发表 】
发信人: spider (Fallen Paladin), 信区: OrientSysop
标  题: 蜘蛛养猫小玛莉
发信站: 蜘蛛养猫 (Fri Sep 17 10:14:28 1999) , 转信

        OS: Linux 2.0.35

        BBS: FireBird ?.?? (跟著大家改了很多...版本已不明)

        Name: 蜘蛛养猫小玛莉

        因为觉得流通的那一版小玛莉不像小时候在玩的....所以想写个比较像的...

        我不是什麽程式高手或是资讯相关科系的学生.....

        写出来的东西当然也不会太高级.....

        所以也希望大家觉得有什麽可以改的....就改吧.... :)

        Note:

        1. get_record, inmoney等函式随各版bbs不同...记得要改...

        2. 灯号变换的速度是在自己的console测的...颇为流畅... :)

           在校内其他电脑上...尚可....

           在modem上...看起来像乱数在跳.... -_-

        3. 里面有一个global变数getddd, 是为了控制getdata内clrtoeol而加的....

           这样子命令列就可以放在小玛莉的中间....

           不过要改main.c和io.c ...而且又占了一点资源....

           如果你觉得命令列的位置不是顶重要, 画面的最下方还有一个备用的空行...

           可以都放到那里去....

        4. 有部分的code是采用SugarII的糖果屋赛猪....可是寄mail去却退了回来...

           希望SugarII大大看到之後不会介意

        5. 感谢dsyan大大的协助.... :)


#include "bbs.h"
#define MARIOLOG "mario_log" /* LOG档 */

int
mario()
{
  char bet[3],m1[7],bet2[3]; /* 赌金 */
  char *pic[10]={"  ","Ω","♀","♂","□","△","☆","77","◇","Χ"}; /* 项目名
*/
  char buffer[200]; /* message */
  int money[10]={0,0,0,0,0,0,0,0,0,0};
  int save_pager;
  int price[10] = {0,50,40,30,25,20,15,10,5,2}; /* 倍率 */
  int bar[49] = {0,3,9,8,4,6,7,2,3,5,8,
                 9,1,8,7,6,3,2,8,4,5,
                 1,2,6,9,7,5,3,9,7,8,
                 1,4,9,2,6,3,5,8,9,7,
                 2,4,8,7,9,1,5,9}; /* 板面位址 */
  int i,j,p,s=1,t,z;
  time_t nowtime;
  extern int getddd;

  modify_user_mode( MARIO );

  nowtime = time(0) ;
  srandom(time(0));
  save_pager=uinfo.pager;
  clear();
  more("game/mario/mario.welcome");
  uinfo.pager = NA;
  getddd=1;

    while(-1)
    {
     clear();
     for(i=1;i<10;i++) /* money 归零 */
      money[i]=0;
     print_total(); /* 印板面 */
     do
     {
      do
      {
       get_record (FN_PASSWD, &currentuser, sizeof (currentuser), usernum);
       getdata(3,8,"你要押那项(1~9)[S]开始[Q]离开:",bet,2,DOECHO,NULL,YEA);
       i=atoi(bet);
       if(i>0&&i<10)
       {
        sprintf(buffer,"(现金: %d)要押多少赌金(1~10000)? 按 Enter取消:",
currentuser.money);
        getdata(4,8,buffer,m1,6,DOECHO,NULL,YEA);
        if(atoi(m1)>currentuser.money)
         pressanykey1("你的现金不够啦!!~~:)");
        else if(money[i]+atoi(m1)>=0&&money[i]+atoi(m1)<=10000)
        {
         money[i]+=atoi(m1);
         demoney(atoi(m1), 1);
        }
        cwindows_s(3,4);
       }
       move(21,3);clrtoeol();
       for(i=1;i<10;i++)
        prints("m%6d  ",i,money[i]);
      } while( !( ((bet[0]=='s'||bet[0]=='S')&&money[1]+money[2]+money[3]
+money[4]+money[5]+money[6]+money[7]+money[8]+money[9]>0)||bet[0]=='q'||bet[0]
=='Q') );
      if(bet[0]=='q'||bet[0]=='Q')
      {
       if(money[1]+money[2]+money[3]+money[4]+money[5]+money[6]+money[7]
+money[8]+money[9]>0)
       {
        for(i=1;i<10;i++)
         inmoney(money[i], 1);
       }
       uinfo.pager = save_pager;
       clear();
       getddd=0;
       return 0;
      }
     }while(bet[0]!='s'&&bet[0]!='S');

     price[0]=rand()%250+1;
     p=get_m(price[0]);  /* 转换成中的项目 */
     t=(s+301)%48-1;  /* 会停的位置 */
     if(t==0) t=48; /* 修正 */
     if(t==(-1)) t=47;

     j=correct(t,p); /* 正确位置 */
     if(j>=t)
      z=301+(j-t);
     else
      z=301-(t-j); /* 最後要走几步 */
     t=(z+s)%48-1; /* 真的要停的位置 */
     if(t==0) t=48;
     if(t==(-1)) t=47;

     for(i=s; i<49; i++) /* 第一圈 */
     {
      refresh();
       usleep(300000*((49-i)^2)/(49-s));        /* 起始减速 */
      run(i,0);
     }
     z=z-(48-s)-1;
     do
     {
      for(i=1; i<49; i++)  /* 中间的圈 */
      {
       refresh();
       usleep(30000);
       run(i,0);
      }
      z=z-48;
     }while(z>47);

     for(i=1; i<z; i++) /* 最後一圈 */
     {
      if(i>z-5)    /* 最後减速 */
       sleep(1);
      else
       usleep(150000);
      refresh();
      run(i,0);
     }

     for(i=0; i<5; i++) /* 闪五次 */
     {
      run(t,0);
      refresh();
      usleep(500000);
      run(t,1);
      refresh();
      usleep(500000);
     }

     move(5,8);
     prints("中奖的是%s    ",pic[p]);
     if(money[p]>0)
     {
      money[0]=money[p]*price[p];
      move(6,8);
      prints("恭喜你押中了,获得奖金 %d ",money[0]);
      while(-1)
      {
       cwindows_s(7,10);
       sprintf(buffer,"目前奖金: %d 你还要比大小吗??[Y/n]:", money[0]);
       getdata(7,8,buffer,bet,2,DOECHO,NULL,YEA);
       if(bet[0]!='N'&&bet[0]!='n')
       {
        getdata(8,8,"你要押什麽??[1.大 2.小]",bet2,2,DOECHO,NULL,YEA);
        move(9,8);
        if(bet2[0]=='2')
         prints("你押的是小!!");
        else
         prints("你押的是大!!");
        for(i=0; i<30; i++)
        {
         move(12,8);
         prints("                      □大           □小 ");
         refresh();
         if(i<20)
          usleep(8000*((30-i)^2));
         else
          usleep(8000*(i^2));
         move(12,8);
         prints("                      □大           □小 ");
         refresh();
         if(i<20)
          usleep(8000*((30-i)^2));
         else
          usleep(8000*(i^2));
        }
        price[0]=(rand()%2)+1;
        move(12,8);
        if(price[0]==1)
         prints("                      □大           □小 ");
        else
         prints("                      □大           □小 ");
        if(price[0]==atoi(bet2))
        {
         money[0]=money[0]*2;
         move(10,8);
         prints("啊!! 押中了!! 奖金变成%d张餐\券", money[0]);
        }
        else
        {
         money[0]=0;
         move(10,8);
         prints("呜....押错了....");
         break;
        }
       }
       else if(bet[0]=='N'||bet[0]=='n')
       {
        move(11,8);
        prints("得奖金 %d                       ", money[0]);
        break;
       }
      }

      if(money[0]>0)
      {
       inmoney(money[0], 1);
       sprintf(buffer,"%9s压中了%s 赚了%7d 张餐\卷 %s",currentuser.userid,pic[p]
       game_log(MARIOLOG,buffer);
      }
      else
      {
       sprintf(buffer,"%9s压中了%s 但是又输了 %s",currentuser.userid,pic[p],ctim
       game_log(MARIOLOG,buffer);
      }
     }
     else
     {
      move(8,8);
      prints("抱歉...你没押中ㄛ~~~");
      sprintf(buffer,"%9s一只都没有压中啦!! %s",currentuser.userid,ctime(&nowtim
      game_log(MARIOLOG,buffer);
     }
     pressreturn();
     s=t; /* 回传起点 */
    }
   }

int
correct(int t, int p)
{
 int j;
 int bar[49] = {0,3,9,8,4,6,7,2,3,5,8,
                9,1,8,7,6,3,2,8,4,5,
                1,2,6,9,7,5,3,9,7,8,
                1,4,9,2,6,3,5,8,9,7,
                2,4,8,7,9,1,5,9}; /* 板面位址 */

   for (j=t;j<49;j++)
   {
    if(bar[j]==p)
       return j;
   }
   for (j=t;j>0;j--)
   {
    if(bar[j]==p)
     return j;
   }
}

int run(int q,int p)
{
 int x1,y1,x2,y2,z,k;
 char *pic[10]={"  ","Ω","♀","♂","□","△","☆","77","◇","Χ"}; /* 项目名 */
 int bar[49] = {0,3,9,8,4,6,7,2,3,5,8,
                9,1,8,7,6,3,2,8,4,5,
                1,2,6,9,7,5,3,9,7,8,
                1,4,9,2,6,3,5,8,9,7,
                2,4,8,7,9,1,5,9}; /* 板面位址 */

 z=bar[q-1];
 k=bar[q];
 if(q==1)
 {
  x1=3;  y1=4;
  x2=1;  y2=4;
 }
 if(q>1&&q<19)
 {
  x1=1; y1=4*q-4;
  x2=1; y2=4*q;
 }
 if(q>18&&q<26)
 {
  x1=2*q-37; y1=72;
  x2=2*q-35; y2=72;
 }
 if(q>25&&q<43)
 {
  x1=15; y1=176-4*q;
  x2=15; y2=172-4*q;
 }
 if(q>42&&q<49)
 {
  x1=101-2*q;    y1=4;
  x2=99-2*q; y2=4;
 }
 move(x1,y1);
 if(q==1)
  prints("%s", pic[9]);
 else
  prints("%s", pic[z]);
 move(x2,y2);
 if(p==1)
  prints("%s", pic[k]);
 else
  prints("□");
}

int get_m(int x)
{
 int p;

 if(x>0&&x<2) p=0;
 if(x>1&&x<4) p=1;
 if(x>3&&x<7) p=2;
 if(x>6&&x<13) p=3;
 if(x>12&&x<24) p=4;
 if(x>23&&x<52) p=5;
 if(x>51&&x<101) p=6;
 if(x>100&&x<171) p=7;
 if(x>170) p=8;
 return p+1;
}

int print_total()
{
 prints("  ┌—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—
┬—┐\n");
 prints("  │♂│Χ│◇│□│☆│77│♀│♂│△│◇│Χ│Ω│Χ│77│☆│♂│♀
│◇│\n");
 prints("  ├—┼—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—
┼—┤\n");
 prints("  │Χ│
│□│\n");
 prints("  ├—┤
├—┤\n");
 prints("  │△│
│△│\n");
 prints("  ├—┤
├—┤\n");
 prints("  │Ω│
│Ω│\n");
 prints("  ├—┤
├—┤\n");
 prints("  │Χ│
│♀│\n");
 prints("  ├—┤
├—┤\n");
 prints("  │77│
│☆│\n");
 prints("  ├—┤                      □大           □小
├—┤\n");
 prints("  │◇│
│Χ│\n");
 prints("  ├—┼—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—
┼—┤\n");
 prints("  │□│♀│77│Χ│◇│△│♂│☆│♀│Χ│□│Ω│◇│77│Χ│♂│△
│77│\n");
 prints("  └—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—
┴—┘\n");
 prints("    ┌—┐  ┌—┐  ┌—┐  ┌—┐  ┌—┐  ┌—┐  ┌—┐  ┌—┐  ┌?
 prints("    │Ω│  │♀│  │♂│  │□│  │△│  │☆│  │77│  │◇│  │?
 prints("    │50│  │40│  │30│  │25│  │20│  │15│  │10│  │ 5│  │
 prints("    └—┘  └—┘  └—┘  └—┘  └—┘  └—┘  └—┘  └—┘  └?

}

int
cwindows_s(int x1,int x2)
{
 char buffer[] = "
";
 int i;

 for (i = x1; i < (x2+1); i++)
 {
  move (i, 8);
  prints ("%s", buffer);
 }
}

--
※ 转载:.种子网 BBS bbs.seed.net.tw.[FROM: beef.tcu.edu.tw]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店