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 + -
显示快捷键?