#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <math.h>
int PlayerMoney=1000;
int DealerMoney=1000;
int bet;
int BetMoney;
int a,b,c;
void ShowToScreen();
int GetBet();
int GetAmount();
void Throw();
int Judge(int a,int b,int c);
void MoneyCalc();
int Check(int pm,int dm);
int main()
{
	char ch;
	int CheckMoney;
	while (1)
	{
		if(PlayerMoney<10)
		{
			printf("您没有10个积分,不能继续游戏。\n");
			break;
		}
		if(DealerMoney<10)
		{
			printf("对手不足十个积分,没有资格参与游戏。\n");
			break;
		}
		bet       =GetBet();         //bet保存选择方式
repeat: BetMoney  =GetAmount();      //BetMoney保存支出的积分

		if(BetMoney>PlayerMoney)
		{
			printf("您没有这么多积分,请重新输入。\n");
			goto repeat;
		}
		if(BetMoney>DealerMoney)
		{
			printf("对手没有这么多积分,他要求您重新下注。\n");
			goto repeat;
		}
		Throw();                //开始掷骰子
		MoneyCalc();            //计算输赢的积分
		getch();                //抛弃kbhit在缓冲区产生的按键
		//检查是否有足够的积分来游戏,CheckMoney来保存返回值
		CheckMoney=Check(PlayerMoney,DealerMoney);
		//假如返回值为0,表示没有足够的积分来进行游戏
		if(CheckMoney==0)
			break;     //退出游戏循环
		printf("继续玩吗?(退出请按q键,继续玩请按其他键)\n\n");
		if((ch=getch())=='q')   //假如按下了q键
		{
			break;
		}
	}
	return 0;
}
//显示游戏规则
void ShowToScreen()
{
	printf("                                 欢迎体验博弈机1.0\n");
	printf("     下面介绍游戏规则\n");

	printf("     玩家和对手各有1000积分作为游戏的起始资金\n");
	printf("     在博弈机1.0中,由玩家来支出一定的积分来玩游戏。\n");
	printf("     玩家可以选择方式,以及每轮游戏支出的积分数(10-100),方式有三种:\n\n");
	printf("             一、选大        二、选小         三、选豹子。\n\n");
	printf("     下面逐一介绍这三种方式的不同:\n\n");
	printf("     假如玩家选大,那么玩家所支出的三粒色子的点数加起来必须大师11.如玩家掷出的三粒色子的点数分别为:6、3、3,");
	printf("三粒色子相加:6+3+3=12,大于11,那么万家赢,假如小于11,那么玩家输,输赢的积分为支出积分的两倍,");
	printf("也就是说,赢得一方将获得两倍的积分。");
	printf("假如等于11,那么打成和局。\n");
	printf("     加入玩家选小,那么玩家所支出的三粒色子的点数加起来必须小于11,获得的积分与选大相同。\n");
	printf("     加入玩家选的豹子,那么玩家所支出的三粒色子的点数必须一样,如:6、6、6.\n");
	printf("玩家成功的支出豹子后,玩家将获得十倍的奖励积分。如玩家指出了20积分,那么将获得200积分。\n");
	printf("     假如玩家选了豹子却没有掷出豹子,那么玩家将损失两倍积分,如玩家指出了20积分,那么玩家损失40积分。\n");
	printf("     玩家可以按q键随时终止游戏,假如不终止游戏,游戏会一直进行下去,直到玩家或对手有一方积分不足。\n");
	printf("     游戏规则说明完毕,祝您玩的愉快。\n");
	printf("***************************************************************************\n");
}
//获取方式
int GetBet ()                       //确定选择方式的GetBet函数
{
	int BetType;                    //选择方式

	/*选择方式*/
	printf("\n请选择方式:");
	printf("1.选大 2.选小 3.选豹子\n");
	printf("请选择: ");
	scanf("%d",&BetType);

	/*判断是否输入1到3之间的数字,假如不是取默认值,默认值为1*/
	if((BetType==1)||(BetType==2)||(BetType==3))
	{
		return BetType;
	}
	else
	{
		return 1;
	}
}
//获取玩家支出的积分
int GetAmount()
{
	int BetMoney;
	/*输入支出的积分*/
	printf("您要支出多少积分(最少10个,最多100个): ");
	scanf("%d",&BetMoney);

	/*假如超出支出范围,那么修改它*/
	if(BetMoney<10)
	{
		BetMoney=10;
	}
	if(BetMoney>100)
	{
		BetMoney=100;
	}
	return BetMoney;
}
//掷骰子并根据点数计算输赢的积分

void Throw()
{
	printf("欢迎体验博弈机,按键盘任意键掷出色子");
	getch();               //等待用户按任意键
	srand(time(0));        //将系统时间作为种子
	while(!kbhit())        //当按下任意键时,结束循环
	{
		a=rand()%6;        //得到一个0到5之间的随机数字
		b=rand()%6;         //得到一个0到5之间的随机数字
		c=rand()%6;         //得到一个0到5之间的随机数字
		a++;
		b++;
		c++;
		system("cls");       //清空屏幕
		printf("骰子在转动:。。。。。。按键盘上的任意键来中止转动!\n");
		//输出三个随机数字
		printf("第一个骰子: %d\n第二个骰子: %d\n第三个骰子: %d\n,a,b,c");
	}
}
//判断点数,是大,是小,还是豹子
int judge(int a,int b,int c)
{
	if(a==b&&a==c)
		return 3;
	if(a+b+c>11)
		return 2;
	else if(a+b+c<11)
		return 1;
	else
		return 0;
}
//计算输赢的积分
void MoneyCalc()
{
	if(Judge(a,b,c)==3)
	{
		if(bet==3)
		{
			BetMoney=BetMoney*10;
			DealerMoney-=BetMoney;
			PlayerMoney+=BetMoney;
			printf("豹子,10倍积分!您获得了%d积分,您现在总共有%d积分,对手还剩%d积分\n\n",BetMoney,PlayerMoney,DealerMoney);
		}
		else
		{
			BetMoney=BetMoney*2;
			DealerMoney+=BetMoney;
			PlayerMoney-=BetMoney;
			printf("豹子,您输了%d积分,您还剩%d积分,对手还剩%d积分\n\n",BetMoney,PlayerMoney,DealerMoney);
		}
	}
	else if(Judge(a,b,c)==2)
	{
		BetMoney=BetMoney*2;
		if(bet==1)
		{
			DealerMoney-=BetMoney;
			PlayerMoney+=BetMoney;
			printf("大,2倍积分,您赢得了%d积分!您现在总共%d积分,对手还剩%d积分,\n\n",BetMoney,PlayerMoney,DealerMoney);
		}
		else
		{
			DealerMoney+=BetMoney;
			PlayerMoney-=BetMoney;
			printf("大,2倍积分,您输了%d积分,您还剩%d积分,对手还剩%d积分,\n\n",BetMoney,PlayerMoney,DealerMoney);
		}
	}
	else if(Judge(a,b,c)==1)
	{
		BetMoney=BetMoney*2;
		if(bet==2)
		{
			DealerMoney-=BetMoney;
			PlayerMoney+=BetMoney;
			printf("小,2倍赔率!您获得了%d积分,您现在总共%d积分,对手还剩%d积分\n\n",BetMoney,PlayerMoney,DealerMoney);
		}
		else
		{
			DealerMoney+=BetMoney;
			PlayerMoney-=BetMoney;
			printf("小,2倍赔率,您输了%d积分,您还剩%d积分,对手还剩%d积分\n\n",BetMoney,PlayerMoney,DealerMoney);
		}
	}
	else
	{

		printf("中,您和对手打成平手,您还剩%d积分,对手还剩%d积分\n\n",PlayerMoney,DealerMoney);
	}
}
//检查玩家和对手是否有足够的积分来游戏
int check(int pm,int dm)
{
	if(pm<=0)
	{
		if(pm==0)
			printf("您没有积分了,请参加其他活动赚取积分!!!\n");
		else
			printf("现在您欠对手%d积分,请三日内参加活动赚取积分,否则账号将会被冻结。\n",abs(pm));
		return 0;
	}
	if(dm<=0)
	{
		if(dm==0)
			printf("对手没有积分了,她不想再和您玩了。\n");
		else
			printf("现在对手欠您%d积分,如果他不能再三个月内还清欠款,那么他的账号就归您了。\n",abs(dm));
		return 0;
	}
	return 1;
}