summaryrefslogblamecommitdiffstats
path: root/mbbsd/vice.c
blob: 460a1c5a193e8c3b05322a57b580bd73f1c96ef7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          
                













                                                 
          






                                                
                                



                                         




               
          


                                     
 

                                 
 



                                                             

             
                                                  
          



                                                      
 
                            
                                                                        



                                           
     

               
                                       
                  




               
          


                                         
 
                                                                        


                          
 
   
               


                                  

                                            

                                                                                     

                                     


                                               
     

                              



                                      

                                     

          
                 
               
                             
                                                 




                                         

                     
                             
                     

                
     

                                                       



                                                         

                                   





                                              

                  





                                                  
          
                                                   






                     
/* $Id$ */
#include "bbs.h"

#define VICE_PLAY   BBSHOME "/etc/vice/vice.play"
#define VICE_DATA   "vice.new"
#define VICE_BINGO  BBSHOME "/etc/vice.bingo"
#define VICE_SHOW   BBSHOME "/etc/vice.show"
#define VICE_LOST   BBSHOME "/etc/vice/vice.lost"
#define VICE_WIN    BBSHOME "/etc/vice/vice.win"
#define VICE_END    BBSHOME "/etc/vice/vice.end"
#define VICE_NO     BBSHOME "/etc/vice/vice.no"
#define MAX_NO_PICTURE   2
#define MAX_WIN_PICTURE  2
#define MAX_LOST_PICTURE 3
#define MAX_END_PICTURE  5

static int
vice_load(char tbingo[6][15])
{
    FILE           *fb = fopen(VICE_BINGO, "r");
    char            buf[16], *ptr;
    int             i = 0;
    if (!fb)
    return -1;
    bzero((char *)tbingo, 6*15);
    while (i < 6 && fgets(buf, 15, fb)) {
    if ((ptr = strchr(buf, '\n')))
        *ptr = 0;
    strcpy(tbingo[i++], buf);
    }
    fclose(fb);
    return 0;
}

static int
check(char tbingo[6][15], char *data)
{
    int             i = 0, j;

    if (!strcmp(data, tbingo[0]))
    return 8;

    for (j = 8; j > 0; j--)
    for (i = 1; i < 6; i++)
        if (!strncmp(data + 8 - j, tbingo[i] + 8 - j, j))
        return j - 1;
    return 0;
}
/* TODO Ptt:showfile ran_showfile more 三者要合 */
static int
ran_showfile(int y, int x, char *filename, int maxnum)
{
    FILE           *fs;
    char            buf[512];

    bzero(buf, sizeof(buf));
    snprintf(buf, sizeof(buf), "%s%d", filename, random() % maxnum + 1);
    if (!(fs = fopen(buf, "r"))) {
    move(10, 10);
    prints("can't open file: %s", buf);
    return 0;
    }
    move(y, x);

    while (fgets(buf, sizeof(buf), fs))
    outs(buf);

    fclose(fs);
    return 1;
}

static int
ran_showmfile(char *filename, int maxnum)
{
    char            buf[256];

    snprintf(buf, sizeof(buf), "%s%d", filename, random() % maxnum + 1);
    return more(buf, YEA);
}


int
vice_main(void)
{
    FILE           *fd;
    char            tbingo[6][15];
    char            buf_data[256],
                    serial[16], ch[2], *ptr;
    int             TABLE[] = {0, 10, 200, 1000, 4000, 10000, 40000, 100000, 200000};
    int             total = 0, money, i = 4, j = 0;

    setuserfile(buf_data, VICE_DATA);
    if (!dashf(buf_data)) {
    ran_showmfile(VICE_NO, MAX_NO_PICTURE);
    return 0;
    }
    if (vice_load(tbingo) < 0)
    return -1;
    clear();
    ran_showfile(0, 0, VICE_PLAY, 1);
    ran_showfile(10, 0, VICE_SHOW, 1);

    if (!(fd = fopen(buf_data, "r")))
    return 0;
    j = 0;
    i = 0;
    move(10, 24);
    clrtoeol();
    outs("這一期的發票號碼");
    // FIXME 當發票多於一行, 開獎的號碼就會被蓋掉
    while (fgets(serial, 15, fd)) {
    if ((ptr = strchr(serial, '\r')))
        *ptr = 0;
    if (j == 0)
        i++;
    if( i >= 14 )
        break;
    move(10 + i, 24 + j);
    outs(serial);
    j += 9;
    j %= 45;
    }
    getdata(8, 0, "按'c'開始對獎了(或是任意鍵離開)): ",
        ch, sizeof(ch), LCECHO);
    if (ch[0] != 'c' || lockutmpmode(VICE, LOCK_MULTI)) {
    fclose(fd);
    return 0;
    }
    showtitle("發票對獎", BBSNAME);
    rewind(fd);
    while (fgets(serial, 15, fd)) {
    if ((ptr = strchr(serial, '\n')))
        *ptr = 0;
    money = TABLE[check(tbingo, serial)];
    total += money;
    prints("%s 中了 %d\n", serial, money);
    }
    pressanykey();
    if (total > 0) {
    ran_showmfile(VICE_WIN, MAX_WIN_PICTURE);
    move(22, 0);
    clrtoeol();
    prints("全部的發票中了 %d 塊錢\n", total);
    demoney(total);
    } else
    ran_showmfile(VICE_LOST, MAX_LOST_PICTURE);

    fclose(fd);
    unlink(buf_data);
    pressanykey();
    unlockutmpmode();
    return 0;
}