/[LeafOK_CVS]/lbbs/utils/game/chicken.c
ViewVC logotype

Annotation of /lbbs/utils/game/chicken.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.32 - (hide annotations)
Wed Nov 5 04:19:21 2025 UTC (4 months, 1 week ago) by sysadm
Branch: MAIN
Changes since 1.31: +10 -8 lines
Content type: text/x-csrc
Use enum / const int instead of macro define constant integers
Use const char * instead of macro define for constant strings

1 sysadm 1.28 /* 电子鸡 小码力..几a几b游戏.□ */
2 sysadm 1.1
3 sysadm 1.28 /* Writed by Birdman From 140.116.102.125 创意哇哈哈*/
4 sysadm 1.1
5     #include "bbs.h"
6     #include "common.h"
7     #include "io.h"
8 sysadm 1.13 #include "log.h"
9 sysadm 1.26 #include "login.h"
10 sysadm 1.3 #include "money.h"
11 sysadm 1.27 #include "screen.h"
12 sysadm 1.1 #include <stdio.h>
13 sysadm 1.27 #include <stdlib.h>
14 sysadm 1.11 #include <string.h>
15 sysadm 1.24 #include <time.h>
16 sysadm 1.11 #include <unistd.h>
17 sysadm 1.22 #include <sys/param.h>
18 sysadm 1.11
19 sysadm 1.32 enum _chicken_constant_t
20     {
21     CHICKEN_NAME_LEN = 40,
22     };
23    
24     static const char DATA_FILE[] = "var/chicken";
25     static const char LOG_FILE[] = "var/chicken/log";
26    
27     static const char *cstate[10] =
28     {"我在吃饭", "偷吃零食", "拉便便", "笨蛋..输给鸡?", "哈..赢小鸡也没多光荣", "没食物啦..", "疲劳全消!"};
29 sysadm 1.1
30 sysadm 1.17 char fname[FILE_PATH_LEN];
31 sysadm 1.1 time_t birth;
32 sysadm 1.10 int weight, satis, mon, day, age, angery, sick, oo, happy, clean, tiredstrong, play;
33     int winn, losee, last, chictime, agetmp, food, zfood;
34 sysadm 1.20 char chicken_name[CHICKEN_NAME_LEN + 1];
35 sysadm 1.1 FILE *cfp;
36 sysadm 1.10 int gold, x[9] = {0}, ran, q_mon, p_mon;
37 sysadm 1.1 unsigned long int bank;
38 sysadm 1.10 char buf[1], buf1[6];
39    
40 sysadm 1.17 static int load_chicken(void);
41     static int save_chicken(void);
42 sysadm 1.20 static int create_a_egg(void);
43 sysadm 1.10 static int death(void);
44     static int guess(void);
45     static int lose(void);
46     static int pressany(int i);
47     static int sell(void);
48     static int show_chicken(void);
49     static int situ(void);
50     static int select_menu(void);
51     static int tie(void);
52     static int win_c(void);
53    
54     int chicken_main()
55     {
56 sysadm 1.17 if (money_refresh() < 0)
57     {
58     return -1;
59     }
60    
61     setuserfile(fname, sizeof(fname), DATA_FILE);
62 sysadm 1.20
63     if (load_chicken() < 0)
64     {
65     return -2;
66     }
67    
68 sysadm 1.26 if (user_online_update("CHICKEN") < 0)
69     {
70     log_error("user_online_update(CHICKEN) error\n");
71     }
72    
73 sysadm 1.17 show_chicken();
74     select_menu();
75     save_chicken();
76    
77     return 0;
78     }
79    
80     static int load_chicken()
81     {
82 sysadm 1.10 FILE *fp;
83 sysadm 1.13 time_t now;
84 sysadm 1.24 struct tm ptime;
85 sysadm 1.29 int ret;
86 sysadm 1.10
87     agetmp = 1;
88     // modify_user_mode(CHICK);
89     time(&now);
90 sysadm 1.24 localtime_r(&now, &ptime);
91 sysadm 1.17
92 sysadm 1.10 if ((fp = fopen(fname, "r+")) == NULL)
93     {
94 sysadm 1.20 chicken_name[0] = '\0';
95     if (create_a_egg() < 0)
96     {
97     return -1;
98     }
99 sysadm 1.10 last = 1;
100     fp = fopen(fname, "r");
101     }
102     else
103     {
104     last = 0;
105     }
106 sysadm 1.29 ret = fscanf(fp, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %s ",
107     &weight, &mon, &day, &satis, &age, &oo, &happy, &clean, &tiredstrong, &play, &winn, &losee, &food, &zfood, chicken_name);
108     if (ret != 15)
109     {
110     log_error("Error in chicken data\n");
111     }
112     fclose(fp);
113 sysadm 1.17
114 sysadm 1.24 if (day < (ptime.tm_mon + 1))
115 sysadm 1.10 {
116 sysadm 1.24 age = ptime.tm_mday;
117 sysadm 1.10 age = age + 31 - mon;
118     }
119     else
120 sysadm 1.17 {
121 sysadm 1.24 age = ptime.tm_mday - mon;
122 sysadm 1.17 }
123    
124     return 0;
125     }
126    
127     int save_chicken()
128     {
129     FILE *fp;
130 sysadm 1.10
131     fp = fopen(fname, "r+");
132 sysadm 1.29 fprintf(fp, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %s ",
133     weight, mon, day, satis, age, oo, happy, clean, tiredstrong, play, winn, losee, food, zfood, chicken_name);
134 sysadm 1.17 fclose(fp);
135 sysadm 1.10
136     return 0;
137     }
138    
139 sysadm 1.20 static int create_a_egg()
140 sysadm 1.10 {
141 sysadm 1.17 FILE *fp;
142 sysadm 1.24 struct tm ptime;
143 sysadm 1.10 time_t now;
144     time(&now);
145 sysadm 1.24 localtime_r(&now, &ptime);
146 sysadm 1.20 char name_tmp[CHICKEN_NAME_LEN + 1];
147 sysadm 1.14
148 sysadm 1.10 clrtobot(2);
149 sysadm 1.20 while (!SYS_server_exit && chicken_name[0] == '\0')
150 sysadm 1.10 {
151 sysadm 1.28 strncpy(chicken_name, "宝宝", sizeof(chicken_name) - 1);
152 sysadm 1.20 chicken_name[sizeof(chicken_name) - 1] = '\0';
153    
154     strncpy(name_tmp, chicken_name, sizeof(name_tmp) - 1);
155     name_tmp[sizeof(name_tmp) - 1] = '\0';
156 sysadm 1.14
157 sysadm 1.30 if (get_data(2, 1, "帮小鸡取个好名字:", name_tmp, sizeof(name_tmp), CHICKEN_NAME_LEN / 2) > 0)
158 sysadm 1.20 {
159     strncpy(chicken_name, name_tmp, sizeof(chicken_name) - 1);
160     chicken_name[sizeof(chicken_name) - 1] = '\0';
161     }
162 sysadm 1.10 }
163 sysadm 1.13
164     if ((fp = fopen(fname, "w")) == NULL)
165     {
166     log_error("Error!!cannot open file '%s'!\n", fname);
167 sysadm 1.20 return -2;
168 sysadm 1.13 }
169 sysadm 1.29 fprintf(fp, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %s ",
170     ptime.tm_hour * 2, ptime.tm_mday, ptime.tm_mon + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5, chicken_name);
171 sysadm 1.10 fclose(fp);
172 sysadm 1.17
173 sysadm 1.13 if ((fp = fopen(LOG_FILE, "a")) == NULL)
174 sysadm 1.10 {
175 sysadm 1.13 log_error("Error!!cannot open file '%s'!\n", LOG_FILE);
176 sysadm 1.20 return -2;
177 sysadm 1.10 }
178 sysadm 1.28 fprintf(fp, "%s 在 [%d/%d %d:%02d] 养了一只叫 %s 的小鸡\r\n",
179 sysadm 1.24 BBS_username, ptime.tm_mon + 1, ptime.tm_mday,
180     ptime.tm_hour, ptime.tm_min, chicken_name);
181 sysadm 1.10 fclose(fp);
182 sysadm 1.17
183 sysadm 1.10 return 0;
184     }
185    
186     static int show_chicken()
187     {
188     if (chictime >= 200)
189     {
190     weight -= 5;
191     clean += 3;
192     if (tiredstrong > 2)
193 sysadm 1.17 {
194 sysadm 1.10 tiredstrong -= 2;
195 sysadm 1.17 }
196 sysadm 1.10 }
197     if (weight < 0)
198 sysadm 1.17 {
199 sysadm 1.10 death();
200 sysadm 1.17 }
201    
202 sysadm 1.10 clrtobot(1);
203     prints(
204     "Name:%s"
205 sysadm 1.28 " Age :%d岁"
206     " 重量:%d"
207     " 食物:%d"
208     " 零食:%d"
209     " 疲劳:%d"
210     " 便便:%d\r\n"
211     " 生日:%d月%d日"
212     " 糖糖:%8d"
213     " 快乐度:%d"
214     " 满意度:%d",
215     // " 大补丸:%d\r\n",
216 sysadm 1.20 chicken_name, age, weight, food, zfood, tiredstrong, clean, day, mon, money_balance(), happy, satis); //,oo);
217 sysadm 1.10
218     moveto(3, 0);
219     if (age <= 16)
220     {
221     switch (age)
222     {
223     case 0:
224     case 1:
225 sysadm 1.28 prints(" ●●●●\r\n"
226     "● ●● ●\r\n"
227     "●●●●●●\r\n"
228     "●● ●●\r\n"
229     "●●●●●●\r\n"
230     " ●●●● ");
231 sysadm 1.10
232     break;
233     case 2:
234     case 3:
235 sysadm 1.28 prints(" ●●●●●●\r\n"
236     " ● ●\r\n"
237     "● ● ● ●\r\n"
238     "● ●\r\n"
239     "● ●● ●\r\n"
240     "● ●\r\n"
241     "● ●\r\n"
242     " ● ●\r\n"
243     " ●●●●●● ");
244 sysadm 1.10
245     break;
246     case 4:
247     case 5:
248    
249 sysadm 1.28 prints(" ●●●●●●\r\n"
250     " ● ●\r\n"
251     " ● ● ● ●\r\n"
252     " ● ●\r\n"
253     " ● ●● ●\r\n"
254     "●●● ●● ●●\r\n"
255     " ● ●\r\n"
256     " ● ●\r\n"
257     " ● ●●●● ●\r\n"
258     " ● ● ●\r\n"
259     " ● ");
260 sysadm 1.10 break;
261     case 6:
262     case 7:
263 sysadm 1.28 prints(" ● ●●●●●●\r\n"
264     "● ●● ● ●\r\n"
265     "● ● ●\r\n"
266     " ●●● ●\r\n"
267     "● ●\r\n"
268     "● ●● ●\r\n"
269     " ● ● ●\r\n"
270     " ● ●\r\n"
271     " ● ●\r\n"
272     " ●●●●●● ");
273 sysadm 1.10 break;
274    
275     case 8:
276     case 9:
277     case 10:
278 sysadm 1.28 prints(" ●● ●●\r\n"
279     " ●●●● ●●●●\r\n"
280     " ●●●●●●●●●●●\r\n"
281     " ● ●\r\n"
282     " ● ● ● ●\r\n"
283     "● ●\r\n"
284     "● ●●● ●\r\n"
285     " ● ●\r\n"
286     "● ● ● ●\r\n"
287     " ●● ●●●\r\n"
288     " ● ●\r\n"
289     " ● ●\r\n"
290     " ● ●●● ●\r\n"
291     " ● ● ●\r\n"
292     " ● ");
293 sysadm 1.10
294     break;
295    
296     case 11:
297     case 12:
298 sysadm 1.28 prints(" ●●●●●●\r\n"
299     " ● ● ●●\r\n"
300     " ● ● ● ●●\r\n"
301     " ●● ●●●\r\n"
302     "● ● ●●\r\n"
303     "●●●●●●●● ●●\r\n"
304     " ● ●●\r\n"
305     " ● ● ● ●\r\n"
306     " ● ● ● ●\r\n"
307     " ● ● ●\r\n"
308     " ● ●\r\n"
309     " ● ●●● ●\r\n"
310     " ● ● ● ●\r\n"
311     " ● ● ");
312 sysadm 1.10
313     break;
314     case 13:
315     case 14:
316 sysadm 1.28 prints(" ●●●●\r\n"
317     " ●●●●●●●●\r\n"
318     " ●●●●●●●●●●\r\n"
319     " ●●●●●●●●●●●●\r\n"
320     " ● ●●●●●●●●●\r\n"
321     "●● ● ●●\r\n"
322     "●●●● ●\r\n"
323     " ● ●\r\n"
324     " ●● ●●\r\n"
325     " ● ●●●●●● ●\r\n"
326     " ● ●\r\n"
327     " ● ●\r\n"
328     " ● ●\r\n"
329     " ●●● ●●● ");
330 sysadm 1.10 break;
331     case 15:
332     case 16:
333 sysadm 1.28 prints(" ● ●●●●●●\r\n"
334     "● ●● ● ●\r\n"
335     "● ● ●\r\n"
336     " ●●● ●\r\n"
337     "● ●\r\n"
338     "● ●● ●\r\n"
339     " ● ● ●\r\n"
340     " ● ● ● ●\r\n"
341     " ● ● ●\r\n"
342     " ● ●\r\n"
343     " ● ●\r\n"
344     " ● ●● ●●●\r\n"
345     " ● ●● ●\r\n"
346     " ● ● ");
347 sysadm 1.10
348     break;
349     }
350     }
351     else
352     {
353 sysadm 1.28 prints(" ●●●●●●●\r\n"
354     " ● ●●●\r\n"
355     " ● ● ● ●●●\r\n"
356     " ●●●●●●● ●●\r\n"
357     " ● ● ●\r\n"
358     " ●●●●●●● ● 我是大怪鸟\r\n"
359     " ● ● ●\r\n"
360     " ●●●●●● ●\r\n"
361     " ● ●\r\n"
362     " ● ●\r\n"
363     " ● ●\r\n"
364     "●● ● ●\r\n"
365     "● ●●●●●● ●●\r\n"
366     " ● ●\r\n"
367     "●●● 我是大怪鸟 ●●● ");
368 sysadm 1.10 }
369     if (clean > 10)
370     {
371     moveto(10, 30);
372 sysadm 1.28 prints("便便好多..臭臭...");
373 sysadm 1.10 if (clean > 15)
374     death();
375     press_any_key();
376     }
377    
378     moveto(17, 0);
379 sysadm 1.28 prints("[1]-吃饭 [2]-吃零食 [3]-清理鸡舍 [4]-跟小鸡猜拳 [5]-目前战绩");
380     prints("\r\n[6]-买鸡饲料$20 [7]-买零食$30 [8]-吃大补丸 [9]-卖鸡喔 ");
381 sysadm 1.10 return 0;
382     }
383    
384     static int select_menu()
385     {
386 sysadm 1.17 int loop = 1;
387 sysadm 1.18 char inbuf[2];
388 sysadm 1.24 struct tm ptime;
389 sysadm 1.10 time_t now;
390     time(&now);
391 sysadm 1.24 localtime_r(&now, &ptime);
392 sysadm 1.20 char name_tmp[CHICKEN_NAME_LEN + 1];
393 sysadm 1.17
394 sysadm 1.19 while (!SYS_server_exit && loop)
395 sysadm 1.10 {
396     moveto(23, 0);
397 sysadm 1.28 prints(" 使用帮助  c 改名字 k 杀鸡 t 消除非疲劳($50) q 退出 ");
398 sysadm 1.15 inbuf[0] = '\0';
399 sysadm 1.30 if (get_data(22, 1, "要做些什么呢?:", inbuf, sizeof(inbuf), 1) < 0)
400 sysadm 1.20 {
401     return 0; // input timeout
402     }
403 sysadm 1.10 if (tiredstrong > 20)
404     {
405     clearscr();
406     moveto(15, 30);
407 sysadm 1.28 prints("呜~~~小鸡会累坏的...要先去休息一下..");
408     prints("\r\n\r\n休 养 中");
409 sysadm 1.10 }
410     switch (inbuf[0])
411     {
412     case '1':
413     if (food <= 0)
414     {
415     pressany(5);
416     break;
417     }
418 sysadm 1.17 clrtobot(10);
419 sysadm 1.10 moveto(10, 0);
420 sysadm 1.28 prints(" □□□□□□\r\n"
421     " ∵∴ □ □\r\n"
422     " □ □ □□□□ □ \r\n"
423     " □ □ □ □ □□□□□□□ \r\n"
424     " Coke □ _□□□□□□□□□_ □□□□□□□□ \r\n"
425     " □ □ %%%%%%%%% □—∩∩—□ \r\n"
426     " □ □ □□□□□□□□□ │Mcdonald│      \r\n"
427     " □ □ ※※※※※※※※※  □————□ \r\n"
428     " □□□□□□ □□□□□□□□□ □□□□□□□□ ");
429 sysadm 1.10
430     pressany(0);
431     iflush();
432     food--;
433     tiredstrong++;
434     satis++;
435     if (age < 5)
436 sysadm 1.17 {
437 sysadm 1.10 weight = weight + (5 - age);
438 sysadm 1.17 }
439 sysadm 1.10 else
440 sysadm 1.17 {
441 sysadm 1.10 weight++;
442 sysadm 1.17 }
443 sysadm 1.10 if (weight > 100)
444     {
445     moveto(9, 30);
446 sysadm 1.28 prints("太重了啦..肥鸡~~你想撑死鸡啊?....哇咧○●××");
447 sysadm 1.10 press_any_key();
448     }
449     if (weight > 150)
450     {
451     moveto(9, 30);
452 sysadm 1.28 prints("鸡撑晕了~~");
453 sysadm 1.10 press_any_key();
454     }
455     if (weight > 200)
456 sysadm 1.17 {
457 sysadm 1.10 death();
458 sysadm 1.17 }
459 sysadm 1.10 break;
460     case '2':
461     if (zfood <= 0)
462     {
463     pressany(5);
464     break;
465     }
466 sysadm 1.17 clrtobot(10);
467 sysadm 1.10 moveto(10, 0);
468 sysadm 1.28 prints(" □\r\n"
469     " □□○\r\n"
470     " ■■\r\n"
471     " □□\r\n"
472     " □□\r\n"
473     "  □ \r\n"
474     "  □□ 水果酒冰淇淋苏打 嗯!好喝! ");
475 sysadm 1.10 pressany(1);
476     zfood--;
477     tiredstrong++;
478     happy++;
479     weight += 2;
480     if (weight > 100)
481     {
482     moveto(9, 30);
483 sysadm 1.28 prints("太重了啦..肥鸡~~");
484 sysadm 1.10 press_any_key();
485     }
486     if (weight > 200)
487 sysadm 1.17 {
488 sysadm 1.10 death();
489 sysadm 1.17 }
490 sysadm 1.10 break;
491     case '3':
492 sysadm 1.17 clrtobot(10);
493 sysadm 1.10 moveto(10, 0);
494 sysadm 1.28 prints(" □□□□□\r\n"
495     " 『□□□□\r\n"
496     " □□□□\r\n"
497     " □□□□□□□□◎□□□□\r\n"
498     " □□□□□□□□□□□□□\r\n"
499     " □□□□□□□□□ □\r\n"
500     " □□□□□□□□\r\n"
501     " □□□□□□\r\n"
502     "  □□□□□□\r\n"
503     " 耶耶耶...便便拉光光... ");
504 sysadm 1.10
505     pressany(2);
506     tiredstrong += 5;
507     clean = 0;
508     break;
509     case '4':
510     guess();
511 sysadm 1.24 satis += (ptime.tm_sec % 2);
512 sysadm 1.10 tiredstrong++;
513     break;
514     case '5':
515     situ();
516     break;
517     case '6':
518 sysadm 1.17 clrtobot(20);
519 sysadm 1.10 moveto(20, 0);
520 sysadm 1.17 if (money_withdraw(20) <= 0)
521 sysadm 1.10 {
522 sysadm 1.28 prints("糖果不足!!");
523 sysadm 1.10 press_any_key();
524     break;
525     }
526     food += 5;
527 sysadm 1.28 prints("\r\n食物有  %d 份", food);
528     prints(" 剩下  %d 糖", money_balance());
529 sysadm 1.10 press_any_key();
530     break;
531     case '7':
532 sysadm 1.17 clrtobot(20);
533 sysadm 1.10 moveto(20, 0);
534 sysadm 1.17 if (money_withdraw(30) <= 0)
535 sysadm 1.10 {
536 sysadm 1.28 prints("糖果不足!!");
537 sysadm 1.10 press_any_key();
538     break;
539     }
540     zfood += 5;
541 sysadm 1.28 prints("\r\n零食有  %d 份", zfood);
542     prints(" 剩下  %d 糖", money_balance());
543 sysadm 1.10 press_any_key();
544     break;
545     case '8':
546     if (oo > 0)
547     {
548 sysadm 1.17 clrtobot(10);
549 sysadm 1.10 moveto(10, 0);
550     prints("\r\n"
551 sysadm 1.28 " □□□□\r\n"
552     " □□□□\r\n"
553     " □□□□\r\n"
554     " 偷吃禁药大补丸.....");
555 sysadm 1.10 tiredstrong = 0;
556     happy += 3;
557     oo--;
558     pressany(6);
559     break;
560     }
561 sysadm 1.17 clrtobot(20);
562 sysadm 1.10 moveto(20, 4);
563 sysadm 1.28 prints("没大补丸啦!!");
564 sysadm 1.10 press_any_key();
565     break;
566     case '9':
567     if (age < 5)
568     {
569 sysadm 1.17 clrtobot(20);
570 sysadm 1.10 moveto(20, 4);
571 sysadm 1.28 prints("太小了...不得贩售未成年小鸡.....");
572 sysadm 1.10 press_any_key();
573     break;
574     }
575     sell();
576     break;
577     case 'k':
578     death();
579     break;
580     case 't':
581 sysadm 1.17 if (money_withdraw(50) <= 0)
582     {
583     clrtobot(20);
584     moveto(20, 4);
585 sysadm 1.28 prints("糖果不足!!");
586 sysadm 1.17 press_any_key();
587     break;
588     }
589     else
590     {
591     tiredstrong = 0;
592     }
593 sysadm 1.10 break;
594     case 'c':
595 sysadm 1.20 strncpy(name_tmp, chicken_name, sizeof(name_tmp) - 1);
596     name_tmp[sizeof(name_tmp) - 1] = '\0';
597    
598     clrline(22, 22);
599    
600 sysadm 1.30 if (get_data(22, 1, "帮小鸡取个好名字:", name_tmp, sizeof(name_tmp), CHICKEN_NAME_LEN / 2) > 0)
601 sysadm 1.18 {
602 sysadm 1.20 strncpy(chicken_name, name_tmp, sizeof(chicken_name) - 1);
603     chicken_name[sizeof(chicken_name) - 1] = '\0';
604     }
605 sysadm 1.10 break;
606 sysadm 1.17 case 'q':
607     loop = 0;
608     break;
609 sysadm 1.10 }
610 sysadm 1.18
611 sysadm 1.17 if (loop)
612     {
613     show_chicken();
614     }
615 sysadm 1.10 }
616     return 0;
617     }
618    
619     int death()
620     {
621     FILE *fp;
622 sysadm 1.24 struct tm ptime;
623 sysadm 1.10 time_t now;
624    
625     time(&now);
626 sysadm 1.24 localtime_r(&now, &ptime);
627 sysadm 1.10 clearscr();
628     clrtobot(5);
629 sysadm 1.13 if ((fp = fopen(LOG_FILE, "a")) == NULL)
630     {
631     log_error("Error!!cannot open file '%s'!\n", LOG_FILE);
632     return -1;
633     }
634 sysadm 1.28 fprintf(fp, "%s 在 [%d/%d %d:%02d] 的小鸡 %s 挂了~~ \r\n",
635 sysadm 1.24 BBS_username, ptime.tm_mon + 1, ptime.tm_mday,
636     ptime.tm_hour, ptime.tm_min, chicken_name);
637 sysadm 1.10 fclose(fp);
638 sysadm 1.28 prints("呜...小鸡挂了....");
639     prints("\r\n笨史了...赶出系统...");
640 sysadm 1.10 press_any_key();
641    
642     unlink(fname);
643 sysadm 1.17 load_chicken();
644    
645 sysadm 1.1 return 0;
646     }
647    
648 sysadm 1.11 int pressany(int i)
649 sysadm 1.10 {
650     int ch;
651     moveto(23, 0);
652     prints(" %s ", cstate[i]);
653     iflush();
654 sysadm 1.31 ch = igetch_t(MIN(BBS_max_user_idle_time, 60));
655 sysadm 1.10 moveto(23, 0);
656     clrtoeol();
657     iflush();
658 sysadm 1.22 return ch;
659 sysadm 1.10 }
660    
661     int guess()
662     {
663     int ch, com;
664    
665 sysadm 1.22 moveto(23, 0);
666 sysadm 1.28 prints("[1]-剪刀 [2]-石头 [3]-布:");
667 sysadm 1.22 clrtoeol();
668     iflush();
669    
670 sysadm 1.31 ch = igetch_t(MIN(BBS_max_user_idle_time, 60));
671 sysadm 1.22 if ((ch != '1') && (ch != '2') && (ch != '3'))
672 sysadm 1.10 {
673 sysadm 1.22 return -1; // error input
674     }
675 sysadm 1.10
676 sysadm 1.16 srand((unsigned int)time(NULL));
677 sysadm 1.10 com = rand() % 3;
678 sysadm 1.17
679 sysadm 1.10 moveto(21, 35);
680     switch (com)
681     {
682     case 0:
683 sysadm 1.28 prints("小鸡:剪刀");
684 sysadm 1.10 break;
685     case 1:
686 sysadm 1.28 prints("小鸡:石头");
687 sysadm 1.10 break;
688     case 2:
689 sysadm 1.28 prints("小鸡:布");
690 sysadm 1.10 break;
691     }
692 sysadm 1.17 clrtoeol();
693 sysadm 1.10
694     moveto(19, 0);
695    
696     switch (ch)
697     {
698     case '1':
699 sysadm 1.28 prints("笨鸡---看我捡来的刀---");
700 sysadm 1.10 if (com == 0)
701     tie();
702     else if (com == 1)
703     lose();
704     else if (com == 2)
705     win_c();
706     break;
707     case '2':
708 sysadm 1.28 prints("呆鸡---砸你一块石头!!---");
709 sysadm 1.10 if (com == 0)
710     win_c();
711     else if (com == 1)
712     tie();
713     else if (com == 2)
714     lose();
715     break;
716     case '3':
717 sysadm 1.28 prints("蠢鸡---送你一堆破布!---");
718 sysadm 1.10 if (com == 0)
719     lose();
720     else if (com == 1)
721     win_c();
722     else if (com == 2)
723     tie();
724     break;
725     }
726 sysadm 1.17 clrtoeol();
727    
728 sysadm 1.10 press_any_key();
729     return 0;
730     }
731    
732     int win_c()
733     {
734     winn++;
735 sysadm 1.17 clrtobot(20);
736 sysadm 1.10 moveto(20, 0);
737 sysadm 1.28 prints("判定:小鸡输了.... >_<~~~~~\r\n"
738 sysadm 1.10 "\r\n"
739     " ");
740     return 0;
741     }
742     int tie()
743     {
744 sysadm 1.17 clrtobot(20);
745     moveto(20, 0);
746 sysadm 1.28 prints("判定:平手 -_-\r\n"
747 sysadm 1.10 "\r\n"
748     " ");
749     return 0;
750     }
751     int lose()
752     {
753     losee++;
754     happy += 2;
755 sysadm 1.17 clrtobot(20);
756     moveto(20, 0);
757 sysadm 1.28 prints("小鸡赢罗 ∩∩\r\n"
758     " □ ");
759 sysadm 1.1 return 0;
760     }
761    
762 sysadm 1.10 int situ()
763     {
764 sysadm 1.17 clrtobot(16);
765 sysadm 1.10 moveto(16, 0);
766     prints(" ");
767     moveto(17, 0);
768 sysadm 1.28 prints("你: %d胜 %d负 ", winn, losee);
769 sysadm 1.10 moveto(18, 0);
770 sysadm 1.28 prints("鸡: %d胜 %d负 ", losee, winn);
771 sysadm 1.10
772     if (winn >= losee)
773     pressany(4);
774     else
775     pressany(3);
776    
777 sysadm 1.1 return 0;
778     }
779    
780 sysadm 1.10 int sell()
781     {
782     int sel = 0;
783 sysadm 1.17 char ans[2];
784 sysadm 1.24 struct tm ptime;
785 sysadm 1.10 FILE *fp;
786     time_t now;
787    
788     time(&now);
789 sysadm 1.24 localtime_r(&now, &ptime);
790 sysadm 1.10
791 sysadm 1.17 ans[0] = '\0';
792 sysadm 1.18
793 sysadm 1.10 sel += (happy * 10);
794     sel += (satis * 7);
795 sysadm 1.24 sel += ((ptime.tm_sec % 9) * 10);
796 sysadm 1.10 sel += weight;
797     sel += age * 10;
798 sysadm 1.16
799 sysadm 1.17 clrtobot(20);
800     moveto(20, 0);
801 sysadm 1.28 prints("小鸡值$$ %d 糖糖", sel);
802 sysadm 1.30 if (get_data(19, 1, "真的要卖掉小鸡?[y/N]", ans, sizeof(ans), 1) < 0)
803 sysadm 1.20 {
804     return -1; // input timeout
805     }
806 sysadm 1.17 if (ans[0] != 'y')
807 sysadm 1.16 {
808 sysadm 1.17 return -1;
809 sysadm 1.16 }
810    
811 sysadm 1.17 if (money_deposit(sel) <= 0)
812     {
813     log_error("Cannot deposit money %d\n", sel);
814     moveto(21, 0);
815 sysadm 1.28 prints("无法存钱,放弃交易!");
816 sysadm 1.10 return -2;
817 sysadm 1.17 }
818 sysadm 1.10
819 sysadm 1.13 if ((fp = fopen(LOG_FILE, "a")) == NULL)
820     {
821     log_error("Error!!cannot open file '%s'!\n", LOG_FILE);
822 sysadm 1.17 return -2;
823 sysadm 1.13 }
824 sysadm 1.28 fprintf(fp, "%s 在 [%d/%d %d:%02d] 把小鸡 %s 以 %d 糖果卖了\r\n",
825 sysadm 1.24 BBS_username, ptime.tm_mon + 1, ptime.tm_mday,
826     ptime.tm_hour, ptime.tm_min, chicken_name, sel);
827 sysadm 1.10 fclose(fp);
828     clearscr();
829    
830 sysadm 1.17 unlink(fname);
831     load_chicken();
832    
833 sysadm 1.10 return 0;
834     }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1