📄 pigd.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 + -