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

📄 computer.cpp

📁 支持局域网对战的飞行棋
💻 CPP
字号:
// Computer.cpp: implementation of the Computer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "program.h"
#include "Computer.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

extern Managers manager;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Computer::Computer()
{
	planes=manager.Planes;
}

Computer::~Computer()
{

}

int Computer::DoAction(int roll)
{
	int &Game_State=manager.Game_State;
	int i,j,kgo;
	for(i=0;i<4;i++)
	{
		go[i]=0;
		pl[i]=planes[Game_State*4+i];
	}
	for(i=0;i<4;i++)
	{
		if(pl[i].state==0)
		{
			if(roll==6)
				go[i]+=20;
		}
		else if(pl[i].state==1 || pl[i].state==2)//当飞机在飞的时候
		{
			pl[i].step+=roll;
			pl[i].state=2;
			if(pl[i].Color==0 && pl[i].step>49 && pl[i].step-roll<=49)//4个判断 分别判断飞机是否该降落
			{
				pl[i].state=3;
				if(pl[i].step==55 && pl[i].state==3)
					pl[i].state=4;
			}
			if(pl->state<3)
				pl->step%=52;
			if(pl[i].Color==1 && pl[i].step>10 && pl[i].step-roll<=10)
			{
				pl[i].state=3;
				if(pl[i].step==16 && pl[i].state==3)
					pl[i].state=4;
			}
			if(pl[i].Color==2 && pl[i].step>23 && pl[i].step-roll<=23)
			{
				pl[i].state=3;
				if(pl[i].step==29 && pl[i].state==3)
					pl[i].state=4;
			}
			if(pl[i].Color==3 && pl[i].step>36 && pl[i].step-roll<=36)
			{
				pl[i].state=3;
				if(pl[i].step==42 && pl[i].state==3)
					pl[i].state=4;
			}
			if(pl[i].state==2)
			{	
				if((j=SearchBut(pl[i].step,pl[i].state,pl[i].Color))!=-1)
				{
					if(j>100)
						go[i]-=1000;
					else
						go[i]+=30;
				}
				if(pl[i].step==(manager.DefStep(pl[i].Color)+18)%52)
				{
					go[i]+=15;
					pl[i].step=(pl[i].step+12)%52;
					if((j=SearchBut(pl[i].step,pl[i].state,pl[i].Color))!=-1)
					{
						if(j>100)
							go[i]-=100;
						else
							go[i]+=30;
					}
				}
				else if(pl[i].step%4==pl[i].Color)
				{
					go[i]+=5;
					pl[i].step=(pl[i].step+4)%52;
					if((j=SearchBut(pl[i].step,pl[i].state,pl[i].Color))!=-1)
					{
						if(j>100)
							go[i]-=1000;
						else
							go[i]+=30;
					}
				}

				if(j==-1 && (j=SearchBut(pl[i]))!=-1)
				{
					if(j>100)
						go[i]+=10;
					else if(j<100)
						go[i]+=20;
				}
			}
			if(pl[i].state==3)
				go[i]+=10;
			if(pl[i].state==4)
				go[i]+=15;
		}
		else if(pl[i].state==3)
		{		
			int k;
			k=manager.OverStep(pl[i].Color)+6;
			if(pl[i].step+roll==k)
			{
				pl[i].step=k;
				pl[i].state=4;
			}
			else if(pl[i].step+roll<k)
				pl[i].step+=roll;
			else
			{
				pl[i].step+=roll-(k-pl[i].step);
			}
			if(pl[i].state==4)
				go[i]+=10;
			else
				go[i]-=5;
		}
		else if(pl[i].state==4)
			go[i]-=10000;
	}
	j=-9999;
	for(i=0;i<4;i++)
		if(go[i]>j)
		{
			j=go[i];
			kgo=i;
		}
	if(i<4)
		return i+Game_State*4;
	return -1;
	
}

int Computer::SearchBut(int step, int state, int butcolor)
{
	Chess *p=planes;
	int k,i=-1;
	for(k=0;k<16;k++)
	{
		if(p->state==state && p->step==step && p->Color!=butcolor)
		{
			if(i==0)
				i=k;
			else
				i+=100;
		};
		p++;
	}
	return i;
}



int Computer::SearchBut(Chess butpl)
{
	Chess *p=planes;
	int k,i=-1;
	for(k=0;k<16;k++)
	{
		if(p->state==butpl.state && p->step==butpl.step && p->Color==butpl.Color)
		{
			if(i==0)
				i=k;
			else
				i+=100;
		};
		p++;
	}
	return i;
}

⌨️ 快捷键说明

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