pip_menu.c

来自「bbs server linux平台下软件源码」· C语言 代码 · 共 902 行 · 第 1/2 页

C
902
字号
/*---------------------------------------------------------------------------*//*主画面和选单                                                               *//*---------------------------------------------------------------------------*/#include <time.h>#include "bbs.h"#include "pip.h"#include "site.h"extern struct chicken d;extern time_t start_time;extern time_t lasttime;//#define getdata(a, b, c , d, e, f, g) getdata(a,b,c,d,e,f,NULL,g)#ifndef MAPLE//extern char BBS_FULL_NAME[];#endif                          // END MAPLEconst char *menuname[8][2] = {    {"             ",     " 选单 [1]基本 [2]逛街 [3]修行 [4]玩乐 [5]打工 [6]特殊 [7]系统 [Q]离开          "},    {"             ",     "  基本选单  [1]饮食 [2]清洁 [3]休息 [4]亲亲 [Q]跳出:                          "},    {" 逛街 【日常用品】[1]便利商店 [2]星空药铺 [3]夜里书局                          ",     " 选单 【武器百货】[A]头部武器 [B]右手武器 [C]左手武器 [D]身体武器 [E]脚部武器  "},    {" 修行 [A]科学(%d) [B]诗词(%d) [C]神学(%d) [D]军学(%d) [E]剑术(%d)                   ",     " 选单 [F]格斗(%d) [G]魔法(%d) [H]礼仪(%d) [I]绘画(%d) [J]舞蹈(%d) [Q]跳出:         "},    {"   ",     "  玩乐选单  [1]散步 [2]运动 [3]约会 [4]猜拳 [5]旅游 [6]郊外 [7]唱歌 [Q]跳出:  "},    {" 打工 [A]家事 [B]保姆 [C]旅馆 [D]农场 [E]餐厅 [F]教堂 [G]地摊 [H]伐木          ",     " 选单 [I]美发 [J]猎人 [K]工地 [L]守墓 [M]家教 [N]酒家 [O]酒店 [P]夜总会 [Q]跳出"},    {"   ",     "  特殊选单  [1]星空医院 [2]媚登峰~ [3]战斗修行 [4]拜访朋友 [5]总司令部 [Q]跳出"},    {"   ",     "  系统选单  [1]详细资料 [2]小鸡自由 [3]特别服务 [4]储存进度 [5]读取进度 [Q]跳出"}};/*主选单*/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的功能*/int pip_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;    struct pipcommands *cmd1;    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; cmd1++)                /*                 * if(key == tolower(pipkey))                 */                if (key1 == pipkey) {                    cmd1->fptr();                    ok = 1;                }            for (cmd2; key2 = cmd2->key2; cmd2++)                if (ok == 0 && key2 == pipkey) {                    cmd2->fptr();                }            break;        }    }    while (goback == 0);    return 0;}/*---------------------------------------------------------------------------*//* 基本选单:饮食 清洁 亲亲 休息                                              *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_main_menu(){    pip_do_menu(0, 0, pipmainlist);    return 0;}/*---------------------------------------------------------------------------*//* 基本选单:饮食 清洁 亲亲 休息                                              *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_basic_menu(){    pip_do_menu(1, 0, pipbasiclist);    return 0;}/*---------------------------------------------------------------------------*//* 商店选单:食物 零食 大补丸 玩具 书本                                       *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_store_menu(){    pip_do_menu(2, 1, pipstorelist);    return 0;}/*---------------------------------------------------------------------------*//* 修行选单:念书 练武 修行                                                   *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_practice_menu(){    pip_do_menu(3, 3, pippracticelist);    return 0;}/*---------------------------------------------------------------------------*//* 玩乐选单:散步 旅游 运动 约会 猜拳                                         *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_play_menu(){    pip_do_menu(4, 0, pipplaylist);    return 0;}/*---------------------------------------------------------------------------*//* 打工选单:家事 苦工 家教 地摊                                              *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_job_menu(){    pip_do_menu(5, 2, pipjoblist);    return 0;}/*---------------------------------------------------------------------------*//* 特殊选单:看病 减肥 战斗 拜访 朝见                                         *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_special_menu(){    pip_do_menu(6, 0, pipspeciallist);    return 0;}/*---------------------------------------------------------------------------*//* 系统选单:个人资料  小鸡放生  特别服务                                     *//*                                                                           *//*---------------------------------------------------------------------------*/int pip_system_menu(){    pip_do_menu(7, 0, pipsystemlist);    return;}int pip_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, m1;    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;    m1 == d.bbtime / 60;    /*     * 长大一岁时的增加改变值     */    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, "%s %-11s的小鸡 [%s] 满 %d 岁了 \n", Cdate(now), cuser->userid, d.name, m + 1);        pip_log_record(genbuf);        /*         * 记录终止         */        clear();        showtitle("电子养小鸡", BBS_FULL_NAME);        show_basic_pic(20);     /*生日快乐 */        pressanykey("小鸡长大一岁了..");        /*         * 结局         */        if (tm % 2 == 0)            pip_results_show();        if (tm >= 21 && (d.wantend == 4 || d.wantend == 5 || d.wantend == 6))            pip_ending_screen();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?