pip_main.c
来自「linux/unix环境下的建站系统」· C语言 代码 · 共 400 行
C
400 行
/* ----------------------------------- *//* pip.c 养小鸡程式 *//* 原作者: dsyan 改写者: fennet *//* 图图 by tiball.bbs@bbs.nhctc.edu.tw *//* ----------------------------------- */#include "pip.h"struct chicken d;time_t start_time;time_t lasttime;void temppress(const char *s){ move(23,0);clrtoeol(); prints("%s",s);igetkey(); return;}/*游戏主程式*///int p_pipple()intmod_default(){ int pipkey; char genbuf[200];#ifdef MAPLE setutmpmode(CHICKEN); more("src/maple/pipgame/pip.welcome", true);#else modify_user_mode(CHICKEN); refresh(); move(1, 0); clrtobot();#endif // END MAPLE showtitle("电子养小鸡", BBS_FULL_NAME); srandom(time(0));#ifdef MAPLE sprintf(genbuf, "home/%s/new_chicken", getCurrentUser()->userid);#else sprintf(genbuf, "home/%c/%s/new_chicken", toupper(getCurrentUser()->userid[0]), getCurrentUser()->userid);#endif // END MAPLE pip_read_file(); if (!dashf(genbuf)) { 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 { 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_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;}/*新游戏的设定*/intpip_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("欢迎来到 \033[1;5;33m星空生物科技研究院\033[0m"); 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,NULL,true);#endif // END MAPLE if (buf[0] == 'y' || buf[0] == 'Y') { pip_live_again(); } } else if (d.liveagain >= 4) { prints("可是你复活手术太多次了 小鸡身上都是开刀痕迹"); move(10, 6); prints("我们找不到可以手术的地方了 所以...."); temppress("重新再来吧....唉...."); } } 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,NULL,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,NULL,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,NULL,true);#endif // END MAPLE if (buf[0] == 'n' || buf[0] == 'N') { d.wantend = 1; } else { d.wantend = 4; } /* * 开头画面 */ show_basic_pic(0); temppress("小鸡终於诞生了,请好好爱他...."); /* * 开头设定 */ 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, "\033[1;36m%s %-11s养了一只叫 [%s] 的 %s 小鸡 \033[0m\n", Cdate(now), getCurrentUser()->userid, d.name, pipsex[d.sex]); pip_log_record(buf); } pip_write_file(); return 1;}/*小鸡死亡函式*/int pipdie(const char *msg,int mode){ char genbuf[200]; time_t now; clear(); showtitle("电子养小鸡", BBS_FULL_NAME); if (mode == 1) { show_die_pic(1); temppress("死神来带走小鸡了"); clear(); showtitle("电子养小鸡", BBS_FULL_NAME); show_die_pic(2); move(14, 20); prints("可怜的小鸡\033[1;31m%s\033[m", msg); temppress("星空哀悼中...."); } else if (mode == 2) { show_die_pic(3); temppress("呜呜呜..我被丢弃了....."); } else if (mode == 3) { show_die_pic(0); temppress("游戏结束罗.."); } now = time(0); sprintf(genbuf, "\033[1;31m%s %-11s的小鸡 [%s] %s\033[m\n", Cdate(now), getCurrentUser()->userid, d.name, msg); pip_log_record(genbuf); pip_write_file(); return 0;}/*pro:机率 base:底数 mode:类型 mul:加权100=1 cal:加减*/intcount_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 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?