From ae31e19f92e717919ac8e3db9039eb38d2b89aae Mon Sep 17 00:00:00 2001 From: in2 Date: Thu, 7 Mar 2002 15:13:44 +0000 Subject: Initial revision git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/vice.c | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 mbbsd/vice.c (limited to 'mbbsd/vice.c') diff --git a/mbbsd/vice.c b/mbbsd/vice.c new file mode 100644 index 00000000..46f695d9 --- /dev/null +++ b/mbbsd/vice.c @@ -0,0 +1,151 @@ +/* $Id: vice.c,v 1.1 2002/03/07 15:13:48 in2 Exp $ */ +#include +#include +#include +#include +#include +#include "config.h" +#include "pttstruct.h" +#include "common.h" +#include "modes.h" +#include "proto.h" +extern int usernum; + +#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, sizeof(tbingo)); + 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; +} +// 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(char) * 512); + sprintf(buf, "%s%d", filename, rand() % 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, 511, fs)) + prints("%s", buf); + + fclose(fs); + return 1; +} + +static int ran_showmfile(char *filename, int maxnum) { + char buf[256]; + + sprintf(buf, "%s%d", filename, rand() % maxnum + 1); + return more(buf, YEA); +} + +extern userec_t cuser; + +int vice_main() { + 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(); + prints("這一期的發票號碼"); + while(fgets(serial, 15, fd)) { + if((ptr = strchr(serial,'\r'))) + *ptr = 0; + if(j == 0) + i++; + move(10 + i, 24 + j); + prints("%s", serial); + j += 9; + j %= 45; + } + getdata(8, 0, "按'c'開始對獎了(或是任意鍵離開)): ", ch, 2, 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; +} -- cgit v1.2.3