pip_menu.c
来自「linux/unix环境下的建站系统」· C语言 代码 · 共 933 行 · 第 1/2 页
C
933 行
/*---------------------------------------------------------------------------*//*主画面和选单 *//*---------------------------------------------------------------------------*/#include "pip.h"extern struct chicken d;extern time_t start_time;extern time_t lasttime;const char *menuname[8][2] = { {" ", "\033[1;44;37m 选单 \033[46m[1]基本 [2]逛街 [3]修行 [4]玩乐 [5]打工 [6]特殊 [7]系统 [Q]离开 \033[0m"}, {" ", "\033[1;44;37m 基本选单 \033[46m[1]饮食 [2]清洁 [3]休息 [4]亲亲 [Q]跳出: \033[m"}, {"\033[1;44;37m 逛街 \033[46m【日常用品】[1]便利商店 [2]星空药铺 [3]夜里书局 \033[m", "\033[1;44;37m 选单 \033[46m【武器百货】[A]头部武器 [B]右手武器 [C]左手武器 [D]身体武器 [E]脚部武器 \033[m"}, {"\033[1;44;37m 修行 \033[46m[A]科学(%d) [B]诗词(%d) [C]神学(%d) [D]军学(%d) [E]剑术(%d) \033[m", "\033[1;44;37m 选单 \033[46m[F]格斗(%d) [G]魔法(%d) [H]礼仪(%d) [I]绘画(%d) [J]舞蹈(%d) [Q]跳出: \033[m"}, {" ", "\033[1;44;37m 玩乐选单 \033[46m[1]散步 [2]运动 [3]约会 [4]猜拳 [5]旅游 [6]郊外 [7]唱歌 [Q]跳出: \033[m"}, {"\033[1;44;37m 打工 \033[46m[A]家事 [B]保姆 [C]旅馆 [D]农场 [E]餐厅 [F]教堂 [G]地摊 [H]伐木 \033[m", "\033[1;44;37m 选单 \033[46m[I]美发 [J]猎人 [K]工地 [L]守墓 [M]家教 [N]酒家 [O]酒店 [P]夜总会 [Q]跳出\033[m"}, {" ", "\033[1;44;37m 特殊选单 \033[46m[1]星空医院 [2]媚登峰~ [3]战斗修行 [4]拜访朋友 [5]总司令部 [Q]跳出\033[m"}, {" ", "\033[1;44;37m 系统选单 \033[46m[1]详细资料 [2]小鸡自由 [3]特别服务 [4]储存进度 [5]读取进度 [Q]跳出\033[m"}};/*主选单*/int pip_basic_menu(), pip_store_menu(), pip_practice_menu();int pip_play_menu(), pip_job_menu(), pip_special_menu(), pip_system_menu();const static struct pipcommands pipmainlist[] = { {pip_basic_menu, '1', '1'}, {pip_store_menu, '2', '2'}, {pip_practice_menu, '3', '3'}, {pip_play_menu, '4', '4'}, {pip_job_menu, '5', '5'}, {pip_special_menu, '6', '6'}, {pip_system_menu, '7', '7'}, {NULL, '\0', '\0'}};/*基本选单*/int pip_basic_feed(), pip_basic_takeshower(), pip_basic_takerest(),pip_basic_kiss();const static struct pipcommands pipbasiclist[] = { {pip_basic_feed, '1', '1'}, {pip_basic_takeshower, '2', '2'}, {pip_basic_takerest, '3', '3'}, {pip_basic_kiss, '4', '4'}, {NULL, '\0', '\0'}};/*商店选单*/int pip_store_food(), pip_store_medicine(), pip_store_other();int pip_store_weapon_head(), pip_store_weapon_rhand(), pip_store_weapon_lhand();int pip_store_weapon_body(), pip_store_weapon_foot();const static struct pipcommands pipstorelist[] = { {pip_store_food, '1', '1'}, {pip_store_medicine, '2', '2'}, {pip_store_other, '3', '3'}, {pip_store_weapon_head, 'a', 'A'}, {pip_store_weapon_rhand, 'b', 'B'}, {pip_store_weapon_lhand, 'c', 'C'}, {pip_store_weapon_body, 'd', 'D'}, {pip_store_weapon_foot, 'e', 'E'}, {NULL, '\0', '\0'}};/*修行选单*/int pip_practice_classA(), pip_practice_classB(), pip_practice_classC();int pip_practice_classD(), pip_practice_classE(), pip_practice_classF();int pip_practice_classG(), pip_practice_classH(), pip_practice_classI();int pip_practice_classJ();const static struct pipcommands pippracticelist[] = { {pip_practice_classA, 'a', 'A'}, {pip_practice_classB, 'b', 'B'}, {pip_practice_classC, 'c', 'C'}, {pip_practice_classD, 'd', 'D'}, {pip_practice_classE, 'e', 'E'}, {pip_practice_classF, 'f', 'F'}, {pip_practice_classG, 'g', 'G'}, {pip_practice_classH, 'h', 'H'}, {pip_practice_classI, 'i', 'I'}, {pip_practice_classJ, 'j', 'J'}, {NULL, '\0', '\0'}};/*玩乐选单*/int pip_play_stroll(), pip_play_sport(), pip_play_date(), pip_play_guess();int pip_play_outing(), pip_play_kite(), pip_play_KTV();const static struct pipcommands pipplaylist[] = { {pip_play_stroll, '1', '1'}, {pip_play_sport, '2', '2'}, {pip_play_date, '3', '3'}, {pip_play_guess, '4', '4'}, {pip_play_outing, '5', '5'}, {pip_play_kite, '6', '6'}, {pip_play_KTV, '7', '7'}, {NULL, '\0', '\0'}};/*打工选单*/int pip_job_workA(), pip_job_workB(), pip_job_workC(), pip_job_workD();int pip_job_workE(), pip_job_workF(), pip_job_workG(), pip_job_workH();int pip_job_workI(), pip_job_workJ(), pip_job_workK(), pip_job_workL();int pip_job_workM(), pip_job_workN(), pip_job_workO(), pip_job_workP();const static struct pipcommands pipjoblist[] = { {pip_job_workA, 'a', 'A'}, {pip_job_workB, 'b', 'B'}, {pip_job_workC, 'c', 'C'}, {pip_job_workD, 'd', 'D'}, {pip_job_workE, 'e', 'E'}, {pip_job_workF, 'f', 'F'}, {pip_job_workG, 'g', 'G'}, {pip_job_workH, 'h', 'H'}, {pip_job_workI, 'i', 'I'}, {pip_job_workJ, 'j', 'J'}, {pip_job_workK, 'k', 'K'}, {pip_job_workL, 'l', 'L'}, {pip_job_workM, 'm', 'M'}, {pip_job_workN, 'n', 'N'}, {pip_job_workO, 'o', 'O'}, {pip_job_workP, 'p', 'P'}, {NULL, '\0', '\0'}};/*特殊选单*/int pip_see_doctor(), pip_change_weight(), pip_meet_vs_man(), pip_query(),pip_go_palace();const static struct pipcommands pipspeciallist[] = { {pip_see_doctor, '1', '1'}, {pip_change_weight, '2', '2'}, {pip_meet_vs_man, '3', '3'}, {pip_query, '4', '4'}, {pip_go_palace, '5', '5'}, {NULL, '\0', '\0'}};/*系统选单*/int pip_data_list(), pip_system_freepip(), pip_system_service();int pip_write_backup(), pip_read_backup();int pip_divine(), pip_results_show();const static struct pipcommands pipsystemlist[] = { {pip_data_list, '1', '1'}, {pip_system_freepip, '2', '2'}, {pip_system_service, '3', '3'}, {pip_write_backup, '4', '4'}, {pip_read_backup, '5', '5'}, {pip_divine, 'o', 'O'}, {pip_results_show, 's', 'S'}, {NULL, '\0', '\0'}};/*类似menu.c的功能*/intpip_do_menu(menunum, menumode, cmdtable)int menunum, menumode;const struct pipcommands cmdtable[];{ time_t now; int key1, key2; int pipkey; int goback = 0, ok = 0; int class1 = 0, class2 = 0, class3 = 0, class4 = 0, class5 = 0; int class6 = 0, class7 = 0, class8 = 0, class9 = 0, class10 = 0; const struct pipcommands *cmd1; const struct pipcommands *cmd2; /* 流控 限制5keys/s*/ static time_t lastkey_time[5]={0,0,0,0,0}; static int count=0; int i; do { ok = 0; /* * 判断是否死亡 死掉即跳回上一层 */ if (d.death == 1 || d.death == 2 || d.death == 3) return 0; /* * 经pip_mainmenu判定后是否死亡 */ if (pip_mainmenu(menumode)) return 0; class1 = d.wisdom / 200 + 1; /*科学 */ if (class1 > 5) class1 = 5; class2 = (d.affect * 2 + d.wisdom + d.art * 2 + d.character) / 400 + 1; /*诗词 */ if (class2 > 5) class2 = 5; class3 = (d.belief * 2 + d.wisdom) / 400 + 1; /*神学 */ if (class3 > 5) class3 = 5; class4 = (d.hskill * 2 + d.wisdom) / 400 + 1; /*军学 */ if (class4 > 5) class4 = 5; class5 = (d.hskill + d.attack) / 400 + 1; /*剑术 */ if (class5 > 5) class5 = 5; class6 = (d.hskill + d.resist) / 400 + 1; /*格斗 */ if (class6 > 5) class6 = 5; class7 = (d.mskill + d.maxmp) / 400 + 1; /*魔法 */ if (class7 > 5) class7 = 5; class8 = (d.manners * 2 + d.character) / 400 + 1; /*礼仪 */ if (class8 > 5) class8 = 5; class9 = (d.art * 2 + d.character) / 400 + 1; /*绘画 */ if (class9 > 5) class9 = 5; class10 = (d.art * 2 + d.charm) / 400 + 1; /*舞蹈 */ if (class10 > 5) class10 = 5; clrchyiuan(22, 24); move(b_lines - 1, 0); prints(menuname[menunum][0], class1, class2, class3, class4, class5); move(b_lines, 0); prints(menuname[menunum][1], class6, class7, class8, class9, class10); now = time(0); pip_time_change(now);regetkey: pipkey = igetkey(); now = time(0); if (count>=5) { if (now-lastkey_time[0]<=1) goto regetkey; for (i=0;i<4;i++) lastkey_time[i]=lastkey_time[i+1]; lastkey_time[4]=now; } else { lastkey_time[count]=now; count++; } pip_time_change(now); cmd1 = cmdtable; cmd2 = cmdtable; switch (pipkey) {#ifdef MAPLE case Ctrl('R'): if (currutmp->msgs[0].last_pid) { show_last_call_in(); my_write(currutmp->msgs[0].last_pid, "流星丢回去:", 0); } break;#endif // END MAPLE#ifdef MAPLE case KEY_ESC: if (KEY_ESC_arg == 'c') capture_screen(); else if (KEY_ESC_arg == 'n') edit_note(); break;#endif // END MAPLE case KEY_LEFT: case 'q': case 'Q': goback = 1; break; default: for (/*cmd1*/; (key1 = cmd1->key1)!=0; cmd1++) /* * if(key == tolower(pipkey)) */ if (key1 == pipkey) { cmd1->fptr(); ok = 1; } for (/*cmd2*/; (key2 = cmd2->key2)!=0; cmd2++) if (ok == 0 && key2 == pipkey) { cmd2->fptr(); } break; } } while (goback == 0); return 0;}/*---------------------------------------------------------------------------*//* 基本选单:饮食 清洁 亲亲 休息 *//* *//*---------------------------------------------------------------------------*/intpip_main_menu(){ pip_do_menu(0, 0, pipmainlist); return 0;}/*---------------------------------------------------------------------------*//* 基本选单:饮食 清洁 亲亲 休息 *//* *//*---------------------------------------------------------------------------*/intpip_basic_menu(){ pip_do_menu(1, 0, pipbasiclist); return 0;}/*---------------------------------------------------------------------------*//* 商店选单:食物 零食 大补丸 玩具 书本 *//* *//*---------------------------------------------------------------------------*/intpip_store_menu(){ pip_do_menu(2, 1, pipstorelist); return 0;}/*---------------------------------------------------------------------------*//* 修行选单:念书 练武 修行 *//* *//*---------------------------------------------------------------------------*/intpip_practice_menu(){ pip_do_menu(3, 3, pippracticelist); return 0;}/*---------------------------------------------------------------------------*//* 玩乐选单:散步 旅游 运动 约会 猜拳 *//* *//*---------------------------------------------------------------------------*/intpip_play_menu(){ pip_do_menu(4, 0, pipplaylist); return 0;}/*---------------------------------------------------------------------------*//* 打工选单:家事 苦工 家教 地摊 *//* *//*---------------------------------------------------------------------------*/intpip_job_menu(){ pip_do_menu(5, 2, pipjoblist); return 0;}/*---------------------------------------------------------------------------*//* 特殊选单:看病 减肥 战斗 拜访 朝见 *//* *//*---------------------------------------------------------------------------*/intpip_special_menu(){ pip_do_menu(6, 0, pipspeciallist); return 0;}/*---------------------------------------------------------------------------*//* 系统选单:个人资料 小鸡放生 特别服务 *//* *//*---------------------------------------------------------------------------*/intpip_system_menu(){ pip_do_menu(7, 0, pipsystemlist); return 0;}intpip_mainmenu(mode)int mode;{ char genbuf[200]; char inbuf1[20]; char inbuf2[20]; char buf[256],linebuf[256]; time_t now; int tm, m, color, tm1; int age; int color1, color2, color3, color4; int anynum; float pc; char yo[12][5] = { "诞生", "婴儿", "幼儿", "儿童", "少年", "青年", "成年", "壮年", "更年", "老年", "古稀", "神仙" }; color1 = color2 = color3 = color4 = 37; move(1, 0); tm = (time(0) - start_time + d.bbtime) / 60 / 30; /* 一岁 */ tm1 = (time(0) - start_time + d.bbtime) / 60; m = d.bbtime / 60 / 30; /* * 长大一岁时的增加改变值 */ if (m != tm) { d.wisdom += 10; d.happy += rand() % 5 + 5; if (d.happy > 100) d.happy = 100; d.satisfy += rand() % 5; if (d.satisfy > 100) d.satisfy = 100; if (tm < 13) d.maxhp += rand() % 5 + 5; else d.maxhp -= rand() % 15; d.character += rand() % 5; d.money += 500; d.seeroyalJ = 1; count_tired(1, 7, "N", 100, 0); d.bbtime += time(0) - start_time; start_time = time(0); pip_write_file(); /* * 记录开始 */ now = time(0); sprintf(genbuf, "\033[1;37m%s %-11s的小鸡 [%s] 满 %d 岁了 \033[0m\n", Cdate(now), getCurrentUser()->userid, d.name, m + 1); pip_log_record(genbuf); /* * 记录终止 */ clear(); showtitle("电子养小鸡", BBS_FULL_NAME); show_basic_pic(20); /*生日快乐 */ temppress("小鸡长大一岁了.."); /* * 结局 */ if (tm % 2 == 0) pip_results_show(); if (tm >= 21 && (d.wantend == 4 || d.wantend == 5 || d.wantend == 6)) pip_ending_screen(); clrtobot(); refresh(); } color = 37; m = tm; if ((rand() % 30 == 29) && tm >= 15 && d.charm >= 300 && d.character >= 300) pip_marriage_offer(); if (mode != 1 && rand() % 71 == 69) pip_divine();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?