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