/* $Id: vice.c,v 1.2 2002/04/28 19:35:29 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, 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; }