三国杀单机版 (控制台操作自己控制所有人) 武将26张(标准包+张角) 游戏牌160张(标准包+EX+军争)

风火林山除张角外部分武将的部分技能已写好,框架是按65张武将搭的(含8神将),可自行填补,也可改用mfc改成带GUI的。通过后续对卡牌的调查发现阴雷包和四张阴雷神将,一将成名2011,2012,2013和部分界限突破武将,以及部分星河璀璨武将以及部分始计篇武将均可扩展。

#include<cmath>
#include<cstdio>
#include<iostream>
#include<ctime>
#include<cstring>
#include<algorithm>
//有可能造成死亡的操作要返回 
using namespace std;
#define SK 50
struct WarCard{//武将类型牌 
	char Name[21];//名称 
	int Nation;//势力 
	bool Emperor;//是否有主公技能 
	int Blood;//血上限
	int Skillnumber;//技能数量 
	int Sex;//性别
	int Pack;//所属扩展包 
	int Number;//编号,见三国杀武将大全 
	int Rnd;//用于洗牌的随机数
	bool Back;//是否翻面 
	bool Wakeup;//觉醒技是否已经发动 
};
WarCard AllWarCard[58]={//全部游戏武将
{"",0,0,0,0,0,0},
{"刘备",1,1,4,2,0,1,1},
{"刘禅",1,1,3,3,0,5,2},
{"曹操",2,1,4,2,0,1,3},
{"曹丕",2,1,3,3,0,4,4},
{"孙权",3,1,4,2,0,1,5},
{"孙策",3,1,4,3,0,5,6},
{"张角",4,1,3,3,0,2,7},
{"董卓",4,1,8,4,0,4,8},
{"袁绍",4,1,4,2,0,3,9},
{"关羽",1,0,4,1,0,1,10},
{"张飞",1,0,4,1,0,1,11},
{"诸葛亮",1,0,3,2,0,1,12},
{"赵云",1,0,4,1,0,1,13},
{"马超",1,0,4,2,0,1,14},
{"黄月英",1,0,3,2,1,1,15},
{"魏延",1,0,4,1,0,2,16},
{"黄忠",1,0,4,1,0,2,17},
{"庞统",1,0,3,2,0,3,18},
{"卧龙诸葛亮",1,0,3,3,0,3,19},
{"祝融",1,0,4,2,1,4,20},
{"孟获",1,0,4,2,0,4,21},
{"姜维",1,0,4,2,0,5,22},
{"徐晃",2,0,4,1,0,4,23},
{"荀彧",2,0,3,2,0,3,24},
{"典韦",2,0,4,1,0,3,25},
{"夏侯惇",2,0,4,1,0,1,26},
{"张辽",2,0,4,1,0,1,27},
{"许褚",2,0,4,1,0,1,28},
{"郭嘉",2,0,3,2,0,1,29},
{"司马懿",2,0,3,2,0,1,30},
{"甄姬",2,0,3,2,1,1,31},
{"张郃",2,0,4,1,0,5,32},
{"邓艾",2,0,4,2,0,5,33},
{"夏侯渊",2,0,4,1,0,2,34},
{"曹仁",2,0,4,1,0,2,35},
{"孙坚",3,0,4,1,0,4,36},
{"鲁肃",3,0,3,2,0,4,37},
{"张昭&张纮",3,0,3,2,0,5,38},
{"陆逊",3,0,3,2,0,1,39},
{"甘宁",3,0,4,1,0,1,40},
{"吕蒙",3,0,4,1,0,1,41},
{"黄盖",3,0,4,1,0,1,42},
{"周瑜",3,0,3,2,0,1,43},
{"大乔",3,0,3,2,1,1,44},
{"孙尚香",3,0,3,2,1,1,45},
{"太史慈",3,0,4,1,0,3,46},
{"周泰",3,0,4,1,0,2,47},
{"小乔",3,0,3,2,1,2,48},
{"于吉",4,0,3,1,0,2,49},
{"贾诩",4,0,3,3,0,4,50},
{"左慈",4,0,3,2,0,5,51},
{"蔡文姬",4,0,3,2,1,5,52},
{"庞德",4,0,4,2,0,3,53},
{"颜良&文丑",4,0,4,1,0,3,54},
{"华佗",4,0,3,2,0,1,55},
{"吕布",4,0,4,1,0,1,56},
{"貂蝉",4,0,3,2,1,1,57},
};
int TotalWarCard=57;//武将牌总数量

WarCard EmperorHeap[31];//主公牌堆
int EmperorNum;//主公牌数量

WarCard UnEmperorHeap[601];//非主公牌堆
int UnEmperorNum;//非主公牌数量

WarCard WarCardHeap[601];//战士牌堆 
int WarCardNumber;//战士牌堆数量 

WarCard WarriorChoosing[101][30];//英雄选择阶段 
int ChoosingNumber[101]={0,2,3,3,3,3,3,3,3,3,3,3,3};//每个人可以选的英雄数量 

int OnField[601];
/*
势力 1-蜀 2-魏 3-吴 4-群 
是否为主公 1-是 0-不是 
血量 
技能数 
性别 0-男 1-女 
类型 1-标准 2-风 3-火 4-林 5-山 6-雷 7-阴 8-神将 9-SP 10-界限突破 
11-一将成名2011 12-一将成名2012 13-一将成名2013 14一将成名2014 15-一将成名2015 16-原创2016 17-原创2017 
*/
struct GameCard{//游戏类型牌 
	char Name[11];//名称 
	int Color;//花色 
	int Point;//点数 
	int Function;//功能类型 1-基本牌 2-非延时锦囊牌 3-延时类锦囊 4-装备牌 
	int Pack;//所属包 
	int Type;//牌类型,与名称对应 
	int Number;//每个牌有一个自己的编号1~160(标准+EX+军争) 
	int Rnd;//用于洗牌的随机数
	bool NationBeauty;
	bool NoGrain; 
};
int MemberNow;
int Aim[101],AimNumber;
struct Damageinfo{
	int Attribute;//伤害类型 
	int Type;//伤害牌种类 1-杀 2-火杀 3-雷杀...... 
	int Number;//伤害值
	int Color;//伤害来源牌的颜色 
	int FromMember;//伤害来源座位号 
	int FromCardNumber;//伤害来源牌数量 1-普通 2-丈八蛇矛 0-无伤害来源牌 
	int Card[10];//记录伤害来源牌的编号 1-160 
};
GameCard AllGameCard[201]={//全部游戏牌 标准+军争
{"",0,0,0,0},
{"杀",1,10,1,1,1,1},
{"杀",1,10,1,1,1,2},
{"杀",1,11,1,1,1,3},
{"杀",2,6,1,1,1,4},
{"杀",2,7,1,1,1,5},
{"杀",2,8,1,1,1,6}, 
{"杀",2,9,1,1,1,7}, 
{"杀",2,10,1,1,1,8}, 
{"杀",2,13,1,1,1,9}, 
{"杀",3,7,1,1,1,10}, 
{"杀",3,8,1,1,1,11}, 
{"杀",3,8,1,1,1,12}, 
{"杀",3,9,1,1,1,13}, 
{"杀",3,9,1,1,1,14}, 
{"杀",3,10,1,1,1,15}, 
{"杀",3,10,1,1,1,16}, 
{"杀",4,2,1,1,1,17}, 
{"杀",4,3,1,1,1,18}, 
{"杀",4,4,1,1,1,19}, 
{"杀",4,5,1,1,1,20}, 
{"杀",4,6,1,1,1,21}, 
{"杀",4,7,1,1,1,22}, 
{"杀",4,8,1,1,1,23}, 
{"杀",4,8,1,1,1,24}, 
{"杀",4,9,1,1,1,25}, 
{"杀",4,9,1,1,1,26}, 
{"杀",4,10,1,1,1,27}, 
{"杀",4,10,1,1,1,28}, 
{"杀",4,11,1,1,1,29}, 
{"杀",4,11,1,1,1,30},

{"火杀",1,4,1,3,2,31},
{"火杀",1,7,1,3,2,32},
{"火杀",1,10,1,3,2,33},
{"火杀",2,4,1,3,2,34},
{"火杀",2,5,1,3,2,35},

{"雷杀",3,4,1,3,3,36},
{"雷杀",3,5,1,3,3,37},
{"雷杀",3,6,1,3,3,38},
{"雷杀",3,7,1,3,3,39},
{"雷杀",3,8,1,3,3,40},
{"雷杀",4,5,1,3,3,41},
{"雷杀",4,6,1,3,3,42},
{"雷杀",4,7,1,3,3,43},
{"雷杀",4,8,1,3,3,44},

{"闪",1,2,1,1,4,45}, 
{"闪",1,2,1,1,4,46},
{"闪",1,13,1,1,4,47}, 
{"闪",2,2,1,1,4,48},
{"闪",2,2,1,1,4,49}, 
{"闪",2,3,1,1,4,50},
{"闪",2,4,1,1,4,51}, 
{"闪",2,5,1,1,4,52},
{"闪",2,6,1,1,4,53}, 
{"闪",2,7,1,1,4,54},
{"闪",2,8,1,1,4,55}, 
{"闪",2,9,1,1,4,56},
{"闪",2,10,1,1,4,57}, 
{"闪",2,11,1,1,4,58},
{"闪",2,11,1,1,4,59},

{"闪",1,8,1,3,4,60}, 
{"闪",1,9,1,3,4,61},
{"闪",1,11,1,3,4,62}, 
{"闪",1,12,1,3,4,63},
{"闪",2,6,1,3,4,64}, 
{"闪",2,7,1,3,4,65},
{"闪",2,8,1,3,4,66}, 
{"闪",2,10,1,3,4,67},
{"闪",2,11,1,3,4,68},

{"桃",1,3,1,1,5,69},
{"桃",1,4,1,1,5,70},
{"桃",1,6,1,1,5,71},
{"桃",1,7,1,1,5,72},
{"桃",1,8,1,1,5,73},
{"桃",1,9,1,1,5,74},
{"桃",1,12,1,1,5,75},
{"桃",2,12,1,1,5,76},

{"桃",1,5,1,3,5,77},
{"桃",1,6,1,3,5,78},
{"桃",2,2,1,3,5,79},
{"桃",2,3,1,3,5,80},

{"酒",2,9,1,3,6,81},
{"酒",3,3,1,3,6,82},
{"酒",3,9,1,3,6,83},
{"酒",4,3,1,3,6,84},
{"酒",4,9,1,3,6,85},

{"过河拆桥",1,12,2,1,7,86},
{"过河拆桥",3,3,2,1,7,87},
{"过河拆桥",3,4,2,1,7,88},
{"过河拆桥",3,12,2,1,7,89},
{"过河拆桥",4,3,2,1,7,90},
{"过河拆桥",4,4,2,1,7,91},

{"顺手牵羊",2,3,2,1,8,92},
{"顺手牵羊",2,4,2,1,8,93},
{"顺手牵羊",3,3,2,1,8,94},
{"顺手牵羊",3,4,2,1,8,95},
{"顺手牵羊",3,11,2,1,8,96},

{"无中生有",1,7,2,1,9,97},
{"无中生有",1,8,2,1,9,98},
{"无中生有",1,9,2,1,9,99},
{"无中生有",1,11,2,1,9,100},

{"决斗",2,1,2,1,10,101},
{"决斗",3,1,2,1,10,102},
{"决斗",4,1,2,1,10,103},

{"借刀杀人",4,12,2,1,11,104},
{"借刀杀人",4,13,2,1,11,105},

{"桃园结义",1,1,2,1,12,106},

{"五谷丰登",1,3,2,1,13,107},
{"五谷丰登",1,4,2,1,13,108},

{"南蛮入侵",3,7,2,1,14,109},
{"南蛮入侵",3,13,2,1,14,110},
{"南蛮入侵",4,7,2,1,14,111},

{"万箭齐发",1,1,2,1,15,112},

{"无懈可击",3,11,2,1,16,113},
{"无懈可击",4,12,2,1,16,114},
{"无懈可击",4,13,2,1,16,115},
{"无懈可击",2,12,2,2,16,116},
{"无懈可击",1,1,2,3,16,117},
{"无懈可击",1,13,2,3,16,118},
{"无懈可击",3,13,2,3,16,119},

{"火攻",1,2,2,3,17,120},
{"火攻",1,3,2,3,17,121},
{"火攻",2,12,2,3,17,122},

{"铁索连环",3,11,2,3,18,123},
{"铁索连环",3,12,2,3,18,124},
{"铁索连环",4,10,2,3,18,125},
{"铁索连环",4,11,2,3,18,126},
{"铁索连环",4,12,2,3,18,127},
{"铁索连环",4,13,2,3,18,128},

{"乐不思蜀",1,6,3,1,19,129},
{"乐不思蜀",3,6,3,1,19,130},
{"乐不思蜀",4,6,3,1,19,131},

{"兵粮寸断",3,10,3,3,20,132},
{"兵粮寸断",4,4,3,3,20,133},

{"闪电",3,1,3,1,21,134},
{"闪电",1,12,3,2,21,135},

{"诸葛连弩",2,1,4,1,22,136},
{"诸葛连弩",4,1,4,1,22,137},

{"青釭剑",3,6,4,1,23,138},

{"雌雄双股剑",3,2,4,1,24,139},

{"贯石斧",2,5,4,1,25,140},

{"青龙偃月刀",3,5,4,1,26,141},

{"丈八蛇矛",3,12,4,1,27,142},

{"方天画戟",2,12,4,1,28,143},

{"麒麟弓",1,5,4,1,29,144},

{"寒冰剑",3,2,4,2,30,145},

{"朱雀羽扇",2,1,4,3,31,146},

{"古锭刀",3,1,4,3,32,147},

{"八卦阵",3,2,5,1,33,148},

{"八卦阵",4,2,5,1,33,149},

{"仁王盾",4,2,5,2,34,150},

{"白银狮子",4,1,5,3,35,151},

{"藤甲",3,2,5,3,36,152},

{"藤甲",4,2,5,3,36,153},

{"爪黄飞电",1,13,6,1,37,154},

{"的卢",4,5,6,1,37,155},

{"绝影",3,5,6,1,37,156},

{"骅骝",2,13,6,3,37,157},

{"赤兔",1,5,7,1,38,158},

{"紫骍",2,13,7,1,38,159},

{"大宛",3,13,7,1,38,160}
}; 
int TotalGameCard=160;//游戏牌总数量

GameCard GameCardHeap[200];//游戏牌堆 
int GameCardNumber;//牌堆数量

GameCard NotSurrender[21];//不屈牌堆 
int NotSurrenderNumber;//不屈牌数量

GameCard DiscardHeap[200];//弃牌堆 
int DiscardNumber;//弃牌堆牌数量

GameCard TableCard[201];
int TableCardNumber;

int TurnsNumber;//第几轮牌堆 

int TotalPeopleNumber;//游戏人数
int DeadPeopleNumber;//死亡人数
GameCard JudgeCard;//判定牌
/*
花色 1-红桃 2-方片 3-黑桃 4-梅花 
数字 1~13 2~10-2~10 1-A 11-J 12-Q 13-K 
功能 1-基本牌 2-非延时锦囊牌 3-延时锦囊牌 4-武器 5-防具 6-防御马 7-进攻马 
牌的类型 1-标准 2-EX 3-军争 
*/
struct IdentityCard{//身份类型牌 
	int Type;
	int Rnd;
};
IdentityCard AllIdentityCard[101]={{0},{1}/*1人*/,{4}/*2人*/,{3}/*3人*/,{2}/*4人*/,{4}/*5人*/,{4}/*6人*/,{2}/*7人*/,{4}/*8人*/,{3}/*9人*/,{2}/*10人*/,{4}/*11人*/,{4}/*12人*/,{4}/*13人*/,{4}/*14人*/,{2}/*15人*/,{4}/*16人*/,{4}/*17人*/,{4}/*18人*/,{2}/*19人*/,{4}/*20人*/};//所有身份牌 
IdentityCard IdentityCardHeap[101];//身份牌牌堆 
/*`
身份 1-主公 2-忠臣 3-内奸 4-反贼 
*/
struct Member{//每个玩家的游戏区 
	GameCard HandCard[161];//手牌
	WarCard WarriorCard;//武将牌 
	int HandCardNumber;//手牌数量
	int Identity;//身份
	int Nation;//势力
	int Sex;//性别
	int Aim[101];//第一视角几号位距离
	int BloodCeiling;//血量上限
	int BloodNow;//当前血量
	GameCard Equipment[5];
	bool EquipmentExist[5];
	
	GameCard JudgeArea[4];//判定区判定牌
	bool JudgeCardExist[4];//某种判定牌是否存在
	//1-乐不思蜀 2-兵粮寸断 3-闪电
	int JudgeCardNumber;//判定牌数量
	int Wine;//1-喝过酒状态解除 2-喝过酒处于醉酒状态 0-还没喝酒
};
bool Dead[101];
int Across[101];
Member Player[101];//取决于玩家数量
int Distance[101][101]={
{},//0人场
{},//1人场
{0,1},//2人场
{0,1,1},//3人场
{0,1,2,1},//4人场
{0,1,2,2,1},//5人场
{0,1,2,3,2,1},//6人场
{0,1,2,3,3,2,1},//7人场
{0,1,2,3,4,3,2,1},//8人场
{0,1,2,3,4,4,3,2,1},//9人场
{0,1,2,3,4,5,4,3,2,1},//10人场
{0,1,2,3,4,5,5,4,3,2,1},//11人场
{0,1,2,3,4,5,6,5,4,3,2,1},//12人场
{0,1,2,3,4,5,6,6,5,4,3,2,1},//13人场
{0,1,2,3,4,5,6,7,6,5,4,3,2,1},//14人场
{0,1,2,3,4,5,6,7,7,6,5,4,3,2,1},//15人场
{0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1},//16人场
{0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1},//17人场
{0,1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1},//18人场
{0,1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1},//19人场
{0,1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1}//20人场
};
int IdentityNumber[5];
bool naked;//许褚裸衣标记
int skyjustice;//太史慈天义标记
int KillChance;//回合剩余杀次数
int BalanceChance;//孙权--制衡是否还能发动
int SkyJusticeChance;//太史慈--天义剩余次数
int CyanPackChance;//华佗--青囊剩余次数
int NationBeautyChance;//大乔--国色剩余次数
int MarryChance;//孙尚香--结姻剩余次数
int AlienateChance;//貂蝉--离间剩余次数
int ReverseSchemeChance;//周瑜--反间剩余次数
int KindheartednessNumber;//刘备--仁德剩余次数
int YellowSkyChance;//群势力(张角为主公)--剩余黄天次数 
int Unreasonablestrike;//典韦--剩余强袭次数 
bool JumpJudging;//跳过弃牌阶段标志
bool JumpInCard;//跳过摸牌阶段标志
bool JumpOutCard;//跳过出牌阶段标志
bool JumpDiscard;//跳过弃牌阶段标志
//bool cmp(WarCard u,WarCard v){return u.pack<v.pack;}//按照扩展包排序 
bool GameRnd(GameCard u,GameCard v){return u.Rnd<v.Rnd;}//游戏牌洗牌 
bool WarRnd(WarCard u,WarCard v){return u.Rnd<v.Rnd;}//武将牌洗牌 
bool IdentityRnd(IdentityCard u,IdentityCard v){return u.Rnd<v.Rnd;}//身份牌洗牌 
char* nation(int a){//显示所属势力 
	if(a==1) return "蜀";
	if(a==2) return "魏";
	if(a==3) return "吴";
	if(a==4) return "群";
}
char* emperor(int a){//显示是否为君主 
	if(a==0) return "不是";
	if(a==1) return "是";
}
char* sex(int a){//显示性别 
	if(a==0) return "男";
	if(a==1) return "女";
}
char* whichpack(int a){//显示所属包 
	if(a==1) return "标准";
	if(a==2) return "风";
	if(a==3) return "火";
	if(a==4) return "林";
	if(a==5) return "山";
}
char* color(int a){//显示花色 
	if(a==1) return "红桃";
	if(a==2) return "方块";
	if(a==3) return "黑桃";
	if(a==4) return "梅花"; 
} 
char* point(int a){//显示点数 
	if(a==1) return "A";
	if(a==2) return "2";
	if(a==3) return "3";
	if(a==4) return "4";
	if(a==5) return "5";
	if(a==6) return "6";
	if(a==7) return "7";
	if(a==8) return "8";
	if(a==9) return "9";
	if(a==10) return "10";
	if(a==11) return "J";
	if(a==12) return "Q";
	if(a==13) return "K";
}
char* identity(int a){//显示身份 
	if(a==1) return "主公";
	if(a==2) return "忠臣";
	if(a==3) return "内奸";
	if(a==4) return "反贼";
}
void InitIdentity(){//形成身份牌堆 
	for(int i=1;i<=TotalPeopleNumber;i++)
	IdentityCardHeap[i]=AllIdentityCard[i];
} 
void InitStandard(){//形成标准版的武将牌和游戏排 
	for(int i=1;i<=TotalWarCard;i++)
	if(AllWarCard[i].Pack==1) WarCardHeap[++WarCardNumber]=AllWarCard[i];
	
	for(int i=1;i<=TotalGameCard;i++)
	if(AllGameCard[i].Pack<=3) GameCardHeap[++GameCardNumber]=AllGameCard[i];
	
}
void InitMyth(){//形成神话再临的武将牌和游戏排

	for(int i=1;i<=TotalWarCard;i++) if(AllWarCard[i].Number==7)
	WarCardHeap[++WarCardNumber]=AllWarCard[i];
	//for(int i=1;i<=TotalWarCard;i++) if(AllWarCard[i].Pack==2) WarCardHeap[++WarCardNumber]=AllWarCard[i];//风
	
	//for(int i=1;i<=TotalWarCard;i++) if(AllWarCard[i].Pack<=3) WarCardHeap[++WarCardNumber]=AllWarCard[i];//火
	
	//for(int i=1;i<=TotalWarCard;i++) if(AllWarCard[i].Pack<=4) WarCardHeap[++WarCardNumber]=AllWarCard[i];//林
	
	//for(int i=1;i<=TotalWarCard;i++) if(AllWarCard[i].Pack<=5) WarCardHeap[++WarCardNumber]=AllWarCard[i];//山
}
void RndGameCard(){//游戏牌堆洗牌 
	srand((unsigned int)time(0));
	
	for(int i=1;i<=GameCardNumber;i++) GameCardHeap[i].Rnd=rand();
	
	sort(GameCardHeap+1,GameCardHeap+GameCardNumber+1,GameRnd); 
}
void RndWarCard(){//武将牌堆洗牌 
	srand((unsigned int)time(0));
	
	for(int i=1;i<=WarCardNumber;i++) WarCardHeap[i].Rnd=rand();//赋随机数 
	
	sort(WarCardHeap+1,WarCardHeap+WarCardNumber+1,WarRnd);//按照随机数洗武将牌 
}
void RndIdentityCard(){//身份牌堆洗牌 
	srand((unsigned int)time(0));
	
	for(int i=1;i<=TotalPeopleNumber;i++)
	IdentityCardHeap[i].Rnd=rand();
	
	sort(IdentityCardHeap+1,IdentityCardHeap+TotalPeopleNumber+1,IdentityRnd); 
}
void SetSeatNumber(){//确定身份--确定座次 
	int i=1;
	for(i=1;i<=TotalPeopleNumber;i++)
	if(IdentityCardHeap[i].Type==1) break;//确定主公位置 
	for(int j=1;j<=TotalPeopleNumber;j++){//讲1-n号位的身份确定
	
		Player[j].Identity=IdentityCardHeap[i].Type;
		IdentityNumber[IdentityCardHeap[i].Type]++;
		if(++i>TotalPeopleNumber) i=1;
	}
}
void CalDistance(){//计算所有人之间距离 
	for(int i=1;i<=TotalPeopleNumber;i++)
	if(!Dead[i]){
		int id=i;
		if(++id>TotalPeopleNumber) id=1;
		for(int k=1;k<=TotalPeopleNumber-DeadPeopleNumber-1;k++){
			while(Dead[id]){
				if(++id>TotalPeopleNumber) id=1;
			}
			Player[i].Aim[id]=Distance[TotalPeopleNumber-DeadPeopleNumber][k];
			if(Player[id].EquipmentExist[3]==true) Player[i].Aim[id]++;
			if(Player[i].EquipmentExist[4]==true) Player[i].Aim[id]--;
			if(Player[i].WarriorCard.Number==14) Player[i].Aim[id]--;//马超--马术 
			if(Player[i].WarriorCard.Number==53) Player[i].Aim[id]--;//庞德--马术
			//神曹操--飞影
			if(++id>TotalPeopleNumber) id=1;
		} 
	}
	/*
	for(int i=1;i<=TotalPeopleNumber;i++)
	{
		printf("%d号位\n",i);
		for(int j=1;j<=TotalPeopleNumber;j++)
		if(i!=j) printf("与%d号位的距离为%d\n",j,Player[i].Aim[j]);
	}*/
}
void ShowAllDistance(){//显示每两个人距离
	for(int i=1;i<=TotalPeopleNumber;i++)
	{
		printf("%d号位:",i);
		for(int j=1;j<=TotalPeopleNumber;j++)
		if(i!=j) printf("与%d号位距离为%d ",j,Player[i].Aim[j]);
		printf("\n");
	} 
} 
void ChooseWarrior(){//选择武将
	for(int i=1;i<=WarCardNumber;i++){
		if(WarCardHeap[i].Emperor==1){
			EmperorNum++;
			EmperorHeap[EmperorNum]=WarCardHeap[i];
		}
		else{
			UnEmperorNum++;
			UnEmperorHeap[UnEmperorNum]=WarCardHeap[i];
		} 
	}
	for(int i=1;i<=EmperorNum;i++) WarriorChoosing[1][i]=EmperorHeap[i];
	for(int i=1;i<=ChoosingNumber[1];i++) WarriorChoosing[1][EmperorNum+i]=UnEmperorHeap[i];
	//WarriorChoosing[1][4]=UnEmperorHeap[1];
	//WarriorChoosing[1][5]=UnEmperorHeap[2];
	printf("您的身份为主公,%d号位,请在下列武将中选择一位出战\n",1);
	for(int i=1;i<=EmperorNum+ChoosingNumber[1];i++){//主公选武将
		printf("%d %s\n",i,WarriorChoosing[1][i].Name);
	}
	int ChooseNumber;
	scanf("%d",&ChooseNumber);
	printf("您选择的英雄是%s\n",WarriorChoosing[1][ChooseNumber].Name); 
	OnField[WarriorChoosing[1][ChooseNumber].Number]=1;
	Player[1].WarriorCard=WarriorChoosing[1][ChooseNumber];
	Player[1].Sex=WarriorChoosing[1][ChooseNumber].Sex;
	Player[1].Nation=WarriorChoosing[1][ChooseNumber].Nation;
	Player[1].BloodCeiling=WarriorChoosing[1][ChooseNumber].Blood+(TotalPeopleNumber>=5);
	Player[1].BloodNow=WarriorChoosing[1][ChooseNumber].Blood+(TotalPeopleNumber>=5);//待改,神甘宁初始体力不等于体力上限 
	
	for(int i=1;i<=WarCardNumber;i++)//去除主公选择牌,将其余所有牌重新洗牌 
	if(WarCardHeap[i].Number==WarriorChoosing[1][ChooseNumber].Number){
		if(i!=WarCardNumber) swap(WarCardHeap[i],WarCardHeap[WarCardNumber]);
		WarCardNumber--;
		break;
	}
	RndWarCard();
	for(int i=2;i<=TotalPeopleNumber;i++)//2号位以后每人选三张牌
	for(int j=1;j<=ChoosingNumber[i];j++)
	WarriorChoosing[i][j]=WarCardHeap[WarCardNumber--];
	for(int i=2;i<=TotalPeopleNumber;i++){//2-n号位选择武将 
		printf("您的身份为%s,%d号位,请在下列武将中选择一位出战\n",identity(Player[i].Identity),i);
		for(int j=1;j<=ChoosingNumber[i];j++) printf("%d %s\n",j,WarriorChoosing[i][j].Name);//打印三位武将信息 
		scanf("%d",&ChooseNumber);
		printf("您选择的英雄是%s\n",WarriorChoosing[i][ChooseNumber].Name); 
		OnField[WarriorChoosing[i][ChooseNumber].Number]=i;
		Player[i].WarriorCard=WarriorChoosing[i][ChooseNumber];
		Player[i].Sex=WarriorChoosing[i][ChooseNumber].Sex;
		Player[i].Nation=WarriorChoosing[i][ChooseNumber].Nation;
		Player[i].BloodCeiling=WarriorChoosing[i][ChooseNumber].Blood;
		Player[i].BloodNow=WarriorChoosing[i][ChooseNumber].Blood;
		for(int j=1;j<=ChoosingNumber[i];j++)
		if(j!=ChooseNumber) WarCardHeap[++WarCardNumber]=WarriorChoosing[i][j];
	}
	RndWarCard();//给左慈准备的 
}
void WashGameCard(){//洗游戏牌 
	TurnsNumber++;
	while(DiscardNumber) GameCardHeap[++GameCardNumber]=DiscardHeap[DiscardNumber--];
	RndGameCard();
}
GameCard TakeOneGameCard(){//从牌堆顶取一张牌
	GameCard TopCard=GameCardHeap[GameCardNumber--];
	if(GameCardNumber==0) WashGameCard();
	return TopCard;
}
void GiveGameCardTo(int SeatNumber,int T){//给某人T张牌
	while(T--) Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=TakeOneGameCard();
}
void OwletGirl(int SeatNumber){//孙尚香--枭姬 
	GiveGameCardTo(SeatNumber,2); 
}
void InitialCard(){//初始发一人四张牌
	TurnsNumber=1;
	for(int i=1;i<=TotalPeopleNumber;i++) GiveGameCardTo(i,4);
}
void ShowOneGameCard(GameCard Card){//显示一张游戏牌 名称 花色 点数 
	printf("%s %s%s\n",Card.Name,color(Card.Color),point(Card.Point));
}
void ShowOnesHandCard(int SeatNumber){//显示某人全部的手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("手牌:\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++){
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);//打印手牌--一张一行 
	}
}
void ShowOnesRedHandCard(int SeatNumber){//显示某人所有的红色手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("红色手牌:\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++){
		GameCard Card=Player[SeatNumber].HandCard[i];
		if(Card.Color<=2){
			printf("%d-",i);
			ShowOneGameCard(Card); 
		}
	}
}
void ShowOnesPlumHandCard(int SeatNumber){//显示某人所有的梅花手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("梅花手牌:\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++){
		GameCard Card=Player[SeatNumber].HandCard[i];
		if(Card.Color==4){
			printf("%d-",i);
			ShowOneGameCard(Card);
		}
	}
}
void ShowOnesBlackHandCard(int SeatNumber){//显示某人所有的黑色手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("黑色手牌:\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++){
		GameCard Card=Player[SeatNumber].HandCard[i];
		if(Card.Color>=3){
			printf("%d-",i);
			ShowOneGameCard(Card);//一张一行 
		}
	}
}
void ShowOnesAllCard(int SeatNumber){//显示某人全部的牌 装备牌+手牌
	ShowOnesHandCard(SeatNumber);
	printf("装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1){//显示所有装备牌 
		printf("%d-",i+Player[SeatNumber].HandCardNumber);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
}
void ShowOnesAllRedCard(int SeatNumber){//显示某人全部的红色牌 装备牌+手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("红色手牌:\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++)
	if(Player[i].HandCard[i].Color<=2){//显示所有红色手牌 
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	printf("红色装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1)
	if(Player[SeatNumber].Equipment[i].Color<=2){//显示红色装备牌 
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
}
void ShowOnesAllSquareCard(int SeatNumber){//显示某人全部的方块牌 装备牌+手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("方块手牌:\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++)
	if(Player[SeatNumber].HandCard[i].Color==2){//显示所有方块手牌 
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	printf("方块装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1)
	if(Player[SeatNumber].Equipment[i].Color==2){//显示方块装备牌 
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
}
void ShowOnesAllPlumCard(int SeatNumber){//显示某人全部的梅花牌 装备牌+手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("梅花手牌:\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++)
	if(Player[i].HandCard[i].Color==4){//显示所有方块手牌 
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	printf("梅花装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1)
	if(Player[SeatNumber].Equipment[i].Color==4){//显示方块装备牌 
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
} 
void ShowOnesAllBlackCard(int SeatNumber){//显示某人全部的黑色牌 装备牌+手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("黑色手牌:\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++)
	if(Player[SeatNumber].HandCard[i].Color>=3){//显示所有黑色手牌
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	printf("黑色装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1)
	if(Player[SeatNumber].Equipment[i].Color>=3){//显示黑色装备牌 
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
} 
void ShowOnesHandCardBack(int SeatNumber){//显示所有手牌的背面
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("手牌背面:\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	printf("%d-第%d张牌\n",i,i);
}
void ShowOnesAllCardBack(int SeatNumber){//显示所有手牌背面 装备牌+手牌
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("手牌背面:\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++) printf("%d-第%d张牌\n",i,i);
	printf("装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1){//显示装备牌
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
}
void ShowOnesAllCardBackAndJudgeCard(int SeatNumber){//显示所有手牌背面+装备牌+判定牌 
	printf("%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("手牌背面:\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++) printf("%d-第%d张牌\n",i,i);
	printf("装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1){
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
	printf("判定牌:\n");
	for(int i=1;i<=Player[SeatNumber].JudgeCardNumber;i++){
		printf("%d-",i+Number+4);
		if(Player[SeatNumber].JudgeArea[i].NationBeauty==1) printf("(国色)");
		if(Player[SeatNumber].JudgeArea[i].NoGrain==1) printf("(断粮)");
		ShowOneGameCard(Player[SeatNumber].JudgeArea[i]);
	}
}
void ShowOnesAllCardAndJudgeCard(int SeatNumber){//显示所有手牌+装备牌+判定牌
	ShowOnesHandCard(SeatNumber);
	printf("装备牌:\n");
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1){
		printf("%d-",i+Player[SeatNumber].HandCardNumber);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
	printf("判定牌:\n"); 
	for(int i=1;i<=Player[SeatNumber].JudgeCardNumber;i++){
		printf("%d-",i+Player[SeatNumber].HandCardNumber+4);
		if(Player[SeatNumber].JudgeArea[i].NationBeauty==1) printf("(国色)");
		if(Player[SeatNumber].JudgeArea[i].NoGrain==1) printf("(断粮)");
		ShowOneGameCard(Player[SeatNumber].JudgeArea[i]);
	}
}
int AllCardNumber(int SeatNumber){//统计一个人所有的牌数量 
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1) Number++;
	return Number;
}
void ClearTable(){//回收桌面卡牌
	while(TableCardNumber){
		TableCard[TableCardNumber].NoGrain=0;
		TableCard[TableCardNumber].NationBeauty=0;
		DiscardHeap[++DiscardNumber]=TableCard[TableCardNumber--];
	}
}
int AttackScope(int SeatNumber){//计算攻击距离
	int Scope=1;//基础攻击距离
	int WeaponType=0;
	if(Player[SeatNumber].EquipmentExist[1]==1){
		WeaponType=Player[SeatNumber].Equipment[1].Type;
		if(WeaponType==22) Scope=1;//诸葛连弩
		if(WeaponType==23) Scope=2;//青釭剑
		if(WeaponType==24) Scope=2;//雌雄双股剑
		if(WeaponType==25) Scope=3;//贯石斧
		if(WeaponType==26) Scope=3;//青龙偃月刀
		if(WeaponType==27) Scope=3;//丈八蛇矛
		if(WeaponType==28) Scope=4;//方天画戟
		if(WeaponType==29) Scope=5;//麒麟弓
		if(WeaponType==30) Scope=2;//寒冰剑
		if(WeaponType==31) Scope=4;//朱雀羽扇
		if(WeaponType==32) Scope=2;//古锭刀
	}
	return Scope;
}
void FireCamp(int SeatNumber){//陆逊--连营
	if(Player[SeatNumber].HandCardNumber==0){
		printf("触发连营\n"); 
		GiveGameCardTo(SeatNumber,1);
	} 
}
GameCard OnesCard(int SeatNumber,int Option){//一个人的第Option张牌 
	int Number=Player[SeatNumber].HandCardNumber;
	if(Option<=Number) return Player[SeatNumber].HandCard[Option];
	else if(Option<=Number+4) return Player[SeatNumber].Equipment[Option-Number];
	else return Player[SeatNumber].JudgeArea[Option-Number-4];
}
void OneLoseCard(int SeatNumber,int number){//SeatNumber号位失去第number张牌 或装备牌
	if(number<=Player[SeatNumber].HandCardNumber){//手牌
		for(int i=number+1;i<=Player[SeatNumber].HandCardNumber;i++)//后面的牌依次向前移一位 
		Player[SeatNumber].HandCard[i-1]=Player[SeatNumber].HandCard[i];//将牌依次前移
		Player[SeatNumber].HandCardNumber--;//卡牌总数量-1
		if(Player[SeatNumber].WarriorCard.Number==39)
		FireCamp(SeatNumber);
	}
	else if(number<=Player[SeatNumber].HandCardNumber+4){//装备牌
		number-=Player[SeatNumber].HandCardNumber;
		Player[SeatNumber].EquipmentExist[number]=0;
		if(number==2&&Player[SeatNumber].Equipment[2].Type==35){//白银狮子
			if(Player[SeatNumber].BloodNow!=Player[SeatNumber].BloodCeiling){
				printf("白银狮子效果触发\n");
				Player[SeatNumber].BloodNow++; 
			}
		}
		if(Player[SeatNumber].WarriorCard.Number==45) OwletGirl(SeatNumber);//孙尚香--枭姬
		if(number>=3) CalDistance();
	}
	else{//判定牌
		number-=Player[SeatNumber].HandCardNumber+4;
		if(Player[SeatNumber].JudgeArea[number].Type==19||Player[SeatNumber].JudgeArea[number].NationBeauty==1)
		Player[SeatNumber].JudgeCardExist[1]=false;
		if(Player[SeatNumber].JudgeArea[number].Type==20||Player[SeatNumber].JudgeArea[number].NoGrain==1)
		Player[SeatNumber].JudgeCardExist[2]=false;
		if(Player[SeatNumber].JudgeArea[number].Type==21)
		Player[SeatNumber].JudgeCardExist[3]=false;
		for(int i=number+1;i<=Player[SeatNumber].JudgeCardNumber;i++)
		Player[SeatNumber].JudgeArea[i-1]=Player[SeatNumber].JudgeArea[i];
		Player[SeatNumber].JudgeCardNumber--;
	}
}
void OneLoseNumber(int SeatNumber,int Number){
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(Player[SeatNumber].HandCard[i].Number==Number){//手牌 
		OneLoseCard(SeatNumber,i);
		return;
	}
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[i].Number==Number){//装备牌 
		OneLoseCard(SeatNumber,i+Player[SeatNumber].HandCardNumber);
		return;
	}
}
int OneCardOption(int SeatNumber,int Number){//确保这张牌在某人的手牌中或者是装备区 
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(Player[SeatNumber].HandCard[i].Number==Number) return i;
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[i].Number==Number) return Player[SeatNumber].HandCardNumber+i;
}
GameCard OnesCardNumber(int SeatNumber,int Number){
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(Player[SeatNumber].HandCard[i].Number==Number) return Player[SeatNumber].HandCard[i];
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[i].Number==Number) return Player[SeatNumber].Equipment[i];
}
void BloodUp(int SeatNumber){//加血
	if(Player[SeatNumber].BloodNow!=Player[SeatNumber].BloodCeiling) Player[SeatNumber].BloodNow++;
}
void GhostTalent(int SeatNumber){//询问司马懿--鬼才(待升级)
	printf("%d-%s,请问您是否发动鬼才? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option!=1){
		printf("取消发动\n");
		return;
	}
	printf("%d-%s,请您打出一张手牌替代判定牌\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	ShowOnesHandCard(SeatNumber);//每列显示一张手牌 
	printf("0-取消\n");//提供取消选项
	scanf("%d",&Option);
	if(Option==0){
		printf("取消发动鬼才\n");
		return;//取消发动
	}
	//生效
	TableCard[++TableCardNumber]=JudgeCard;
	JudgeCard=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	printf("司马懿打出替换的判定牌:");
	ShowOneGameCard(JudgeCard);
	return;
}
bool ZhangJiaosEightDiagramIsGoingOn;
void GhostWay(int SeatNumber){//询问张角--鬼道(待升级)
	printf("%d-%s,请问您是否发动鬼道? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option!=1){
		printf("取消发动\n");
		return;
	}
	printf("%d-%s,请您打出一张牌替换判定牌",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	{//每列显示一张黑色牌 手牌+装备牌
		for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
		if(Player[SeatNumber].HandCard[i].Color>=3)
		{
			printf("%d-",i);
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
		for(int i=1;i<=4;i++)
		if(Player[SeatNumber].EquipmentExist[i]==true)
		if(Player[SeatNumber].Equipment[i].Color>=3)
		{
			if(i==2&&Player[SeatNumber].Equipment[i].Type==33&&ZhangJiaosEightDiagramIsGoingOn==true) continue;
			printf("%d-",Player[SeatNumber].HandCardNumber+i);
			ShowOneGameCard(Player[SeatNumber].Equipment[i]);
		}
	}
	printf("0-取消\n");
	scanf("%d",&Option);
	if(Option==0){
		printf("取消发动鬼道\n");
		return;//取消发动
	}
	GameCard Temp=JudgeCard;
	JudgeCard=OnesCard(SeatNumber,Option);
	OneLoseCard(SeatNumber,Option);
	Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=Temp;//判定牌加入手牌 
	printf("张角替换判定牌:");
	ShowOneGameCard(JudgeCard);
	return;
}
void AskChangeJudgeCard(int SeatNumber){//询问司马懿和张角是否更改判定牌   
	/*
	if(OnField[7]&&OnField[30]){
		int id=SeatNumber;
		for(int i=1;i<=TotalPeopleNumber-1;i++){
			if(++id>TotalPeopleNumber) id=1;
			if(id==OnField[7]) GhostWay(OnField[7]);//询问张角-鬼道
			if(id==OnField[30]) GhostTalent(OnField[30]);//询问司马懿-鬼才
		} 
	}
	else{
	if(OnField[7]) GhostWay(OnField[7]);//有张角-询问鬼道
	if(OnField[30]) GhostTalent(OnField[30]);//有司马懿-询问鬼才
	}
	*/
	if(OnField[7]||OnField[30]){
		int id=SeatNumber;
		for(int i=1;i<=TotalPeopleNumber;i++){ 
			if(id==OnField[7]) GhostWay(OnField[7]);//询问张角-鬼道
			if(id==OnField[30]) GhostTalent(OnField[30]);//询问司马懿-鬼才
			if(++id>TotalPeopleNumber) id=1;
			
		} 
	}
}
void Judge(int SeatNumber){//判定
	JudgeCard=TakeOneGameCard();//从牌堆拿出一张判定牌
	printf("判定牌:");
	ShowOneGameCard(JudgeCard);//显示该判定牌
	AskChangeJudgeCard(SeatNumber);//询问是否有人更换判定牌
	//曹丕--颂威
}
void CloseMoon(int SeatNumber){//貂蝉--闭月
	GiveGameCardTo(SeatNumber,1);
}
void Integral(int Winner){//计算结果
	if(Winner==1){//主忠获胜
		printf("主公忠臣胜利!\n");
	}
	if(Winner==3){//内奸获胜
		printf("内奸胜利!\n");
	}
	if(Winner==4){//反贼获胜
		printf("反贼胜利!\n");
	}
	printf("Game Over!!!");
	exit(0);
}
void SharpestBlade(int FromNumber,int ToNumber){//祝融--烈刃
	
}
void JudgeOver(){//判断游戏结束
	if(IdentityNumber[1]==0){//主公阵亡
		if(IdentityNumber[2]==0&&IdentityNumber[4]==0&&IdentityNumber[3]==1) Integral(3);//只有内奸存活,内奸胜利 
		else Integral(4);//不只有内奸存活,反贼胜利 
	}
	else if(IdentityNumber[3]+IdentityNumber[4]==0) Integral(1);//反贼内奸全部阵亡,主公和忠臣胜利 
	else return;
}
bool BronzeSword(int SeatNumber){//是否有青釭剑 
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[1].Type==23) return true;
	return false;
}
void Damage(Damageinfo damage,int ToNumber,bool skyfume);
void EvilHero(Damageinfo damage,int SeatNumber){//触发曹操--奸雄
	if(!damage.FromCardNumber) return;
	printf("%d-%s,奸雄触发\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	for(int i=1;i<=damage.FromCardNumber;i++){
		for(int j=1;j<=TableCardNumber;j++)
		if(TableCard[j].Number==damage.Card[i]){
			Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=TableCard[j];
			for(int k=j+1;k<=TableCardNumber;k++)
			TableCard[k-1]=TableCard[k];
			TableCardNumber--;
			break;
		}
	}
}
void HeritagePlan(Damageinfo damage,int SeatNumber){//触发郭嘉--遗计(待升级)
	printf("%d-%s,您触发了遗计\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	for(int i=1;i<=damage.Number*2;i++){
		GameCard heritage=TakeOneGameCard();
		printf("请将第%d张牌分配给下列一名角色: ",i);
		ShowOneGameCard(heritage);
		for(int j=1;j<=TotalPeopleNumber;j++){
			if(Dead[j]) continue;
			printf("%d-%s\n",j,Player[j].WarriorCard.Name);
			int Option;
			scanf("%d",&Option);
			Player[Option].HandCard[++Player[Option].HandCardNumber]=heritage; 
			break;
		}
	}
}
void StrikeBack(Damageinfo damage,int SeatNumber){//触发司马懿--反馈(待升级)
	if(!AllCardNumber(damage.FromMember)) return;
	printf("%d-%s,你是否发动反馈? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	printf("%d-%s,请你从%d-%s的手牌或装备区反馈一张牌\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,damage.FromMember,Player[damage.FromMember].WarriorCard.Name); 
	ShowOnesAllCardBack(damage.FromMember);
	scanf("%d",&Option);
	Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=OnesCard(damage.FromMember,Option);
	OneLoseCard(damage.FromMember,Option);
	return;
}
void IronTemper(Damageinfo damage,int SeatNumber){//触发夏侯惇--刚烈
	printf("%d-%s,你是否发动刚烈? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	Judge(SeatNumber);
	printf("刚烈判定结果: ");
	ShowOneGameCard(JudgeCard);
	if(JudgeCard.Color==1){
		printf("刚烈失效\n");
		return;
	}
	else printf("刚烈生效\n");
	printf("%d-%s,%d-%s的刚烈生效,请你弃掉两张手牌或者受到其对你造成的一点伤害\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name,SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Number=Player[damage.FromMember].HandCardNumber;
	int Choose[Number+1];
	int ChooseNumber=0;
	int NeedDiscard=2;
	memset(Choose,0,sizeof(Choose));
	while(NeedDiscard){
		Number=Player[damage.FromMember].HandCardNumber;
		printf("0-受到伤害\n");
		printf("%d-%s,您还需要弃掉%d张牌\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name,NeedDiscard);
		for(int i=1;i<=Number;i++){
			printf("%d-",i);
			if(Choose[i]) printf("(已选)");
			ShowOneGameCard(Player[damage.FromMember].HandCard[i]);
		}
		if(ChooseNumber>=1) printf("%d-确认\n",Number+1);
		int Option;
		scanf("%d",&Option);
		if(Option==0){
			Damageinfo damage1;
			damage1.Attribute=1;
			damage1.Type=SK+1;
			damage1.Number=1;
			damage1.FromMember=SeatNumber;
			damage1.FromCardNumber=0;
			Damage(damage1,damage.FromMember,0);
			return;
		} 
		if(Option==Number+1){
			for(int i=1;i<=Number;i++)
			if(Choose[i]){
				OneLoseNumber(damage.FromMember,Choose[i]);
				Choose[i]=0;
			}
			NeedDiscard-=ChooseNumber;
			ChooseNumber=0;
		}
		if(Choose[Option]){
			Choose[Option]=0;
			ChooseNumber--;
		}
		else{
			if(ChooseNumber==NeedDiscard) continue;
			Choose[Option]=Player[damage.FromMember].HandCard[Option].Number;
			ChooseNumber++;
		}
	}
}
bool SkyPerfume(Damageinfo damage,int SeatNumber){//小乔--天香
	printf("%d-%s,请问您是否发动天香,将伤害转移至另外一个人? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return false;
	printf("%d-%s,您需要弃掉一张红桃手牌\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++){
		int color=Player[SeatNumber].HandCard[i].Color;
		if(color==3) color=1;//小乔--天香 
		if(color==1){//牌是红桃的
			printf("%d-",i);
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
	}
	scanf("%d",&Option);
	if(Option==0) return false; 
	printf("%d-%s,请你选择天香的目标: ",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option1;
	scanf("%d",&Option1);
	if(Option1==0) return false;
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	damage.Type=SK;//伤害属于技能Type
	Damage(damage,Option1,1);
	return true;
}
void DeadDisposed(int SeatNumber){//阵亡处理 
	if(OnField[4]&&SeatNumber!=OnField[4]){//曹丕--行殇
		for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++) Player[OnField[4]].HandCard[++Player[OnField[4]].HandCardNumber]=Player[SeatNumber].HandCard[i];
		for(int i=1;i<=4;i++)
		if(Player[SeatNumber].EquipmentExist[i]==1) Player[OnField[4]].HandCard[++Player[OnField[4]].HandCardNumber]=Player[SeatNumber].Equipment[i];
		for(int i=1;i<=Player[SeatNumber].JudgeCardNumber;i++) Player[OnField[4]].HandCard[++Player[OnField[4]].HandCardNumber]=Player[SeatNumber].JudgeArea[i];
	}
	else{
		for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++) TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[i];
		for(int i=1;i<=4;i++)
		if(Player[SeatNumber].EquipmentExist[i]==1) TableCard[++TableCardNumber]=Player[SeatNumber].Equipment[i];
		for(int i=1;i<=Player[SeatNumber].JudgeCardNumber;i++) TableCard[++TableCardNumber]=Player[SeatNumber].JudgeArea[i];
	}
	ClearTable();
	Dead[SeatNumber]=1;
	Across[SeatNumber]=0;
	Player[SeatNumber].WarriorCard.Back=0;
	OnField[Player[SeatNumber].WarriorCard.Number]=0;
	DeadPeopleNumber++;
	IdentityNumber[Player[SeatNumber].Identity]--;//死亡计数
	Player[SeatNumber].HandCardNumber=0;
	Player[SeatNumber].JudgeCardNumber=0;
	memset(Player[SeatNumber].EquipmentExist,0,sizeof(Player[SeatNumber].EquipmentExist));
	memset(Player[SeatNumber].JudgeCardExist,0,sizeof(Player[SeatNumber].JudgeCardExist));
	CalDistance();
	if(Player[SeatNumber].Identity==1) printf("%d-%s阵亡,身份是主公\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);//主公阵亡
	if(Player[SeatNumber].Identity==2) printf("%d-%s阵亡,身份是忠臣\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);//忠臣阵亡
	if(Player[SeatNumber].Identity==3) printf("%d-%s阵亡,身份是内奸\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);//内奸阵亡
	if(Player[SeatNumber].Identity==4) printf("%d-%s阵亡,身份是反贼\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);//反贼阵亡
}
void Die(Damageinfo damage,int ToNumber){//某人阵亡
	DeadDisposed(ToNumber);//阵亡处理
	JudgeOver();//考虑游戏是否结束
	if(Player[ToNumber].Identity==4) GiveGameCardTo(damage.FromMember,3);//杀反贼--摸三张牌
	if(Player[ToNumber].Identity==2&&Player[damage.FromMember].Identity==1){//主杀忠-弃掉所有牌
		for(int i=1;i<=Player[damage.FromMember].HandCardNumber;i++) TableCard[++TableCardNumber]=Player[damage.FromMember].HandCard[i];
		for(int i=1;i<=4;i++)
		if(Player[damage.FromMember].EquipmentExist[i]==1){
			TableCard[++TableCardNumber]=Player[damage.FromMember].Equipment[i];
			Player[damage.FromMember].EquipmentExist[i]=0;
		}
		ClearTable();
	}
	//考虑身份
}
int NervousRescue(int SeatNumber){//华佗--急救
	printf("%d-%s,请您使用一张红色牌当做桃打出\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n");
	ShowOnesAllRedCard(SeatNumber);
	int Option;
	scanf("%d",&Option);
	return Option;
} 
int CyanPack(int SeatNumber){//华佗--青囊
 	printf("%d-%s,请您使用一张手牌当做桃使用\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
 	printf("0-取消\n");
 	ShowOnesHandCard(SeatNumber);
 	int Option;
 	scanf("%d",&Option);
 	return Option;
}
bool AskPeachOrWine(int SeatNumber){//自己打出一个桃或者酒
	printf("%d-%s,您处于濒死状态,请你打出%d个【桃】或者【酒】\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,-Player[SeatNumber].BloodNow+1);
	if(Player[SeatNumber].WarriorCard.Number==49){//于吉--蛊惑
	//蛊惑失败可以继续蛊惑,如果主动放弃蛊惑则不可以再本次求桃过程中再使用
	}
	if(Player[SeatNumber].WarriorCard.Number==55){//华佗
		if(Player[MemberNow].WarriorCard.Number!=55){//回合外--急救
			printf("%d-%s,请问您是否发动急救? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
			int Option;
			scanf("%d",&Option);
			if(Option==1){
				Option=NervousRescue(SeatNumber);
				if(Option){
					TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
					OneLoseCard(SeatNumber,Option);
					return true;
				}
			}
		}
		else{//回合内--青囊 
			if(CyanPackChance){
				printf("%d-%s,请问您是否发动青囊? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
				int Option;
				scanf("%d",&Option);
				if(Option==1){
					Option=CyanPack(SeatNumber);
					if(Option){
						TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
						OneLoseCard(SeatNumber,Option);
						CyanPackChance=0; 
						return true;
					}
				} 
			}
		}
	}
	//神赵云--龙魂 
	printf("0-取消\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++){
		if(Player[SeatNumber].HandCard[i].Type==5||Player[SeatNumber].HandCard[i].Type==6){
			printf("%d-",i);
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return false;
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	return true;
}
bool AskPeach(int SeatNumber,int ToNumber){//帮别人打出一个桃
	printf("%d-%s处于濒死状态,请%d-%s(你)打出%d个【桃】\n",ToNumber,Player[ToNumber].WarriorCard.Name,SeatNumber,Player[SeatNumber].WarriorCard.Name,-Player[ToNumber].BloodNow+1);
	if(Player[SeatNumber].WarriorCard.Number==49){//于吉--蛊惑
	}
	if(Player[SeatNumber].WarriorCard.Number==55){//华佗
		if(Player[MemberNow].WarriorCard.Number!=55){//回合外--急救
			printf("%d-%s,请问您是否发动急救? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
			int Option;
			scanf("%d",&Option);
			if(Option==1){
				Option=NervousRescue(SeatNumber);
				if(Option){
					TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
					OneLoseCard(SeatNumber,Option);
					return true;
				}
			}
		}
		else{//回合内--青囊 
			if(CyanPackChance){
				printf("%d-%s,请问您是否发动青囊? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
				int Option;
				scanf("%d",&Option);
				if(Option==1){
					Option=CyanPack(SeatNumber);
					if(Option){
						TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
						OneLoseCard(SeatNumber,Option);
						CyanPackChance=0; 
						return true;
					}
				} 
			}
		}
	}
	//神赵云--龙魂 
	printf("0-取消\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(Player[SeatNumber].HandCard[i].Type==5){
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return false;
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	return true;
}
bool Rescue(int SeatNumber){//孙权--救援 
	if(Player[SeatNumber].Nation==3) return true;
	else return false;
}
void Dying(Damageinfo damage,int SeatNumber){//濒死状态
	if(Player[SeatNumber].WarriorCard.Number==47){//周泰--不屈	
	}
	int id=damage.FromMember;
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i!=1) id++;
		if(id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(id==SeatNumber){
			if(Player[SeatNumber].WarriorCard.Number==18){;//庞统--涅槃
			} 
			while(1){
				if(AskPeachOrWine(SeatNumber)==true){
					Player[SeatNumber].BloodNow++;
					if(Player[SeatNumber].BloodNow>=1) return;
				} 
				else break;
			}
		}
		else{
			if(Player[MemberNow].WarriorCard.Number==50) continue;//贾诩--完杀
			while(1){
				if(AskPeach(id,SeatNumber)==true){
					Player[SeatNumber].BloodNow++;
					if(Player[SeatNumber].WarriorCard.Number==5&&SeatNumber==1) if(Rescue(id)==true) Player[SeatNumber].BloodNow++;//孙权--救援
					if(Player[SeatNumber].BloodNow>=1) return;
				}
				else break;
			}
		}
	}
	if(Player[SeatNumber].BloodNow<=0) Die(damage,SeatNumber);//死亡
	return;
}
void BloodRun(int SeatNumber,int Number){//体力流失 
	Player[SeatNumber].BloodNow-=Number;
	Damageinfo damage;
	damage.FromMember=SeatNumber;
	if(Player[SeatNumber].BloodNow<=0) Dying(damage,SeatNumber);
}
void Damage(Damageinfo damage,int SeatNumber,bool skyfume){
	if(Across[SeatNumber]&&damage.Attribute>=2){//铁索连环
		int Chain[13];
		int len=0;
		int id=SeatNumber;
		for(int i=1;i<=TotalPeopleNumber;i++){
			if(i!=1) id++;
			if(id>TotalPeopleNumber) id=1;
			if(Dead[id]) continue; 
			if(Across[id]){
				Chain[++len]=id;
				Across[id]=0;
			}
		}
		for(int i=1;i<=len;i++){
			if(Dead[Chain[i]]) continue;
			Damage(damage,Chain[i],0);
		}
		return;
	}	
	//神诸葛亮--狂风
	//神诸葛亮--大雾 
	if(Player[SeatNumber].EquipmentExist[2]==1&&Player[SeatNumber].Equipment[2].Type==35){//白银狮子
		if(damage.Number>=2) damage.Number=1;
	}
	if(Player[SeatNumber].EquipmentExist[2]==1&&Player[SeatNumber].Equipment[2].Type==36){//藤甲
		if(damage.Attribute==2){
			if(damage.Type>3||!BronzeSword(damage.FromMember)){
				printf("藤甲触发,伤害+1");
				damage.Number++;
			}
		}
	} 
	if(Player[SeatNumber].WarriorCard.Number==48) if(SkyPerfume(damage,SeatNumber)==true) return;//小乔--天香
	Player[SeatNumber].BloodNow-=damage.Number;
	if(Player[SeatNumber].BloodNow<=0) Dying(damage,SeatNumber);//濒死状态
	if(Dead[SeatNumber]) return;
	if(skyfume==1) GiveGameCardTo(SeatNumber,Player[SeatNumber].BloodCeiling-Player[SeatNumber].BloodNow);//天香摸牌
	if(Player[SeatNumber].WarriorCard.Number==29) HeritagePlan(damage,SeatNumber);//郭嘉--遗计
	if(Player[SeatNumber].WarriorCard.Number==30) StrikeBack(damage,SeatNumber);//司马懿--反馈
	if(Player[SeatNumber].WarriorCard.Number==3) EvilHero(damage,SeatNumber);//曹操--奸雄
	if(Player[SeatNumber].WarriorCard.Number==26) IronTemper(damage,SeatNumber);//夏侯惇--刚烈
	if(Player[SeatNumber].WarriorCard.Number==24);//荀彧--节命
	if(Player[SeatNumber].WarriorCard.Number==52);//蔡文姬--悲歌
	if(Player[SeatNumber].WarriorCard.Number==4);//曹丕--放逐
	if(Player[damage.FromMember].WarriorCard.Number==20&&damage.Type<=3) SharpestBlade(damage.FromMember,SeatNumber);//祝融--烈刃
}
void BrilliantPosture(int SeatNumber){//触发周瑜--英姿 觉醒孙策--英姿 
	GiveGameCardTo(SeatNumber,1);
}
void BrilliantSoul(int SeatNumber){//孙坚--英魂 觉醒孙策--英魂

}
void LightStrike(int SeatNumber){//张角--雷击
	printf("%d-%s,你是否发动雷击?1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	printf("%d-%s,请您选择雷击的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消发动\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++)
	{
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option1;
	scanf("%d",&Option1);
	if(Option1==0) return;
	Judge(SeatNumber);
	if(JudgeCard.Color==3)
	{
		printf("雷击生效\n");
		Damageinfo damage;
		damage.Attribute=3;
		damage.Type=SK+4;
		damage.Number=2;
		damage.FromMember=SeatNumber;
		damage.FromCardNumber=0;
		Damage(damage,Option1,0);
	}
	TableCard[++TableCardNumber]=JudgeCard;
}
void YellowSky(int SeatNumber)
{
	printf("%d-%s,请您将一张闪或者闪电交给%d-%s\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,OnField[7],Player[OnField[7]].WarriorCard.Name);
	printf("0-取消发动\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	{
		if(Player[SeatNumber].HandCard[i].Type==4||Player[SeatNumber].HandCard[i].Type==21)
		{
			printf("%d-",i);
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	YellowSkyChance--;
	Player[OnField[7]].HandCard[++Player[OnField[7]].HandCardNumber]=OnesCard(SeatNumber,Option);
	OneLoseCard(SeatNumber,Option);
}
void SkyJustice(){//太史慈--天义
	
} 
bool Naked(int SeatNumber){//询问许褚--裸衣
	printf("%d-%s,请问您是否发动裸衣? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return false;
	GiveGameCardTo(SeatNumber,1);
	naked=true;
	return true;
}
bool SuddenStrike(int SeatNumber){//询问张辽--突袭(待升级)
	int ExistHandCard=0;
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(!Player[i].HandCardNumber) continue;
		ExistHandCard++;
	}
	if(ExistHandCard==0) return false;
	int Option;
	printf("%d-%s,请问您是否发动突袭? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	scanf("%d",&Option);
	if(Option==2) return false;
	int Aim1;
	int Aim2;
	printf("%d-%s,请您选择突袭的第一名目标: \n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		if(!Player[i].HandCardNumber) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	scanf("%d",&Aim1);
	printf("%d-%s,请您选择突袭的第二名目标: \n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==Aim1) continue;
		if(i==SeatNumber) continue;
		if(!Player[i].HandCardNumber) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	scanf("%d",&Aim2);
	printf("%d-%s,请您从%d-%s手牌中选择一张卡牌",SeatNumber,Player[SeatNumber].WarriorCard.Name,Aim1,Player[Aim1].WarriorCard.Name);
	ShowOnesHandCardBack(Aim1);
	scanf("%d",&Option);
	Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=Player[Aim1].HandCard[Option];//张辽得到这张牌 
	OneLoseCard(Aim1,Option);
	if(Aim2==0) return true;
	printf("%d-%s,请您从%d-%s手牌中选择一张卡牌",SeatNumber,Player[SeatNumber].WarriorCard.Name,Aim2,Player[Aim2].WarriorCard.Name);
	ShowOnesHandCardBack(Aim2);
	scanf("%d",&Option);
	Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=Player[Aim2].HandCard[Option];
	OneLoseCard(Aim2,Option);
	return true;
}
bool EmptyCity(int SeatNumber){//触发诸葛亮--空城
	if(Player[SeatNumber].HandCardNumber==0) return true;
	else return false;
}
void FocusWisdom(int SeatNumber){//黄月英--集智 
	printf("集智\n"); 
	GiveGameCardTo(SeatNumber,1);
}
int BloodDescend(int SeatNumber){//袁绍--血裔
}
bool OwnRestraint(int SeatNumber){//吕蒙--克己 
	if(KillChance>=1) return true;
	else return false; 
}
int Homeless(int FromNumber,int ToNumber){//大乔--流离(待升级)
	int Number=Player[ToNumber].HandCardNumber;
	for(int i=1;i<=4;i++)
	if(Player[ToNumber].EquipmentExist[i]==1) Number++;
	if(Number==0) return 0;
	printf("%d-%s,请问您是否发动流离? 1-是 2-否\n",ToNumber,Player[ToNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return 0;
	printf("%d-%s,请您弃掉一张牌: \n",ToNumber,Player[ToNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	ShowOnesAllCard(ToNumber);
	scanf("%d",&Option);
	if(Option==0) return 0;
	int Scope=1;
	if(Option!=Player[ToNumber].HandCardNumber+1) Scope=AttackScope(ToNumber);
	printf("%d-%s,请您选择流离的目标: \n",ToNumber,Player[ToNumber].WarriorCard.Name); 
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==FromNumber) continue;
		if(i==ToNumber) continue;
		if(Scope<Player[ToNumber].Aim[i]) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option1;
	scanf("%d",&Option1);
	if(Option1==0) return 0;
	TableCard[++TableCardNumber]=OnesCard(ToNumber,Option);
	OneLoseCard(ToNumber,Option);
	return Option1;
}
void SoulPosture(int SeatNumber){//孙策--魂姿
	if(Player[SeatNumber].BloodNow==1){
		Player[SeatNumber].BloodCeiling--;
		Player[SeatNumber].BloodNow++;
		Player[SeatNumber].WarriorCard.Wakeup=1;
	}
}
void HugeElephant(Damageinfo damage,int SeatNumber){//祝融--巨象 
	for(int i=1;i<=TableCardNumber;i++)
	if(TableCard[i].Number==damage.Card[1]){//如果在桌面上找到了南蛮入侵 
		Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=TableCard[i];
		for(int j=i+1;j<=TableCardNumber;j++)
		TableCard[j-1]=TableCard[j];
		TableCardNumber--;
		return;
	}
}
int UnassailableNumber;//无懈可击数量
bool UnassailableExist[13];
bool ExistUnassailable(){//查看有无懈可击的玩家是否存在
 	memset(UnassailableExist,0,sizeof(UnassailableExist));
 	bool Ask=0;
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		int Number=Player[i].HandCardNumber;
		if(Player[i].WarriorCard.Number==19){//卧龙--看破
			if(Number) Ask=true;
			for(int j=1;j<=4;j++)
			if(Player[i].Equipment[j].Color>=3){
				//Ask=true;
				break;
			}
		}
		if(Player[i].WarriorCard.Number==49){//于吉--蛊惑
			if(Number)
			Ask=true;
		}
		//神赵云--龙魂 
		for(int j=1;j<=Number;j++)
		if(Player[i].HandCard[j].Type==16){	
			Ask=1;
			UnassailableExist[i]=1;
			break;
		}
	}
	return Ask;
}
bool AskUnassailable(){//询问无懈可击
	if(ExistUnassailable())
	{//无懈可击看谁先出 
		for(int i=1;i<=TotalPeopleNumber;i++){
			if(UnassailableExist[i]){
				printf("%d-%s,请问您是否打出无懈可击?\n",i,Player[i].WarriorCard.Name); 
				for(int j=1;j<=Player[i].HandCardNumber;j++)
				if(Player[i].HandCard[j].Type==16){
					printf("%d-",j);
					ShowOneGameCard(Player[i].HandCard[j]);
				}
				int Option;
				printf("0-取消\n");
				scanf("%d",&Option);
				if(Option==0){
					printf("取消打出\n");
				}
				else{
					if(Player[i].WarriorCard.Number==15) FocusWisdom(i);//黄月英--集智 
					TableCard[++TableCardNumber]=Player[i].HandCard[Option];
					OneLoseCard(i,Option);
					if(AskUnassailable()) return 0;
					else return 1;
				}
			}
			if(Player[i].WarriorCard.Number==19){
				printf("%d-%s,请问您是否发动看破,使用一张黑色的牌作为无懈可击打出? 1-是 2-否\n",i,Player[i].WarriorCard.Name);
				int Option;
				if(Option==1){
					printf("%d-%s,请选择一张牌当做无懈可击打出: \n",i,Player[i].WarriorCard.Name);
					printf("0-取消\n"); 
					ShowOnesAllBlackCard(i);
					scanf("%d",&Option);
					if(Option==0) continue;
					TableCard[++TableCardNumber]=OnesCard(i,Option);
					OneLoseCard(i,Option);
					if(AskUnassailable()) return 0;
					else return 1; 
				}
			} 
			if(Player[i].WarriorCard.Number==49){
				printf("您是否发动蛊惑? 1-是 2-否\n");
			}
		}
		return 0;
	}
	else return 0;
}
void EmotionUp(int SeatNumber){//孙策--激昂
	GiveGameCardTo(SeatNumber,1);
}
Damageinfo WuSage(int SeatNumber,int type){//关羽--武圣(待升级) 
	printf("%d-%s,请将一张红色的牌作为杀打出\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	Damageinfo damage;
	damage.FromCardNumber=0;
	int Option;
	printf("0-放弃发动\n");
	ShowOnesRedHandCard(SeatNumber);
	printf("装备牌: \n"); 
	for(int i=1;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]==1){
		if(i==1&&KillChance==0&&type==1) continue;
		if(Player[SeatNumber].Equipment[i].Color>2) continue;
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
	scanf("%d",&Option);
	if(Option==0) return damage;
	damage.Type=1;
	damage.Attribute=1;
	damage.Number=1;
	damage.Color=OnesCard(SeatNumber,Option).Color;
	damage.FromCardNumber=1;
	damage.Card[1]=OnesCard(SeatNumber,Option).Number;
	return damage;
}
Damageinfo DragonBraveKill(int SeatNumber){//赵云--龙胆--闪当杀(待升级)
	printf("%d-%s,请您选一张闪作为杀打出:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	Damageinfo damage;
	damage.FromCardNumber=0;
	int Option;
	printf("0-放弃发动\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(Player[SeatNumber].HandCard[i].Type==4){
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	scanf("%d",&Option);
	if(Option==0) return damage; 
	damage.Type=1;
	damage.Attribute=1;
	damage.Number=1;
	damage.Color=Player[SeatNumber].HandCard[Option].Color;
	damage.FromCardNumber=1;
	damage.Card[1]=Player[SeatNumber].HandCard[Option].Number;
	return damage;
}
Damageinfo AskKill(int SeatNumber);
Damageinfo ExciteSoldier(int SeatNumber){//刘备、刘禅--激将
	Damageinfo damage;
	damage.FromCardNumber=0;
	int id=SeatNumber;
	for(int i=1;i<TotalPeopleNumber;i++){
		if(++id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[id].Nation!=1) continue;
		Damageinfo damage=AskKill(id);
		if(damage.FromCardNumber) return damage;
	}
	return damage;
}
Damageinfo EightSpear(int SeatNumber){//丈八蛇矛(待升级) 
	Damageinfo damage;
	damage.FromCardNumber=0;
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=2;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]) Number++;
	if(Number<2) return damage;
	printf("%d-%s,请您选择第一张牌:",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	Number=Player[SeatNumber].HandCardNumber;
	printf("0-取消\n"); 
	ShowOnesHandCard(SeatNumber);
	for(int i=2;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]){	
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
	int Option1;
	scanf("%d",&Option1);
	if(Option1==0) return damage;
	printf("%d-%s,请您选择第二张牌:",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	Number=Player[SeatNumber].HandCardNumber;
	printf("0-取消\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(i!=Option1) ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	for(int i=2;i<=4;i++)
	if(Player[SeatNumber].EquipmentExist[i]){	
		printf("%d-",i+Number);
		ShowOneGameCard(Player[SeatNumber].Equipment[i]);
	}
	int Option2;
	scanf("%d",&Option2);
	if(Option2==0) return damage;
	int color;
	int color1=Player[SeatNumber].HandCard[Option1].Color;
	int color2=Player[SeatNumber].HandCard[Option2].Color;
	int number1=Player[SeatNumber].HandCard[Option1].Number;
	int number2=Player[SeatNumber].HandCard[Option2].Number;
	if(color1>=3&&color2>=3) color=3;
	else if(color1<=2&&color2<=2) color=1;
	else color=0;
	damage.Type=1;
	damage.Attribute=1;
	damage.Number=1;
	damage.Color=color;
	damage.FromCardNumber=2;
	damage.Card[1]=number1;
	damage.Card[2]=number2;
	if(Player[SeatNumber].WarriorCard.Number==6)//孙策--激昂
	if(damage.Color==1) EmotionUp(SeatNumber);
	return damage;
}
Damageinfo AskKill(int SeatNumber){//请求杀 南蛮入侵、决斗无需知道杀的伤害来源 借刀杀人、主动激将、青龙偃月刀需要知道杀的伤害来源和伤害类型,其中伤害来源在发起函数中设置 无需伤害来源只需要提供杀的信息 
	printf("%d-%s,请您打出一张杀\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	Damageinfo damage;
	damage.FromCardNumber=0; 
	int Option;
	if(Player[SeatNumber].WarriorCard.Number==10){//关羽--武圣
		printf("%d-%s,请问您是否发动武圣,将红色的牌作为杀打出: 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		scanf("%d",&Option);
		if(Option==1){
			damage=WuSage(SeatNumber,0);
			if(damage.FromCardNumber){
				OneLoseNumber(SeatNumber,damage.Card[1]);
				damage.FromMember=SeatNumber;
				return damage;
			}
		}
	}
	if(Player[SeatNumber].WarriorCard.Number==13){//赵云--龙胆--闪当杀
		printf("%d-%s,请问您是否发动龙胆,将闪当做杀打出: 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		scanf("%d",&Option);
		if(Option==1){
			damage=DragonBraveKill(SeatNumber);
			if(damage.FromCardNumber){
				OneLoseNumber(SeatNumber,damage.Card[1]);
				damage.FromMember=SeatNumber;
				return damage;
			}
		}
	}
	//于吉--蛊惑
	//神赵云--龙魂 
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[1].Type==27){//丈八蛇矛
		printf("%d-%s,请问您是否发动丈八蛇矛,将两张牌当做杀打出? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		scanf("%d",&Option);
		if(Option==1){
			damage=EightSpear(SeatNumber);
			if(damage.FromCardNumber)
				OneLoseNumber(SeatNumber,damage.Card[1]);
				OneLoseNumber(SeatNumber,damage.Card[2]);
				damage.FromMember=SeatNumber;
				return damage;
		}
	}
	if(Player[SeatNumber].WarriorCard.Number==1&&SeatNumber==1){//刘备--激将
		printf("%d-%s,请问您是否发动激将,让蜀势力角色替你打出一张杀? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		scanf("%d",&Option);
		if(Option==1){
			damage=ExciteSoldier(SeatNumber);
			if(damage.FromCardNumber){
				damage.FromMember=SeatNumber; 
				return damage;
			}
		}
	}
	if(Player[SeatNumber].WarriorCard.Number==2&&Player[SeatNumber].WarriorCard.Wakeup==1&&SeatNumber==1){//刘禅--激将
		printf("%d-%s,请问您是否发动激将,让蜀势力角色替你打出一张杀? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		scanf("%d",&Option);
		if(Option==1){
			damage=ExciteSoldier(SeatNumber);
			if(damage.FromCardNumber){
				damage.FromMember=SeatNumber; 
				return damage;
			}
		}
	}
	printf("%d-%s,请您从手牌中打出一张杀\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消出杀\n");
	for(int i=1;i<=Player[SeatNumber].HandCardNumber;i++)
	if(Player[SeatNumber].HandCard[i].Type<=3){//显示杀
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	scanf("%d",&Option);
	if(Option==0) return damage;
	damage.Type=Player[SeatNumber].HandCard[Option].Type;
	damage.Attribute=Player[SeatNumber].HandCard[Option].Type;
	damage.Number=1;
	damage.Color=Player[SeatNumber].HandCard[Option].Color;
	damage.FromMember=SeatNumber;
	damage.Card[1]=Player[SeatNumber].HandCard[Option].Number;
	damage.FromCardNumber=1;
	if(Player[SeatNumber].WarriorCard.Number==6)//孙策--激昂
	if(damage.Color<=2) EmotionUp(SeatNumber);
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	return damage; 
}
void KirinBow(int SeatNumber,int ToNumber){//麒麟弓
	if(Player[ToNumber].EquipmentExist[3]==0&&Player[ToNumber].EquipmentExist[4]==0) return;
	printf("%d-%s,请问您是否发动麒麟弓? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	else{
		int Number=Player[ToNumber].HandCardNumber;
		if(Player[ToNumber].EquipmentExist[3]==1){
			printf("%d-",Number+3);
			ShowOneGameCard(Player[ToNumber].Equipment[3]);
		}
		if(Player[ToNumber].EquipmentExist[4]==1){
			printf("%d-",Number+4);
			ShowOneGameCard(Player[ToNumber].Equipment[4]);
		}
		scanf("%d",&Option);
		TableCard[++TableCardNumber]=Player[ToNumber].Equipment[Option-Number];
		OneLoseCard(ToNumber,Option);
	} 
}
bool IceSword(int FromNumber,int ToNumber){//寒冰剑(待升级) 
	if(!AllCardNumber(ToNumber)) return false;
	printf("%d-%s,请问您是否发动寒冰剑? 1-是 2-否\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return false;
	printf("%d-%s,请您选择第一张弃掉的牌:",FromNumber,Player[FromNumber].WarriorCard.Name);
	ShowOnesAllCardBack(ToNumber);
	scanf("%d",&Option);
	TableCard[++TableCardNumber]=OnesCard(ToNumber,Option);
	OneLoseCard(ToNumber,Option);
	int Number=Player[ToNumber].HandCardNumber;
	for(int i=1;i<=4;i++)
	if(Player[ToNumber].EquipmentExist[i]) Number++;
	if(Number==0) return true;
	printf("%d-%s,请您选择第二张弃掉的牌\n",FromNumber,Player[FromNumber].WarriorCard.Name); 
	printf("0-取消\n");
	ShowOnesAllCardBack(ToNumber);
	scanf("%d",&Option);
	TableCard[++TableCardNumber]=OnesCard(ToNumber,Option);
	OneLoseCard(ToNumber,Option);
	return true;
}
void KillDamage(Damageinfo damage,int ToNumber){//杀造成的伤害
	if(Player[damage.FromMember].EquipmentExist[1]==1){//考虑武器 
		if(Player[damage.FromMember].Equipment[1].Type==29)
		KirinBow(damage.FromMember,ToNumber);//麒麟弓--卸马
		if(Player[damage.FromMember].Equipment[1].Type==30)
		if(IceSword(damage.FromMember,ToNumber)==1) return;//寒冰剑--弃牌
		if(Player[damage.FromMember].Equipment[1].Type==32)
		if(Player[ToNumber].HandCardNumber==0){
			printf("古锭刀\n"); 
			damage.Number++;//古锭刀
		} 
	}
	if(Player[damage.FromMember].Wine==2){//酒--伤害+1
		damage.Number++;
		Player[damage.FromMember].Wine=1;
	}
	if(Player[damage.FromMember].WarriorCard.Number==28&&naked==1) damage.Number++;//许褚--裸衣
	Damage(damage,ToNumber,0);
}
void InertiaZax(Damageinfo damage,int ToNumber){//贯石斧(待升级) 
	printf("%d-%s,请问你是否发动贯石斧? 1-是 2-否\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	printf("%d-%s,请弃掉两张牌:\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name);
	int Number;
	Number=Player[damage.FromMember].HandCardNumber;
	printf("%d-%s,请您弃掉第一张牌:\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name);
	printf("0-取消");
	ShowOnesHandCard(damage.FromMember);
	for(int i=2;i<=4;i++)
	if(Player[damage.FromMember].EquipmentExist[i]==1){
		printf("%d-",i+Number);
		ShowOneGameCard(Player[damage.FromMember].Equipment[i]);
	}
	int FirstCard;
	scanf("%d",&FirstCard);
	if(FirstCard==0) return;
	TableCard[++TableCardNumber]=OnesCard(damage.FromMember,FirstCard);
	OneLoseCard(damage.FromMember,FirstCard);
	Number=Player[damage.FromMember].HandCardNumber;
	printf("%d-%s,请您弃掉第二张牌:\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name);
	printf("0-取消\n");
	ShowOnesHandCard(damage.FromMember);
	for(int i=2;i<=4;i++)
	if(Player[damage.FromMember].EquipmentExist[i]==1){
		printf("%d-",i+Number);
		ShowOneGameCard(Player[damage.FromMember].Equipment[i]);
	}
	int SecondCard;
	scanf("%d",&SecondCard);
	if(SecondCard==0) return;
	TableCard[++TableCardNumber]=OnesCard(damage.FromMember,SecondCard);
	OneLoseCard(damage.FromMember,SecondCard);
	KillDamage(damage,ToNumber);
	return;
}
void Kill(Damageinfo damage,int ToNumber);
void CyanDragonBlade(int FromNumber,int ToNumber){//青龙偃月刀
	printf("%d-%s,请问您是否发动青龙偃月刀? 1-是 2-否\n",FromNumber,Player[FromNumber].WarriorCard.Name); 
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	Damageinfo damage=AskKill(FromNumber);
	if(damage.FromCardNumber){
		damage.FromMember=FromNumber;
		Kill(damage,ToNumber);
	}
	return; 
}
void GodJealous(int SeatNumber){//触发郭嘉--天妒
	Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=JudgeCard;//郭嘉--天妒 获得判定牌
}
int EnjoyLife(int SeatNumber){//刘禅--享乐(待升级)
	printf("刘禅发动了享乐,%d-%s,您需要弃掉一张基本牌使该杀生效\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++){
		GameCard HandCard=Player[SeatNumber].HandCard[i];
		if(HandCard.Type<=6){
			printf("%d-",i);
			ShowOneGameCard(HandCard);
		}
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return true;//享乐生效-杀无效 
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	return false;
}
bool LeanStage(int SeatNumber){//甄姬--倾国(待升级)
	printf("%d-%s,您是否发动倾国? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return 0;
	printf("0-放弃发动\n");
	ShowOnesBlackHandCard(SeatNumber);
	scanf("%d",&Option);
	if(Option==0) return 0;
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	return 1;
}
bool DragonBraveFlash(int SeatNumber){//赵云--龙胆--杀当闪(待升级) 
	printf("%d-%s,您是否发动龙胆? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return 0;
	printf("%d-%s,请你选择一张杀当做闪打出(龙胆):\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-放弃发动\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++)
	if(Player[SeatNumber].HandCard[i].Type<=3){
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	scanf("%d",&Option);
	if(Option==0) return 0;
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	return 1;
}
bool EightDiagram(int SeatNumber){//八卦阵 
	printf("%d-%s,请问您发动八卦阵? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return false;
	if(Player[SeatNumber].WarriorCard.Number==7) ZhangJiaosEightDiagramIsGoingOn=true;
	printf("八卦阵结果:\n");
	Judge(SeatNumber);
	int color=JudgeCard.Color;
	if(Player[SeatNumber].WarriorCard.Number==48&&color==3) color=1;//小乔--红颜 
	if(color<=2){
		printf("八卦阵生效\n");
		if(Player[SeatNumber].WarriorCard.Number==7) ZhangJiaosEightDiagramIsGoingOn=false;
		if(Player[SeatNumber].WarriorCard.Number==29) GodJealous(SeatNumber);//郭嘉--天妒拿走判定牌 
		else TableCard[++TableCardNumber]=JudgeCard;//将判定牌放入桌面
		if(Player[SeatNumber].WarriorCard.Number==7) LightStrike(SeatNumber);//张角--雷击
		return true;
	}
	else{ 
		printf("八卦阵失效\n");
		if(Player[SeatNumber].WarriorCard.Number==7) ZhangJiaosEightDiagramIsGoingOn=false;
		if(Player[SeatNumber].WarriorCard.Number==29) GodJealous(SeatNumber);//郭嘉--天妒拿走判定牌 
		else TableCard[++TableCardNumber]=JudgeCard;//将判定牌放入桌面 
		return false;
	}
}
bool AskFlash(Damageinfo damage,int SeatNumber);
bool ProtectEmperor(int SeatNumber){//曹操--护驾
	printf("%d-%s,请问您是否发动护驾? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return false;
	int id=SeatNumber;
	for(int i=1;i<TotalPeopleNumber;i++){
		if(++id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[id].Nation!=2) continue;
		Damageinfo damage;
		damage.FromMember=0;
		if(AskFlash(damage,id)==1)
		return true;
	}
	return false;
}
bool AskFlash(Damageinfo damage,int SeatNumber){//请求闪
	printf("%d-%s,请您打出一张闪:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	if(Player[SeatNumber].EquipmentExist[2]==1&&Player[SeatNumber].Equipment[2].Type==33)//八卦阵
	if(damage.Type>3||!BronzeSword(damage.FromMember))
	if(EightDiagram(SeatNumber)==1) return 1;
	if(Player[SeatNumber].EquipmentExist[2]==0&&Player[SeatNumber].WarriorCard.Number==19)//卧龙诸葛亮--八阵
	if(damage.Type>3||!BronzeSword(damage.FromMember))
	if(EightDiagram(SeatNumber)==1) return 1;
	if(Player[SeatNumber].WarriorCard.Number==31)//甄姬--倾国
	if(LeanStage(SeatNumber)==1) return 1;
	if(Player[SeatNumber].WarriorCard.Number==3&&SeatNumber==1)//曹操--护驾
	if(ProtectEmperor(SeatNumber)==1) return 1;
	if(Player[SeatNumber].WarriorCard.Number==13)//赵云--龙胆
	if(DragonBraveFlash(SeatNumber)==1) return 1;
	printf("%d-%s,请您从手牌中打出一张闪\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-取消\n");
	int Number=Player[SeatNumber].HandCardNumber;
	for(int i=1;i<=Number;i++)
	if(Player[SeatNumber].HandCard[i].Type==4){//显示闪 
		printf("%d-",i);
		ShowOneGameCard(Player[SeatNumber].HandCard[i]);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return 0;
	TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
	OneLoseCard(SeatNumber,Option);
	if(Player[SeatNumber].WarriorCard.Number==7) LightStrike(SeatNumber);//张角--雷击
	return 1;
}
void TwoSexSword(int FromNumber,int ToNumber){//雌雄双股剑(待升级)
	printf("%d-%s,请问您是否发动雌雄双股剑? 1-是 2-否\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return; 
	printf("%d-%s,请您选择下列一项\n",ToNumber,Player[ToNumber].WarriorCard.Name);
	if(Player[ToNumber].HandCardNumber) printf("1-弃掉自己一张手牌 ");
	printf("2-让对方%d-%s摸一张牌\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	scanf("%d",&Option);
	if(Option==1){
		printf("%d-%s,请您弃掉自己一张牌:\n",ToNumber,Player[ToNumber].WarriorCard.Name);
		ShowOnesHandCard(ToNumber);
		scanf("%d",&Option);
		TableCard[++TableCardNumber]=Player[ToNumber].HandCard[Option];
		OneLoseCard(ToNumber,Option);
	}
	else GiveGameCardTo(FromNumber,1);
}
bool IronHorse(int FromNumber){//马超--铁骑 
	printf("%d-%s,请问您是否发动铁骑? 1-是 2-否\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return false;
	Judge(FromNumber);
	if(JudgeCard.Color<=2){
		printf("铁骑生效\n");
		TableCard[++TableCardNumber]=JudgeCard;//将判定牌放入桌面
		return true;
	}
	else{
		printf("铁骑失效\n");
		TableCard[++TableCardNumber]=JudgeCard;//将判定牌放入桌面
		return false;
	}
}
bool ViolentBow(int FromNumber,int ToNumber){//黄忠--烈弓
	int Scope=AttackScope(FromNumber);
	int Number=Player[ToNumber].HandCardNumber;
	if(Number>=Player[FromNumber].BloodNow||Number<=Scope){
		printf("%d-%s,请问您是否发动烈弓? 1-是 2-否\n",FromNumber,Player[FromNumber].WarriorCard.Name);
		int Option;
		scanf("%d",&Option);
		if(Option==1){
			printf("烈弓\n");
			return true;
		}
		else return false;
	}
	else return false;
}
void AskFlashSuccess(Damageinfo damage,int ToNumber){//武器--青龙偃月刀和贯石斧--咨询
	if(Player[damage.FromMember].EquipmentExist[1]==1&&Player[damage.FromMember].Equipment[1].Type==25) InertiaZax(damage,ToNumber);//贯石斧
	if(Player[damage.FromMember].EquipmentExist[1]==1&&Player[damage.FromMember].Equipment[1].Type==26) CyanDragonBlade(damage.FromMember,ToNumber);//青龙偃月刀
	//庞德--猛进
	return;
}
void ChooseMarryAim(int SeatNumber){//选择结姻目标 
	printf("0-取消发动\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		if(Player[i].Sex==1) continue;
		if(Player[i].BloodNow==Player[i].BloodCeiling) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return;
}
void ChooseAlienateAim(int SeatNumber){//貂蝉--离间选择目标 
	printf("%d-%s,请你选择离间的第一个目标\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消发动\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i==SeatNumber) continue;
		if(Dead[i]) continue;
		if(Player[i].Sex==1) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	printf("%d-%s,请你选择离间的第二个目标\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消发动\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i==SeatNumber) continue;
		if(Dead[i]) continue;
		if(i==Aim[1]) continue;
		if(Player[i].Sex==1) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return;
}
void ChooseCyanPackAim(int SeatNumber){//选择青囊目标 
	 printf("%d-%s,请选择你青囊的目标\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	 printf("0-取消发动\n");
	 for(int i=1;i<=TotalPeopleNumber;i++){
	 	if(Dead[i]) continue;
	 	if(Player[i].BloodNow==Player[i].BloodCeiling) continue;
	 	printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	 }
	 int Option;
	 scanf("%d",&Option);
	 if(Option==0) return;
	 Aim[++AimNumber]=Option;
	 return;
}
void ChooseExciteSoldierAim(int SeatNumber){//选择激将的目标 
	printf("%d-%s,请选择您激将的目标\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Scope=AttackScope(SeatNumber);
	int id=SeatNumber;
	printf("0-放弃发动\n");
	for(int i=1;i<TotalPeopleNumber;i++){
		if(++id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[SeatNumber].Aim[id]>Scope) continue;
		printf("%d-%s\n",id,Player[id].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return;
}
void ChooseWuSageAim(int SeatNumber,int Number){//选择武圣目标 
	int Option=OneCardOption(SeatNumber,Number);
	int Scope=1;
	if(Option!=Player[SeatNumber].HandCardNumber+1) Scope=AttackScope(SeatNumber);
	bool FangTianHuaJi=0;
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[1].Type==28&&Player[SeatNumber].HandCardNumber==1&&Option<=Player[SeatNumber].HandCardNumber) FangTianHuaJi=1;
	printf("%d-%s,请选择您武圣发动的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++)
	if(i!=SeatNumber&&!Dead[i]){
		if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
		if(Player[SeatNumber].Aim[i]>Scope) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	if(FangTianHuaJi==1){//第二个目标
		printf("%d-%s,请选择您武圣发动的第二个目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		printf("0-取消\n");
		for(int i=1;i<=TotalPeopleNumber;i++)
		if(i!=SeatNumber&&!Dead[i]&&i!=Aim[1]){
			if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
			if(Player[SeatNumber].Aim[i]>Scope) continue;
			printf("%d-%s\n",i,Player[i].WarriorCard.Name);
		}
		scanf("%d",&Option);
		if(Option==0) return;
		Aim[++AimNumber]=Option;
	
	}
	if(FangTianHuaJi==1){//第三个目标 
		printf("%d-%s,请选择您武圣发动的第三个目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		printf("0-取消\n");
		for(int i=1;i<=TotalPeopleNumber;i++)
		if(i!=SeatNumber&&!Dead[i]&&i!=Aim[1]&&i!=Aim[2]){ 
			if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
			if(Player[SeatNumber].Aim[i]>Scope) continue;
			printf("%d-%s\n",i,Player[i].WarriorCard.Name);
		}
		scanf("%d",&Option);
		if(Option==0) return;
		Aim[++AimNumber]=Option;
	}
	return;
}
void ChooseKillAim(int SeatNumber){//选择杀的目标
	int Scope=AttackScope(SeatNumber);
	bool FangTianHuaJi=0;
	if(Player[SeatNumber].EquipmentExist[1]==1&&Player[SeatNumber].Equipment[1].Type==28&&Player[SeatNumber].HandCardNumber==1) FangTianHuaJi=1;
	printf("%d-%s,请您选择杀的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++)
	if(i!=SeatNumber&&!Dead[i]){
		if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
		if(Player[SeatNumber].Aim[i]<=Scope||skyjustice)
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	if(skyjustice==1||FangTianHuaJi==1){//第二个目标 
		printf("%d-%s,请您选择杀的第2个目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		printf("0-取消\n");
		for(int i=1;i<=TotalPeopleNumber;i++)
		if(i!=SeatNumber&&!Dead[i]&&i!=Aim[1]){
			if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
			if(Player[SeatNumber].Aim[i]<=Scope||skyjustice)
			printf("%d-%s\n",i,Player[i].WarriorCard.Name);
		}
		scanf("%d",&Option);
		if(Option==0) return;
		Aim[++AimNumber]=Option;
	
	}
	if(FangTianHuaJi==1){//第三个目标 
		printf("%d-%s,请您选择杀的第3个目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		printf("0-取消\n");
		for(int i=1;i<=TotalPeopleNumber;i++)
		if(i!=SeatNumber&&!Dead[i]&&i!=Aim[1]&&i!=Aim[2]){ 
			if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
			if(Player[SeatNumber].Aim[i]<=Scope||skyjustice)
			printf("%d-%s\n",i,Player[i].WarriorCard.Name);
		}
		scanf("%d",&Option);
		if(Option==0) return;
		Aim[++AimNumber]=Option;
	}
	if(FangTianHuaJi==1&&skyjustice==1){//第四个目标 
		printf("%d-%s,请您选择杀的第4个目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		printf("0-取消\n");
		for(int i=1;i<=TotalPeopleNumber;i++)
		if(i!=SeatNumber&&!Dead[i]&&i!=Aim[1]&&i!=Aim[2]&&i!=Aim[3]){ 
			if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
			if(Player[SeatNumber].Aim[i]<=Scope||skyjustice)
			printf("%d-%s\n",i,Player[i].WarriorCard.Name);
		}
		scanf("%d",&Option);
		if(Option==0) return;
		Aim[++AimNumber]=Option;
	}
	return;
}
void ChooseDuelAim(int SeatNumber,int Color){//选择决斗目标
	printf("%d-%s,请您选择决斗的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-取消\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i==SeatNumber) continue;
		if(Dead[i]) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕 
		if(Player[i].WarriorCard.Number==12&&EmptyCity(i)) continue;//诸葛亮--空城
		printf("%d-%s\n",i,Player[i].WarriorCard.Name); 
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
}
void ChooseWreckBridgeAim(int SeatNumber,int Color){//选择过河拆桥目标 
	printf("%d-%s,请您选择过河拆桥的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++)
	if(!Dead[i]&&i!=SeatNumber){
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕 
		int Number=Player[i].HandCardNumber;
		for(int j=1;j<=4;j++)
		if(Player[i].EquipmentExist[j]==1) Number++;
		Number+=Player[i].JudgeCardNumber;
		if(Number==0) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return;
}
void ChooseStealSheepAim(int SeatNumber,int Color){//选择顺手牵羊目标 
	printf("%d-%s,请您选择顺手牵羊的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++)
	if(!Dead[i]&&i!=SeatNumber){
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		if(Player[i].WarriorCard.Number==39) continue;//陆逊--谦逊 
		int Number=Player[i].HandCardNumber;
		for(int j=1;j<=4;j++)
		if(Player[i].EquipmentExist[j]==1) Number++;
		Number+=Player[i].JudgeCardNumber;
		if(Number==0) continue;
		if(Player[SeatNumber].Aim[i]<=1||Player[SeatNumber].WarriorCard.Number==15)//黄月英--奇才 
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return;
}
void ChooseFireAttackAim(int SeatNumber,int Color){//选择火攻目标 
	printf("%d-%s,请您选择火攻的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕 
		int Number=Player[i].HandCardNumber;
		if(i==SeatNumber) Number--;
		if(Number==0) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return; 
}
void ChooseBorrowKnifeAim(int SeatNumber,int Color){//选择借刀杀人目标
	printf("%d-%s,请您选择借刀杀人的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕 
		if(!Player[i].EquipmentExist[1]) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	printf("%d-%s,请您选择该目标杀的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	int Scope=AttackScope(Option);
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==Option) continue;
		if(Player[i].WarriorCard.Number==12&&EmptyCity(i)==1) continue;//诸葛亮--空城
		if(i==Aim[1]) continue;
		if(Player[Option].Aim[i]>Scope) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option1;
	scanf("%d",&Option1);
	if(Option1==0) return;
	Aim[++AimNumber]=Option;
	Aim[++AimNumber]=Option1;
	return;
}
void ChooseForgetShuAim(int SeatNumber,int Color){//选择乐不思蜀目标
	printf("%d-%s,请您选择乐不思蜀的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		if(Player[i].JudgeCardExist[1]==1) continue;//已经有乐不思蜀 
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return; 
}
void ChooseNoGrainNoSoldierAim(int SeatNumber,int Color){//选择兵粮寸断目标 
	printf("%d-%s,请您选择兵粮寸断的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		if(Player[i].JudgeCardExist[2]==1) continue;//已经有兵粮寸断
		if(Player[SeatNumber].Aim[i]<=1||Player[SeatNumber].WarriorCard.Number==15)//黄月英--奇才 
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return; 
}
bool Recoin(int SeatNumber){//铁索连环--重铸询问 
	printf("%d-%s,请问您是否选择重铸?1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==1) return 1;
	else return 0;
}
void ChooseIronChainAim(int SeatNumber,int Color){//选择铁索连环目标
	printf("%d-%s,请您选择第一个铁索连环的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		printf("%d-%s\n",i,Player[i].WarriorCard.Name); 
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	printf("%d-%s,请您选择第二个铁索连环的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name); 
	printf("0-取消\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		if(i==Aim[1]) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	scanf("%d",&Option);
	if(Option==0) return;
	Aim[++AimNumber]=Option;
	return;
}
void Kill(Damageinfo damage,int ToNumber){//杀
	if(Dead[damage.FromMember]||Dead[ToNumber]) return;
	if(Player[damage.FromMember].WarriorCard.Number==48)//小乔--红颜
	if(damage.Color==3) damage.Color=1;
	if(Player[ToNumber].WarriorCard.Number==6)//孙策--激昂 
	if(damage.Color<=2) EmotionUp(ToNumber);
	if(Player[damage.FromMember].EquipmentExist[1]==1&&Player[damage.FromMember].Equipment[1].Type==31)//朱雀羽扇
	if(damage.Type==1) damage.Attribute=damage.Type=2;
	if(Player[damage.FromMember].EquipmentExist[1]==1&&Player[damage.FromMember].Equipment[1].Type==24)//雌雄双股剑
	if(Player[damage.FromMember].Sex!=Player[ToNumber].Sex) TwoSexSword(damage.FromMember,ToNumber);
	//雌雄双股剑优先级为指定目标后,所以在流离之前
	if(Player[ToNumber].WarriorCard.Number==44){//大乔--流离
		int aim=Homeless(damage.FromMember,ToNumber);
		if(aim) ToNumber=aim;
	}
	if(Player[ToNumber].WarriorCard.Number==2)//刘禅--享乐
	if(EnjoyLife(damage.FromMember)==1) return;
	if(Player[ToNumber].EquipmentExist[2]==1&&Player[ToNumber].Equipment[2].Number==34)//仁王盾
	if(!BronzeSword(damage.FromMember))
	if(damage.Color>=3) return;
	if(Player[ToNumber].EquipmentExist[2]==1&&Player[ToNumber].Equipment[2].Number==36)//藤甲 
	if(!BronzeSword(damage.FromMember))
	if(damage.Type==1) return;
	if(Player[damage.FromMember].WarriorCard.Number==14)//马超--铁骑
	if(IronHorse(damage.FromMember)==true){
		KillDamage(damage,ToNumber);
		return;
	}
	if(Player[damage.FromMember].WarriorCard.Number==17)//黄忠--烈弓
	if(ViolentBow(damage.FromMember,ToNumber)==true){
		KillDamage(damage,ToNumber);
		return;
	}
	if(Player[damage.FromMember].WarriorCard.Number==56){//吕布--无双
		printf("%d-%s发动了无双,请%d-%s(你)依次打出两张闪\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name,ToNumber,Player[ToNumber].WarriorCard.Name); 
		if(AskFlash(damage,ToNumber)==true)
		if(AskFlash(damage,ToNumber)==true){
			AskFlashSuccess(damage,ToNumber);
			return;
		}
	}
	else{//普通杀 
		printf("%d-%s,对%d-%s(你)打出了杀\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name,ToNumber,Player[ToNumber].WarriorCard.Name); 
		if(AskFlash(damage,ToNumber)==true){
			AskFlashSuccess(damage,ToNumber);
			return;
		}
	}
	KillDamage(damage,ToNumber);
}
void Duel(Damageinfo damage,int FromNumber,int ToNumber){//决斗 
	int Side=0;
	printf("%d-%s,%d-%s对你发起了决斗\n",ToNumber,Player[ToNumber].WarriorCard.Name,FromNumber,Player[FromNumber].WarriorCard.Name); 
	while(1){
		Side^=1;
		if(Side==1){
			Damageinfo damage1=AskKill(ToNumber);
			if(damage1.FromCardNumber){
				if(Player[FromNumber].WarriorCard.Number==56){//吕布--无双 
					printf("吕布发动了无双\n");
					Damageinfo damage2=AskKill(ToNumber);
					if(damage2.FromCardNumber) continue;
				}
				else continue;
			}
			if(Player[FromNumber].WarriorCard.Number==28&&naked==1) damage.Number++;//许褚--裸衣
			damage.FromMember=FromNumber;
			Damage(damage,ToNumber,0);
			return;
		}
		else{
			Damageinfo damage1=AskKill(FromNumber);
			if(damage1.FromCardNumber){
				if(Player[ToNumber].WarriorCard.Number==56){//吕布--无双 
					printf("吕布发动了无双\n");
					Damageinfo damage2=AskKill(FromNumber);
					if(damage2.FromCardNumber) continue;
				}
				else continue;
			}
			//if(Player[ToNumber].WarriorCard.Number==28&&naked==1) damage.Number++;//许褚--裸衣(该情况不可能发生,许褚的回合许褚不会成为决斗的目标)
			damage.FromMember=ToNumber;
			Damage(damage,FromNumber,0);
			return;
		}
	}
}
void SouthSavageAttack(Damageinfo damage){//南蛮入侵
	int id=damage.FromMember;
 	for(int i=1;i<TotalPeopleNumber;i++){
 		if(++id>TotalPeopleNumber) id=1;
 		if(Dead[id]) continue;
 		if(Player[id].WarriorCard.Number==20) continue;//祝融--巨象
 		if(Player[id].WarriorCard.Number==21) continue;//孟获--祸首
 		if(Player[id].WarriorCard.Number==50&&damage.Color>=3) continue;//贾诩--帷幕
 		if(Player[id].EquipmentExist[2]==1&&Player[id].Equipment[2].Number==36) continue;//藤甲
 		printf("%d-%s发动了南蛮入侵,请%d-%s打出杀\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name,id,Player[id].WarriorCard.Name);
		if(AskUnassailable()) continue;
 		Damageinfo damagekill=AskKill(id);
 		if(damagekill.FromCardNumber) continue;
 		Damage(damage,id,0);
 	}
 	if(OnField[20]==true) HugeElephant(damage,OnField[20]);
}
void ThousandsArrowsFalling(Damageinfo damage){//万箭齐发
	int id=damage.FromMember;
	for(int i=1;i<TotalPeopleNumber;i++){
		if(++id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[id].WarriorCard.Number==50&&damage.Color>=3) continue;//贾诩--帷幕
		if(Player[id].EquipmentExist[2]==1&&Player[id].Equipment[2].Number==36) continue;//藤甲
		printf("%d-%s发动了万箭齐发,请%d-%s打出闪\n",damage.FromMember,Player[damage.FromMember].WarriorCard.Name,id,Player[id].WarriorCard.Name);
		if(AskUnassailable()) continue;
		if(AskFlash(damage,id)) continue;
		Damage(damage,id,0);
	} 
}
void GrainHarvest(int SeatNumber,int Color){//五谷丰登
	int id=SeatNumber;
	bool GrainExist[13];
	GameCard GrainCard[13];
	int CardNumber=TotalPeopleNumber-DeadPeopleNumber;
	for(int i=1;i<=CardNumber;i++){
		GrainCard[i]=TakeOneGameCard();
		GrainExist[i]=1;
	}
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i!=1) id++;
		if(id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[id].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		printf("%d-%s发动了五谷丰登,请%d-%s您选择一张牌:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,id,Player[id].WarriorCard.Name);
		if(AskUnassailable()) continue;
		for(int j=1;j<=CardNumber;j++)
		if(GrainExist[j])
		{
			printf("%d-",j);
			ShowOneGameCard(GrainCard[j]);
		}
		int Option;
		scanf("%d",&Option);
		GrainExist[Option]=0;
		Player[id].HandCard[++Player[id].HandCardNumber]=GrainCard[Option];
	}
} 
void PeachGarden(int SeatNumber,int Color){//桃园结义
	int id=SeatNumber;
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i!=1) id++;
		if(id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[i].WarriorCard.Number==50&&Color>=3) continue;//贾诩--帷幕
		if(Player[id].BloodNow==Player[id].BloodCeiling) continue;
		printf("桃园结义即将对%d-%s生效\n",id,Player[id].WarriorCard.Name);
		if(AskUnassailable()) continue;
		Player[id].BloodNow++;
	}
}
void WreckBridge(int FromNumber,int ToNumber){//过河拆桥
	printf("%d-%s,请您选择你过河拆桥的牌:\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	ShowOnesAllCardBackAndJudgeCard(ToNumber);
	int Option;
	scanf("%d",&Option);
	TableCard[++TableCardNumber]=OnesCard(ToNumber,Option);
	OneLoseCard(ToNumber,Option);
	return;
}
void StealSheep(int FromNumber,int ToNumber){//顺手牵羊
	printf("%d-%s,请您选择你顺手牵羊的牌:\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	ShowOnesAllCardBackAndJudgeCard(ToNumber);
	int Option;
	scanf("%d",&Option);
	Player[FromNumber].HandCard[++Player[FromNumber].HandCardNumber]=OnesCard(ToNumber,Option);
	OneLoseCard(ToNumber,Option);
	return;
}
bool BorrowKnife(int SeatNumber,int FromNumber,int ToNumber){//借刀杀人 
	printf("%d-%s,请你对%d-%s打出一张杀,否则您需要将您的武器交给%d-%s\n",FromNumber,Player[FromNumber].WarriorCard.Name,ToNumber,Player[ToNumber].WarriorCard.Name,SeatNumber,Player[SeatNumber].WarriorCard.Name);
	Damageinfo damage;
	damage.FromCardNumber=0;
	damage=AskKill(FromNumber);
	if(!damage.FromCardNumber) return false;
	damage.FromMember=FromNumber;
	Kill(damage,ToNumber);
	return true;
}
void CardAppear(int SeatNumber){//无中生有
	GiveGameCardTo(SeatNumber,2);//摸两张牌
}
void FireAttack(Damageinfo damage,int FromNumber,int ToNumber){//火攻
	if(Player[FromNumber].WarriorCard.Number==15) FocusWisdom(FromNumber);//黄月英--集智
	printf("%d-%s,%d-%s对您发动了火攻,请您展示一张手牌",ToNumber,Player[ToNumber].WarriorCard.Name,FromNumber,Player[FromNumber].WarriorCard.Name);
	ShowOnesHandCard(ToNumber);
	int Option;
	scanf("%d",&Option);
	printf("%d-%s火攻展示:",ToNumber,Player[ToNumber].WarriorCard.Name);
	ShowOneGameCard(Player[ToNumber].HandCard[Option]);
	printf("%d-%s,请您弃掉一张与此牌颜色相同的牌,对其造成一点火焰伤害\n",FromNumber,Player[FromNumber].WarriorCard.Name);
	printf("0-取消\n"); 
	for(int i=1;i<=Player[FromNumber].HandCardNumber;i++){
		int Fromcolor=Player[FromNumber].HandCard[i].Color;
		if(Fromcolor==3&&Player[FromNumber].WarriorCard.Number==48) Fromcolor=1;//小乔--红颜
		int Tocolor=Player[ToNumber].HandCard[Option].Color;
		if(Tocolor==3&&Player[ToNumber].WarriorCard.Number==48) Tocolor=1;//小乔--红颜
		if(Fromcolor!=Tocolor) continue;
		printf("%d-",i);
		ShowOneGameCard(Player[FromNumber].HandCard[i]);
	}
	scanf("%d",&Option);
	if(Option==0) return;
	TableCard[++TableCardNumber]=Player[FromNumber].HandCard[Option];
	OneLoseCard(FromNumber,Option);
	Damage(damage,ToNumber,0);
	return;
}
void IronChain(int SeatNumber){//铁索连环
	Across[SeatNumber]^=1;
	return;
}
void ForgetShu(int ToNumber,GameCard Shu){//乐不思蜀
	Player[ToNumber].JudgeArea[++Player[ToNumber].JudgeCardNumber]=Shu;
	Player[ToNumber].JudgeCardExist[1]=1;
	return;
}
void NoGrainNoSoldier(int ToNumber,GameCard Soldier){//兵粮寸断
	Player[ToNumber].JudgeArea[++Player[ToNumber].JudgeCardNumber]=Soldier;
	Player[ToNumber].JudgeCardExist[2]=1;
	return;
}
void Thunder(int SeatNumber,GameCard Thunder){//闪电
	Player[SeatNumber].JudgeArea[++Player[SeatNumber].JudgeCardNumber]=Thunder;
	Player[SeatNumber].JudgeCardExist[3]=1;
	return;
}
void EatPeach(int SeatNumber){//吃桃
	Player[SeatNumber].BloodNow++;
	if(Player[SeatNumber].WarriorCard.Number==47){//周泰--不屈
		
	}
}
void DrinkWine(int SeatNumber){//酒
	Player[SeatNumber].Wine=2;
}
void ReverseScheme(int SeatNumber){//周瑜--反间
	printf("%d-%s,请你选择反间的目标:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消发动\n"); 
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(Dead[i]) continue;
		if(i==SeatNumber) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	printf("%d-%s,%d-%s对你发起了反间,请你选择一种花色\n",Option,Player[Option].WarriorCard.Name,SeatNumber,Player[SeatNumber].WarriorCard.Name);
	for(int i=1;i<=4;i++) printf("%s\n",color(i));
	int ColorOption;
	scanf("%d",&ColorOption);
	printf("%d-%s,请你选择一张牌,若该牌的花色与你选择的花色不同,您受到%d-%s对您造成的一点伤害\n",Option,Player[Option].WarriorCard.Name,SeatNumber,Player[SeatNumber].WarriorCard.Name);
	ShowOnesHandCardBack(SeatNumber);
	int Option1;
	scanf("%d",&Option1);
	if(Player[SeatNumber].HandCard[Option1].Color!=ColorOption)
	{
		Damageinfo damage;
		damage.Attribute=1;
		damage.Type=SK+2;
		damage.Number=1;
		damage.FromMember=SeatNumber;
		Damage(damage,Option,0);
	}
	printf("反间的牌:");ShowOneGameCard(OnesCard(SeatNumber,Option1));
	Player[Option].HandCard[++Player[Option].HandCardNumber]=OnesCard(SeatNumber,Option1);
	OneLoseCard(SeatNumber,Option1);
	ReverseSchemeChance--;
}
void SurpriseAttack(int SeatNumber){//甘宁--奇袭(待升级) 
	printf("%d-%s,您发动了奇袭,请选择一张黑色牌当做过河拆桥使用\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消发动\n");
	ShowOnesAllBlackCard(SeatNumber);
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	AimNumber=0;
	ChooseWreckBridgeAim(SeatNumber,OnesCard(SeatNumber,Option).Color);
	if(!AimNumber) return;
	TableCard[++TableCardNumber]=OnesCard(SeatNumber,Option);
	OneLoseCard(SeatNumber,Option);
	WreckBridge(SeatNumber,Aim[1]);
	return;
}
void Kindheartedness(int SeatNumber){//刘备--仁德
	printf("%d-%s,请你选择若干张牌并交给一个目标\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Number=Player[SeatNumber].HandCardNumber;
	int Choose[Number+1];
	memset(Choose,0,sizeof(Choose));
	while(1){
		printf("0-取消发动\n");
		for(int i=1;i<=Number;i++){
			printf("%d-",i); 
			if(Choose[i]) printf("(已选)");
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
		printf("%d-选择目标\n",Number+1);
		int Option;
		scanf("%d",&Option);
		if(Option==0) return;
		if(Option==Number+1) break;
		if(Choose[Option]) Choose[Option]=0;
		else Choose[Option]=Player[SeatNumber].HandCard[Option].Number;
	}
	printf("0-取消发动\n");
	for(int i=1;i<=TotalPeopleNumber;i++){
		if(i==SeatNumber) continue;
		if(Dead[i]) continue;
		printf("%d-%s\n",i,Player[i].WarriorCard.Name);
	}
	int Option;
	scanf("%d",&Option);
	if(Option==0) return;
	for(int i=1;i<=Number;i++)
	if(Choose[i]){
		Player[Option].HandCard[++Player[Option].HandCardNumber]=OnesCardNumber(SeatNumber,Choose[i]);
		OneLoseNumber(SeatNumber,Choose[i]);
		if(++KindheartednessNumber==2) BloodUp(SeatNumber);
	}
	return;
}
void Alienate(int SeatNumber){//貂蝉--离间
	AimNumber=0;
	ChooseAlienateAim(SeatNumber);
	if(AimNumber!=2)
	printf("%d-%s,请你弃掉一张手牌,视为%d对%d发动了决斗\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,Aim[1],Aim[2]);
	printf("0-放弃发动\n");
	ShowOnesAllCard(SeatNumber);
	int Option;
	if(Option==0) return;
	TableCard[++TableCardNumber]=OnesCard(SeatNumber,Option);
	OneLoseCard(SeatNumber,Option);
	Damageinfo damage;
	damage.Attribute=1;
	damage.Type=10;
	damage.Number=1;
	damage.Color=OnesCard(SeatNumber,Option).Color;
	damage.FromCardNumber=1;
	damage.Card[1]=OnesCard(SeatNumber,Option).Number;
	if(Player[Aim[1]].WarriorCard.Number==6)//孙策--激昂
	if(damage.Color<=2) EmotionUp(Aim[1]);
	if(Player[Aim[2]].WarriorCard.Number==6)//孙策--激昂 
	if(damage.Color<=2) EmotionUp(Aim[2]);
	Duel(damage,Aim[1],Aim[2]);
	AlienateChance--;
	return;
}
void Marry(int SeatNumber){//孙尚香--结姻
	int Number=Player[SeatNumber].HandCardNumber;
	int Choose[Number+1];
	int ChooseNumber=0;
	memset(Choose,0,sizeof(Choose));
	while(1){
		printf("0-取消发动\n");
		for(int i=1;i<=Number;i++){
			printf("%d-",i);
			if(Choose[i]) printf("(已选)");
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
		if(ChooseNumber==2) printf("%d-确认\n",Number+1);
		int Option;
		scanf("%d",&Option);
		if(Option==0) return;
		if(Option==Number+1) break;
		if(Choose[Option]){
			Choose[Option]=0;
			ChooseNumber--;
		}
		else{
			if(ChooseNumber==2) continue;
			Choose[Option]=Player[SeatNumber].HandCard[Option].Number;
			ChooseNumber++;
		}
	}
	AimNumber=0;
	ChooseMarryAim(SeatNumber);
	if(!AimNumber) return;
	for(int i=1;i<=Number;i++)
	if(Choose[i]) OneLoseNumber(SeatNumber,Choose[i]);
	BloodUp(Aim[1]);
	BloodUp(SeatNumber);
	MarryChance=0;
	return;
}
void NationBeauty(int SeatNumber){//大乔--国色
	printf("%d-%s,请选择一张方块牌当做乐不思蜀打出\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	printf("0-取消发动\n");
	ShowOnesAllSquareCard(SeatNumber);
	int CardOption;
	scanf("%d",&CardOption);
	if(CardOption==0) return;
	AimNumber=0;
	ChooseForgetShuAim(SeatNumber,2);
	if(!AimNumber) return;
	ForgetShu(Aim[1],OnesCard(SeatNumber,CardOption));
	OneLoseCard(SeatNumber,CardOption);
}
void BotherMuscle(int SeatNumber){//黄盖--苦肉
	printf("%d-%s,您确认失去一点体力,并且获得两张牌吗? 1-确认 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return;
	BloodRun(SeatNumber,1);
	if(Dead[SeatNumber]) return;
	GiveGameCardTo(SeatNumber,2);
}
void Balance(int SeatNumber){//孙权--制衡
	int Number=Player[SeatNumber].HandCardNumber;
	int Choose[Number+5];
	int ChooseNumber=0;
	memset(Choose,0,sizeof(Choose));
	while(1){
		printf("手牌:\n");
		printf("0-取消发动\n");
		for(int i=1;i<=Number;i++){
			printf("%d-",i); 
			if(Choose[i]) printf("(已选)");
			ShowOneGameCard(Player[SeatNumber].HandCard[i]);
		}
		printf("装备区:\n"); 
		for(int i=1;i<=4;i++)
		if(Player[SeatNumber].EquipmentExist[i]==1){
			printf("%d-",i+Number);
			if(Choose[i+Number]) printf("(已选)");
			ShowOneGameCard(Player[SeatNumber].Equipment[i]);
		}
		if(ChooseNumber>=1) printf("%d-确认\n",Number+5);
		int Option;
		scanf("%d",&Option);
		if(Option==0) return;
		if(Option==Number+5) break;
		if(Choose[Option]){
			Choose[Option]=0;
			ChooseNumber--;
		}
		else{
			Choose[Option]=OnesCard(SeatNumber,Option).Number;
			ChooseNumber++;
		}
	}
	int CardNumber=0;
	for(int i=1;i<=Number+4;i++)
	if(Choose[i]){
		OneLoseNumber(SeatNumber,Choose[i]);
		CardNumber++;
	}
	GiveGameCardTo(SeatNumber,CardNumber);
	BalanceChance=0;
}
void LookStar(int SeatNumber){//诸葛亮--观星 觉醒姜维--观星(待升级)
	printf("%d-%s,您是否发动观星 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	int Option;
	scanf("%d",&Option);
	if(Option==2) return; 
	int StarNumber=0;
	for(int i=1;i<=TotalPeopleNumber;i++)
	if(!Dead[i]) StarNumber++;
	GameCard LookStar[6];
	StarNumber=min(StarNumber,5);
	for(int i=1;i<=StarNumber;i++) LookStar[i]=TakeOneGameCard();
	printf("%d-%s,您可以分配任意数量的牌在堆顶或堆底:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
	for(int i=1;i<=StarNumber;i++){
		printf("第%d张:",i); 
		ShowOneGameCard(LookStar[i]); 
	}
	int Top=1;
	int Bottom=1; 
	bool Star[6];
	memset(Star,0,sizeof(Star));
	for(int i=1;i<=StarNumber;i++){
		int Option;
		if(Top){
			printf("%d-%s,请输入您第%d张要放到堆顶的牌:",SeatNumber,Player[SeatNumber].WarriorCard.Name,Top);
			printf("0-开始把牌堆底\n"); 
			for(int k=1;k<=StarNumber;k++)
			if(!Star[k]) printf("%d-第%d张 ",k,k);
			scanf("%d",&Option);
			if(Option==0){
				Top=0;
				i--;
			}
			else{
				GameCardNumber++;
				for(int k=1;k<Top;k++)
				GameCardHeap[GameCardNumber-k+1]=GameCardHeap[GameCardNumber-k];
				GameCardHeap[GameCardNumber-Top+1]=LookStar[Option];
				Star[Option]=true;
				Top++;
			}
		}
		else{
			printf("%d-%s,请输入你第%d张要放到堆底的牌:",SeatNumber,Player[SeatNumber].WarriorCard.Name,Bottom);
			for(int k=1;k<=StarNumber;k++)
			if(!Star[k]) printf("%d-第%d张 ",k,k);
			printf("\n"); 
			scanf("%d",&Option);
			GameCardNumber++;
			for(int i=GameCardNumber;i>=2;i--)
			GameCardHeap[i]=GameCardHeap[i-1];
			GameCardHeap[1]=LookStar[Option];
			Star[Option]=true;
			Bottom++;
		}
	}
}
void LuoShen(int SeatNumber){//询问甄姬--洛神
	while(1){
		printf("%d-%s,是否发动洛神? 1-是 2-否\n",SeatNumber,Player[SeatNumber].WarriorCard.Name);
		int Option;
		scanf("%d",&Option);
		if(Option==2) return;
		Judge(SeatNumber);
		if(JudgeCard.Color>=3){//结果为黑色
			Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=JudgeCard;//将判定牌加入手牌 
			printf("生效\n");
		}
		else{//结果为红色
			TableCard[++TableCardNumber]=JudgeCard;
			printf("失效\n");
			ClearTable();
			return;
		}
	}
}
void ShowAllPlayersInformation()
{
	for(int i=1;i<=TotalPeopleNumber;i++){
			printf("%d-%s",i,Player[i].WarriorCard.Name);
			if(Across[i]==1) printf("(铁索)"); 
			printf(" 血量:%d/%d 手牌数:%d 身份:%s ",Player[i].BloodNow,Player[i].BloodCeiling,Player[i].HandCardNumber,identity(Player[i].Identity));
			if(Dead[i]) printf("(阵亡)");
			else
			{
				printf("武器牌:"); 
				if(Player[i].EquipmentExist[1]) printf("%s %s%d ",Player[i].Equipment[1].Name,color(Player[i].Equipment[1].Color),Player[i].Equipment[1].Point);
				printf("护具牌:");
				if(Player[i].EquipmentExist[2]) printf("%s %s%d ",Player[i].Equipment[2].Name,color(Player[i].Equipment[2].Color),Player[i].Equipment[2].Point);
				printf("防御马:");
				if(Player[i].EquipmentExist[3]) printf("%s %s%d ",Player[i].Equipment[3].Name,color(Player[i].Equipment[3].Color),Player[i].Equipment[3].Point);
		    	printf("进攻马:");
				if(Player[i].EquipmentExist[4]) printf("%s %s%d",Player[i].Equipment[4].Name,color(Player[i].Equipment[4].Color),Player[i].Equipment[4].Point);
			}
			printf("\n");
		}
}
void BeginningStage(int SeatNumber){//SeatNumber号位回合开始阶段
	printf("回合开始阶段\n");
	if(Player[SeatNumber].WarriorCard.Number==6) SoulPosture(SeatNumber);//询问孙策--魂姿 
	if(Player[SeatNumber].WarriorCard.Number==31) LuoShen(SeatNumber);//询问甄姬--洛神
	if(Player[SeatNumber].WarriorCard.Number==12) LookStar(SeatNumber);//询问诸葛亮--观星
	if(Player[SeatNumber].WarriorCard.Number==6&&Player[SeatNumber].WarriorCard.Wakeup==1) BrilliantSoul(SeatNumber);//询问觉醒孙策--英魂
	if(Player[SeatNumber].WarriorCard.Number==36) BrilliantSoul(SeatNumber);//询问孙坚--英魂
	ClearTable();
	printf("回合开始阶段结束\n");
}
bool TransferThunder(int SeatNumber,GameCard Thunder){//闪电转移 
	int id=SeatNumber;
	for(int i=1;i<=TotalPeopleNumber;i++){//找到第一个没挂闪电的人
		if(++id>TotalPeopleNumber) id=1;
		if(Dead[id]) continue;
		if(Player[id].JudgeCardExist[3]==1) continue;
		if(Player[id].WarriorCard.Number==50&&Thunder.Color>=3) continue;//贾诩--帷幕 
		for(int j=Player[id].JudgeCardNumber;j>=1;j--)
		Player[id].JudgeArea[j+1]=Player[id].JudgeArea[j];
		Player[id].JudgeCardNumber++;
		Player[id].JudgeArea[1]=Thunder;//SeatNumber的闪电转移至id判定牌堆底
		Player[id].JudgeCardExist[3]=1;
		if(id==SeatNumber) return true;
		else return false;
	}
}
void JudgingStage(int SeatNumber){//SeatNumber号位开始判定阶段
	if(Dead[SeatNumber]) return;
	//张郃--巧变 
	//夏侯渊--神速
	if(JumpJudging){//需要跳过判定阶段
		JumpJudging=0;
		return;
	}
	printf("判定阶段\n");
	bool thunder=0;
	while(Player[SeatNumber].JudgeCardNumber){//判定判定区的牌 
		if(Player[SeatNumber].JudgeCardNumber==1&&thunder==1) break;
		GameCard JudgedCard=Player[SeatNumber].JudgeArea[Player[SeatNumber].JudgeCardNumber--];
		if(JudgedCard.Type==19||JudgedCard.NationBeauty==1){//SeatNumber玩家判定区第i张牌是乐不思蜀或者国色
			Player[SeatNumber].JudgeCardExist[1]=0;//乐不思蜀离开判定区
			TableCard[++TableCardNumber]=JudgedCard;//乐不思蜀/国色转移至桌子
			if(AskUnassailable()) continue;
			printf("对乐不思蜀进行判定:\n");
			Judge(SeatNumber);
			int color=JudgeCard.Color;
			if(Player[SeatNumber].WarriorCard.Number==48&&color==3) color=1; 
			if(color==1) printf("乐不思蜀失效\n");
			else{
				JumpOutCard=1;
				printf("乐不思蜀生效\n");
			}
			if(Player[SeatNumber].WarriorCard.Number==29) GodJealous(SeatNumber);//郭嘉--天妒拿走判定牌 
			else TableCard[++TableCardNumber]=JudgeCard;//将判定牌放入桌面 
		}
		if(JudgedCard.Type==20||JudgedCard.NoGrain==1){//SeatNumber玩家判定区第i张牌是兵粮寸断或者断粮 
			Player[SeatNumber].JudgeCardExist[2]=0;//兵粮寸断离开判定区
			TableCard[++TableCardNumber]=JudgedCard;//兵粮寸断/断粮转移至桌子
			if(AskUnassailable()) continue;
			printf("对兵粮寸断进行判定:\n");
			Judge(SeatNumber);
			int color=JudgeCard.Color;
			if(Player[SeatNumber].WarriorCard.Number==48&&color==3) color=1; 
			if(color==4) printf("兵粮寸断失效\n");
			else{
				JumpInCard=1;
				printf("兵粮寸断生效\n"); 
			}
			if(Player[SeatNumber].WarriorCard.Number==29) GodJealous(SeatNumber);//郭嘉--天妒拿走判定牌 
			else TableCard[++TableCardNumber]=JudgeCard;
		}
		if(JudgedCard.Type==21){//SeatNumber玩家判定区第i张牌是闪电
			Player[SeatNumber].JudgeCardExist[3]=0;//闪电离开判定区
			printf("对闪电进行判定: \n");
			if(AskUnassailable()){
				thunder=TransferThunder(SeatNumber,JudgedCard);
				continue;
			}
			Judge(SeatNumber);
			int color=JudgeCard.Color;
			int point=JudgeCard.Point;
			if(Player[SeatNumber].WarriorCard.Number==48&&color==3) color=1; 
			if(color==3&&point>=2&&point<=9){ 
				printf("闪电生效\n");
				TableCard[++TableCardNumber]=JudgedCard;//闪电转移至桌子
				Damageinfo damage;
				damage.Attribute=3;
				damage.Type=21;
				damage.Number=3;
				damage.FromMember=0;
				damage.FromCardNumber=0;
				Damage(damage,SeatNumber,0);//造成三点闪电伤害
				if(Dead[SeatNumber]){
					ClearTable();
					return;
				}
			}
			else thunder=TransferThunder(SeatNumber,JudgedCard);
			if(Player[SeatNumber].WarriorCard.Number==29) GodJealous(SeatNumber);//郭嘉--天妒拿走判定牌 
			else TableCard[++TableCardNumber]=JudgeCard;
		}
	}
	ClearTable();
	printf("判定阶段结束\n");
}
void InCardStage(int SeatNumber){//SeatNumber号位摸牌阶段
	if(Dead[SeatNumber]) return;
	//张郃--巧变
	if(JumpInCard==1){//需要跳过摸牌阶段
		JumpInCard=0;
		return;
	}
	printf("摸牌阶段\n");
	if(Player[SeatNumber].WarriorCard.Number==28)
	if(Naked(SeatNumber)==true) return;//许褚--裸衣
	if(Player[SeatNumber].WarriorCard.Number==27)
	if(SuddenStrike(SeatNumber)==true) return;//张辽--突袭
	if(Player[SeatNumber].WarriorCard.Number==43) BrilliantPosture(SeatNumber);//周瑜--英姿
	if(Player[SeatNumber].WarriorCard.Number==6&&Player[SeatNumber].WarriorCard.Wakeup==1) BrilliantPosture(SeatNumber);//觉醒孙策--英姿 
	//else if(Player[SeatNumber].WarriorCard.Number==37) LoveCharity(SeatNumber);//鲁肃--好施
	GiveGameCardTo(SeatNumber,2);
	//孟获--再起 
	printf("摸牌阶段结束\n");
}
void CalSkillChance(){//技能次数设置
	CyanPackChance=1;//华佗--青囊
	SkyJusticeChance=1;//太史慈--天义
	ReverseSchemeChance=1;//周瑜--反间
	MarryChance=1;//孙尚香--结姻
	NationBeautyChance=1;//大乔--国色
	AlienateChance=1;//貂蝉--离间
	KindheartednessNumber=0;//刘备--仁德牌数
	BalanceChance=1;//孙权--制衡
	YellowSkyChance=1;//张角--黄天
	Unreasonablestrike=1;//典韦--强袭 
}
bool CanKill(int SeatNumber){//判断是否可以出杀
	bool CanOut=0;
	if(KillChance) CanOut=1;
	if(Player[SeatNumber].Equipment[1].Type==22) CanOut=1;//诸葛连弩
	if(Player[SeatNumber].WarriorCard.Number==11) CanOut=1;//张飞--咆哮
	if(skyjustice==-1) CanOut=0;//太史慈--天义
	return CanOut;
}
void OutCardStage(int SeatNumber){//SeatNumber号位出牌阶段
	if(Dead[SeatNumber]) return;
	//张郃--巧变
	//刘禅--放权
	//夏侯渊--神速
	if(JumpOutCard==1){//需要跳过出牌阶段
		JumpOutCard=0;
		return;
	}
	printf("出牌阶段\n");
	CalSkillChance();
	KillChance=1;//出杀次数置为1
	while(!Dead[SeatNumber]){//开始出牌
	
		ShowAllPlayersInformation();
		ShowOnesAllCardAndJudgeCard(SeatNumber);//显示一个人的所有牌 手牌+装备牌
		printf("%d-%s %s ,请您发动某项技能或打出一张牌:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,identity(Player[SeatNumber].Identity));
		printf("0-弃牌\n");
		int Number=Player[SeatNumber].HandCardNumber;
		for(int i=1;i<=Number;i++){
			GameCard OutCard=Player[SeatNumber].HandCard[i];
			int type=OutCard.Type;
			bool CanOut=0;
			if(type>=1&&type<=3) if(CanKill(SeatNumber)==true) CanOut=1;//可不可以出杀 
			if(type==5) if(Player[SeatNumber].BloodNow<Player[SeatNumber].BloodCeiling) CanOut=1;//桃-血量未满
			if(type==6) if(Player[SeatNumber].Wine==0) CanOut=1;//酒-没喝过酒
			if(type>=7&&type<=15||type==17||type==18) CanOut=1;//非延时锦囊
			if(type==19||type==20) CanOut=1;//延时锦囊--乐不思蜀和兵粮寸断 
			if(type==21){//延时锦囊--闪电
				if(Player[SeatNumber].WarriorCard.Number==50&&OutCard.Color>=3) continue;
				if(Player[SeatNumber].JudgeCardExist[3]==1) continue;
				CanOut=1;
			}
			if(type>=22&&type<=38) CanOut=1;//装备牌
			if(CanOut==1){
				printf("%d-",i);
				ShowOneGameCard(Player[SeatNumber].HandCard[i]);
			}
		}
		if(Player[SeatNumber].EquipmentExist[1]){//装备
			if(Player[SeatNumber].Equipment[1].Type==27) if(CanKill(SeatNumber)==true) printf("%d-发动丈八蛇矛\n",Number+1);
		}
		{//可以在出牌阶段主动发出的技能 
			if(Player[SeatNumber].WarriorCard.Number==1)
			printf("%d-发动仁德\n",Number+2);//刘备--仁德
			if(Player[SeatNumber].WarriorCard.Number==1&&SeatNumber==1) if(CanKill(SeatNumber)==true) printf("%d-发动激将\n",Number+3);//刘备主公技--激将
			if(Player[SeatNumber].WarriorCard.Number==5) if(BalanceChance>=1) printf("%d-发动制衡\n",Number+2);//孙权--制衡
			if(Player[SeatNumber].WarriorCard.Number==10) if(CanKill(SeatNumber)==true) printf("%d-发动武圣\n",Number+2);//关羽--武圣
			if(Player[SeatNumber].WarriorCard.Number==13) if(CanKill(SeatNumber)==true) printf("%d-发动龙胆\n",Number+2);//赵云--龙胆
			if(Player[SeatNumber].WarriorCard.Number==16) printf("%d-发动狂骨\n",Number+2);//魏延--狂骨
			if(Player[SeatNumber].WarriorCard.Number==19) printf("%d-发动火计\n",Number+2);//卧龙--火计
			if(Player[SeatNumber].WarriorCard.Number==23) printf("%d-发动断粮\n",Number+2);//徐晃--断粮
			if(Player[SeatNumber].WarriorCard.Number==24) printf("%d-发动驱虎\n",Number+2);//荀彧--驱虎 
			if(Player[SeatNumber].WarriorCard.Number==40) printf("%d-发动奇袭\n",Number+2);//甘宁--奇袭
			if(Player[SeatNumber].WarriorCard.Number==42) printf("%d-发动苦肉\n",Number+2);//黄盖--苦肉
			if(Player[SeatNumber].WarriorCard.Number==43) if(ReverseSchemeChance>=1&&Player[SeatNumber].HandCardNumber>=1) printf("%d-发动反间\n",Number+2);//周瑜--反间
			if(Player[SeatNumber].WarriorCard.Number==44) if(NationBeautyChance==true) printf("%d-发动国色\n",Number+2);//大乔--国色
			if(Player[SeatNumber].WarriorCard.Number==45) if(MarryChance>=1) printf("%d-发动结姻\n",Number+2);//孙尚香--结姻
			if(Player[SeatNumber].WarriorCard.Number==46) if(SkyJusticeChance>=1) printf("%d-发动天义\n",Number+2);//太史慈--天义 KillChance++
			if(Player[SeatNumber].WarriorCard.Number==55) if(CyanPackChance>=1) printf("%d-发动青囊\n",Number+2);//华佗--青囊
			if(Player[SeatNumber].WarriorCard.Number==57) if(AlienateChance>=1) printf("%d-发动离间\n",Number+2);//貂蝉--离间
			if(Player[SeatNumber].WarriorCard.Number==9) printf("%d-发动乱击\n",Number+2);//袁绍--乱击 
			if(Player[SeatNumber].WarriorCard.Number==22) printf("%d-发动挑衅\n",Number+2);//姜维--挑衅 
			if(Player[SeatNumber].WarriorCard.Number==18) printf("%d-发动连环\n",Number+2);//庞统--连环 
			if(Player[SeatNumber].WarriorCard.Number==25) printf("%d-发动强袭\n",Number+2);//典韦--强袭 
			if(Player[SeatNumber].WarriorCard.Number==37) printf("%d-发动缔盟\n",Number+2);//鲁肃--缔盟
			if(OnField[7]==1&&Player[SeatNumber].Nation==4&&SeatNumber!=1) if(YellowSkyChance>=1) printf("%d-发动黄天\n",Number+3);//主公是张角 可以发动黄天
			if(OnField[6]==1&&Player[SeatNumber].Nation==3);//主公是孙策 可以发动制霸
		}
		int Option;
		scanf("%d",&Option);
		if(Option==0) return;//进入弃牌阶段
		if(Option<=Number){//如果选择打出手牌 
			GameCard OutCard=Player[SeatNumber].HandCard[Option];
			int type=OutCard.Type;
			int color=OutCard.Color;
			int number=OutCard.Number;
			if(Player[SeatNumber].WarriorCard.Number==48&&color==3) color=1;//小乔--红颜 
			AimNumber=0;
			if(type>=1&&type<=3){//杀
				ChooseKillAim(SeatNumber);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==6)//孙策--激昂 
				if(color<=2) EmotionUp(SeatNumber);
				Damageinfo damage;
				damage.Type=type;
				damage.Attribute=type;
				damage.FromMember=SeatNumber;
				damage.Number=1;
				damage.Color=color;
				damage.Card[1]=number;//伤害来源牌的编号
				damage.FromCardNumber=1;
				for(int i=1;i<=AimNumber;i++) Kill(damage,Aim[i]);
				KillChance--;
			}
			if(type==5){//桃 
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				EatPeach(SeatNumber);
			}
			if(type==6){//酒
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				DrinkWine(SeatNumber);
			}
			if(type==7){//过河拆桥
				ChooseWreckBridgeAim(SeatNumber,color);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				if(!AskUnassailable()) WreckBridge(SeatNumber,Aim[1]);
			}
			if(type==8){//顺手牵羊
				ChooseStealSheepAim(SeatNumber,color);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				if(!AskUnassailable()) StealSheep(SeatNumber,Aim[1]);
			}
			if(type==9){//无中生有
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option); 
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				if(!AskUnassailable()) CardAppear(SeatNumber);
				ClearTable();
			}
			if(type==10){//决斗
				ChooseDuelAim(SeatNumber,color);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==6)//孙策--激昂 
				if(color<=2) EmotionUp(SeatNumber);
				if(Player[Aim[1]].WarriorCard.Number==6)//孙策--激昂 
				if(color<=2) EmotionUp(Aim[1]);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				if(AskUnassailable()) continue;
				Damageinfo damage;
				damage.Type=10;
				damage.Attribute=1;
				damage.Number=1;
				damage.Color=color;
				damage.FromCardNumber=1;
				damage.Card[1]=number;//伤害来源牌的编号
				Duel(damage,SeatNumber,Aim[1]);
			}
			if(type==11){//借刀杀人
				ChooseBorrowKnifeAim(SeatNumber,color);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				if(AskUnassailable()) continue;
				if(BorrowKnife(SeatNumber,Aim[1],Aim[2])==true) continue;
				Player[SeatNumber].HandCard[++Player[SeatNumber].HandCardNumber]=Player[Aim[1]].Equipment[1];
				OneLoseCard(Aim[1],Player[Aim[1]].HandCardNumber+1);
			}
			if(type==12){//桃园结义
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				PeachGarden(SeatNumber,OutCard.Color);
			}
			if(type==13){//五谷丰登
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				GrainHarvest(SeatNumber,color);
			}
			if(type==14){//南蛮入侵
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				Damageinfo damage;
				damage.Type=14;
				damage.Attribute=1;
				damage.Number=1;
				damage.Color=color;
				damage.FromMember=SeatNumber;
				if(Player[SeatNumber].WarriorCard.Number==21) damage.FromMember=21;//孟获--祸首
				damage.Card[1]=number;
				damage.FromCardNumber=1;
				SouthSavageAttack(damage);
			}
			if(type==15){//万箭齐发
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				Damageinfo damage;
				damage.Attribute=1;
				damage.Type=15;
				damage.Number=1;
				damage.Color=color;
				damage.FromMember=SeatNumber;
				damage.Card[1]=number;
				damage.FromCardNumber=1;
				ThousandsArrowsFalling(damage);
			}
			if(type==17){//火攻
				ChooseFireAttackAim(SeatNumber,color);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				if(AskUnassailable()) continue;
				Damageinfo damage;
				damage.Type=17;
				damage.Attribute=2;
				damage.Number=1;
				damage.FromMember=SeatNumber;
				damage.Card[1]=number;
				damage.FromCardNumber=1;
				FireAttack(damage,SeatNumber,Aim[1]);
			}
			if(type==18){//铁索连环
				AimNumber=0;
				if(Recoin(SeatNumber)==1){//重铸
					TableCard[++TableCardNumber]=OutCard;
					OneLoseCard(SeatNumber,Option);
					if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
					GiveGameCardTo(SeatNumber,1);
					ClearTable();
					continue;
				}
				ChooseIronChainAim(SeatNumber,color);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OutCard;
				OneLoseCard(SeatNumber,Option);
				if(Player[SeatNumber].WarriorCard.Number==15) FocusWisdom(SeatNumber);//黄月英--集智
				for(int i=1;i<=AimNumber;i++){
					if(AskUnassailable()) continue;
					IronChain(Aim[i]);
				}
			}
			if(type==19){//乐不思蜀
				AimNumber=0;
				ChooseForgetShuAim(SeatNumber,OutCard.Color);
				if(!AimNumber) continue;
				ForgetShu(Aim[1],OutCard);
				OneLoseCard(SeatNumber,Option);
			}
			if(type==20){//兵粮寸断
				AimNumber=0;
				ChooseNoGrainNoSoldierAim(SeatNumber,OutCard.Color);
				if(!AimNumber) continue;
				NoGrainNoSoldier(Aim[1],OutCard);
				OneLoseCard(SeatNumber,Option);
			}									
			if(type==21){//闪电
				Thunder(SeatNumber,OutCard);
				OneLoseCard(SeatNumber,Option);
			}
			if(type>=22&&type<=32){//武器
				if(Player[SeatNumber].EquipmentExist[1]==1){
					TableCard[++TableCardNumber]=Player[SeatNumber].Equipment[1];
					OneLoseCard(SeatNumber,Player[SeatNumber].HandCardNumber+1);
				}
				Player[SeatNumber].EquipmentExist[1]=1;
				Player[SeatNumber].Equipment[1]=OutCard;
				OneLoseCard(SeatNumber,Option);
			}
			if(type>=33&&type<=36){//防具 
				if(Player[SeatNumber].EquipmentExist[2]==1){
					TableCard[++TableCardNumber]=Player[SeatNumber].Equipment[2];
					OneLoseCard(SeatNumber,Player[SeatNumber].HandCardNumber+2);
				}
				Player[SeatNumber].EquipmentExist[2]=1;
				Player[SeatNumber].Equipment[2]=OutCard;
				OneLoseCard(SeatNumber,Option);
			}
			if(type==37){//防御马
				if(Player[SeatNumber].EquipmentExist[3]==1){
					TableCard[++TableCardNumber]=Player[SeatNumber].Equipment[3];
					OneLoseCard(SeatNumber,Player[SeatNumber].HandCardNumber+3);
				}
				Player[SeatNumber].EquipmentExist[3]=1;
				Player[SeatNumber].Equipment[3]=OutCard;
				OneLoseCard(SeatNumber,Option);
				CalDistance();
			}
			if(type==38){//进攻马 
				if(Player[SeatNumber].EquipmentExist[4]==1){
					TableCard[++TableCardNumber]=Player[SeatNumber].Equipment[4];
					OneLoseCard(SeatNumber,Player[SeatNumber].HandCardNumber+4);
				}
				Player[SeatNumber].EquipmentExist[4]=1;
				Player[SeatNumber].Equipment[4]=OutCard;
				OneLoseCard(SeatNumber,Option);
				CalDistance();
			}
		} 
		else if(Option==Number+1){//装备牌--丈八蛇矛
			Damageinfo damage;
			damage.FromCardNumber=0;
			damage=EightSpear(SeatNumber);
			if(!damage.FromCardNumber) continue;
			AimNumber=0;
			ChooseKillAim(SeatNumber);
			if(!AimNumber) continue; 
			TableCard[++TableCardNumber]=OnesCardNumber(SeatNumber,damage.Card[1]);
			OneLoseNumber(SeatNumber,damage.Card[1]);
			TableCard[++TableCardNumber]=OnesCardNumber(SeatNumber,damage.Card[2]);
			OneLoseNumber(SeatNumber,damage.Card[2]);
			damage.FromMember=SeatNumber;
			for(int i=1;i<=AimNumber;i++)
			Kill(damage,Aim[i]);
			KillChance--;
		}
		else{//如果选择发动技能
			Damageinfo damage;
			damage.FromCardNumber=0;
			if(Player[SeatNumber].WarriorCard.Number==1&&SeatNumber==1&&Option==Number+3){//刘备主公技--激将
				AimNumber=0;
				ChooseExciteSoldierAim(SeatNumber);
				if(!AimNumber) continue;
				damage=ExciteSoldier(SeatNumber);
				if(!damage.FromCardNumber)
				damage.FromMember=SeatNumber;
				Kill(damage,Aim[1]);
				KillChance--;
			}
			if(Player[SeatNumber].WarriorCard.Number==5&&Option==Number+2){//孙权--制衡(出牌阶段限一次)
				Balance(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==1&&Option==Number+2){//刘备--仁德
				Kindheartedness(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==10&&Option==Number+2){//关羽--武圣
				damage=WuSage(SeatNumber,1);
				if(!damage.FromCardNumber) continue;
				AimNumber=0;
				ChooseWuSageAim(SeatNumber,damage.Card[1]);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OnesCardNumber(SeatNumber,damage.Card[1]);
				OneLoseNumber(SeatNumber,damage.Card[1]);
				damage.FromMember=SeatNumber;
				for(int i=1;i<=AimNumber;i++)
				Kill(damage,Aim[i]);
				KillChance--;
			}
			if(Player[SeatNumber].WarriorCard.Number==13&&Option==Number+2){//赵云--龙胆
				damage=DragonBraveKill(SeatNumber);
				if(!damage.FromCardNumber) continue;
				AimNumber=0;
				ChooseKillAim(SeatNumber);
				if(!AimNumber) continue;
				TableCard[++TableCardNumber]=OnesCardNumber(SeatNumber,damage.Card[1]);
				OneLoseNumber(SeatNumber,damage.Card[1]);
				damage.FromMember=SeatNumber;
				for(int i=1;i<=AimNumber;i++)
				Kill(damage,Aim[i]);
				KillChance--;
			}
			if(Player[SeatNumber].WarriorCard.Number==44&&Option==Number+2){//大乔--国色 
				NationBeauty(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==55&&Option==Number+2){//华佗--青囊
				int Option=CyanPack(SeatNumber);
				if(!Option) continue;
				AimNumber=0;
				ChooseCyanPackAim(SeatNumber);
				if(!AimNumber) continue;
				OneLoseCard(SeatNumber,Option);
				BloodUp(Aim[1]);
			}
			if(Player[SeatNumber].WarriorCard.Number==43&&Option==Number+2){//周瑜--反间
				ReverseScheme(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==57&&Option==Number+2){//貂蝉--离间
				Alienate(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==40&&Option==Number+2){//甘宁--奇袭
				SurpriseAttack(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==45&&Option==Number+2){//孙尚香--结姻
				Marry(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==42&&Option==Number+2){//黄盖--苦肉
				BotherMuscle(SeatNumber);
			}
			if(OnField[7]==1&&Player[SeatNumber].Nation==4&&SeatNumber!=1)
			if(Option==Number+3)
			{
				YellowSky(SeatNumber);
			}
			if(Player[SeatNumber].WarriorCard.Number==46&&Option==Number+2){//太史慈--天义
				
			}
			if(Player[SeatNumber].WarriorCard.Number==16&&Option==Number+2){//魏延--狂骨
				
			}
			if(Player[SeatNumber].WarriorCard.Number==19&&Option==Number+2){//卧龙--火计
				
			}
			if(Player[SeatNumber].WarriorCard.Number==23&&Option==Number+2){//徐晃--断粮
				
			}
			if(Player[SeatNumber].WarriorCard.Number==9&&Option==Number+2){//袁绍--乱击 
				
			}
			if(Player[SeatNumber].WarriorCard.Number==18&&Option==Number+2){//庞统--连环 
				
			}
			if(Player[SeatNumber].WarriorCard.Number==25&&Option==Number+2){//典韦--强袭 
				
			}
			if(Player[SeatNumber].WarriorCard.Number==37&&Option==Number+2){//鲁肃--缔盟
			
			}
			if(Player[SeatNumber].WarriorCard.Number==22&&Option==Number+2){//姜维--挑衅 
				
			}
			if(Player[SeatNumber].WarriorCard.Number==24&&Option==Number+2){//荀彧--驱虎 
				
			}
		}
		ClearTable();
	}
	//清空桌面卡牌
	if(Player[SeatNumber].Wine>=1) Player[SeatNumber].Wine=0;
	if(naked==1) naked=0;//许褚裸衣效果消失
	if(skyjustice!=0) skyjustice=0;//太史慈天义效果消失
	printf("出牌阶段结束\n");
	//万箭齐发--袁绍
	//决斗
	//乐不思蜀--大乔
	//兵粮寸断--徐晃
}
void DiscardStage(int SeatNumber){//SeatNumber号位弃牌阶段
	if(Dead[SeatNumber]) return;
	//张郃--巧变
	if(JumpDiscard==1){//需要跳过弃牌阶段 
		JumpDiscard=0;
		return; 
	}
	printf("弃牌阶段\n");
	if(Player[SeatNumber].WarriorCard.Number==41){//吕蒙--克己
		if(OwnRestraint(SeatNumber)){
			printf("克己\n");
			return;
		}
	}
	int CardCeiling=Player[SeatNumber].BloodNow; 
	if(Player[SeatNumber].WarriorCard.Number==9&&Player[SeatNumber].WarriorCard.Emperor==1) CardCeiling+=BloodDescend(SeatNumber);//袁绍--血裔
	while(Player[SeatNumber].HandCardNumber>CardCeiling){
		printf("%d-%s,您还需要弃掉%d张牌,请选择:\n",SeatNumber,Player[SeatNumber].WarriorCard.Name,Player[SeatNumber].HandCardNumber-CardCeiling);
		ShowOnesHandCard(SeatNumber);
		int Option;
		scanf("%d",&Option);
		TableCard[++TableCardNumber]=Player[SeatNumber].HandCard[Option];
		OneLoseCard(SeatNumber,Option);
	}
	ClearTable();
	printf("弃牌阶段结束\n");
//张昭张弘--固政 
//吕蒙--克己
//袁绍--主公--血裔 
}
void EndStage(int SeatNumber){//SeatNumber号位回合结束阶段
	if(Dead[SeatNumber]) return;
	printf("回合结束阶段\n");
	if(Player[SeatNumber].WarriorCard.Number==57) CloseMoon(SeatNumber);//貂蝉--闭月 
	//曹仁--据守 
	printf("回合结束阶段结束\n");
}
void Start(){
	int SeatNumber=0;
	while(1){
		if(++SeatNumber>TotalPeopleNumber) SeatNumber=1;
		if(Dead[SeatNumber]) continue;//该玩家阵亡跳过
		//for(int i=1;i<=TotalPeopleNumber;i++) ShowOnesHandCard(i);
		for(int i=1;i<=2;i++) printf("--------%d号位%s--------",SeatNumber,Player[SeatNumber].WarriorCard.Name);printf("\n"); 
		//考虑卡牌翻面问题
		if(Player[SeatNumber].WarriorCard.Back==1){
			printf("翻回正面\n");
			Player[SeatNumber].WarriorCard.Back=0;
			continue; 
		}
		MemberNow=SeatNumber;
		BeginningStage(SeatNumber);
		JudgingStage(SeatNumber);
		InCardStage(SeatNumber);
		OutCardStage(SeatNumber);
		DiscardStage(SeatNumber);
		EndStage(SeatNumber);
	}
}
int main(){
	//sort(AllWarCard+1,AllWarCard+57+1,cmp);
	while(1){//输入游戏人数 
		printf("请输入该局人数:");
		scanf("%d",&TotalPeopleNumber);
		if(TotalPeopleNumber<=20&&TotalPeopleNumber>=2) break;
	}
	InitIdentity();//初始化身份牌 
	InitStandard();//初始化标准版游戏牌+军争篇 标准版最多只能9个人游戏 
	InitMyth();//初始化神话再临武将牌 
	RndIdentityCard();
	RndGameCard();
	RndWarCard();
	SetSeatNumber();//确定1~n号位位置
	//for(int i=1;i<=WarCardNumber;i++){printf("%d 名:%s 所属阵营:%s 是否为主公:%s 技能数量:%d 体量上限:%d 性别:%s 所属包:%s\n\n",i,WarCardHeap[i].name,nation(WarCardHeap[i].nation),emperor(WarCardHeap[i].emperor),WarCardHeap[i].skillnumber,WarCardHeap[i].blood,sex(WarCardHeap[i].sex),whichpack(WarCardHeap[i].pack));}
	//for(int i=1;i<=GameCardNumber;i++){printf("%d %s %s %s\n\n",i,GameCardHeap[i].name,color(GameCardHeap[i].color),point(GameCardHeap[i].point));}
	for(int i=1;i<=TotalPeopleNumber;i++){printf("%d %s\n\n",i,identity(IdentityCardHeap[i].Type));}
	ChooseWarrior();//选英雄 
	InitialCard();//每个人发4张牌 
	CalDistance();//设置座位距离
	//ShowAllDistance(); 
	//for(int i=1;i<=TotalPeopleNumber;i++) ShowOnesHandCard(i);
	Start();
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值