summaryrefslogtreecommitdiffstats
path: root/mbbsd/vice.c
diff options
context:
space:
mode:
authorin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2002-03-07 23:13:44 +0800
committerin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2002-03-07 23:13:44 +0800
commitae31e19f92e717919ac8e3db9039eb38d2b89aae (patch)
treec70164d6a1852344f44b04a653ae2815043512af /mbbsd/vice.c
downloadpttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.gz
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.bz2
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.lz
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.xz
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.zst
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.zip
Initial revision
git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/vice.c')
-rw-r--r--mbbsd/vice.c151
1 files changed, 151 insertions, 0 deletions
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 <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, 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;
+}