/* $Id: vice.c,v 1.2 2002/04/28 19:35:29 in2 Exp $ */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#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;
}