⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pigd.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
// pigd.c 拱猪 Daemon//#pragma optimize all#include <pig.h>inherit F_DBASE;string *suit_char = ({ "S", "H", "D", "C" });string *suit_str = ({ "黑桃", "红心", "方块", "梅花" });string *rank_char = ({ "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A" });string *rank_str = ({ "2", "3", "4", "5", "6", "7", "8", "9", "⒑", "J", "Q", "K", "A" });string *seat_char = ({ "N", "W", "S", "E" });string *seat_str = ({ "北", "西", "南", "东" });int *heart_score = ({ 0, 0, 0, -10, -10, -10, -10, -10, -10, -20, -30, -40, -50 });int is_validcard(string str){	int i, st, rk;	string s, r;	if (strlen(str) != 2 )		return -1;	s = capitalize(str[0..0]);	r = capitalize(str[1..1]);	st = rk = -1;	for (i = 0; i < 4; i++)		if (suit_char[i] == s) {			st = i; break;		}	for (i = 0; i < 13; i++)		if (rank_char[i] == r) {			rk = i; break;		}	if (st == -1 || rk == -1)		return -1;	return st * 13 + rk;}int is_validbid(int c){	if (c == SPIG)		return BID_SPIG;	if (c == HACE)		return BID_HACE;	if (c == DSHEEP)		return BID_DSHEEP;	if (c == CTRANS)		return BID_CTRANS;	return 0;}int is_special(int c){	return c == SPIG || c == DSHEEP || c == CTRANS || SUIT(c) == HEART;}	string card_str(int c){	if (c < 0 || c > 51)		return "";	return(suit_str[SUIT(c)] + rank_str[RANK(c)]);}string refresh(int *cl, int b, int e){	string output = "";	int i, ls, ns;	if (b < 0 || e < 0)		return output;	if (cl[b] < 0 || cl[e] > 51)		return output;	output = sprintf("%18s%s:", "", suit_str[ls = ns = SUIT(cl[b])]);	for (i = b; i <= e; i++) {		ns = SUIT(cl[i]);		if (ls == ns) 			output += rank_str[RANK(cl[i])] + " ";		else {			output = sprintf("%s\n%18s%s:", output, "",					suit_str[ls = ns]);			output += rank_str[RANK(cl[i])] + " ";		}	}	return output + "\n";}int has_suit(int *cl, int b, int e, int s){	int i, r = 0;	for (i = b; i <= e; i++)		if (SUIT(cl[i]) == s)			r++;	return r;}int has_card(int *cl, int b, int e, int c){	int i;	for (i = b; i <= e; i++)		if(cl[i] == c)			return 1;	return 0;}void shuffle(int *ol, int *nl, int t){	int i, j, k, l;	if (sizeof(ol) < 52 || sizeof(nl) < 52) 		for (i = 0; i < 52; i++)			ol[i] = nl[i] = i;	if (t <= 0 || t >= 10) t = 1;	for (i = 0; i < t; i++) {		for (j = 0; j < 52; j++) {			k = 51 - j;			l = random(k);			nl[j] = ol[l];			if (k != l)				ol[l] = ol[k];		}		for (j = 0; j < 52; j++) ol[j] = nl[j];	}}			string card_cmp4(mapping cl, int s){	int i, bc;	string bp;	string *clkeys = keys(cl);	if (sizeof(cl) != 4)		return clkeys[0];	bc = s * 13;	for (i = 0; i < 4; i++) 		if (SUIT(cl[clkeys[i]]) == s && cl[clkeys[i]] >= bc)			bc = cl[bp = clkeys[i]];	return bp;}	string *order_turn(string rw){	if (rw == "east")		return ({ "east", "north", "west", "south" });	else if (rw == "north")		return ({ "north", "west", "south", "east" });	else if (rw == "west")		return ({ "west", "south", "east", "north" });	else 		return ({ "south", "east", "north", "west" });}int count_score(int *fcl, int bid_flag) // support for single pig ONLY{	int i, j, pc, doubler, n_heart, cardj, r;	int *cl = ({});		for (i = 0; i < sizeof(fcl); i++)		if (fcl[i] == SPIG || fcl[i] == DSHEEP || fcl[i] == CTRANS ||			SUIT(fcl[i]) == HEART)			cl += ({ fcl[i] });	cl = sort_array(cl, 1);	pc = sizeof(cl);	r = 0;		if (pc == 16)		return 1000;	else if (pc == 1 && cl[0] == SPIG) {		// single pig  == -100		r = -100;		if (bid_flag & BID_SPIG)			r = -200;	}	else if (pc == 13 && cl[0] >= 13 && cl[12] <= 25) {		// all 13 hearts		r = 200;		if (bid_flag & BID_HACE)			r = 400;	}	else if (pc == 1 && cl[0] == CTRANS) {		r = 50;		if (bid_flag & BID_CTRANS)			r = 100;	}	else if (pc == 1 && cl[0] == DSHEEP) {		r = 100;		if (bid_flag & BID_DSHEEP)			r = 200;	}	else {		doubler = 1;		n_heart = 0;		for (j = 0; j < pc; j++) {			cardj = cl[j];			if (cardj >= 13 && cardj <= 25) {				// a heart				r += heart_score[cardj % 13];				if (bid_flag & BID_HACE)					r += heart_score[cardj % 13];				n_heart++;			}			else if (cardj == SPIG) {				r -= 100;				if (bid_flag & BID_SPIG)					r -= 100;			}			else if (cardj == DSHEEP) {				r += 100;				if (bid_flag & BID_DSHEEP)					r += 100;			}			else if (cardj == CTRANS) {				doubler = 2;				if (bid_flag & BID_CTRANS)					doubler = 4;			}		}		if (n_heart == 13) {			r += 400;			if (bid_flag & BID_HACE)				r += 400;		}		r *= doubler;	}	return r;}

⌨️ 快捷键说明

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