pip_main.c

来自「bbs server linux平台下软件源码」· C语言 代码 · 共 397 行

C
397
字号
/* ----------------------------------- *//* pip.c  养小鸡程式                   *//* 原作者: dsyan   改写者: fennet      *//* 图图 by tiball.bbs@bbs.nhctc.edu.tw *//* ----------------------------------- *///#define getdata(a, b, c , d, e, f, g) getdata(a,b,c,d,e,f,NULL,g)//#define pressanykey(a) prints(a);pressanykey();#include "bbs.h"#include <time.h>#include "pip.h"#include "site.h"struct chicken d;time_t start_time;time_t lasttime;#ifndef MAPLE//extern char BBS_FULL_NAME[];#endif                          // END MAPLEvoid temppress(char *s){    move(23, 0);    clrtoeol();    prints(s);    igetkey();}/*游戏主程式*///int p_pipple()int mod_default(){    FILE *fs;    time_t now;    long smoney;    int pipkey;    int ok;    char genbuf[200];#ifdef MAPLE    setutmpmode(CHICKEN);    more("src/maple/pipgame/pip.welcome", true);#else    modify_user_mode(CHICKEN);    refresh();    move(1, 0);    clrtobot();    //rawmore("game/pipgame/pip.welcome",true,0,0,MM_FILE); //ansimore("game/pipgame/pip.welcome", false);//igetkey();#endif                          // END MAPLE    showtitle("电子养小鸡", BBS_FULL_NAME);    srandom(time(0));#ifdef MAPLE    sprintf(genbuf, "home/%s/new_chicken", cuser->userid);#else    sprintf(genbuf, "home/%c/%s/new_chicken", toupper(cuser->userid[0]), cuser->userid);#endif                          // END MAPLE    pip_read_file();    if (!dashf(genbuf)) {//   show_system_pic(11); /* 暂时用进游戏的画面来代替 */        //  move(b_lines,0);        ansimore("game/pipgame/pip.welcome", false);        pipkey = igetkey();        if (pipkey == 'Q' || pipkey == 'q')            return 0;        if (d.death != 0 || !d.name[0]) {            if (!pip_new_game())                return 0;        }    } else {//   show_system_pic(12);        //  move(b_lines,0);        ansimore("game/pipgame/pip.welcome", false);        pipkey = igetkey();        if (pipkey == 'R' || pipkey == 'r')            pip_read_backup();        else if (pipkey == 'Q' || pipkey == 'q')            return 0;        if (d.death != 0 || !d.name[0]) {            if (!pip_new_game())                return 0;        }    }    lasttime = time(0);    start_time = time(0);    /*     * pip_do_menu(0,0,pipmainlist);     */    pip_main_menu();    d.bbtime += time(0) - start_time;    pip_write_file();    return 0;}/*时间表示法*/char *dsyan_time(const time_t * t){    struct tm *tp;    static char ans[9];    tp = localtime(t);    sprintf(ans, "%02d/%02d/%02d", tp->tm_year % 100, tp->tm_mon + 1, tp->tm_mday);    return ans;}/*新游戏的设定*/int pip_new_game(){    char buf[256];    time_t now;    char *pipsex[3] = { "?", "♂", "♀" };    struct tm *ptime;    ptime = localtime(&now);    if (d.death == 1 && !(!d.name[0])) {        clear();        showtitle("外星战斗鸡", BBS_FULL_NAME);        move(4, 6);        prints("欢迎来到 星空生物科技研究院");        move(6, 6);        prints("经我们调查显示  先前你有养过小鸡喔  可是被你养死了...");        move(8, 6);        if (d.liveagain < 4) {            prints("我们可以帮你帮小鸡复活  但是需要付出一点代价");#ifdef MAPLE            getdata(10, 6, "你要我们让他重生吗? [y/N]:", buf, 2, 1, 0);#else            getdata(10, 6, "你要我们让他重生吗? [y/N]:", buf, 2, DOECHO, true);#endif                          // END MAPLE            if (buf[0] == 'y' || buf[0] == 'Y') {                pip_live_again();            }        } else if (d.liveagain >= 4) {            prints("可是你复活手术太多次了  小鸡身上都是开刀痕迹");            move(10, 6);            prints("我们找不到可以手术的地方了  所以....");            pressanykey("重新再来吧....唉....");        }    }    if (d.death != 0 || !d.name[0]) {        clear();        showtitle("外星战斗鸡", BBS_FULL_NAME);        /*         * 小鸡命名         */        strcpy(buf, "毒中之毒");#ifdef MAPLE        getdata(2, 3, "帮小鸡取个好听的名字吧(请不要有空格):", buf, 11, 1, 0);#else        getdata(2, 3, "帮小鸡取个好听的名字吧(请不要有空格):", buf, 11, DOECHO, false);#endif                          // END MAPLE        if (!buf[0])            return 0;        strcpy(d.name, buf);        /*         * 1:公 2:母          */#ifdef MAPLE        getdata(4, 3, "[Boy]小公鸡♂ or [Girl]小母鸡♀ [b/G]", buf, 2, 1, 0);#else        getdata(4, 3, "[Boy]小公鸡♂ or [Girl]小母鸡♀ [b/G]", buf, 2, DOECHO, true);#endif                          // END MAPLE        if (buf[0] == 'b' || buf[0] == 'B') {            d.sex = 1;        } else {            d.sex = 2;        }        move(6, 3);        prints("星空战斗鸡的游戏现今分成两种玩法");        move(7, 3);        prints("选有结局会在小鸡20岁时结束游戏,并告知小鸡后续的发展");        move(8, 3);        prints("选没有结局则一直养到小鸡死亡才结束游戏....");        /*         * 1:不要且未婚 4:要且未婚          */#ifdef MAPLE        getdata(9, 3, "你希望小鸡游戏是否要有20岁结局? [Y/n]", buf, 2, 1, 0);#else        getdata(9, 3, "你希望小鸡游戏是否要有20岁结局? [Y/n]", buf, 2, DOECHO, true);#endif                          // END MAPLE        if (buf[0] == 'n' || buf[0] == 'N') {            d.wantend = 1;        } else {            d.wantend = 4;        }        /*         * 开头画面         */        show_basic_pic(0);        pressanykey("小鸡终於诞生了,请好好爱他....");        /*         * 开头设定         */        now = time(0);        strcpy(d.birth, dsyan_time(&now));        d.bbtime = 0;        /*         * 基本资料         */        d.year = ptime->tm_year % 100;        d.month = ptime->tm_mon + 1;        d.day = ptime->tm_mday;        d.death = d.nodone = d.relation = 0;        d.liveagain = d.dataB = d.dataC = d.dataD = d.dataE = 0;        /*         * 身体参数         */        d.hp = rand() % 15 + 20;        d.maxhp = rand() % 20 + 20;        if (d.hp > d.maxhp)            d.hp = d.maxhp;        d.weight = rand() % 10 + 50;        d.tired = d.sick = d.shit = d.wrist = 0;        d.bodyA = d.bodyB = d.bodyC = d.bodyD = d.bodyE = 0;        /*         * 评价参数         */        d.social = d.family = d.hexp = d.mexp = 0;        d.tmpA = d.tmpB = d.tmpC = d.tmpD = d.tmpE = 0;        /*         * 战斗参数         */        d.mp = d.maxmp = d.attack = d.resist = d.speed = d.hskill = d.mskill = d.mresist = 0;        d.magicmode = d.fightB = d.fightC = d.fightD = d.fightE = 0;        /*         * 武器参数         */        d.weaponhead = d.weaponrhand = d.weaponlhand = d.weaponbody = d.weaponfoot = 0;        d.weaponA = d.weaponB = d.weaponC = d.weaponD = d.weaponE = 0;        /*         * 能力参数         */        d.toman = d.character = d.love = d.wisdom = d.art = d.etchics = 0;        d.brave = d.homework = d.charm = d.manners = d.speech = d.cookskill = 0;        d.learnA = d.learnB = d.learnC = d.learnD = d.learnE = 0;        /*         * 状态数值         */        d.happy = rand() % 10 + 20;        d.satisfy = rand() % 10 + 20;        d.fallinlove = d.belief = d.offense = d.affect = 0;        d.stateA = d.stateB = d.stateC = d.stateD = d.stateE = 0;        /*         * 食物参数:食物 零食 药品 大补丸         */        d.food = 10;        d.medicine = d.cookie = d.bighp = 2;        d.ginseng = d.snowgrass = d.eatC = d.eatD = d.eatE = 0;        /*         * 物品参数:书 玩具         */        d.book = d.playtool = 0;        d.money = 1500;        d.thingA = d.thingB = d.thingC = d.thingD = d.thingE = 0;        /*         * 猜拳参数:赢 负         */        d.winn = d.losee = 0;        /*         * 参见王臣         */        d.royalA = d.royalB = d.royalC = d.royalD = d.royalE = 0;        d.royalF = d.royalG = d.royalH = d.royalI = d.royalJ = 0;        d.seeroyalJ = 1;        d.seeA = d.seeB = d.seeC = d.seeD = d.seeE;        /*         * 接受求婚爱人         */        d.lover = 0;        /*         * 0:没有 1:魔王 2:龙族 3:A 4:B 5:C 6:D 7:E          */        d.classA = d.classB = d.classC = d.classD = d.classE = 0;        d.classF = d.classG = d.classH = d.classI = d.classJ = 0;        d.classK = d.classL = d.classM = d.classN = d.classO = 0;        d.workA = d.workB = d.workC = d.workD = d.workE = 0;        d.workF = d.workG = d.workH = d.workI = d.workJ = 0;        d.workK = d.workL = d.workM = d.workN = d.workO = 0;        d.workP = d.workQ = d.workR = d.workS = d.workT = 0;        d.workU = d.workV = d.workW = d.workX = d.workY = d.workZ = 0;        /*         * 养鸡记录         */        now = time(0);        sprintf(buf, "%s %-11s养了一只叫 [%s] 的 %s 小鸡 \n", Cdate(now), cuser->userid, d.name, pipsex[d.sex]);        pip_log_record(buf);    }    pip_write_file();    return 1;}/*小鸡死亡函式*/pipdie(msg, mode)char *msg;int mode;{    char buf[100];    char genbuf[200];    time_t now;    clear();    showtitle("电子养小鸡", BBS_FULL_NAME);    if (mode == 1) {        show_die_pic(1);        pressanykey("死神来带走小鸡了");        clear();        showtitle("电子养小鸡", BBS_FULL_NAME);        show_die_pic(2);        move(14, 20);        prints("可怜的小鸡%s", msg);        pressanykey("星空哀悼中....");    } else if (mode == 2) {        show_die_pic(3);        pressanykey("呜呜呜..我被丢弃了.....");    } else if (mode == 3) {        show_die_pic(0);        pressanykey("游戏结束罗..");    }    now = time(0);    sprintf(genbuf, "%s %-11s的小鸡 [%s] %s\n", Cdate(now), cuser->userid, d.name, msg);    pip_log_record(genbuf);    pip_write_file();}/*pro:机率 base:底数 mode:类型 mul:加权100=1 cal:加减*/int count_tired(prob, base, mode, mul, cal)int prob, base;char *mode;int mul;int cal;{    int tiredvary = 0;    int tm;    /*     * time_t now;     */    tm = (time(0) - start_time + d.bbtime) / 60 / 30;    if (mode == "Y") {        if (tm >= 0 && tm <= 3) {            if (cal == 1)                tiredvary = (rand() % prob + base) * d.maxhp / (d.hp + 0.8 * d.hp) * 120 / 100;            else if (cal == 0)                tiredvary = (rand() % prob + base) * 4 / 3;        } else if (tm >= 4 && tm <= 7) {            if (cal == 1)                tiredvary = (rand() % prob + base) * d.maxhp / (d.hp + 0.8 * d.hp);            else if (cal == 0)                tiredvary = (rand() % prob + base) * 3 / 2;        } else if (tm >= 8 && tm <= 10) {            if (cal == 1)                tiredvary = (rand() % prob + base) * d.maxhp / (d.hp + 0.8 * d.hp) * 110 / 100;            else if (cal == 0)                tiredvary = (rand() % prob + base) * 5 / 4;        } else if (tm >= 11) {            if (cal == 1)                tiredvary = (rand() % prob + base) * d.maxhp / (d.hp + 0.8 * d.hp) * 150 / 100;            else if (cal == 0)                tiredvary = (rand() % prob + base) * 1;        }    } else if (mode == "N") {        tiredvary = rand() % prob + base;    }    if (cal == 1) {        d.tired += (tiredvary * mul / 100);        if (d.tired > 100)            d.tired = 100;    } else if (cal == 0) {        d.tired -= (tiredvary * mul / 100);        if (d.tired <= 0) {            d.tired = 0;        }    }    tiredvary = 0;    return;}

⌨️ 快捷键说明

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