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

📄 dicebox.cpp

📁 用vc++开发的一个经典程序:Dice。自己开发的
💻 CPP
字号:
#include "StdAfx.h"
#include ".\dicebox.h"
#include "dice6.h"

//##ModelId=4507556B010A
DiceBox::DiceBox(void)
: num1(1)
, num2(1)
, num3(1)
, num4(1)
, num5(1)
, num6(1)
, score(0)
, avail_1(true)
, avail_2(true)
, avail_3(true)
, avail_4(true)
, avail_5(true)
, avail_6(true)
{
	dice_1=new Dice6;dice_2=new Dice6;dice_3=new Dice6;
	dice_4=new Dice6;dice_5=new Dice6;dice_6=new Dice6;
}

//##ModelId=4507556B010C
DiceBox::~DiceBox(void) 
{
}

//##ModelId=4507556B0113
int DiceBox::getScore(void)
{
	refresh();
	int same3=0;//三个相同色子的点数
	same3=find3();
	if((avail_1==avail_2==avail_3==avail_4==avail_5==avail_6==true)
		&&(num1==num2==num3==num4==num5==num6==1))
	{
		score=score+3000;
		dice_1->setAvailability(false);dice_2->setAvailability(false);
		dice_3->setAvailability(false);dice_4->setAvailability(false);
		dice_5->setAvailability(false);dice_6->setAvailability(false);
		refresh();
	}
	if(same3==1) 
	{
		score=score+1000;
		move3(same3);
	}
	if(same3>1)
	{
		score=score+same3*100;
		move3(same3);
	} 
	if((avail_1==true && num1==1)||(avail_2==true && num2==1)
		||(avail_3==true && num3==1)||(avail_4==true && num4==1)
		||(avail_5==true && num5==1)||(avail_6==true && num6==1)) 
	{
		if(avail_1==true && num1==1) {score=score+100;dice_1->setAvailability(false);}
		if(avail_2==true && num2==1) {score=score+100;dice_2->setAvailability(false);}
		if(avail_3==true && num3==1) {score=score+100;dice_3->setAvailability(false);}
		if(avail_4==true && num4==1) {score=score+100;dice_4->setAvailability(false);}
		if(avail_5==true && num5==1) {score=score+100;dice_5->setAvailability(false);}
		if(avail_6==true && num6==1) {score=score+100;dice_6->setAvailability(false);}
		refresh();
	}
	if((avail_1==true && num1==5)||(avail_2==true && num2==5)
		||(avail_3==true && num3==5)||(avail_4==true && num4==5)
		||(avail_5==true && num5==5)||(avail_6==true && num6==5)) 
	{
		
		if(avail_1==true && num1==5) {score=score+50;dice_1->setAvailability(false);}
		if(avail_2==true && num2==5) {score=score+50;dice_2->setAvailability(false);}
		if(avail_3==true && num3==5) {score=score+50;dice_3->setAvailability(false);}
		if(avail_4==true && num4==5) {score=score+50;dice_4->setAvailability(false);}
		if(avail_5==true && num5==5) {score=score+50;dice_5->setAvailability(false);}
		if(avail_6==true && num6==5) {score=score+50;dice_6->setAvailability(false);}
		refresh();
	}

	return score;
}

//##ModelId=4507556B0115
void DiceBox::roll(void)
{
	if(avail_1==true) num1=dice_1->generateNum(); 
	if(avail_2==true) num2=dice_2->generateNum();
	if(avail_3==true) num3=dice_3->generateNum(); 
	if(avail_4==true) num4=dice_4->generateNum();
	if(avail_5==true) num5=dice_5->generateNum(); 
	if(avail_6==true) num6=dice_6->generateNum();
	refresh();
}

//##ModelId=4507556B0117
void DiceBox::reset(void)
{	avail_1=true;avail_2=true;avail_3=true;
	avail_4=true;avail_5=true;avail_6=true;
	dice_1->setAvailability(true); dice_2->setAvailability(true);
	dice_3->setAvailability(true); dice_4->setAvailability(true);
	dice_5->setAvailability(true); dice_6->setAvailability(true);
	refresh();
}

//##ModelId=4507556B011E
void DiceBox::refresh(void)
{
	num1=dice_1->getNum(); num2=dice_2->getNum();
	num3=dice_3->getNum(); num4=dice_4->getNum();
	num5=dice_5->getNum(); num6=dice_6->getNum();
	avail_1=dice_1->getAvailability();avail_2=dice_2->getAvailability();
	avail_3=dice_3->getAvailability();avail_4=dice_4->getAvailability();
	avail_5=dice_5->getAvailability();avail_6=dice_6->getAvailability();

}

//##ModelId=4507556B0120
int DiceBox::find3(void)//找出三个点数一样的色子,如果有三个同点的色子,返回色子点数(1~6),
{						//如果没有三个点数一样色子,返回0。
	int cnt=0;
	int number=0;
	for(int i=1;i<=6;i++)
	{
		if(avail_1==true && num1==i)cnt++;
		if(avail_2==true && num2==i)cnt++;
		if(avail_3==true && num3==i)cnt++;
		if(avail_4==true && num4==i)cnt++;
		if(avail_5==true && num5==i)cnt++;
		if(avail_6==true && num6==i)cnt++;
		if(cnt>=3)number=i;
		cnt=0;
	}
	
	return number;
}

//##ModelId=4507556B0127
void DiceBox::move3(int n)//把三个点数为n的色子设为不可用
{
	int c=0;
	if(avail_1==true && num1==n) {dice_1->setAvailability(false); c++;}
	if(avail_2==true && num2==n) {dice_2->setAvailability(false); c++;}
	if(avail_3==true && num3==n) {dice_3->setAvailability(false); c++;}
	if(avail_4==true && num4==n && c<3) {dice_4->setAvailability(false); c++;}
	if(avail_5==true && num5==n && c<3) {dice_5->setAvailability(false); c++;}
	if(avail_6==true && num6==n && c<3) {dice_6->setAvailability(false); c++;}
	c=0;
	refresh();
}

⌨️ 快捷键说明

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