summaryrefslogtreecommitdiffstats
path: root/mbbsd/guess.c
diff options
context:
space:
mode:
Diffstat (limited to 'mbbsd/guess.c')
-rw-r--r--mbbsd/guess.c308
1 files changed, 165 insertions, 143 deletions
diff --git a/mbbsd/guess.c b/mbbsd/guess.c
index 2a7e6fdb..1f683ce2 100644
--- a/mbbsd/guess.c
+++ b/mbbsd/guess.c
@@ -1,159 +1,177 @@
-/* $Id: guess.c,v 1.3 2002/06/04 13:08:33 in2 Exp $ */
+/* $Id: guess.c,v 1.4 2002/07/05 17:10:27 in2 Exp $ */
#include "bbs.h"
#define LOGPASS BBSHOME "/etc/winguess.log"
-static void show_table(char TABLE[], char ifcomputer) {
- int i;
-
+static void
+show_table(char TABLE[], char ifcomputer)
+{
+ int i;
+
move(0, 35);
prints("\033[1;44;33m 【 猜數字 】 \033[m");
move(8, 1);
prints("\033[1;44;36m目 前 倍 率\033[m\n");
prints("\033[1;33m=================\033[m\n");
- if(ifcomputer) {
+ if (ifcomputer) {
prints("贏電腦: 2 倍\n");
prints("輸電腦: 0 倍\n");
} else {
- for(i = 1; i <= 6; i++)
- prints("第%d次, %02d倍\n",i,TABLE[i]);
+ for (i = 1; i <= 6; i++)
+ prints("第%d次, %02d倍\n", i, TABLE[i]);
}
prints("\033[33m=================\033[m");
}
-static unsigned long int get_money(void) {
- int money, i;
- char data[20];
-
+static unsigned long int
+get_money(void)
+{
+ int money, i;
+ char data[20];
+
move(1, 0);
prints("您目前有:%d Ptt$", cuser.money);
do {
getdata(2, 0, "要賭多少(5-10或按q離開): ", data, 9, LCECHO);
money = strlen(data);
- if(data[0] == 'q' || data[0] == 'Q') {
+ if (data[0] == 'q' || data[0] == 'Q') {
unlockutmpmode();
return 0;
}
- for(i = 0; i < money; i++)
- if(data[i]<'0' || data[i]>'9') {
+ for (i = 0; i < money; i++)
+ if (data[i] < '0' || data[i] > '9') {
money = -1;
break;
}
- if(money != -1){
+ if (money != -1) {
money = atol(data);
reload_money();
- if(money > cuser.money || money <= 4 || money > 10 ||
- money < 1)
+ if (money > cuser.money || money <= 4 || money > 10 ||
+ money < 1)
money = -1;
- }
- } while(money == -1);
- move(1,0);
+ }
+ } while (money == -1);
+ move(1, 0);
clrtoeol();
reload_money();
prints("您目前有:%d Ptt$", cuser.money - money);
return money;
}
-static int check_data(char *str) {
- int i, j;
-
- if(strlen(str) != 4)
+static int
+check_data(char *str)
+{
+ int i, j;
+
+ if (strlen(str) != 4)
return -1;
- for(i = 0; i < 4; i++)
- if(str[i] < '0' || str[i] > '9')
+ for (i = 0; i < 4; i++)
+ if (str[i] < '0' || str[i] > '9')
return -1;
- for(i = 0; i < 4; i++)
- for(j = i + 1; j < 4; j++)
- if(str[i] == str[j])
+ for (i = 0; i < 4; i++)
+ for (j = i + 1; j < 4; j++)
+ if (str[i] == str[j])
return -1;
return 1;
}
-static char *get_data(int count) {
- static char data[5];
- while(1) {
+static char *
+get_data(int count)
+{
+ static char data[5];
+ while (1) {
getdata(6, 0, "輸入四位數字(不重複): ", data, sizeof(data), LCECHO);
- if(check_data(data) == 1)
+ if (check_data(data) == 1)
break;
}
return data;
}
-static int guess_play(char *data, char *answer, int count) {
- int A_num = 0, B_num = 0;
- int i, j;
-
- for(i = 0; i < 4; i++) {
- if(data[i] == answer[i])
+static int
+guess_play(char *data, char *answer, int count)
+{
+ int A_num = 0, B_num = 0;
+ int i, j;
+
+ for (i = 0; i < 4; i++) {
+ if (data[i] == answer[i])
A_num++;
- for(j = 0; j < 4; j++)
- if(i == j)
+ for (j = 0; j < 4; j++)
+ if (i == j)
continue;
- else if(data[i] == answer[j]) {
+ else if (data[i] == answer[j]) {
B_num++;
break;
}
}
- if(A_num == 4)
+ if (A_num == 4)
return 1;
- move(count + 8,55);
+ move(count + 8, 55);
prints("%s => \033[1;32m%dA %dB\033[m", data, A_num, B_num);
return 0;
}
-static int result(int correct, int number) {
- char a = 0, b = 0, i, j;
- char n1[5], n2[5];
-
- sprintf(n1, "%04d",correct);
- sprintf(n2, "%04d",number);
- for(i = 0; i < 4; i++)
- for(j = 0; j < 4; j++)
- if(n1[(int)i] == n2[(int)j])
+static int
+result(int correct, int number)
+{
+ char a = 0, b = 0, i, j;
+ char n1[5], n2[5];
+
+ sprintf(n1, "%04d", correct);
+ sprintf(n2, "%04d", number);
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < 4; j++)
+ if (n1[(int)i] == n2[(int)j])
b++;
- for(i = 0; i < 4; i++)
- if(n1[(int)i] == n2[(int)i]) {
+ for (i = 0; i < 4; i++)
+ if (n1[(int)i] == n2[(int)i]) {
b--;
a++;
}
return 10 * a + b;
}
-static int legal(int number) {
- char i, j;
- char temp[5];
-
+static int
+legal(int number)
+{
+ char i, j;
+ char temp[5];
+
sprintf(temp, "%04d", number);
- for(i = 0; i < 4; i++)
- for(j = i + 1; j < 4; j++)
- if(temp[(int)i] == temp[(int)j])
+ for (i = 0; i < 4; i++)
+ for (j = i + 1; j < 4; j++)
+ if (temp[(int)i] == temp[(int)j])
return 0;
return 1;
}
-static void initcomputer(char flag[]) {
- int i;
-
- for(i = 0; i < 10000; i++)
- if(legal(i))
+static void
+initcomputer(char flag[])
+{
+ int i;
+
+ for (i = 0; i < 10000; i++)
+ if (legal(i))
flag[i] = 1;
- else
+ else
flag[i] = 0;
}
-static int computer(int correct, int total, char flag[], int n[]) {
- int guess;
- static int j;
- int k,i;
- char data[5];
-
- if(total == 1) {
+static int
+computer(int correct, int total, char flag[], int n[])
+{
+ int guess;
+ static int j;
+ int k, i;
+ char data[5];
+
+ if (total == 1) {
do {
guess = rand() % 10000;
- } while(!legal(guess));
- } else
+ } while (!legal(guess));
+ } else
guess = n[rand() % j];
k = result(correct, guess);
- if(k == 40) {
+ if (k == 40) {
move(total + 8, 25);
sprintf(data, "%04d", guess);
prints("%s => 猜中了!!", data);
@@ -164,25 +182,27 @@ static int computer(int correct, int total, char flag[], int n[]) {
prints("%s => \033[1;32m%dA %dB\033[m", data, k / 10, k % 10);
}
j = 0;
- for(i = 0; i < 10000; i++)
- if(flag[i]) {
- if(result(i, guess) != k)
+ for (i = 0; i < 10000; i++)
+ if (flag[i]) {
+ if (result(i, guess) != k)
flag[i] = 0;
- else
+ else
n[j++] = i;
}
return 0;
}
-static void Diff_Random(char *answer) {
- register int i = 0, j, k;
-
- while(i < 4) {
+static void
+Diff_Random(char *answer)
+{
+ register int i = 0, j, k;
+
+ while (i < 4) {
k = rand() % 10 + '0';
- for(j = 0; j < i; j++)
- if(k == answer[j])
+ for (j = 0; j < i; j++)
+ if (k == answer[j])
break;
- if(j == i) {
+ if (j == i) {
answer[j] = k;
i++;
}
@@ -192,24 +212,26 @@ static void Diff_Random(char *answer) {
#define lockreturn0(unmode, state) if(lockutmpmode(unmode, state)) return 0
-int guess_main() {
+int
+guess_main()
+{
unsigned long int money;
- char computerwin = 0,youwin = 0;
- int count = 0,c_count = 0;
- char ifcomputer[2];
- char answer[5];
- int *n = NULL;
- char yournum[5];
- char *flag = NULL;
- static char TABLE[]={0,10,8,4,2,1,0,0,0,0,0};
- FILE *file;
+ char computerwin = 0, youwin = 0;
+ int count = 0, c_count = 0;
+ char ifcomputer[2];
+ char answer[5];
+ int *n = NULL;
+ char yournum[5];
+ char *flag = NULL;
+ static char TABLE[] = {0, 10, 8, 4, 2, 1, 0, 0, 0, 0, 0};
+ FILE *file;
clear();
showtitle("猜數字", BBSName);
lockreturn0(GUESSNUM, LOCK_MULTI);
reload_money();
- if(cuser.money < 5) {
+ if (cuser.money < 5) {
clear();
move(12, 35);
prints("錢不夠啦 至少要 5 Ptt$");
@@ -217,29 +239,29 @@ int guess_main() {
pressanykey();
return 1;
}
- if((money = get_money()) == 0)
- return 1;
- vice(money,"猜數字");
-
+ if ((money = get_money()) == 0)
+ return 1;
+ vice(money, "猜數字");
+
Diff_Random(answer);
move(2, 0);
clrtoeol();
prints("您下注 :%d Ptt$", money);
-
+
getdata_str(4, 0, "您要和電腦比賽嗎? <y/n>[y]:",
- ifcomputer, sizeof(ifcomputer), LCECHO, "y");
- if(ifcomputer[0] == 'y') {
+ ifcomputer, sizeof(ifcomputer), LCECHO, "y");
+ if (ifcomputer[0] == 'y') {
ifcomputer[0] = 1;
show_table(TABLE, 1);
} else {
ifcomputer[0] = 0;
show_table(TABLE, 0);
}
- if(ifcomputer[0]) {
+ if (ifcomputer[0]) {
do {
getdata(5, 0, "請輸入您要讓電腦猜的數字: ",
yournum, sizeof(yournum), LCECHO);
- } while(!legal(atoi(yournum)));
+ } while (!legal(atoi(yournum)));
move(8, 25);
prints("電腦猜");
flag = malloc(sizeof(char) * 10000);
@@ -248,46 +270,47 @@ int guess_main() {
}
move(8, 55);
prints("你猜");
- while(((!computerwin || !youwin) && count <10 && (ifcomputer[0])) ||
- (!ifcomputer[0] && count < 10 && !youwin)) {
- if(!computerwin && ifcomputer[0]) {
+ while (((!computerwin || !youwin) && count < 10 && (ifcomputer[0])) ||
+ (!ifcomputer[0] && count < 10 && !youwin)) {
+ if (!computerwin && ifcomputer[0]) {
++c_count;
- if(computer(atoi(yournum), c_count, flag, n))
- computerwin = 1;
+ if (computer(atoi(yournum), c_count, flag, n))
+ computerwin = 1;
}
move(20, 55);
prints("第 %d 次機會 ", count + 1);
- if(!youwin) {
+ if (!youwin) {
++count;
- if(guess_play(get_data(count),answer,count))
- youwin=1;
+ if (guess_play(get_data(count), answer, count))
+ youwin = 1;
}
}
move(17, 35);
- if(ifcomputer[0]) {
+ if (ifcomputer[0]) {
free(flag);
free(n);
- if(count > c_count) {
+ if (count > c_count) {
prints("你輸給電腦了");
move(18, 35);
prints("你賠了 %d ", money);
- if((file = fopen(LOGPASS,"a"))) {
+ if ((file = fopen(LOGPASS, "a"))) {
fprintf(file, "電腦第%d次猜中, ", c_count);
- if(youwin)
+ if (youwin)
fprintf(file, "%s 第%d次猜中, ", cuser.userid, count);
else
- fprintf(file, "%s 沒猜中, ", cuser.userid);
- fprintf(file,"電腦賺走了%s %ld Ptt$\n", cuser.userid, money);
+ fprintf(file, "%s 沒猜中, ", cuser.userid);
+ fprintf(file, "電腦賺走了%s %ld Ptt$\n", cuser.userid, money);
fclose(file);
}
unlockutmpmode();
pressanykey();
- return 1;
- } else if(count < c_count) {
+ return 1;
+ } else if (count < c_count) {
prints("真厲害, 讓你賺到囉");
- move(18,35);prints("你賺走了 %d ",money*2);
- demoney(money*2);
- if((file = fopen(LOGPASS,"a"))) {
+ move(18, 35);
+ prints("你賺走了 %d ", money * 2);
+ demoney(money * 2);
+ if ((file = fopen(LOGPASS, "a"))) {
fprintf(file, "id: %s, 第%d次猜中, 電腦第%d次猜中, "
"贏了電腦 %ld Ptt$\n", cuser.userid, count,
c_count, money * 2);
@@ -299,7 +322,7 @@ int guess_main() {
} else {
prints("真厲害, 和電腦打成平手了, 拿回本錢%d\n", money);
demoney(money);
- if((file = fopen(LOGPASS,"a"))) {
+ if ((file = fopen(LOGPASS, "a"))) {
fprintf(file, "id: %s 和電腦打成了平手\n", cuser.userid);
fclose(file);
}
@@ -308,29 +331,28 @@ int guess_main() {
return 1;
}
}
- if(youwin) {
- demoney(TABLE[count]*money);
- if(count < 5) {
+ if (youwin) {
+ demoney(TABLE[count] * money);
+ if (count < 5) {
prints("真厲害, 錢被你賺走了");
- if((file = fopen(LOGPASS,"a"))) {
+ if ((file = fopen(LOGPASS, "a"))) {
fprintf(file, "id: %s, 第%d次猜中, 贏了 %ld Ptt$\n",
cuser.userid, count, TABLE[count] * money);
fclose(file);
}
- } else if(count > 5) {
+ } else if (count > 5) {
prints("唉, 太多次才猜出來了");
- if((file = fopen(LOGPASS,"a"))) {
+ if ((file = fopen(LOGPASS, "a"))) {
fprintf(file, "id: %s, 第%d次才猜中, 賠了 %ld Ptt$\n",
cuser.userid, count, money);
fclose(file);
}
- }
- else {
+ } else {
prints("五次猜出來, 還你本錢吧");
- move(18,35);
+ move(18, 35);
clrtoeol();
prints("你拿回了%d Ptt$\n", money);
- if((file = fopen(LOGPASS,"a"))) {
+ if ((file = fopen(LOGPASS, "a"))) {
fprintf(file, "id: %s, 第%d次猜中, 拿回了本錢 %ld Ptt$\n",
cuser.userid, count, money);
fclose(file);
@@ -340,12 +362,12 @@ int guess_main() {
pressanykey();
return 1;
}
- move(17,35);
+ move(17, 35);
prints("嘿嘿 標準答案是 %s ", answer);
- move(18,35);
+ move(18, 35);
prints("下次再來吧");
- if((file = fopen(BBSHOME "/etc/loseguess.log","a"))) {
- fprintf(file,"id: %s 賭了 %ld Ptt$\n",cuser.userid,money);
+ if ((file = fopen(BBSHOME "/etc/loseguess.log", "a"))) {
+ fprintf(file, "id: %s 賭了 %ld Ptt$\n", cuser.userid, money);
fclose(file);
}
return 1;