• 个人简介

    c++的梗:

    1.我有n个……:因为n是用来计算时间复杂度的,趋近于无限,所以可以用n来给朋友施压

    生活用例:

    朋友:我今天吃了100个早餐

    你:我今天吃了n个早餐

    揭秘新算法『二粉兔匹配』:将爱与科技完美结合的创新突破


    在当今科技飞速发展的时代,匹配算法一直是人们研究的焦点。今天,我很荣幸向大家介绍一项全新的算法 —— 『二粉兔匹配』。这一创新性算法融合了爱与科技,为二分图匹配带来了独特的视角。

    背景介绍

    『粉兔』作为这一算法的灵感源泉,其名与“二分图”谐音,启发了我们将其结合,创造出这一全新的『二粉兔匹配』算法。通过将人类情感与数学逻辑相结合,这一方法旨在提高匹配的精准度和温暖度。

    算法流程

    1. 节点初始化​:将所有人员抽象为节点,分为“粉兔群”和“其他人”两大类。
    2. 粉兔图构建​:将“粉兔群”中的每个成员与其他节点建立连边,代表他们独特的魅力与特点。
    3. 特征匹配​:通过特殊的爱心算法,对每一对节点进行评分,考虑他们的共同兴趣、个性特征等因素。
    4. 最大化匹配​:采用二分图匹配算法的框架,优化匹配结果,确保每位“粉兔”都能找到与之最契合的伙伴。
    5. 匹配结果输出​:输出最终的匹配结果,呈现给用户,让大家共同见证爱的奇迹。

    算法优势

    • 情感因素考量​:『二粉兔匹配』算法独特之处在于考虑了情感因素,让匹配不再只是冰冷的数据计算。
    • 精准度提升​:通过特殊的匹配逻辑,提高了匹配的准确性,让每对匹配都更具有意义。
    • 愉快体验​:用户在使用算法过程中,能感受到浓厚的温情氛围,为匹配过程增添乐趣与温暖。

    结语

    『二粉兔匹配』算法的问世,标志着匹配领域的一次重要突破,为我们带来了更多可能性与惊喜。让我们用科技的力量,传递更多爱与善意,创造美好的匹配奇迹。朋友们,一起加入我们,体验这场科技与爱情的奇妙相遇吧!

    #include<iostream>
    #include<time.h>
    #include<stdio.h>
    #include <stdlib.h>
    using namespace std;
    struct pai
    {
    	int paifu;
    	int huase;
    	int yanse;
    	int dianshu;
    	int leixing;
    	int changdu;
    	void Kanpai()
    	{
    		if (paifu == 0 || paifu == 1);
    		else
    			printf("牌副参数错误!\n");
    		switch (huase)
    		{
    		case 0:cout << "黑桃"; break;
    		case 1:cout << "红桃"; break;
    		case 2:cout << "草花"; break;
    		case 3:cout << "方片"; break;
    		case -1:cout << "无色"; break;
    		default:printf("花色错误!\n"); break;
    		}
    		switch (dianshu)
    		{
    		case 0:cout << "A "; break;
    		case 1:cout << "2 "; break;
    		case 2:cout << "3 "; break;
    		case 3:cout << "4 "; break;
    		case 4:cout << "5 "; break;
    		case 5:cout << "6 "; break;
    		case 6:cout << "7 "; break;
    		case 7:cout << "8 "; break;
    		case 8:cout << "9 "; break;
    		case 9:cout << "10 "; break;
    		case 10:cout << "J "; break;
    		case 11:cout << "Q "; break;
    		case 12:cout << "K "; break;
    		case -1:cout << "无点数"; break;
    		default:printf("点数错误!\n"); break;
    		}
    		switch (leixing)
    		{
    		case 101:cout << "【杀】" << endl; break;
    		case 102:cout << "【闪】" << endl; break;
    		case 103:cout << "【桃】" << endl; break;
    		case 201:cout << "【过河拆桥】" << endl; break;
    		case 202:cout << "【顺手牵羊】" << endl; break;
    		case 203:cout << "【无中生有】" << endl; break;
    		case 204:cout << "【决斗】" << endl; break;
    		case 205:cout << "【借刀杀人】" << endl; break;
    		case 206:cout << "【桃园结义】" << endl; break;
    		case 207:cout << "【五谷丰登】" << endl; break;
    		case 208:cout << "【南蛮入侵】" << endl; break;
    		case 209:cout << "【万箭齐发】" << endl; break;
    		case 210:cout << "【无懈可击】" << endl; break;
    		case 251:cout << "【乐不思蜀】" << endl; break;
    		case 252:cout << "【闪电】" << endl; break;
    		case 301:cout << "【诸葛连弩(1)】" << endl; break;
    		case 302:cout << "【雌雄双股剑(2)】" << endl; break;
    		case 303:cout << "【青釭剑(2)】" << endl; break;
    		case 304:cout << "【青龙偃月刀(3)】" << endl; break;
    		case 305:cout << "【丈八蛇矛(3)】" << endl; break;
    		case 306:cout << "【贯石斧(3)】" << endl; break;
    		case 307:cout << "【方天画戟(4)】" << endl; break;
    		case 308:cout << "【麒麟弓(5)】" << endl; break;
    		case 331:cout << "【八卦阵】" << endl; break;
    		case 361:cout << "【赤兔(-1)】" << endl; break;
    		case 362:cout << "【大宛(-1)】" << endl; break;
    		case 363:cout << "【紫辛(-1)】" << endl; break;
    		case 381:cout << "【爪黄飞电(+1)】" << endl; break;
    		case 382:cout << "【的卢(+1)】" << endl; break;
    		case 383:cout << "【绝影(+1)】" << endl; break;
    		default:printf("类型参数错误!"); break;
    		}
    	}
    };
    void Qishixipai(pai A[2][4][13], pai paidui[104])
    {
    	int i, m, x, y, z, a[104] = { 0 };
    	srand((unsigned)time(NULL));
    	for (i = 1; i <= 104; i++)
    	{
    		while (a[m = rand() % 104]);
    		a[m] = i;
    	}
    	for (i = 0; i <= 103; i++)
    	{
    		x = (a[i] - 1) / 52;
    		y = ((a[i] - 1) - 52 * x) / 13;
    		z = (a[i] - 1) % 13;
    		paidui[i] = A[x][y][z];
    	}
    }
    void Xipai(pai paidui[104], int* paiduishu, pai qipaidui[104], int* qipaishu)
    {
    	int i, m, a[104] = { 0 };
    	srand((unsigned)time(NULL));
    	for (i = 1; i <= (*qipaishu); i++)
    	{
    		while (a[m = rand() % (*qipaishu)]);
    		a[m] = i;
    	}
    	for (i = 0; i <= ((*qipaishu) - 1); i++)
    	{
    		paidui[i] = qipaidui[a[i]];
    		qipaidui[a[i]].leixing = -1;
    		(*paiduishu)++;
    		(*qipaishu)--;
    	}
    	for (i = (*paiduishu); i <= 103; i++)paidui[i].leixing = -1;
    }
    pai Mo1pai(pai A[104], int* x, pai B[104], int* y, int* b)
    {
    	pai p;
    	if ((*x) == 0)Xipai(A, x, B, y);
    	else if ((*x) < 0)printf("摸牌参数错误!");
    	else;
    	p = A[104 - (*x)];
    	(*x)--;
    	(*b)++;
    	return(p);
    }
    struct wujiang
    {
    	char name;
    	int tili;
    	int tilishangxian;
    	int shoupaishangxian;
    	int huihekaishi;
    	int panding;
    	int mopai;
    	int chupai;
    	int qipai;
    	int huihejieshu;
    	int juese;
    	pai shoupai[20];
    	int shoupaishu;
    	pai zhuangbei[4];
    	int zhuangbeishu;
    	pai pandingpai[3];
    	int pandingshu;
    	int juli[1];
    	void Kanshoupai()
    	{
    		printf("玩家当前手牌:\n");
    		if (shoupaishu)
    		{
    			int m;
    			for (m = 0; m <= (shoupaishu - 1); m++)
    			{
    				printf("%d ", m);
    				(shoupai[m]).Kanpai();
    			}
    		}
    		else printf("空城!\n");
    		printf("\n");
    	}
    	void Kanzhuangbei()
    	{
    		if (juese)printf("玩家");
    		else printf("电脑");
    		printf("当前装备:\n");
    		printf("0 武器: ");
    		if ((zhuangbei[0]).leixing == -1)printf("空\n");
    		else (zhuangbei[0]).Kanpai();
    		printf("1 防具: ");
    		if ((zhuangbei[1]).leixing == -1)printf("空\n");
    		else (zhuangbei[1]).Kanpai();
    		printf("2 进攻马: ");
    		if ((zhuangbei[2]).leixing == -1)printf("空\n");
    		else (zhuangbei[2]).Kanpai();
    		printf("3 防御马: ");
    		if ((zhuangbei[3]).leixing == -1)printf("空\n");
    		else (zhuangbei[3]).Kanpai();
    		printf("\n");
    	}
    	void Kanpandingpai()
    	{
    		if (juese)printf("玩家");
    		else printf("电脑");
    		printf("当前判定区:\n");
    		if ((pandingpai[0]).leixing == -1)printf("空\n");
    		else
    		{
    			printf("0 ");
    			(pandingpai[0]).Kanpai();
    			if ((pandingpai[1]).leixing == -1);
    			else
    			{
    				printf("1 ");
    				(pandingpai[1]).Kanpai();
    				if ((pandingpai[2]).leixing == -1);
    				else
    				{
    					printf("2 ");
    					(pandingpai[2]).Kanpai();
    				}
    			}
    		}
    	}
    };
    void Mopai(int* shoupaishu, pai shoupai[20], pai A[104], int* x, pai B[104], int* y, int juese)
    {
    	if (juese)printf("玩家从牌堆摸2张牌\n");
    	else printf("电脑从牌堆摸2张牌\n");
    	pai p;
    	p = Mo1pai(A, x, B, y, shoupaishu);
    	shoupai[*shoupaishu - 1] = p;
    	pai q;
    	q = Mo1pai(A, x, B, y, shoupaishu);
    	shoupai[*shoupaishu - 1] = q;
    	int m;
    	if (juese)
    	{
    		printf("玩家当前手牌:\n");
    		for (m = 0; m <= (*shoupaishu - 1); m++)
    		{
    			printf("%d ", m);
    			(shoupai[m]).Kanpai();
    		}
    	}
    	printf("牌堆还剩%d张牌!\n\n", *x);
    }
    void Qishishoupai(wujiang* w, pai A[104], int* x, pai B[104], int* y)
    {
    	pai a;
    	a = Mo1pai(A, x, B, y, &((*w).shoupaishu));
    	(*w).shoupai[(*w).shoupaishu - 1] = a;
    	pai b;
    	b = Mo1pai(A, x, B, y, &((*w).shoupaishu));
    	(*w).shoupai[(*w).shoupaishu - 1] = b;
    	pai c;
    	c = Mo1pai(A, x, B, y, &((*w).shoupaishu));
    	(*w).shoupai[(*w).shoupaishu - 1] = c;
    	pai d;
    	d = Mo1pai(A, x, B, y, &((*w).shoupaishu));
    	(*w).shoupai[(*w).shoupaishu - 1] = d;
    	int m;
    	if ((*w).juese)printf("玩家从牌堆摸4张牌\n");
    	else printf("电脑从牌堆摸4张牌\n");
    	if ((*w).juese)
    	{
    		printf("玩家当前手牌:\n");
    		for (m = 0; m <= ((*w).shoupaishu - 1); m++)
    		{
    			printf("%d ", m);
    			((*w).shoupai[m]).Kanpai();
    		}
    	}
    	printf("牌堆还剩%d张牌!\n\n", *x);
    }
    void Panding(pai paidui[104], int* paiduishu, pai qipaidui[104], int* qipaishu)
    {
    	paidui[*paiduishu].Kanpai();
    	qipaidui[*qipaishu] = paidui[*paiduishu];
    	(*paiduishu)--;
    	(*qipaishu)++;
    }
    pai Zhangba(wujiang* w, pai qipaidui[104], int* qipaishu)
    {
    	int x, y;
    	pai p;
    	for (;;)
    	{
    		int i, j;
    		printf("请输入任意两张手牌之前的编号,以空格隔开,以回车结束!\n");
    		scanf("%d", &x);
    		scanf("%d", &y);
    		if ((x >= 0) && (x < (*w).shoupaishu) && (y >= 0) && (y < (*w).shoupaishu - 1))
    		{
    			switch ((((*w).shoupai[x].huase) % 2) + (((*w).shoupai[y].huase) % 2))
    			{
    			case 0:p.yanse = 0; break;
    			case 2:p.yanse = 1; break;
    			case 1:p.yanse = 2; break;
    			default:printf("【丈八蛇矛】函数参数错误!\n");
    			}
    			qipaidui[*qipaishu] = (*w).shoupai[x];
    			(*w).shoupai[x].leixing = -1;
    			((*w).shoupaishu)--;
    			(*qipaishu)++;
    			qipaidui[*qipaishu] = (*w).shoupai[y];
    			(*w).shoupai[y].leixing = -1;
    			((*w).shoupaishu)--;
    			(*qipaishu)++; printf("弃牌数:%d", *qipaishu);
    			for (i = 0; i <= (((*w).shoupaishu) + 1); i++)
    			{
    				if ((*w).shoupai[i].leixing == -1)
    				{
    					for (j = i + 1; j <= (((*w).shoupaishu) + 2); j++)
    						(*w).shoupai[j - 1] = (*w).shoupai[j];
    					i--;
    				}
    			}
    			printf("玩家把:\n");
    			qipaidui[(*qipaishu) - 2].Kanpai();
    			qipaidui[(*qipaishu) - 1].Kanpai();
    			printf("当作一张");
    			switch (p.yanse)
    			{
    			case 0:printf("黑色"); break;
    			case 2:printf("红色"); break;
    			case 1:printf("无色"); break;
    			default:printf("绿色"); break;
    			}
    			printf("无点数的【杀】");
    			p.dianshu = -1;
    			p.leixing = 101;
    			return p;
    			break;
    		}
    		printf("你将两张空气当作一张空气属性的【杀】使用或打出!\n");
    	}
    }
    int Xuanpai(wujiang* w, int t)
    {
    	int x;
    	if ((*w).juese)
    	{
    		for (;;)
    		{
    			printf("出牌请输入手牌之前的编号,以回车结束!\n如果你想结束出牌阶段,请输入“-1”,以回车结束!\n");
    			scanf("%d", &x);
    			if ((x >= -1 && x < ((*w).shoupaishu)) || ((x == 100) && ((*w).zhuangbei[0].leixing == 305)))
    			{
    				return x;
    				break;
    			}
    			printf("你打出了一张空气!\n");
    		}
    	}
    	else return t;
    }
    pai Panpai(wujiang* w1, int* sha, int y, pai qipaidui[104], int* qipaishu)
    {
    	pai p, q;
    	p.leixing = 0;
    	q.leixing = -1;
    	if (y == -1)return q;
    	else
    	{
    		if (y == 100)
    		{
    			if ((*sha) > 0)
    			{
    				q = Zhangba(w1, qipaidui, qipaishu);
    				printf("使用!\n");
    				return q;
    			}
    			else
    			{
    				printf("当前回合使用【杀】的次数已用尽,你也不能使用【丈八蛇矛】效果!\n");
    				return p;
    			}
    		}
    		switch ((*w1).shoupai[y].leixing)
    		{
    		case 101:
    			if (((*sha) > 0) || ((*w1).zhuangbei[0].leixing == 301))
    			{
    				if (((*w1).zhuangbei[0].leixing == 301))printf("武器【诸葛连弩】效果被触发!\n");
    				return (*w1).shoupai[y];
    				break;
    			}
    			else
    			{
    				if ((*w1).juese)printf("当前回合使用【杀】的次数已用尽,你不能使用【杀】!\n");
    				return p; break;
    			}
    		case 102:
    			if ((*w1).juese)
    				printf("当前不需要响应任何操作,你不能主动打出【闪】!\n");
    			return p; break;
    		case 103:
    			if (((*w1).tili) < ((*w1).tilishangxian))
    			{
    				return (*w1).shoupai[y];
    				break;
    			}
    			else
    			{
    				if ((*w1).juese)
    					printf("你并未受伤,不能对自己使用【桃】!\n");
    			}
    			return p; break;
    		case 210:
    			if ((*w1).juese)
    				printf("当前不需要响应任何锦囊,你不能主动打出【无懈可击】!\n");
    			return p; break;
    		case 201:
    		case 202:
    		case 203:
    		case 204:
    		case 205:
    		case 206:
    		case 207:
    		case 208:
    		case 209:
    		case 251:
    		case 252:
    		case 301:
    		case 302:
    		case 303:
    		case 304:
    		case 305:
    		case 306:
    		case 307:
    		case 308:
    		case 331:
    		case 361:
    		case 362:
    		case 363:
    		case 381:
    		case 382:
    		case 383:return (*w1).shoupai[y]; break;
    		default:printf("手牌类型参数错误!\n"); return p; break;
    		}
    	}
    }
    int Mubiao(pai p, wujiang* w1, wujiang* w2, int* sha)
    {
    	int x;
    	switch (p.leixing)
    	{
    	case 101:
    		if ((*w1).juese)
    		{
    			printf("请选择【杀】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
    			scanf("%d", &x);
    			if (x == 0)
    			{
    				if ((*w1).zhuangbei[0].changdu >= (*w1).juli[0])
    				{
    					(*sha)--;
    					return((*w2).juese);
    				}
    				else
    				{
    					printf("武器长度不够!\n");
    					return -2;
    				}
    			}
    			else
    			{
    				printf("目标错误!\n");
    				return -2;
    			}
    		}
    		else
    		{
    			if ((*w1).zhuangbei[0].changdu >= (*w1).juli[0])
    			{
    				(*sha)--;
    				return((*w2).juese);
    			}
    			else return -2;
    		}
    		break;
    	case 103:return((*w1).juese); break;
    	case 201:
    		if ((*w1).juese)
    		{
    			printf("请选择【过河拆桥】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
    			scanf("%d", &x);
    			if (x == 0)
    			{
    				if ((*w2).shoupaishu || (*w2).zhuangbeishu || (*w2).pandingshu)return((*w2).juese);
    				else
    				{
    					printf("目标没有牌!\n");
    					return -2;
    				}
    			}
    			else
    			{
    				printf("目标错误!\n");
    				return -2;
    			}
    		}
    		else return((*w2).juese);
    		break;
    	case 202:
    		if ((*w1).juese)
    		{
    			printf("请选择【顺手牵羊】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
    			scanf("%d", &x);
    			if (x == 0)
    			{
    				if (((*w2).shoupaishu || (*w2).zhuangbeishu || (*w2).pandingshu) && ((*w1).juli[0] <= 1))return((*w2).juese);
    				else
    				{
    					printf("目标没有牌!\n");
    					return -2;
    				}
    			}
    			else
    			{
    				printf("目标错误!\n");
    				return -2;
    			}
    		}
    		else
    		{
    			if ((*w1).juli[0] <= 1)return((*w2).juese);
    			else return -2;
    		}
    		break;
    	case 203:
    		return((*w1).juese); break;
    	case 204:
    		if ((*w1).juese)
    		{
    			printf("请选择【决斗】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
    			scanf("%d", &x);
    			if (x == 0)return((*w2).juese);
    			else
    			{
    				printf("目标错误!\n");
    				return -2;
    			}
    		}
    		else return((*w2).juese);
    		break;
    	case 205:
    		int y;
    		if ((*w1).juese)
    		{
    			printf("请选择【借刀杀人】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
    			scanf("%d", &x);
    			if (x != 0)
    			{
    				printf("目标错误!\n");
    				return -2;
    			}
    			else
    			{
    				if (((*w2).zhuangbei[0]).leixing <= 300 || ((*w2).zhuangbei[0]).leixing >= 331)
    				{
    					printf("目标装备区里没有武器!\n");
    					return -2;
    				}
    				else
    				{
    					printf("请选择【杀】的目标!\n提示:【杀】的目标必须在【借刀杀人】的目标的攻击范围之内!\n输入目标前的编号,以回车结束!\n0 玩家\n");
    					scanf("%d", &y);
    					if (y != 0)
    					{
    						printf("目标错误!\n");
    						return -2;
    					}
    					else
    					{
    						if (((*w2).zhuangbei[0].changdu) < (*w2).juli[0])
    						{
    							printf("武器距离不够!\n");
    							return -2;
    						}
    						else
    							return((*w2).juese);
    					}
    				}
    			}
    		}
    		else
    		{
    			if (((*w2).zhuangbei[0]).leixing <= 300 || ((*w2).zhuangbei[0]).leixing >= 331)return -2;
    			else
    			{
    				if (((*w2).zhuangbei[0].changdu) < (*w2).juli[0])return -2;
    				else return((*w2).juese);
    			}
    		}
    		break;
    	case 206:
    	case 207:return 99; break;
    	case 208:
    	case 209:return 100; break;
    	case 251:
    		if ((*w1).juese)
    		{
    			printf("请选择【乐不思蜀】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
    			scanf("%d", &x);
    			if (x == 0)
    			{
    				int i;
    				for (i = 0; i <= 2; i++)
    				{
    					if ((*w2).pandingpai[i].leixing == 251)
    						i = -1;
    					break;
    				}
    				if (i == -1)
    				{
    					printf("目标判定区里不能同时存在两张相同的延时类锦囊!\n");
    					return -2;
    				}
    				else return((*w2).juese);
    			}
    			else
    			{
    				printf("目标错误!\n");
    				return -2;
    			}
    		}
    		else
    		{
    			int i;
    			for (i = 0; i <= 2; i++)
    			{
    				if ((*w2).pandingpai[i].leixing == 251)
    					i = -1;
    				break;
    			}
    			if (i == -1)return -2;
    			else return((*w2).juese);
    		}
    		break;
    	case 252:
    		int i;
    		for (i = 0; i <= 2; i++)
    		{
    			if ((*w1).pandingpai[i].leixing == 252)
    				i = -1;
    			break;
    		}
    		if (i == -1)
    		{
    			if ((*w1).juese)printf("目标判定区里不能同时存在两张相同的延时类锦囊!\n");
    			return -2;
    		}
    		else return ((*w1).juese);
    		break;
    	case 301:
    	case 302:
    	case 303:
    	case 304:
    	case 305:
    	case 306:
    	case 307:
    	case 308:
    	case 331:
    	case 361:
    	case 362:
    	case 363:
    	case 381:
    	case 382:
    	case 383:return((*w1).juese); break;
    	default:return -2; break;
    	}
    }
    void Da1pai(wujiang* w1, wujiang* w2, pai qipaidui[104], int* qipaishu, int x)
    {
    	int i;
    	if ((x < 0 || x >= ((*w1).shoupaishu)) && x != 100)
    		printf("你的牌呢?!\n");
    	else
    	{
    		switch (((*w1).shoupai)[x].leixing)
    		{
    		case 101:
    		case 102:
    		case 103:
    		case 201:
    		case 202:
    		case 203:
    		case 204:
    		case 205:
    		case 206:
    		case 207:
    		case 208:
    		case 209:
    		case 210:
    			qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			(*qipaishu)++;
    			break;
    		case 251:
    			for (i = 1; i >= 0; i--)(*w2).pandingpai[i + 1] = (*w2).pandingpai[i];
    			(*w2).pandingpai[0] = (*w1).shoupai[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			((*w2).pandingshu)++;
    			break;
    		case 252:
    			for (i = 1; i >= 0; i--)(*w1).pandingpai[i + 1] = (*w1).pandingpai[i];
    			(*w1).pandingpai[0] = (*w1).shoupai[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			((*w1).pandingshu)++;
    			break;
    		case 301:
    		case 302:
    		case 303:
    		case 304:
    		case 305:
    		case 306:
    		case 307:
    		case 308:
    			if ((*w1).zhuangbei[0].leixing == -1)((*w1).zhuangbeishu)++;
    			else
    			{
    				qipaidui[*qipaishu] = ((*w1).zhuangbei)[0];
    				(*qipaishu)++;
    			}
    			(*w1).zhuangbei[0] = (*w1).shoupai[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			break;
    		case 331:
    			if ((*w1).zhuangbei[1].leixing == -1)((*w1).zhuangbeishu)++;
    			else
    			{
    				qipaidui[*qipaishu] = ((*w1).zhuangbei)[1];
    				(*qipaishu)++;
    			}
    			(*w1).zhuangbei[1] = (*w1).shoupai[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			break;
    		case 361:
    		case 362:
    		case 363:
    			if ((*w1).zhuangbei[2].leixing == -1)((*w1).zhuangbeishu)++;
    			else
    			{
    				qipaidui[*qipaishu] = ((*w1).zhuangbei)[2];
    				(*qipaishu)++;
    			}
    			(*w1).zhuangbei[2] = (*w1).shoupai[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			break;
    		case 381:
    		case 382:
    		case 383:
    			if ((*w1).zhuangbei[3].leixing == -1)((*w1).zhuangbeishu)++;
    			else
    			{
    				qipaidui[*qipaishu] = ((*w1).zhuangbei)[3];
    				(*qipaishu)++;
    			}
    			(*w1).zhuangbei[3] = (*w1).shoupai[x];
    			for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    			((*w1).shoupaishu)--;
    			break;
    		default:break;
    		}
    	}
    }
    void Miaoshu(pai p, int juese, int duixiang)
    {
    	if (juese == 0)printf("电脑");
    	else if (juese == 1)printf("玩家");
    	else printf("角色参数错误!\n");
    	if (p.leixing <= 300 && p.leixing > 100)
    	{
    		switch (duixiang)
    		{
    		case -1:printf("打出"); break;
    		case 0:printf("对电脑使用"); break;
    		case 1:printf("对玩家使用"); break;
    		case 99:printf("使用"); break;
    		case 100:printf("对所有人使用"); break;
    		default:printf("对象参数错误\n"); break;
    		}
    	}
    	else if (p.leixing >= 301 && p.leixing <= 400)
    		printf("装备");
    	else printf("你出的是什么东西?\n");
    	p.Kanpai();
    	if (!juese && (p.leixing == 101 || p.leixing == 204 || p.leixing == 205 || p.leixing == 207 || p.leixing == 208 || p.leixing == 209))printf("请响应!\n");
    }
    int Wuxie(pai* p, wujiang* w1, wujiang* w2, pai qipaidui[104], int* qipaishu, int a)
    {
    	int x;
    	if ((*w1).juese)
    	{
    		printf("是否使用【无懈可击】响应?\n\n");
    		for (;;)
    		{
    			(*w1).Kanshoupai();
    			printf("如果要使用【无懈可击】请输入手牌之前编号,不需要请输入“-1”,以回车结束!\n");
    			scanf("%d", &x);
    			if (x == -1)
    			{
    				for (x = 0; x < ((*w2).shoupaishu); x++)
    				{
    					if ((*w2).shoupai[x].leixing == 210)
    					{
    						printf("电脑使用");
    						((*w2).shoupai)[x].Kanpai();
    						printf("对象是");
    						(*p).Kanpai();
    						(*p) = ((*w2).shoupai)[x];
    						qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    						for (int i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    						((*w2).shoupaishu)--;
    						(*qipaishu)++;
    						a++;
    						break;
    					}
    				}
    				break;
    			}
    			else if ((*w1).shoupai[x].leixing == 210)
    			{
    				printf("玩家使用");
    				((*w1).shoupai)[x].Kanpai();
    				printf("对象是");
    				(*p).Kanpai();
    				(*p) = ((*w1).shoupai)[x];
    				qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    				for (int i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    				((*w1).shoupaishu)--;
    				(*qipaishu)++;
    				(*w1).Kanshoupai();
    				a++;
    				break;
    			}
    			else printf("你确定你使用的是【无懈可击】?\n");
    		}
    	}
    	else
    	{
    		printf("是否使用【无懈可击】响应?\n");
    		for (;;)
    		{
    			(*w2).Kanshoupai();
    			printf("如果要使用【无懈可击】请输入手牌之前编号,不需要请输入“-1”,以回车结束!\n");
    			scanf("%d", &x);
    			if (x == -1)break;
    			else if ((*w2).shoupai[x].leixing == 210)
    			{
    				printf("玩家使用");
    				((*w2).shoupai)[x].Kanpai();
    				printf("对象是");
    				(*p).Kanpai();
    				(*p) = ((*w2).shoupai)[x];
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (int i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				(*w2).Kanshoupai();
    				a++;
    				break;
    			}
    			else printf("你确定你使用的是【无懈可击】?\n");
    		}
    	}
    	return a;
    }
    int Qiutao(wujiang* w, pai qipaidui[104], int* qipaishu)
    {
    	int x;
    	if ((*w).juese)
    	{
    		for (;;)
    		{
    			printf("如果要使用【桃】请输入手牌之前的编号,不需要请输入“-1”,以回车结束!\n");
    			scanf("%d", &x);
    			if (x == -1)
    			{
    				return -1;
    				break;
    			}
    			else if ((*w).shoupai[x].leixing == 103)
    			{
    				qipaidui[*qipaishu] = ((*w).shoupai)[x];
    				for (int i = x + 1; i <= ((*w).shoupaishu); i++)((*w).shoupai)[i - 1] = ((*w).shoupai)[i];
    				((*w).shoupaishu)--;
    				(*qipaishu)++;
    				return 0;
    				break;
    			}
    			else printf("你确定你使用的是【桃】?\n");
    		}
    	}
    	else
    	{
    		for (x = 0; x < ((*w).shoupaishu); x++)
    		{
    			if ((*w).shoupai[x].leixing == 103)
    			{
    				qipaidui[*qipaishu] = ((*w).shoupai)[x];
    				for (int i = x + 1; i <= ((*w).shoupaishu); i++)((*w).shoupai)[i - 1] = ((*w).shoupai)[i];
    				((*w).shoupaishu)--;
    				(*qipaishu)++;
    				return 0;
    				break;
    			}
    		}
    		return -1;
    	}
    }
    int Binsi(wujiang* w1, wujiang* w2, pai qipaidui[104], int* qipaishu)
    {
    	if (((*w2).tili) > 0)return 0;
    	else
    	{
    		int i;
    		if ((*w1).juese)
    		{
    			for (;;)
    			{
    				printf("电脑濒死,是否使用【桃】?\n");
    				i = Qiutao(w1, qipaidui, qipaishu);
    				if (i == 0)((*w2).tili)++;
    				if ((i == -1) || ((*w2).tili > 0))break;
    			}
    			if ((*w2).tili > 0)return 0;
    			else
    			{
    				for (;;)
    				{
    					i = Qiutao(w2, qipaidui, qipaishu);
    					if (i == 0)((*w2).tili)++;
    					if ((i == -1) || ((*w2).tili > 0))break;
    				}
    				if ((*w2).tili > 0)return 0;
    				else return -1;
    			}
    		}
    		else
    		{
    			for (;;)
    			{
    				printf("玩家濒死,是否使用【桃】?\n");
    				i = Qiutao(w2, qipaidui, qipaishu);
    				if (i == 0)((*w2).tili)++;
    				if ((i == -1) || ((*w2).tili > 0))break;
    			}
    			if ((*w2).tili > 0)return 0;
    			else return -1;
    		}
    	}
    }
    int Shan(wujiang* w1, wujiang* w2, pai paidui[104], int* paiduishu, pai qipaidui[104], int* qipaishu)
    {
    	int x;
    	if ((*w2).juese)
    	{
    		if (((*w2).zhuangbei[1].leixing == 331) && ((*w1).zhuangbei[0].leixing != 303))
    		{
    			for (;;)
    			{
    				int m;
    				printf("是否发动【八卦阵】防具效果?\n0 否\n1 是\n请输入选项之前的编号,以回车结束!\n");
    				scanf("%d", &m);
    				if (m == 1)
    				{
    					Panding(paidui, paiduishu, qipaidui, qipaishu);
    					if (qipaidui[(*qipaishu) - 1].huase % 2)
    					{
    						printf("【八卦阵】判定成功!\n");
    						return 0;
    					}
    				}
    				else if (m == 0)
    				{
    					printf("【八卦阵】判定失败!\n");
    					break;
    				}
    				else printf("你确定你输入的是“0”或“1”?\n");
    			}
    		}
    		else if (((*w2).zhuangbei[1].leixing == 331) && ((*w1).zhuangbei[0].leixing == 303))printf("【青釭剑】锁定技被触发!\n");
    		for (;;)
    		{
    			printf("请输入手牌之前的编号,或者输入“-1”放弃打出【闪】,以回车结束!\n");
    			scanf("%d", &x);
    			if (x == -1)
    			{
    				return -1;
    				break;
    			}
    			else if ((*w2).shoupai[x].leixing == 102)
    			{
    				printf("玩家打出");
    				((*w2).shoupai)[x].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (int i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				return 0;
    				break;
    			}
    			else printf("你确定你打出的是【闪】?\n");
    		}
    	}
    	else
    	{
    		if (((*w2).zhuangbei[1].leixing == 331) && ((*w1).zhuangbei[0].leixing != 303))
    		{
    			Panding(paidui, paiduishu, qipaidui, qipaishu);
    			if (qipaidui[(*qipaishu) - 1].huase % 2)
    			{
    				printf("【八卦阵】判定成功!\n");
    				return 0;
    			}
    			else printf("【八卦阵】判定失败!\n");
    		}
    		else if (((*w2).zhuangbei[1].leixing == 331) && ((*w1).zhuangbei[0].leixing == 303))printf("【青釭剑】锁定技被触发!\n");
    		int i;
    		for (x = 0; x < ((*w2).shoupaishu); x++)
    		{
    			if ((*w2).shoupai[x].leixing == 102)
    			{
    				printf("电脑打出");
    				((*w2).shoupai)[x].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				return 0;
    				break;
    			}
    		}
    		return -1;
    	}
    }
    int Sha(wujiang* w1, wujiang* w2, pai paidui[104], int* paiduishu, pai qipaidui[104], int* qipaishu)
    {
    	int x;
    	if ((*w2).juese)
    	{
    		printf("请打出【闪】响应【杀】!否则你将受到1点伤害!\n");
    		x = Shan(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    		if (x == -1)
    		{
    			int i;
    			((*w2).tili)--;
    			printf("电脑对玩家造成1点伤害!\n");
    			i = Binsi(w1, w2, qipaidui, qipaishu);
    			return i;
    		}
    		else if (x == 0 && ((*w1).zhuangbei[0].leixing == 306))
    		{
    			int i;
    			if (((*w1).shoupaishu) >= 2)
    			{
    				printf("电脑弃掉:\n");
    				((*w1).shoupai)[0].Kanpai();
    				qipaidui[*qipaishu] = ((*w1).shoupai)[0];
    				for (i = 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    				((*w1).shoupaishu)--;
    				(*qipaishu)++;
    				((*w1).shoupai)[0].Kanpai();
    				qipaidui[*qipaishu] = ((*w1).shoupai)[0];
    				for (i = 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    				((*w1).shoupaishu)--;
    				(*qipaishu)++;
    				printf("发动【贯石斧】武器效果使【杀】造成伤害!\n");
    				((*w2).tili)--;
    				i = Binsi(w1, w2, qipaidui, qipaishu);
    				return i;
    			}
    			else return 0;
    		}
    		else if (x == 0 && ((*w1).zhuangbei[0].leixing == 304))
    		{
    			int i;
    			for (x = 0; x < ((*w1).shoupaishu); x++)
    			{
    				if ((*w1).shoupai[x].leixing == 101)
    				{
    					printf("电脑发动【青龙偃月刀】效果对玩家使用");
    					((*w1).shoupai)[x].Kanpai();
    					qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    					for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    					((*w1).shoupaishu)--;
    					(*qipaishu)++;
    					i = Sha(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    					return i;
    					break;
    				}
    			}
    			return 0;
    		}
    	}
    	else
    	{
    		x = Shan(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    		if (x == -1)
    		{
    			if ((*w1).zhuangbei[0].leixing == 308)
    			{
    				for (;;)
    				{
    					printf("是否发动【麒麟弓】武器效果?\n0 否\n1 是\n");
    					scanf("%d", &x);
    					if (x == 1)
    					{
    						if (((*w2).zhuangbei[2].leixing == -1) && ((*w2).zhuangbei[3].leixing == -1))
    						{
    							printf("电脑根本没有马,射你妹的马啊!\n");
    							break;
    						}
    						else
    						{
    							for (;;)
    							{
    								printf("0 ");
    								((*w2).zhuangbei[2]).Kanpai();
    								printf("1 ");
    								((*w2).zhuangbei[3]).Kanpai();
    								printf("请选择要弃掉的马,输入之前的编号,以回车结束!\n");
    								scanf("%d", &x);
    								if ((x == 0) && ((*w2).zhuangbei[2].leixing != -1))
    								{
    									printf("你弃掉了电脑的");
    									((*w2).zhuangbei)[2].Kanpai();
    									qipaidui[*qipaishu] = ((*w2).zhuangbei)[2];
    									((*w2).zhuangbeishu)--;
    									(*qipaishu)++;
    									((*w2).zhuangbei)[2].leixing = -1;
    									((*w2).juli[0])++;
    									break;
    								}
    								else if ((x == 1) && ((*w2).zhuangbei[3].leixing != -1))
    								{
    									printf("你弃掉了电脑的");
    									((*w2).zhuangbei)[3].Kanpai();
    									qipaidui[*qipaishu] = ((*w2).zhuangbei)[3];
    									((*w2).zhuangbeishu)--;
    									(*qipaishu)++;
    									((*w2).zhuangbei)[3].leixing = -1;
    									((*w1).juli[0])--;
    									break;
    								}
    								else printf("射你妹的马!");
    							}
    							break;
    						}
    					}
    					else if (x == 0)break;
    					else printf("键盘上的“0”和“1”被你吃了吗?\n");
    				}
    			}
    			int i;
    			((*w2).tili)--;
    			printf("玩家对电脑造成1点伤害!\n");
    			i = Binsi(w1, w2, qipaidui, qipaishu);
    			return i;
    		}
    		else if (x == 0 && ((*w1).zhuangbei[0].leixing == 306))
    		{
    			for (;;)
    			{
    				printf("是否发动【贯石斧】武器效果?\n0 否\n1 是\n");
    				scanf("%d", &x);
    				if (x == 1)
    				{
    					int i;
    					if ((*w1).shoupaishu + (*w1).zhuangbeishu <= 2)
    					{
    						printf("你除了【贯石斧】以外连2张牌都没有,发动你妹的效果!\n");
    						break;
    					}
    					else
    					{
    						printf("请分别弃掉两张牌!\n");
    						for (i = 0; i <= 2; i++)
    						{
    							for (;;)
    							{
    								printf("请选择区域:\n0 手牌\n1 装备\n");
    								scanf("%d", &x);
    								if (x == 0 && ((*w1).shoupaishu == 0))printf("你根本没有手牌,弃你妹啊!\n");
    								else if (x == 1 && ((*w1).zhuangbeishu == 1))printf("你根本没有别的装备,弃你妹啊!\n");
    								else if (x >= 0 && x <= 1)break;
    								else printf("键盘上的“0”和“1”被你吃了吗?\n");
    							}
    							if (x == 0)
    							{
    								for (;;)
    								{
    									(*w1).Kanshoupai();
    									printf("弃牌请输入手牌之前的编号,以回车结束!\n");
    									scanf("%d", &x);
    									if (x >= 0 && x < ((*w1).shoupaishu))break;
    									else printf("弃你妹的手牌!\n");
    								}
    								printf("你弃掉了");
    								((*w1).shoupai)[x].Kanpai();
    								qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    								for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    								((*w1).shoupaishu)--;
    								(*qipaishu)++;
    							}
    							else
    							{
    								for (;;)
    								{
    									(*w1).Kanzhuangbei();
    									printf("请输入装备之前的编号,以回车键结束!\n");
    									scanf("%d", &x);
    									if ((((*w1).zhuangbei[x]).leixing != -1) && (x >= 0) && (x <= 3))
    									{
    										printf("你弃掉了");
    										((*w1).zhuangbei)[x].Kanpai();
    										qipaidui[*qipaishu] = ((*w1).zhuangbei)[x];
    										((*w1).zhuangbeishu)--;
    										(*qipaishu)++;
    										((*w1).zhuangbei)[x].leixing = -1;
    										break;
    									}
    									else printf("弃你妹的装备!\n");
    								}
    							}
    						}
    					}
    					printf("玩家发动【贯石斧】武器效果使【杀】造成伤害!\n");
    					((*w2).tili)--;
    					i = Binsi(w1, w2, qipaidui, qipaishu);
    					return i;
    					break;
    				}
    				else if (x == 0)break;
    				else printf("键盘上的“0”和“1”被你吃了吗?\n");
    			}
    		}
    		else if (x == 0 && ((*w1).zhuangbei[0].leixing == 304))
    		{
    			for (;;)
    			{
    				printf("是否发动【青龙偃月刀】武器效果?\n0 否\n1 是\n");
    				scanf("%d", &x);
    				if (x == 1)
    				{
    					for (;;)
    					{
    						printf("请对电脑使用一张【杀】!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
    						(*w1).Kanshoupai();
    						scanf("%d", &x);
    						if (x == -1)
    						{
    							return 0;
    							break;
    						}
    						else if ((*w1).shoupai[x].leixing == 101)
    						{
    							int i;
    							printf("玩家对电脑使用");
    							((*w1).shoupai)[x].Kanpai();
    							qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    							for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    							((*w1).shoupaishu)--;
    							(*qipaishu)++;
    							i = Sha(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    							return i;
    							break;
    						}
    						else printf("你确定你打出的是【杀】?\n");
    					}
    				}
    				else if (x == 0)
    				{
    					return 0;
    					break;
    				}
    				else printf("你确定你输入的是“0”或“1”?\n");
    			}
    		}
    		else return 0;
    	}
    	return 0;
    }
    void Tao(wujiang* w1)
    {
    	((*w1).tili)++;
    	if ((*w1).juese)printf("玩家");
    	else printf("电脑");
    	printf("恢复了1点体力!\n");
    	if (((*w1).tili) > ((*w1).tilishangxian))printf("你被撑死了!\n");
    }
    void Chai(wujiang* w1, wujiang* w2, pai qipaidui[104], int* qipaishu)
    {
    	int i, x, y;
    	if ((*w1).juese)
    	{
    		for (;;)
    		{
    			if ((*w2).shoupaishu + (*w2).zhuangbeishu + (*w2).pandingshu == 0)
    			{
    				printf("对方空城,拆你妹啊!\n");
    				break;
    			}
    			else
    			{
    				printf("请选择想拆的区域,输入选项之前的编号,以回车结束!\n0 手牌\n1 装备区\n2 判定区\n");
    				scanf("%d", &x);
    				if (x == 0 && ((*w2).shoupaishu == 0))printf("你拆掉了一张空气!\n");
    				else if (x == 1 && ((*w2).zhuangbeishu == 0))printf("你拆掉了一张空气!\n");
    				else if (x == 2 && ((*w2).pandingshu == 0))printf("你拆掉了一张空气!\n");
    				else if (x >= 0 && x <= 2)break;
    				else printf("你拆掉了太空区里的一张牌!\n");
    			}
    		}
    		switch (x)
    		{
    		case 0:
    			srand((unsigned)time(NULL));
    			y = rand() % ((*w2).shoupaishu);
    			printf("你弃掉了电脑的");
    			((*w2).shoupai)[y].Kanpai();
    			qipaidui[*qipaishu] = ((*w2).shoupai)[y];
    			for (i = y + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    			((*w2).shoupaishu)--;
    			(*qipaishu)++;
    			break;
    		case 1:
    			for (;;)
    			{
    				(*w2).Kanzhuangbei();
    				printf("请输入装备之前的编号,以回车键结束!\n");
    				scanf("%d", &y);
    				if ((((*w2).zhuangbei[y]).leixing != -1) && (y >= 0) && (y <= 3))
    				{
    					printf("你弃掉了电脑的");
    					((*w2).zhuangbei)[y].Kanpai();
    					qipaidui[*qipaishu] = ((*w2).zhuangbei)[y];
    					((*w2).zhuangbeishu)--;
    					(*qipaishu)++;
    					((*w2).zhuangbei)[y].leixing = -1;
    					if (!y)((*w2).zhuangbei)[y].changdu = 1;
    					else if (y == 2)((*w2).juli[0])++;
    					else if (y == 3)((*w1).juli[0])--;
    					break;
    				}
    				else printf("你弃掉了一张空气!\n");
    			}
    			break;
    		case 2:
    			for (;;)
    			{
    				(*w2).Kanpandingpai();
    				printf("请输入判定牌之前的编号,以回车键结束!\n");
    				scanf("%d", &y);
    				if ((*w2).pandingpai[y].leixing != -1)
    				{
    					printf("你弃掉了电脑的");
    					((*w2).pandingpai)[y].Kanpai();
    					qipaidui[*qipaishu] = ((*w2).pandingpai)[y];
    					((*w2).pandingshu)--;
    					(*qipaishu)++;
    					((*w2).pandingpai)[y].leixing = -1;
    					break;
    				}
    				else printf("你弃掉了一张空气!\n");
    			}
    			break;
    		default:break;
    		}
    	}
    	else
    	{
    		if ((*w2).zhuangbeishu)
    		{
    			if ((*w2).zhuangbei[1].leixing != -1)
    			{
    				printf("电脑弃掉了玩家的");
    				((*w2).zhuangbei)[1].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).zhuangbei)[1];
    				((*w2).zhuangbeishu)--;
    				(*qipaishu)++;
    				((*w2).zhuangbei)[1].leixing = -1;
    			}
    			else if ((*w2).zhuangbei[3].leixing != -1)
    			{
    				printf("电脑弃掉了玩家的");
    				((*w2).zhuangbei)[3].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).zhuangbei)[3];
    				((*w2).zhuangbeishu)--;
    				(*qipaishu)++;
    				((*w2).zhuangbei)[3].leixing = -1;
    				((*w1).juli[0])--;
    			}
    			else if ((*w2).zhuangbei[0].leixing != -1)
    			{
    				printf("电脑弃掉了玩家的");
    				((*w2).zhuangbei)[0].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).zhuangbei)[0];
    				((*w2).zhuangbeishu)--;
    				(*qipaishu)++;
    				((*w2).zhuangbei)[0].leixing = -1;
    				((*w2).zhuangbei)[0].changdu = 1;
    			}
    			else
    			{
    				printf("电脑弃掉了玩家的");
    				((*w2).zhuangbei)[2].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).zhuangbei)[2];
    				((*w2).zhuangbeishu)--;
    				(*qipaishu)++;
    				((*w2).zhuangbei)[2].leixing = -1;
    				((*w2).juli[0])++;
    			}
    		}
    		else
    		{
    			srand((unsigned)time(NULL));
    			y = rand() % ((*w2).shoupaishu);
    			printf("电脑弃掉了玩家的手牌");
    			((*w2).shoupai)[y].Kanpai();
    			qipaidui[*qipaishu] = ((*w2).shoupai)[y];
    			for (i = y + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    			((*w2).shoupaishu)--;
    			(*qipaishu)++;
    		}
    	}
    }
    void Qian(wujiang* w1, wujiang* w2)
    {
    	int i, x, y;
    	if ((*w1).juese)
    	{
    		for (;;)
    		{
    			if ((*w2).shoupaishu + (*w2).zhuangbeishu + (*w2).pandingshu == 0)
    			{
    				printf("对方空城啦!你牵走了一张寂寞!\n");
    				break;
    			}
    			else
    			{
    				printf("请选择想牵的区域,输入选项之前的编号,以回车结束!\n0 手牌\n1 装备区\n2 判定区\n");
    				scanf("%d", &x);
    				if (x == 0 && ((*w2).shoupaishu == 0))printf("你牵走了一张空气!\n");
    				else if (x == 1 && ((*w2).zhuangbeishu == 0))printf("你牵走了一张空气!\n");
    				else if (x == 2 && ((*w2).pandingshu == 0))printf("你牵走了一张空气!\n");
    				else if (x >= 0 && x <= 2)break;
    				else printf("你牵走了太空区里的一张牌!\n");
    			}
    		}
    		switch (x)
    		{
    		case 0:
    			srand((unsigned)time(NULL));
    			y = rand() % ((*w2).shoupaishu);
    			printf("你牵走了电脑的");
    			((*w2).shoupai)[y].Kanpai();
    			(*w1).shoupai[(*w1).shoupaishu] = ((*w2).shoupai)[y];
    			for (i = y + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    			((*w2).shoupaishu)--;
    			((*w1).shoupaishu)++;
    			break;
    		case 1:
    			for (;;)
    			{
    				(*w2).Kanzhuangbei();
    				printf("请输入装备之前的编号,以回车键结束!\n");
    				scanf("%d", &y);
    				if ((((*w2).zhuangbei[y]).leixing != -1) && (y >= 0) && (y <= 3))
    				{
    					printf("你牵走了电脑的");
    					((*w2).zhuangbei)[y].Kanpai();
    					(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[y];
    					((*w2).zhuangbeishu)--;
    					((*w1).shoupaishu)++;
    					((*w2).zhuangbei)[y].leixing = -1;
    					if (!y)((*w2).zhuangbei[y]).changdu = 1;
    					else if (y == 2)((*w2).juli[0])++;
    					else if (y == 3)((*w1).juli[0])--;
    					break;
    				}
    				else printf("你弃掉了一张空气!\n");
    			}
    			break;
    		case 2:
    			for (;;)
    			{
    				(*w2).Kanpandingpai();
    				printf("请输入判定牌之前的编号,以回车键结束!\n");
    				scanf("%d", &y);
    				if ((*w2).pandingpai[y].leixing != -1)
    				{
    					printf("你牵走了电脑的");
    					((*w2).pandingpai)[y].Kanpai();
    					(*w1).shoupai[(*w1).shoupaishu] = ((*w2).pandingpai)[y];
    					((*w2).pandingshu)--;
    					((*w1).shoupaishu)++;
    					((*w2).pandingpai)[y].leixing = -1;
    					break;
    				}
    				else printf("你牵走了一张空气!\n");
    			}
    			break;
    		default:break;
    		}
    	}
    	else
    	{
    		if ((*w2).zhuangbeishu)
    		{
    			if ((*w2).zhuangbei[1].leixing != -1)
    			{
    				printf("电脑牵走了玩家的");
    				((*w2).zhuangbei)[1].Kanpai();
    				(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[1];
    				((*w2).zhuangbeishu)--;
    				((*w1).shoupaishu)++;
    				((*w2).zhuangbei)[1].leixing = -1;
    			}
    			else if ((*w2).zhuangbei[3].leixing != -1)
    			{
    				printf("电脑牵走了玩家的");
    				((*w2).zhuangbei)[3].Kanpai();
    				(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[3];
    				((*w2).zhuangbeishu)--;
    				((*w1).shoupaishu)++;
    				((*w2).zhuangbei)[3].leixing = -1;
    				((*w1).juli[0])--;
    			}
    			else if ((*w2).zhuangbei[0].leixing != -1)
    			{
    				printf("电脑牵走了玩家的");
    				((*w2).zhuangbei)[0].Kanpai();
    				(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[0];
    				((*w2).zhuangbeishu)--;
    				((*w1).shoupaishu)++;
    				((*w2).zhuangbei)[0].leixing = -1;
    				((*w2).zhuangbei)[0].changdu = 1;
    			}
    			else
    			{
    				printf("电脑牵走了玩家的");
    				((*w2).zhuangbei)[2].Kanpai();
    				(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[2];
    				((*w2).zhuangbeishu)--;
    				((*w1).shoupaishu)++;
    				((*w2).zhuangbei)[2].leixing = -1;
    				((*w2).juli[0])--;
    			}
    		}
    		else
    		{
    			srand((unsigned)time(NULL));
    			y = rand() % ((*w2).shoupaishu);
    			printf("电脑牵走了玩家的手牌");
    			((*w2).shoupai)[y].Kanpai();
    			(*w1).shoupai[(*w1).shoupaishu] = ((*w2).shoupai)[y];
    			for (i = y + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    			((*w2).shoupaishu)--;
    			((*w1).shoupaishu)++;
    		}
    	}
    }
    void Wuzhong(wujiang* w1, pai A[104], int* x, pai B[104], int* y)
    {
    	Mopai(&((*w1).shoupaishu), (*w1).shoupai, A, x, B, y, (*w1).juese);
    }
    int Juedou(wujiang* w1, wujiang* w2, pai qipaidui[104], int* qipaishu)
    {
    	int i, j, x;
    	if ((*w1).juese)
    	{
    		for (;;)
    		{
    			j = 0;
    			for (x = 0; x < ((*w2).shoupaishu); x++)
    			{
    				if ((*w2).shoupai[x].leixing == 101)
    				{
    					printf("电脑打出");
    					((*w2).shoupai)[x].Kanpai();
    					qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    					for (int i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    					((*w2).shoupaishu)--;
    					(*qipaishu)++;
    					j = 1;
    					break;
    				}
    			}
    			if (!j)
    			{
    				printf("玩家对电脑造成1点伤害!\n");
    				((*w2).tili)--;
    				i = Binsi(w1, w2, qipaidui, qipaishu);
    				return i;
    				break;
    			}
    			j = 0;
    			for (;;)
    			{
    				printf("请打出一张【杀】响应【决斗】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
    				if (((*w1).zhuangbei[0].leixing == 305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
    				(*w1).Kanshoupai();
    				scanf("%d", &x);
    				if (x == -1)
    				{
    					int i;
    					((*w1).tili)--;
    					printf("电脑对玩家造成1点伤害!\n");
    					i = Binsi(w2, w1, qipaidui, qipaishu);
    					return i;
    					break;
    				}
    				else if (((*w1).zhuangbei[0].leixing == 305) && x == 100)
    				{
    					pai p = Zhangba(w1, qipaidui, qipaishu);
    					p.paifu = -1;
    					printf("打出!\n");
    					j = 1;
    					break;
    				}
    				else if ((*w1).shoupai[x].leixing == 101)
    				{
    					printf("玩家打出");
    					((*w1).shoupai)[x].Kanpai();
    					qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    					for (i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    					((*w1).shoupaishu)--;
    					(*qipaishu)++;
    					j = 1;
    					break;
    				}
    				else printf("你确定你打出的是【杀】?\n");
    			}
    		}
    	}
    	else
    	{
    		for (;;)
    		{
    			j = 0;
    			for (;;)
    			{
    				printf("请打出一张【杀】响应【决斗】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
    				if (((*w1).zhuangbei[0].leixing == 305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
    				(*w2).Kanshoupai();
    				scanf("%d", &x);
    				if (x == -1)
    				{
    					int i;
    					((*w2).tili)--;
    					printf("电脑对玩家造成1点伤害!\n");
    					i = Binsi(w1, w2, qipaidui, qipaishu);
    					return i;
    					break;
    				}
    				else if (((*w2).zhuangbei[0].leixing == 305) && x == 100)
    				{
    					pai p = Zhangba(w2, qipaidui, qipaishu);
    					p.paifu = -1;
    					printf("打出!\n");
    					j = 1;
    					break;
    				}
    				else if ((*w2).shoupai[x].leixing == 101)
    				{
    					printf("玩家打出");
    					((*w2).shoupai)[x].Kanpai();
    					qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    					for (i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    					((*w2).shoupaishu)--;
    					(*qipaishu)++;
    					j = 1;
    					break;
    				}
    				else printf("你确定你打出的是【杀】?\n");
    			}
    			j = 0;
    			for (x = 0; x < ((*w1).shoupaishu); x++)
    			{
    				if ((*w1).shoupai[x].leixing == 101)
    				{
    					printf("电脑打出");
    					((*w1).shoupai)[x].Kanpai();
    					qipaidui[*qipaishu] = ((*w1).shoupai)[x];
    					for (int i = x + 1; i <= ((*w1).shoupaishu); i++)((*w1).shoupai)[i - 1] = ((*w1).shoupai)[i];
    					((*w1).shoupaishu)--;
    					(*qipaishu)++;
    					j = 1;
    					break;
    				}
    			}
    			if (!j)
    			{
    				printf("玩家对电脑造成1点伤害!\n");
    				((*w2).tili)--;
    				i = Binsi(w2, w1, qipaidui, qipaishu);
    				return i;
    				break;
    			}
    		}
    	}
    }
    int Jiedao(wujiang* w1, wujiang* w2, pai paidui[104], int* paiduishu, pai qipaidui[104], int* qipaishu)
    {
    	int i, j = 0, x;
    	if ((*w1).juese)
    	{
    		for (x = 0; x < ((*w2).shoupaishu); x++)
    		{
    			if ((*w2).shoupai[x].leixing == 101)
    			{
    				printf("电脑对玩家使用");
    				((*w2).shoupai)[x].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (int i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				j = 1;
    				break;
    			}
    		}
    		if (j)
    		{
    			i = Sha(w2, w1, paidui, paiduishu, qipaidui, qipaishu);
    			return i;
    			printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w1).tili, (*w1).tilishangxian, (*w2).tili, (*w2).tilishangxian);
    		}
    		else
    		{
    			printf("电脑放弃使用【杀】,玩家获得电脑的武器");
    			(*w2).zhuangbei[0].Kanpai();
    			(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[0];
    			((*w2).zhuangbeishu)--;
    			((*w1).shoupaishu)++;
    			((*w2).zhuangbei)[0].leixing = -1;
    			((*w2).zhuangbei)[0].changdu = 1;
    			(*w1).Kanshoupai();
    			return 0;
    		}
    	}
    	else
    	{
    		for (;;)
    		{
    			printf("请对电脑使用一张【杀】,否则电脑将获得你的武器!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
    			if (((*w2).zhuangbei[0].leixing == 305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
    			(*w2).Kanshoupai();
    			scanf("%d", &x);
    			if (x == -1)break;
    			else if (((*w2).zhuangbei[0].leixing == 305) && x == 100)
    			{
    				pai p = Zhangba(w2, qipaidui, qipaishu);
    				p.paifu = -1;
    				printf("使用!\n");
    				j = 1;
    				break;
    			}
    			else if ((*w2).shoupai[x].leixing == 101)
    			{
    				printf("玩家对电脑使用");
    				((*w2).shoupai)[x].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				j = 1;
    				break;
    			}
    			else printf("你确定你使用的是【杀】?\n");
    		}
    		if (j)
    		{
    			i = Sha(w2, w1, paidui, paiduishu, qipaidui, qipaishu);
    			return i;
    			printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w2).tili, (*w2).tilishangxian, (*w1).tili, (*w1).tilishangxian);
    		}
    		else
    		{
    			printf("玩家放弃使用【杀】,电脑获得玩家的武器");
    			((*w2).zhuangbei)[0].Kanpai();
    			(*w1).shoupai[(*w1).shoupaishu] = ((*w2).zhuangbei)[0];
    			((*w2).zhuangbeishu)--;
    			((*w1).shoupaishu)++;
    			((*w2).zhuangbei)[0].leixing = -1;
    			((*w2).zhuangbei)[0].changdu = 1;
    			return 0;
    		}
    	}
    }
    void Taoyuan(wujiang* w)
    {
    	if ((*w).tili < (*w).tilishangxian)
    	{
    		((*w).tili)++;
    		if ((*w).juese)printf("玩家");
    		else printf("电脑");
    		printf("恢复1点体力!\n");
    	}
    }
    void Kaipai(pai paidui[104], int* paiduishu, int renshu, pai wugu[10])
    {
    	int i;
    	printf("五谷丰登开牌:\n");
    	for (i = 1; i <= renshu; i++)
    	{
    		wugu[i - 1] = paidui[104 - (*paiduishu)];
    		(*paiduishu)--;
    		printf("%d ", i - 1);
    		wugu[i - 1].Kanpai();
    	}
    }
    void Qupai(pai wugu[10], wujiang* w)
    {
    	int i, x;
    	printf("五谷丰登开牌:\n");
    	for (i = 0; (wugu[i].leixing) != -1; i++)
    	{
    		printf("%d ", i);
    		wugu[i].Kanpai();
    	}
    	if ((*w).juese)
    	{
    		for (;;)
    		{
    			printf("请选择你想要的卡牌,输入卡牌之前的编号,以回车结束!\n");
    			scanf("%d", &x);
    			if (wugu[x].leixing != -1)
    			{
    				printf("玩家选择");
    				wugu[x].Kanpai();
    				(*w).shoupai[(*w).shoupaishu] = wugu[x];
    				((*w).shoupaishu)++;
    				for (i = x + 1; i <= 9; i++)wugu[i - 1] = wugu[i];
    				wugu[9].leixing = -1;
    				break;
    			}
    			printf("你选择了一张空气加入手牌!");
    		}
    	}
    	else
    	{
    		printf("电脑选择");
    		wugu[0].Kanpai();
    		(*w).shoupai[(*w).shoupaishu] = wugu[0];
    		((*w).shoupaishu)++;
    		for (i = 1; i <= 9; i++)wugu[i - 1] = wugu[i];
    		wugu[9].leixing = -1;
    	}
    }
    void Rengpai(pai wugu[10], pai qipaidui[104], int* qipaishu)
    {
    	int i;
    	for (i = 0; wugu[i].leixing != -1; i++)
    	{
    		qipaidui[*qipaishu] = wugu[i];
    		(*qipaishu)++;
    		wugu[i].leixing = -1;
    	}
    }
    int Nanman(wujiang* w1, wujiang* w2, pai qipaidui[104], int* qipaishu)
    {
    	int i, x;
    	if ((*w1).juese)
    	{
    		for (x = 0; x < ((*w2).shoupaishu); x++)
    		{
    			if ((*w2).shoupai[x].leixing == 101)
    			{
    				printf("电脑打出");
    				((*w2).shoupai)[x].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (int i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				return 0;
    				break;
    			}
    		}
    		printf("玩家对电脑造成1点伤害!\n");
    		((*w2).tili)--;
    		i = Binsi(w1, w2, qipaidui, qipaishu);
    		return i;
    	}
    	else
    	{
    		for (;;)
    		{
    			printf("请打出一张【杀】响应【南蛮入侵】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
    			if (((*w2).zhuangbei[0].leixing == 305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
    			(*w2).Kanshoupai();
    			scanf("%d", &x);
    			if (x == -1)
    			{
    				int i;
    				((*w2).tili)--;
    				printf("电脑对玩家造成1点伤害!\n");
    				i = Binsi(w1, w2, qipaidui, qipaishu);
    				return i;
    				break;
    			}
    			else if (((*w2).zhuangbei[0].leixing == 305) && x == 100)
    			{
    				pai p = Zhangba(w2, qipaidui, qipaishu);
    				p.paifu = -1;
    				printf("使用!\n");
    				return 0;
    				break;
    			}
    			else if ((*w2).shoupai[x].leixing == 101)
    			{
    				printf("玩家打出");
    				((*w2).shoupai)[x].Kanpai();
    				qipaidui[*qipaishu] = ((*w2).shoupai)[x];
    				for (i = x + 1; i <= ((*w2).shoupaishu); i++)((*w2).shoupai)[i - 1] = ((*w2).shoupai)[i];
    				((*w2).shoupaishu)--;
    				(*qipaishu)++;
    				return 0;
    				break;
    			}
    			else printf("你确定你打出的是【杀】?\n");
    		}
    	}
    }
    int Wanjian(wujiang* w1, wujiang* w2, pai paidui[104], int* paiduishu, pai qipaidui[104], int* qipaishu)
    {
    	int i;
    	i = Shan(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    	if (i == -1)
    	{
    		i = Binsi(w1, w2, qipaidui, qipaishu);
    		return i;
    	}
    	else return 0;
    }
    int Chupai(pai paidui[104], pai qipaidui[104], int* paiduishu, int* qipaishu, wujiang* w1, wujiang* w2, pai yuanshipaidui[2][4][13])
    {
    	pai p1;
    	int sha = 1; int y = -1, i, t = ((*w1).shoupaishu) - 1;
    	for (;; t--)
    	{
     
    		if ((*w1).juese)
    		{
    			printf("\n电脑当前手牌数:%d\n", ((*w2).shoupaishu));
    			(*w2).Kanzhuangbei();
    			(*w1).Kanshoupai();
    			(*w1).Kanzhuangbei();
    		}
    		int j = 0;
    		if ((*w1).juese && ((*w1).zhuangbei[0].leixing == 305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
    		y = Xuanpai(w1, t);
    		p1 = Panpai(w1, &sha, y, qipaidui, qipaishu);
    		if ((p1).leixing == -1)break;
    		else if ((p1).leixing == 0)continue;
    		else
    		{
    			int duixiang;
    			duixiang = Mubiao(p1, w1, w2, &sha);
    			if (duixiang == -2)continue;
    			else
    			{
    				Da1pai(w1, w2, qipaidui, qipaishu, y);
    				Miaoshu(p1, ((*w1).juese), duixiang);
    				if (!((*w1).juese))
    				{
    					printf("\n电脑当前手牌数:%d\n", ((*w1).shoupaishu));
    					(*w1).Kanzhuangbei();
    					(*w2).Kanshoupai();
    					(*w2).Kanzhuangbei();
    				}
    				switch (p1.leixing)
    				{
    				case 101:
    					i = Sha(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    					if (i == -1) { return -1; break; }
    					if ((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w1).tili, (*w1).tilishangxian, (*w2).tili, (*w2).tilishangxian);
    					else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w2).tili, (*w2).tilishangxian, (*w1).tili, (*w1).tilishangxian);
    					break;
    				case 103:
    					Tao(w1);
    					break;
    				case 201:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Chai(w1, w2, qipaidui, qipaishu);
    					else;
    					if ((*w1).juese)(*w1).Kanshoupai();
    					break;
    				case 202:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Qian(w1, w2);
    					else;
    					if ((*w1).juese)(*w1).Kanshoupai();
    					break;
    				case 203:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Wuzhong(w1, paidui, paiduishu, qipaidui, qipaishu);
    					else;
    					break;
    				case 204:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))
    					{
    						i = Juedou(w1, w2, qipaidui, qipaishu);
    						if (i == -1)return -1;
    						if ((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w1).tili, (*w1).tilishangxian, (*w2).tili, (*w2).tilishangxian);
    						else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w2).tili, (*w2).tilishangxian, (*w1).tili, (*w1).tilishangxian);
    					}
    					break;
    				case 205:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))
    					{
    						i = Jiedao(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    						if (i == -1)return -1;
    						if ((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w1).tili, (*w1).tilishangxian, (*w2).tili, (*w2).tilishangxian);
    						else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w2).tili, (*w2).tilishangxian, (*w1).tili, (*w1).tilishangxian);
    					}
    					break;
    				case 206:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Taoyuan(w1);
    					j = 0;
    					for (;;)
    					{
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Taoyuan(w2);
    					break;
    				case 207:
    					pai wugu[10];
    					for (i = 1; i <= 10; i++)wugu[i - 1].leixing = -1;
    					Kaipai(paidui, paiduishu, 2, wugu);
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Qupai(wugu, w1);
    					for (;;)
    					{
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))Qupai(wugu, w2);
    					Rengpai(wugu, qipaidui, qipaishu); printf("弃牌数:%d\n", *qipaishu);
    					break;
    				case 208:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))
    					{
    						i = Nanman(w1, w2, qipaidui, qipaishu);
    						if (i == -1)return -1;
    						if ((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w1).tili, (*w1).tilishangxian, (*w2).tili, (*w2).tilishangxian);
    						else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w2).tili, (*w2).tilishangxian, (*w1).tili, (*w1).tilishangxian);
    					}
    					break;
    				case 209:
    					for (;;)
    					{
    						i = Wuxie(&p1, w1, w2, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    						i = Wuxie(&p1, w2, w1, qipaidui, qipaishu, 0);
    						if (!i)break;
    						j++;
    					}
    					if (!(j % 2))
    					{
    						i = Wanjian(w1, w2, paidui, paiduishu, qipaidui, qipaishu);
    						if (i == -1)return -1;
    						if ((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w1).tili, (*w1).tilishangxian, (*w2).tili, (*w2).tilishangxian);
    						else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n", (*w2).tili, (*w2).tilishangxian, (*w1).tili, (*w1).tilishangxian);
    					}
    					break;
    				case 361:
    				case 362:
    				case 363:
    					((*w1).juli[0])--; break;
    				case 381:
    				case 382:
    				case 383:
    					((*w2).juli[0])++; break;
    				default:break;
    				}
    				printf("\n");
    			}
    		}
    	}
    	return 0;
    }
    void Qipai(pai shoupai[20], int* shoupaishu, pai qipaidui[104], int* qipaishu, int juese, int* shoupaishangxian)
    {
    	int x;
    	if ((*shoupaishu) > (*shoupaishangxian))
    	{
    		if (juese != 1 && juese != 0)printf("身份参数错误!");
    		int q = (*shoupaishu) - (*shoupaishangxian);
    		int i, j;
    		for (j = 1; j <= q; j++)
    		{
    			for (;;)
    			{
    				if (juese)
    				{
    					printf("弃牌请输入手牌之前的编号,以回车结束!\n注:一次只能弃一张牌\n");
    					printf("手牌数:%d\n", *shoupaishu);
    					scanf("%d", &x);
    					if (x >= 0 && x < (*shoupaishu))break;
    					else printf("你弃掉了一张空气!\n");
    				}
    				else
    				{
    					srand((unsigned)time(NULL));
    					x = rand() % (*shoupaishu);
    					break;
    				}
    			}
    			qipaidui[*qipaishu] = shoupai[x];
    			for (i = x + 1; i <= (*shoupaishu); i++)shoupai[i - 1] = shoupai[i];
    			(*shoupaishu)--;
    			if (juese)printf("弃牌阶段玩家弃置");
    			else printf("弃牌阶段电脑弃置");
    			qipaidui[*qipaishu].Kanpai();
    			(*qipaishu)++;
    			int m;
    			if (juese)
    			{
    				printf("玩家当前手牌:\n");
    				for (m = 0; m <= (*shoupaishu - 1); m++)
    				{
    					printf("%d ", m);
    					(shoupai[m]).Kanpai();
    				}
    			} printf("弃牌堆:%d\n", *qipaishu);
    		}
    	}
    }
    int Huihe(pai A[104], pai B[104], int* x, int* y, pai yuanshipaidui[2][4][13], wujiang* w1, wujiang* w2)
    {
    	printf("\n回合开始阶段……\n");
    	switch ((*w1).huihekaishi)
    	{
    	case 0:break;
    	default:printf("回合开始阶段参数错误!\n"); break;
    	}
    	printf("判定阶段……\n");
    	int K = 0;
    	if ((*w1).pandingshu > 0)
    	{
    		int i, j;
    		for (; (*w1).pandingshu;)
    		{
    			switch ((*w1).pandingpai[0].leixing)
    			{
    			case 251:printf("【乐不思蜀】开始判定……\n"); break;
    			case 252:printf("【闪电】开始判定……\n"); break;
    			default:printf("【??】开始判定……\n"); break;
    			}
    			j = 0;
    			pai p = ((*w1).pandingpai[0]);
    			for (;;)//在判定之前询问【无懈】
    			{
    				i = Wuxie(&p, w2, w1, B, y, 0);
    				if (!i)break;
    				j++;
    				i = Wuxie(&p, w1, w2, B, y, 0);
    				if (!i)break;
    				j++;
    			}
    			switch ((*w1).pandingpai[0].leixing)
    			{
    			case 251:
    				if (!(j % 2))
    				{
    					printf("【乐不思蜀】的判定牌是:");
    					Panding(A, x, B, y);
    					if ((B[(*y) - 1].huase) != 1)
    					{
    						printf("【乐不思蜀】判定成功!\n");
    						if ((*w1).juese)printf("玩家");
    						else printf("电脑");
    						printf("跳过出牌阶段!\n");
    						K = -1;
    					}
    					else printf("【乐不思蜀】判定失败!\n");
    				}
    				B[*y] = (*w1).pandingpai[0];
    				((*w1).pandingshu)--;
    				(*w1).pandingpai[0] = (*w1).pandingpai[1];
    				(*w1).pandingpai[1] = (*w1).pandingpai[2];
    				(*w1).pandingpai[2].leixing = -1;
    				(*y)++;
    				break;
    			case 252:
    				if (!(j % 2))
    				{
    					printf("【闪电】的判定牌是:");
    					Panding(A, x, B, y);
    					if ((B[(*y) - 1].huase == 0) && (B[(*y) - 1].dianshu >= 1) && (B[(*y) - 1].dianshu <= 8))
    					{
    						printf("【闪电】判定成功!\n");
    						if ((*w1).juese)printf("玩家");
    						else printf("电脑");
    						printf("受到3点雷电伤害!");
    						((*w1).tili) = ((*w1).tili) - 3;
    						i = Binsi(w2, w1, B, y);
    						B[*y] = (*w1).pandingpai[0];
    						((*w1).pandingshu)--;
    						(*w1).pandingpai[0] = (*w1).pandingpai[1];
    						(*w1).pandingpai[1] = (*w1).pandingpai[2];
    						(*w1).pandingpai[2].leixing = -1;
    						(*y)++;
    						if (i == -1)return -1;
    					}
    					else
    					{
    						printf("【闪电】判定失败!\n");
    						(*w2).pandingpai[2] = (*w2).pandingpai[1];
    						(*w2).pandingpai[1] = (*w2).pandingpai[0];
    						(*w2).pandingpai[0] = (*w1).pandingpai[0];
    						(*w1).pandingpai[0] = (*w1).pandingpai[1];
    						(*w1).pandingpai[1] = (*w1).pandingpai[2];
    						(*w1).pandingpai[2].leixing = -1;
    						((*w1).pandingshu)--;
    						((*w2).pandingshu)++;
    					}
    					break;
    				}
    			default:printf("判定牌错误!");
    			} printf("弃牌数:%d\n", *y);
    		}
    	}
    	else if (!((*w1).pandingshu));
    	else printf("判定阶段参数错误!\n");
    	printf("摸牌阶段……\n");
    	switch ((*w1).mopai)
    	{
    	case 0:Mopai(&((*w1).shoupaishu), (*w1).shoupai, A, x, B, y, (*w1).juese); break;
    	case -1:break;
    	default:printf("摸牌阶段参数错误!\n"); break;
    	}
    	if (K == -1)goto M;
    	printf("出牌阶段……\n");
    	switch ((*w1).chupai)
    	{
    	case 0:
    	{
    		int i;
    		i = Chupai(A, B, x, y, w1, w2, yuanshipaidui);
    		if (i == -1)
    		{
    			return -1;
    			break;
    		}
    		else break;
    	}
    	case -1:break;
    	default:printf("出牌阶段参数错误!\n"); break;
    	}
    M:
    	printf("弃牌阶段……\n");
    	switch ((*w1).qipai)
    	{
    	case 0:
    		Qipai((*w1).shoupai, &((*w1).shoupaishu), B, y, (*w1).juese, &((*w1).tili)); break;
    	default:printf("弃牌阶段参数错误!\n"); break;
    	}
    	printf("回合结束阶段……\n");
    	switch ((*w1).huihejieshu)
    	{
    	case 0:break;
    	default:printf("回合结束阶段参数错误!\n"); break;
    	}
    	return 0;
    }
    int main()
    {
    	void Kanshoupai(pai p);
    	pai yuanshipaidui[2][4][13], qipaidui[104], paidui[104];
    	wujiang wanjia, com;
    	com.tili = wanjia.tili = 5;
    	com.tilishangxian = wanjia.tilishangxian = 5;
    	com.huihekaishi = wanjia.huihekaishi = 0;
    	com.panding = wanjia.panding = 0;
    	com.mopai = wanjia.mopai = 0;
    	com.chupai = wanjia.chupai = 0;
    	com.qipai = wanjia.qipai = 0;
    	com.huihejieshu = wanjia.huihejieshu = 0;
    	com.shoupaishu = wanjia.shoupaishu = 0;
    	com.pandingshu = wanjia.pandingshu = 0;
    	com.zhuangbeishu = wanjia.zhuangbeishu = 0;
    	com.juese = 0; wanjia.juese = 1;
    	pai p;
    	p.leixing = -1;
    	com.zhuangbei[0] = com.zhuangbei[1] = com.zhuangbei[2] = com.zhuangbei[3] = wanjia.zhuangbei[0] = wanjia.zhuangbei[1] = wanjia.zhuangbei[2] = wanjia.zhuangbei[3] = p;
    	com.zhuangbei[0].changdu = wanjia.zhuangbei[0].changdu = 1;
    	com.pandingpai[0] = com.pandingpai[1] = com.pandingpai[2] = wanjia.pandingpai[0] = wanjia.pandingpai[1] = wanjia.pandingpai[2] = p;
    	com.juli[0] = wanjia.juli[0] = 1;
    	int a, b, c;
    	for (a = 0; a <= 1; a++)
    	{
    		for (b = 0; b <= 3; b++)
    		{
    			for (c = 0; c <= 12; c++)
    			{
    				yuanshipaidui[a][b][c].paifu = a;
    				yuanshipaidui[a][b][c].huase = b;
    				yuanshipaidui[a][b][c].dianshu = c;
    			}
    		}
    	}
    	yuanshipaidui[0][0][0].leixing = 204;
    	yuanshipaidui[0][0][1].leixing = 331;
    	yuanshipaidui[0][0][2].leixing = 201;
    	yuanshipaidui[0][0][3].leixing = 201;
    	yuanshipaidui[0][0][4].leixing = 304; yuanshipaidui[0][0][4].changdu = 3;
    	yuanshipaidui[0][0][5].leixing = 251;
    	yuanshipaidui[0][0][6].leixing = 101;
    	yuanshipaidui[0][0][7].leixing = 101;
    	yuanshipaidui[0][0][8].leixing = 101;
    	yuanshipaidui[0][0][9].leixing = 101;
    	yuanshipaidui[0][0][10].leixing = 202;
    	yuanshipaidui[0][0][11].leixing = 201;
    	yuanshipaidui[0][0][12].leixing = 208;
    	yuanshipaidui[0][1][0].leixing = 209;
    	yuanshipaidui[0][1][1].leixing = 102;
    	yuanshipaidui[0][1][2].leixing = 103;
    	yuanshipaidui[0][1][3].leixing = 103;
    	yuanshipaidui[0][1][4].leixing = 308; yuanshipaidui[0][1][4].changdu = 5;
    	yuanshipaidui[0][1][5].leixing = 103;
    	yuanshipaidui[0][1][6].leixing = 103;
    	yuanshipaidui[0][1][7].leixing = 103;
    	yuanshipaidui[0][1][8].leixing = 103;
    	yuanshipaidui[0][1][9].leixing = 101;
    	yuanshipaidui[0][1][10].leixing = 101;
    	yuanshipaidui[0][1][11].leixing = 103;
    	yuanshipaidui[0][1][12].leixing = 102;
    	yuanshipaidui[0][2][0].leixing = 204;
    	yuanshipaidui[0][2][1].leixing = 101;
    	yuanshipaidui[0][2][2].leixing = 101;
    	yuanshipaidui[0][2][3].leixing = 101;
    	yuanshipaidui[0][2][4].leixing = 101;
    	yuanshipaidui[0][2][5].leixing = 101;
    	yuanshipaidui[0][2][6].leixing = 101;
    	yuanshipaidui[0][2][7].leixing = 101;
    	yuanshipaidui[0][2][8].leixing = 101;
    	yuanshipaidui[0][2][9].leixing = 101;
    	yuanshipaidui[0][2][10].leixing = 101;
    	yuanshipaidui[0][2][11].leixing = 205;
    	yuanshipaidui[0][2][12].leixing = 205;
    	yuanshipaidui[0][3][0].leixing = 204;
    	yuanshipaidui[0][3][1].leixing = 102;
    	yuanshipaidui[0][3][2].leixing = 102;
    	yuanshipaidui[0][3][3].leixing = 102;
    	yuanshipaidui[0][3][4].leixing = 102;
    	yuanshipaidui[0][3][5].leixing = 101;
    	yuanshipaidui[0][3][6].leixing = 101;
    	yuanshipaidui[0][3][7].leixing = 101;
    	yuanshipaidui[0][3][8].leixing = 101;
    	yuanshipaidui[0][3][9].leixing = 101;
    	yuanshipaidui[0][3][10].leixing = 102;
    	yuanshipaidui[0][3][11].leixing = 103;
    	yuanshipaidui[0][3][12].leixing = 101;
    	yuanshipaidui[1][0][0].leixing = 252;
    	yuanshipaidui[1][0][1].leixing = 302; yuanshipaidui[1][0][1].changdu = 2;
    	yuanshipaidui[1][0][2].leixing = 202;
    	yuanshipaidui[1][0][3].leixing = 202;
    	yuanshipaidui[1][0][4].leixing = 383;
    	yuanshipaidui[1][0][5].leixing = 303; yuanshipaidui[1][0][5].changdu = 2;
    	yuanshipaidui[1][0][6].leixing = 208;
    	yuanshipaidui[1][0][7].leixing = 101;
    	yuanshipaidui[1][0][8].leixing = 101;
    	yuanshipaidui[1][0][9].leixing = 101;
    	yuanshipaidui[1][0][10].leixing = 210;
    	yuanshipaidui[1][0][11].leixing = 305; yuanshipaidui[1][0][11].changdu = 3;
    	yuanshipaidui[1][0][12].leixing = 362;
    	yuanshipaidui[1][1][0].leixing = 206;
    	yuanshipaidui[1][1][1].leixing = 102;
    	yuanshipaidui[1][1][2].leixing = 207;
    	yuanshipaidui[1][1][3].leixing = 207;
    	yuanshipaidui[1][1][4].leixing = 361;
    	yuanshipaidui[1][1][5].leixing = 251;
    	yuanshipaidui[1][1][6].leixing = 203;
    	yuanshipaidui[1][1][7].leixing = 203;
    	yuanshipaidui[1][1][8].leixing = 203;
    	yuanshipaidui[1][1][9].leixing = 101;
    	yuanshipaidui[1][1][10].leixing = 203;
    	yuanshipaidui[1][1][11].leixing = 201;
    	yuanshipaidui[1][1][12].leixing = 381;
    	yuanshipaidui[1][2][0].leixing = 301; yuanshipaidui[1][2][0].changdu = 1;
    	yuanshipaidui[1][2][1].leixing = 331;
    	yuanshipaidui[1][2][2].leixing = 201;
    	yuanshipaidui[1][2][3].leixing = 201;
    	yuanshipaidui[1][2][4].leixing = 382;
    	yuanshipaidui[1][2][5].leixing = 251;
    	yuanshipaidui[1][2][6].leixing = 208;
    	yuanshipaidui[1][2][7].leixing = 101;
    	yuanshipaidui[1][2][8].leixing = 101;
    	yuanshipaidui[1][2][9].leixing = 101;
    	yuanshipaidui[1][2][10].leixing = 101;
    	yuanshipaidui[1][2][11].leixing = 210;
    	yuanshipaidui[1][2][12].leixing = 210;
    	yuanshipaidui[1][3][0].leixing = 301; yuanshipaidui[1][3][0].changdu = 1;
    	yuanshipaidui[1][3][1].leixing = 102;
    	yuanshipaidui[1][3][2].leixing = 202;
    	yuanshipaidui[1][3][3].leixing = 202;
    	yuanshipaidui[1][3][4].leixing = 306; yuanshipaidui[1][3][4].changdu = 3;
    	yuanshipaidui[1][3][5].leixing = 102;
    	yuanshipaidui[1][3][6].leixing = 102;
    	yuanshipaidui[1][3][7].leixing = 102;
    	yuanshipaidui[1][3][8].leixing = 102;
    	yuanshipaidui[1][3][9].leixing = 102;
    	yuanshipaidui[1][3][10].leixing = 102;
    	yuanshipaidui[1][3][11].leixing = 307; yuanshipaidui[1][3][11].changdu = 4;
    	yuanshipaidui[1][3][12].leixing = 363;
    	int paiduishu = 104;
    	int qipaishu = 0;
    	printf("游戏开始!\n");
    	Qishixipai(yuanshipaidui, paidui);
    	Qishishoupai(&wanjia, paidui, &(paiduishu), qipaidui, &(qipaishu));
    	Qishishoupai(&com, paidui, &(paiduishu), qipaidui, &(qipaishu));
    	int i;
    	for (;;)
    	{
    		i = Huihe(paidui, qipaidui, &paiduishu, &qipaishu, yuanshipaidui, &wanjia, &com);
    		if (i == -1)break;
    		i = Huihe(paidui, qipaidui, &paiduishu, &qipaishu, yuanshipaidui, &com, &wanjia);
    		if (i == -1)break;
    	}
    }
  • 最近活动

  • Stat

  • Rating