备份

// Game.cpp: implementation of the CGame class.
//
//

#include "stdafx.h"
#include "大战僵尸.h"
#include "Game.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//
CGame::CGame()
{
	for(int x=0;x<1000;x++)
	{
		for(int y=0;y<5;y++)
			fr[x][y]=bh[x][y]=-1;
	}
	for(int i=0;i<5;i++)hjs[i]=0;
	m_ks=zk=false;XS=0;
}

CGame::~CGame()
{
	m_cc=0;
}

void CGame::DestroyJs(int z)
{
	m_jsh[z].shm=-1;
	hjs[m_jsh[z].y]-=1;
	if(SZZ)return;
	m_jshu-=1;
	if (z < m_jshu)
	{
		m_jsh[z] = m_jsh[m_jshu];
		m_jsh[z].shu = z;
	}
	Draw();
}

void CGame::CalZw()
{
	for(int y=0;y<5;y++)
	{
		for(int x=0;x<1000;x++)
			fr[x][y]=-1;
	}
	for(int i=0;i<m_zshu;i++)
		fr[m_zhw[i].x][m_zhw[i].y]=i;
	for(int y=0;y<5;y++)
	{
		for(int x=1;x<1000;x++)
		{
			if(fr[x][y]==-1)
				fr[x][y]=fr[x-1][y];
		}
	}
}

void CGame::DestroyZw(int z)
{
	m_zhw[z].shm=-1;
	bh[m_zhw[z].x][m_zhw[z].y]=-1;
	::KillTimer(m_wnd->m_hWnd,z);
	::KillTimer(m_wnd->m_hWnd,z+10000);
	m_zshu-=1;
	if (z < m_zshu)
	{
		m_zhw[z] = m_zhw[m_zshu];
		m_zhw[z].shu = z;
		bh[m_zhw[z].x][m_zhw[z].y]=z;
		m_wnd->KillTimer(m_zshu);//重置计时器
		m_wnd->SetTimer(z,m_zhw[z].time,NULL);
		if(m_zhw[z].time==100)//重置大招
		{
			m_wnd->KillTimer(m_zshu+10000);
			m_wnd->SetTimer(z+10000,m_zhw[z].dztm,NULL);
		}
	}
	CalZw();Draw();
}

void CGame::DestroyZw(int x,int y)
{
	int shu=GetZwShu(x,y);
	if(shu==-1)
		return;
	DestroyZw(shu);
}

void CGame::DestroyZd(int z)
{
	m_zid[z].y=-1;
	m_dshu-=1;
	if(z<m_dshu)
		m_zid[z]=m_zid[m_dshu];
	Draw();
}
int CGame::GetZwShu(int x,int y)const
{
	/*for(int i=0;i<m_zshu;i++)//遍历植物
	{	
		if(m_zhw[i].x==x&&m_zhw[i].y==y)
			return i;
	}
	return -1;*/
	if(x<0||x>=1000||y<0||y>=5)return -1;
	return bh[x][y];
}

void CGame::Eat(int zshu,int jshu)
{
	if(m_jsh[jshu].lx==15)
	{
		Crepeer(jshu);
		return;
	}
	if(m_jsh[jshu].beat)
	{
		int t=GetJsEat(m_zhw[zshu],m_jsh[jshu],*this);//特殊吃法
		if(t)m_jsh[jshu].id=t;
		return;
	}
	m_zhw[zshu].shm-=m_jsh[jshu].eat;
	if(m_jsh[jshu].lx<100&&m_jsh[jshu].eat)//吃东西恢复生命
	{
		if(m_jsh[jshu].lx==0)
			m_jsh[jshu].shm+=rand()%200==0;
		else if(m_jsh[jshu].lx==1)
			m_jsh[jshu].shm+=rand()%160==0;
		else if(m_jsh[jshu].lx==6)
			m_jsh[jshu].shm+=rand()%50==0;
		else if(m_jsh[jshu].lx!=4)
			m_jsh[jshu].shm+=rand()%100==0;
		m_jsh[jshu].id=GetJsIcon(m_jsh[jshu],*this);
	}
	m_zhw[zshu].id=GetZwIcon(m_zhw[zshu]);
	if(m_zhw[zshu].shm<=0)//吃光
	{
		m_zhw[zshu].shm=0;
		DestroyZw(zshu);
	}
}

int CGame::GetFirstJs(int x,int y)
{
	int first=10000,rtn=-1;
	for(int i=0;i<m_jshu;i++)//遍历僵尸
	{
		if(m_jsh[i].shm==-1)
			continue;
		if(m_jsh[i].x<first&&m_jsh[i].x>x&&m_jsh[i].y==y&&m_jsh[i].lx<100)
		{
			rtn=i;
			first=m_jsh[i].x;
		}
	}
	return rtn;
}

int CGame::GetFirstZw(int x,int y)
{
	if(x<=0)return -1;
	return fr[x-1][y];
}

void CGame::Goj(int zshu)//植物攻击
{
	if(m_zhw[zshu].mg&&(m_lx==0||m_lx==1||m_lx==4))
		return;
	if(m_zhw[zshu].goj<0)//非标准植物
	{
		NotZw(zshu);
		return;
	}
	if(m_zhw[zshu].zha)
	{
		m_zhw[zshu].fu-=1;
		if(m_zhw[zshu].fu<0)
			m_zhw[zshu].fu=0;
		m_zhw[zshu].id=GetZwIcon(m_zhw[zshu]);
		Draw();
		int rtn=GetFirstJs(m_zhw[zshu].x,m_zhw[zshu].y);
		if(rtn==-1)return;
		if(m_jsh[rtn].x<m_zhw[zshu].x+250&&m_zhw[zshu].fu==0)
		{
			KillJs(m_jsh[rtn].x,m_jsh[rtn].y,m_zhw[zshu].goj);
			if(m_zhw[zshu].hb)
			{
				DestroyZw(zshu);
				return;
			}
			m_zhw[zshu].fu=m_zhw[zshu].sd;
			m_zhw[zshu].id=GetZwIcon(m_zhw[zshu]);
		}
		return;
	}
	if(hjs[m_zhw[zshu].y]>0)
	{
		SZid zd;//发射子弹
		zd.color=m_zhw[zshu].color;
		zd.sd=m_zhw[zshu].sd;
		zd.x=m_zhw[zshu].x;
		zd.y=m_zhw[zshu].y;
		zd.goj=m_zhw[zshu].goj;
		zd.dx=m_zhw[zshu].dx;
		zd.hb=m_zhw[zshu].hb;
		NewZd(zd);
	}
}

void CGame::NewZd(SZid zd)
{
	if(m_dshu>150)//上限
		return;
	m_zid[m_dshu++]=zd;
}

void CGame::NewJs(SJsh js)
{
	if(m_jshu>300)//上限
		return;
	hjs[js.y]+=1;
	m_jsh[m_jshu]=js;
	m_jsh[m_jshu].shu = m_jshu;
	m_jshu+=1;
	Draw();
}

bool CGame::NewZw(SZhw zw)
{
	if(m_keng[zw.x/110][zw.y]==1||(m_keng[zw.x/110][zw.y]==2&&zw.lx!=14))//有坑,或有水且不是荷叶
		return false;
	if(GetZwShu(zw.x,zw.y)!=-1)
		return false;
	m_yg-=zw.yg;
	if(m_yg<0)
	{
		m_yg+=zw.yg;
		return false;
	}
	if(zw.lx==14)
	{
		if(m_keng[zw.x/110][zw.y]==2)
		{
			m_keng[zw.x/110][zw.y]=3;
			return true;
		}
		return false;
	}
	int i=m_zshu;
	m_zhw[i]=zw;
	bh[zw.x][zw.y]=i;
	m_zhw[i].shu=i;
	m_zhw[i].id=GetZwIcon(m_zhw[i]);
	SetTimer(m_wnd->m_hWnd,i,zw.time,NULL);
	m_zshu+=1;
	Draw();
	if(zw.time==1)
		Goj(i);
	CalZw();
	return true;
}

bool CGame::MoveJs(int shu)
{
	if(m_jsh[shu].hb%2==0||(m_jsh[shu].lx==12&&m_jsh[shu].shm>30))//若寒冰效果,速度变为一半,车不受影响
	{
		int i=GetFirstZw(m_jsh[shu].x,m_jsh[shu].y);
		m_jsh[shu].x-=m_jsh[shu].sd;
		if(i!=-1&&m_jsh[shu].x-80<=m_zhw[i].x)
		{
			m_jsh[shu].x+=m_jsh[shu].sd;
			Eat(i,shu);
		}
		if(m_jsh[shu].x<-110&&!m_over)
		{
			if(m_jsh[shu].lx==11)//?
			{
				m_jsh[shu].sd=-10;
				return false;
			}
			if(m_jsh[shu].lx>=100)//僵尸的子弹
			{
				DestroyJs(shu);
				return true;
			}
			if(m_car[m_jsh[shu].y])//车 此处有BUG
			{
				int ty=m_jsh[shu].y;
				KillJsLine(m_jsh[shu].y,1000);
				m_car[ty]=false;
				Draw();
			}
			else
			{
				m_over=true;
				int s=0;
				for(int i=0;i<m_jshu;i++)
				{
					if(m_jsh[i].lx<100)
						s+=1;
				}
				CString st;
				st.Format("失败\r\n得分:%d",m_wnd->jd-s);
				::MessageBox(m_wnd->m_hWnd,st,"提示",MB_OK);
				KillAll();
			}
		}
	}
	if(m_jsh[shu].lx==15)//苦力怕走得慢
		m_jsh[shu].hb^=1;
	else
	{
		m_jsh[shu].hb+=1;
		if(m_jsh[shu].hb>100)
			m_jsh[shu].hb=100;
	}
	if(m_jsh[shu].fs)
	{
		m_jsh[shu].fss+=1;
		if(m_jsh[shu].fss>=35)//发射时间
		{
			m_jsh[shu].fss=0;
			Fash(m_jsh[shu],*this);
		}
	}
	return false;
}

void CGame::Crepeer(int i)
{
	if(m_jsh[i].lx==15)//苦力怕
	{
		int x=(m_jsh[i].x/110)*110,y=m_jsh[i].y;
		for(int a=-2;a<=1;a++)
		{
			for(int b=-1;b<=1;b++)
			{
				int z=GetZwShu(x+a*110,y+b);
				if(z!=-1)
				{
					m_zhw[z].shm-=300;
					if(m_zhw[z].shm<=0)
						DestroyZw(z);
					else
						m_zhw[z].id=GetZwIcon(m_zhw[z]);
				}
			}
		}
	}
	DestroyJs(i);
}

SZid p_zid[1000];SJsh p_jsh[1000];

int cmp1(const void*a,const void*b)
{
	return p_zid[*(int*)a].x-p_zid[*(int*)b].x;
}

int cmp2(const void*a,const void*b)
{
	return p_jsh[*(int*)a].x-p_jsh[*(int*)b].x;
}

void CGame::MoveAllZd()//双指针
{
	SZZ=true;
	int zs[5]={0},js[5]={0};
	for(int i=0;i<m_dshu;i++)
	{
		int y=m_zid[i].y;
		pd[y][zs[y]++]=i;
		p_zid[i]=m_zid[i];
	}
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].lx>=100)continue;
		int y=m_jsh[i].y;
		pj[y][js[y]++]=i;
		p_jsh[i]=m_jsh[i];
	}
	for(int y=0;y<5;y++)
	{
		qsort(pd[y],zs[y],sizeof(int),cmp1);
		qsort(pj[y],js[y],sizeof(int),cmp2);
		for(int a=0,b=0;a<zs[y];a++)
		{
			int shu=pd[y][a],zx=m_zid[shu].x;
			m_zid[shu].x+=m_zid[shu].sd*3;
			while(b<js[y]&&(m_jsh[pj[y][b]].x<=zx||m_jsh[pj[y][b]].shm<0))b+=1;
			int i=(b==js[y]?-1:pj[y][b]);
			if(i!=-1&&m_zid[shu].x+55>=m_jsh[i].x)
			{
				int tx=m_jsh[i].x;
				m_jsh[i].shm-=m_zid[shu].goj;
				if(m_zid[shu].hb)
					m_jsh[i].hb=0;
				m_jsh[i].id=GetJsIcon(m_jsh[i],*this);
				if(m_jsh[i].shm<=0)
				{
					if(m_jsh[i].lx==15&&rand()%2==0)
						Crepeer(i);
					else
						DestroyJs(i);
					b+=1;
				}
				if(m_zid[shu].goj>=4)//群体伤害
				{
					int y=m_zid[shu].y,z=(m_zid[shu].goj==5?-1:1);
					if(y>0)KillJs(tx,y-1,z);
					if(y<4)KillJs(tx,y+1,z);
					KillJs(tx,y,z);
				}
				m_zid[shu].y=-1;
			}
			if(m_zid[shu].x>920)m_zid[shu].y=-1;
		}
	}
	int sa=0,sb=0;
	for(int i=0;i<m_dshu;i++)
	{
		if(m_zid[i].y!=-1)
			tmz[sa++]=m_zid[i];
	}
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].shm!=-1)
			tmj[sb++]=m_jsh[i];
	}
	m_dshu=sa;m_jshu=sb;
	for(int i=0;i<sa;i++)m_zid[i]=tmz[i];
	for(int i=0;i<sb;i++)
	{
		m_jsh[i]=tmj[i];
		m_jsh[i].shu=i;
	}
	SZZ=false;Draw();
}

bool CGame::MoveZd(int shu)
{
	int i=GetFirstJs(m_zid[shu].x+52,m_zid[shu].y);//此处待优化
	m_zid[shu].x+=m_zid[shu].sd*2;
	if(i!=-1&&m_zid[shu].x+55>=m_jsh[i].x)
	{
		m_jsh[i].shm-=m_zid[shu].goj;
		if(m_zid[shu].hb)
			m_jsh[i].hb=0;
		m_jsh[i].id=GetJsIcon(m_jsh[i],*this);
		if(m_jsh[i].shm<=0)
		{
			if(m_jsh[i].lx==15)
				Crepeer(i);
			else
				DestroyJs(i);
		}
		if(m_zid[shu].goj>=4)//群体伤害
		{
			int y=m_zid[shu].y;
			if(y>0)KillJs(m_zid[shu].x,y-1,-1);
			if(y<4)KillJs(m_zid[shu].x,y+1,-1);
			KillJs(m_zid[shu].x,y,-1);
		}
		DestroyZd(shu);
		return true;
	}
	if(m_zid[shu].x>920)
	{
		DestroyZd(shu);
		return true;
	}
	return false;
}

void CGame::Draw()
{
	CDC *dc=m_wnd->GetDC();
	//双缓冲绘图
	CDC memdc;
	memdc.CreateCompatibleDC(NULL);
	CRect r;
	m_wnd->GetClientRect(&r);
	r.bottom = 600; r.right = 1060;
	CBitmap bit;
	bit.CreateCompatibleBitmap(dc,r.Width(),r.Height());
	memdc.SelectObject(&bit);
	COLORREF color=(m_lx==0||m_lx==1||m_lx==4||m_lx==5)?RGB(240,240,240):RGB(28,28,158);
	CBrush br(color);
	memdc.FillRect(r,&br);
	br.DeleteObject();
	int s100=100,s150=150;
	if(m_lx==2||m_lx==3)s100/=1.5,s150/=1.5;
	CBrush br100(RGB(s100,s100,s100)),br150(RGB(s150,s150,s150));
	for(int x=0;x<9;x++)
	{
		for(int y=0;y<5;y++)
		{
			if((x+y)%2==0)
				memdc.FillRect(CRect(x*110+50,y*110,x*110+110+50,y*110+110),&br100);
			else
				memdc.FillRect(CRect(x*110+50,y*110,x*110+110+50,y*110+110),&br150);
		}
	}
	br100.DeleteObject();br150.DeleteObject();
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<5;j++)
		{
			if(m_keng[i][j]==0)
				continue;
			HICON icon=HICON(LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON58+m_keng[i][j]),IMAGE_ICON,110,110,LR_DEFAULTCOLOR));
			::DrawIconEx(memdc.m_hDC,i*110+50,j*110,icon,110,110,0,NULL,DI_NORMAL);
			::DestroyIcon(icon);
		}
	}
	for(int i=0;i<m_zshu;i++)
	{
		if(m_zhw[i].shm==-1)
			continue;		
		HICON icon=HICON(LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(m_zhw[i].id),IMAGE_ICON,110,110,LR_DEFAULTCOLOR));
		::DrawIconEx(memdc.m_hDC,m_zhw[i].x+50,m_zhw[i].y*110,icon,110,110,0,NULL,DI_NORMAL);
		::DestroyIcon(icon);
	}
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].shm==-1)
			continue;		
		HICON icon=HICON(LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(m_jsh[i].id),IMAGE_ICON,110,110,LR_DEFAULTCOLOR));
		::DrawIconEx(memdc.m_hDC,m_jsh[i].x+50,m_jsh[i].y*110,icon,110,110,0,NULL,DI_NORMAL);
		::DestroyIcon(icon);
	}
	for(int i=0;i<m_dshu;i++)
	{
		if(m_zid[i].y==-1)
			continue;
		int left=(110-m_zid[i].dx)/2,right=left+m_zid[i].dx;
		CPen p(0,1,m_zid[i].color);
		CBrush br(m_zid[i].color);
		memdc.SelectObject(&p);
		memdc.SelectObject(&br);
		memdc.Ellipse(m_zid[i].x+left+50,m_zid[i].y*110+left,m_zid[i].x+right+50,m_zid[i].y*110+right);
		p.DeleteObject();
		br.DeleteObject();
	}
	for(int n=0;n<5;n++)
	{
		if(m_car[n])
			memdc.DrawIcon(0,n*110+39,AfxGetApp()->LoadIcon(IDI_ICON28));
	}
	if(m_lx==1||m_lx==3)
	{
		bool notmw[6][5]={0};
		int next[8][2]={1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1};
		for(int n=0,i=0;n<m_zshu;i++)
		{
			if(m_zhw[i].shm==-1)
				continue;		
			n+=1;
			if(m_zhw[i].lx==11)
			{
				for(int j=0;j<8;j++)
				{
					int x=m_zhw[i].x/110+next[j][0]-3;
					int y=m_zhw[i].y+next[j][1];
					if(!(x<0||x>=6||y<0||y>=5))
						notmw[x][y]=true;
				}
				notmw[m_zhw[i].x/110-3][m_zhw[i].y]=true;
			}
		}
		HICON icon=HICON(LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON91),IMAGE_ICON,110,110,LR_DEFAULTCOLOR));
		for(int x=0;x<6;x++)
		{
			for(int y=0;y<5;y++)
			{
				if(!notmw[x][y])
					::DrawIconEx(memdc.m_hDC,x*110+380,y*110,icon,110,110,0,NULL,DI_NORMAL);		
			}
		}
		::DestroyIcon(icon);
	}
	CFont *f=new CFont();
	f->CreatePointFont(200,"宋体");
	memdc.SelectObject(f);
	CString str;
	str.Format("阳光:%d               ",m_yg+m_cc);
	memdc.SetBkColor(color);
	if(m_lx==2||m_lx==3)
		memdc.SetTextColor(RGB(200,200,0));
	memdc.TextOut(50,560,str);
	dc->BitBlt(0,0,r.Width(),r.Height(),&memdc,0,0,SRCCOPY);
	f->DeleteObject();
	delete f;	
	memdc.DeleteDC();
	m_wnd->ReleaseDC(dc);
	bit.DeleteObject();
}

void CGame::NotZw(int shu)//特殊植物
{
	int gj=-m_zhw[shu].goj;
	int n;		
	int next[8][2]={110,0,110,1,0,1,-110,1,-110,0,-110,-1,0,-1,110,-1};
	switch(gj)
	{
	case 1://向日葵
		m_yg+=25;
		break;
	case 2://炸弹
		for(n=0;n<8;n++)
			KillJs(m_zhw[shu].x+next[n][0],m_zhw[shu].y+next[n][1],100);
		KillJs(m_zhw[shu].x,m_zhw[shu].y,100);
		DestroyZw(shu);
		break;
	case 3://火爆辣椒	
		KillJsLine(m_zhw[shu].y,90);
		DestroyZw(shu);
		break;
	case 4://倭瓜
		{
			bool rtn=false;
			rtn=rtn||KillJs(m_zhw[shu].x,m_zhw[shu].y,80);
			if(!rtn)
				rtn=rtn||KillJs(m_zhw[shu].x-110,m_zhw[shu].y,80);
			if(!rtn)
				rtn=rtn||KillJs(m_zhw[shu].x+110,m_zhw[shu].y,80);
			if(rtn)
				DestroyZw(shu);
			break;
		}
	case 5://阳光菇
		if(m_zhw[shu].fu<10)
			m_yg+=15;
		else
			m_yg+=25;
		m_zhw[shu].fu+=1;//生长
		if(m_zhw[shu].fu>10)
			m_zhw[shu].fu=10;
		m_zhw[shu].id=GetZwIcon(m_zhw[shu]);
		break;	
	case 6://毁灭菇
		for(n=0;n<8;n++)
			KillJs(m_zhw[shu].x+next[n][0],m_zhw[shu].y+next[n][1],210);
		KillJs(m_zhw[shu].x,m_zhw[shu].y,210);
		DestroyZw(shu);
		m_keng[m_zhw[shu].x/110][m_zhw[shu].y]=1;//坑
		break;
	case 7://寒冰菇
		m_hb=true;
		for(int i=0;i<m_jshu;i++)
			m_jsh[i].hb=0;
		m_wnd->KillTimer(1006);
		m_wnd->SetTimer(1006,4000,NULL);
		DestroyZw(shu);
		break;
	case 8://全息坚果
		m_zhw[shu].shm+=15;
		if(m_zhw[shu].shm>800)
			m_zhw[shu].shm=800;
		m_zhw[shu].id=GetZwIcon(m_zhw[shu]);
		break;
	case 9://双子
		m_yg+=25;
		break;
	case 10://医疗
		for(int a=-1;a<=1;a++)
		{
			for(int b=-1;b<=1;b++)
			{
				if(a==0&&b==0)continue;
				int z=GetZwShu(m_zhw[shu].x+a*110,m_zhw[shu].y+b);
				if(z!=-1)
				{
					m_yg-=3;
					if(m_yg<0)
					{
						m_yg=0;
						goto ov;
					}
					if(m_zhw[z].shm<=100)
					{
						m_zhw[z].shm+=5;
						if(m_zhw[z].shm>100)
							m_zhw[z].shm=100;
					}
					else
					{
						m_zhw[z].shm+=24;
						if(m_zhw[z].shm>1800)
							m_zhw[z].shm=1800;
					}
					m_zhw[z].id=GetZwIcon(m_zhw[z]);
				}
			}
		}
ov:
		break;
	}
	Draw();
}

bool CGame::KillJs(int x, int y, int kill)//杀僵尸
{
	if(x<0||y<0||x>=990||y>=5)
		return false;
	bool rtn=false;
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].shm<0)
			continue;		
		if(m_jsh[i].y==y&&m_jsh[i].x<=x+75&&m_jsh[i].x>=x-75&&m_jsh[i].lx<100)
		{
			rtn=true;
			if(kill>0)
				m_jsh[i].shm-=kill;
			else
			{
				m_jsh[i].shm+=kill;
				m_jsh[i].hb=0;
			}
			m_jsh[i].id=GetJsIcon(m_jsh[i],*this);
			if(m_jsh[i].shm<=0)
			{
				DestroyJs(i);
				i-=1;
			}
		}
	}
	return rtn;
}

void CGame::KillJsLine(int y,int kill)//杀行
{
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].shm==-1)
			continue;
		if(m_jsh[i].y==y)
		{
			m_jsh[i].shm-=kill;
			if(m_jsh[i].shm<=0)
			{
				DestroyJs(i);
				i-=1;
			}
			else
				m_jsh[i].id=GetJsIcon(m_jsh[i],*this);
		}
	}
}

void CGame::KillAll()
{
	while(m_zshu>0)
		DestroyZw(0);
	while(m_jshu>0)
		DestroyJs(0);
	while(m_dshu>0)
		DestroyZd(0);
	Draw();
}

void CGame::CreateGame(int lx)
{
	m_jshu=m_zshu=m_dshu=0;
	m_yg=50;
	m_over=false;
	for(int i=0;i<50;i++)
		m_zhw[i].shm=-1;
	for(int i=0;i<1000;i++)
		m_jsh[i].shm=-1;
	for(int i=0;i<1000;i++)
		m_zid[i].y=-1;
	for(int i=0;i<5;i++)
		m_car[i]=true;
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<5;j++)
			m_keng[i][j]=0;
	}
	if(lx==4)
	{
		for(int i=0;i<9;i++)
		{
			for(int j=1;j<4;j++)
				m_keng[i][j]=2;
		}
	}
	m_ks=true;
	m_hb=false;
	m_lx=lx;
	Draw();
}

int CGame::Find(int zz[20],int n,int hg)//找到最优的位置
{
	for(int i=0;i<n;i++)
	{
		if(zz[i]==-1)
			return i;
	}
	int zx=1e9,wz=-1;
	for(int i=0;i<n;i++)
	{
		int t=m_zhw[zz[i]].yg;
		if(hg>=10&&(m_zhw[zz[i]].lx==0||m_zhw[zz[i]].lx==20)&&XS<=(18+(m_wnd->m_gq==60?8:0))&&rand()%20<19)//要保留一些葵
			t=500;
		else if(m_zhw[zz[i]].lx==6&&m_zhw[zz[i]].shm<150)
			t=25;
		if(t<zx)
			zx=t,wz=i;
	}
	return wz;
}

int CGame::Find(int zz[20],int n)//找到最优的位置
{
	for(int i=0;i<n;i++)
	{
		if(zz[i]==-1)
			return i;
	}
	int zx=1e9,wz=-1;
	for(int i=0;i<n;i++)
	{
		int t=m_zhw[zz[i]].yg;
		if((m_zhw[zz[i]].lx==0||m_zhw[zz[i]].lx==20)&&XS<=(18+(m_wnd->m_gq==60?8+rand()%2:0))&&rand()%20<19)//要保留一些葵
			t=500;
		else if(m_zhw[zz[i]].lx==6&&m_zhw[zz[i]].shm<150)
			t=25;
		if(t<zx)
			zx=t,wz=i;
	}
	return wz;
}

int CGame::Valid(int x,int sy=0)//植物可行
{
	int xu[10]={0,10,7,8,9,11,3,5,12},z=xu[x];
	if(m_wnd->m_en[z]>=800&&m_wnd->m_zw[z].yg+sy<=m_yg)
		return z;
	return -1;
}

int CGame::FakeKill(int xl, int xr, int y, int kill)
{
	if(y<0||y>=5)return 0;
	int jg=0;
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].shm<0||m_jsh[i].lx>=100)
			continue;		
		if(m_jsh[i].y==y&&m_jsh[i].x>=xl&&m_jsh[i].x<=xr&&m_jsh[i].lx<100)
		{
			int ad=m_jsh[i].shm;
			if(m_jsh[i].shm>150)ad-=50;//不要立刻炸死巨人
			if(m_jsh[i].lx==14||m_jsh[i].lx==15)ad+=25;
			if(m_jsh[i].lx==13)ad+=10;
			if(m_jsh[i].lx==16)ad+=12;
			if(m_jsh[i].eat>=4)ad+=15;
			jg+=ad;
		}
	}
	return jg;
}

bool CGame::UnderGaint(int x,int y)
{
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].lx==9&&m_jsh[i].y==y&&m_jsh[i].x>=x-30&&m_jsh[i].x<=x+220)//不能在巨人的面前种植
			return true;
	}
	return false;
}

bool CGame::UnderCar(int x,int y)
{
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].eat==40&&m_jsh[i].y==y&&m_jsh[i].x>=x-30)//不能在车的面前种植
			return true;
	}
	return false;
}

bool CGame::BeforeShe(int x,int y)
{
	int mi=10000;
	for(int i=0;i<m_jshu;i++)
	{
		if((m_jsh[i].lx==8||m_jsh[i].lx==10)&&m_jsh[i].y==y&&m_jsh[i].x>=x-10&&m_jsh[i].x<mi)//不能在射手的面前种植
			mi=m_jsh[i].x;
	}
	if(mi==10000)return false;
	for(int i=x;i<=mi;i+=110)
	{
		int z=GetZwShu(i,y);
		if(z!=-1&&m_zhw[z].shm>=400)//有坚果挡着
			return false;
	}
	return true;
}

int CGame::FakeKillL(int y,int kill)//计算一行的价值
{
	int jg=0;
	for(int i=0;i<m_jshu;i++)
	{
		if(m_jsh[i].y==y&&m_jsh[i].lx<100)
		{
			int ad=m_jsh[i].shm;
			if(m_jsh[i].shm>150)ad-=60;//不要立刻炸死巨人
			if(m_jsh[i].lx==14||m_jsh[i].lx==15)ad+=25;
			if(m_jsh[i].lx==13)ad+=10;
			if(m_jsh[i].lx==16)ad+=12;
			if(m_jsh[i].eat>=4)ad+=15;
			jg+=ad;
		}
	}
	return jg;
}

void CGame::AI()
{
	/*if(m_yg<250)//存储阳光(已废弃)
	{
		m_yg+=m_cc;
		m_cc=0;
	}*/
	int ma=1e9,zy=-1,zx;bool ff=false;
	for(int i=0;i<m_jshu;i++)//判断危机情况
	{
		if(m_jsh[i].lx>=100||m_jsh[i].eat==0||m_jsh[i].lx==16||m_jsh[i].sd==0)continue;//不对子弹,苦力怕,小偷进行处理
		int x=((m_jsh[i].x+30)/110)*110,y=m_jsh[i].y,z;
		int he=0;bool ji=false;
		for(int j=x,tm=0;j>=0;j-=110)
		{
			int z=GetZwShu(j,y);
			if(z!=-1)
			{
				if(m_zhw[z].lx==6||m_jsh[i].lx!=8)//不会跳过
					tm+=(m_zhw[z].shm/m_jsh[i].eat)*(m_wnd->m_gq==60?34:40);
				if(m_zhw[z].lx==4||m_zhw[z].lx==8||m_zhw[z].lx==10)
					he+=(tm/m_zhw[z].time)*m_zhw[z].goj;
				if(m_zhw[z].shm>=400)ji=true;//扫描到坚果
			}
			if(m_jsh[i].lx!=8)//特判跳跳
				tm+=110/m_jsh[i].sd*40;
			else
				tm-=40;
		}
		int t=x/m_jsh[i].sd;//进家的时间
		if(m_jsh[i].fs&&m_jsh[i].lx!=16)t+=100;
		if(!m_car[y])t+=200;
		if(he<=m_jsh[i].shm&&t<ma||(t==ma&&m_jsh[i].shm>zx))
			ma=t,zy=y,zx=x,ff=(m_jsh[i].fs&&m_jsh[i].lx!=16);
		if(!ji&&m_jsh[i].fs&&m_jsh[i].lx!=16)//种植坚果挡住子弹
		{
			for(int tx=x-110;tx>=0;tx-=110)
			{
				if(GetZwShu(tx,y)!=-1)
					break;
				if(!UnderGaint(tx,y))//找到第一个不在巨人脚下的位置
				{
					if((z=Valid(2,0))!=-1)
					{
						m_wnd->m_nzw=z;
						int r=GetZwShu(tx,y);
						if(r==-1||m_zhw[r].lx!=6)
						{
							DestroyZw(tx,y);
							m_wnd->Plant(tx,y);
						}
					}
					else if((z=Valid(1,0))!=-1)
					{
						m_wnd->m_nzw=z;
						int r=GetZwShu(tx,y);
						if(r==-1||m_zhw[r].lx!=6)
						{
							DestroyZw(tx,y);
							m_wnd->Plant(tx,y);
						}
					}
					break;
				}
			}
		}
	}
	if(zy!=-1)//出现紧急情况
	{
		int zz[20];
		for(int j=0;j<zx;j+=110)
			zz[j/110]=GetZwShu(j,zy);
		int rt=Find(zz,zx/110),z;//找到最优位置
		if(rt!=-1)
		{
			bool un=UnderCar(rt*110,zy)||UnderGaint(rt*110,zy)||BeforeShe(rt*110,zy);//不能在巨人和车的下面种植
			if((z=Valid(3,0))!=-1)//窝瓜
			{
				int zz[3]={GetZwShu(zx-110,zy),GetZwShu(zx,zy),GetZwShu(zx+110,zy)};
				int r=Find(zz,3);//找到最优位置
				m_wnd->m_nzw=z;DestroyZw(zx-110+r*110,zy);
				m_wnd->Plant(zx-110+r*110,zy);
			}
			else if((z=Valid(4,0))!=-1&&!un)//西瓜
			{
				m_wnd->m_nzw=z;DestroyZw(rt*110,zy);
				m_wnd->Plant(rt*110,zy);
			}
			else if(ff&&(z=Valid(2,0))!=-1)
			{
				m_wnd->m_nzw=z;
				int r=GetZwShu(zx-110,zy);
				if(r==-1||m_zhw[r].lx!=6)
				{
					DestroyZw(zx-110,zy);
					m_wnd->Plant(zx-110,zy);
				}
			}
			else if(ff&&(z=Valid(1,0))!=-1)
			{
				m_wnd->m_nzw=z;
				int r=GetZwShu(zx-110,zy);
				if(r==-1||m_zhw[r].lx!=6)
				{
					DestroyZw(zx-110,zy);
					m_wnd->Plant(zx-110,zy);
				}
			}
			else if((z=Valid(5,0))!=-1&&!un)
			{
				m_wnd->m_nzw=z;DestroyZw(rt*110,zy);
				m_wnd->Plant(rt*110,zy);
			}
			else if(zx<=110&&(z=Valid(7,0))!=-1)//马上进家时可以炸死
			{
				m_wnd->m_nzw=z;DestroyZw(zx,zy);
				m_wnd->Plant(zx,zy);
			}
			else if(zx<=110&&(z=Valid(6,0))!=-1)//马上进家时可以炸死
			{
				m_wnd->m_nzw=z;DestroyZw(zx,zy);
				m_wnd->Plant(zx,zy);
			}
		}
	}
	int jian[5]={0};
	if(Valid(2,25)!=-1)//种植高坚果
	{
		for(int i=0;i<m_zshu;i++)
		{
			if(m_zhw[i].lx==6&&m_zhw[i].shm>300&&m_zhw[i].x>=440)
				jian[m_zhw[i].y]+=1;
		}
		zy=ma=-1;
		for(int y=0;y<5;y++)
		{
			if(jian[y])continue;
			int sh=0;
			for(int i=0;i<m_jshu;i++)
			{
				if(m_jsh[i].lx<100&&m_jsh[i].y==y)
					sh+=m_jsh[i].shm+int(m_jsh[i].fs)*40;
			}
			if(sh>ma)ma=sh,zy=y;
		}
		if(zy!=-1)
		{
			int tx[4]={770,660,550,880},zz[20];
			for(int s=0;s<4;s++)zz[s]=GetZwShu(tx[s],zy);
			int rt=Find(zz,4);
			if(!UnderGaint(tx[rt],zy)&&(!UnderCar(tx[rt],zy)||rand()%10==0))
			{
				m_wnd->m_nzw=7;DestroyZw(tx[rt],zy);
				m_wnd->Plant(tx[rt],zy);jian[zy]+=1;
			}
		}
		else if(rand()%(m_wnd->m_gq==60?8:20)==0)//有一定概率种植两排
		{			
			zy=ma=-1;
			for(int y=0;y<5;y++)
			{
				if(jian[y]>=2)continue;
				int sh=0;
				for(int i=0;i<m_jshu;i++)
				{
					if(m_jsh[i].lx<100&&m_jsh[i].y==y)
						sh+=m_jsh[i].shm+int(m_jsh[i].fs)*40;
				}
				if(sh>ma)ma=sh,zy=y;
			}
			if(zy!=-1)
			{
				int tx[4]={770,660,550,880},zz[20];
				for(int s=0;s<4;s++)zz[s]=GetZwShu(tx[s],zy);
				int rt=Find(zz,4);
				if(!UnderGaint(tx[rt],zy)&&(!UnderCar(tx[rt],zy)||rand()%10==0))
				{
					m_wnd->m_nzw=7;DestroyZw(tx[rt],zy);
					m_wnd->Plant(tx[rt],zy);jian[zy]+=1;
				}
			}
			else if(m_wnd->m_gq==60&&rand()%15==0)//60关有一定概率种植三排
			{
				zy=ma=-1;
				for(int y=0;y<5;y++)
				{
					if(jian[y]>=3)continue;
					int sh=0;
					for(int i=0;i<m_jshu;i++)
					{
						if(m_jsh[i].lx<100&&m_jsh[i].y==y)
							sh+=m_jsh[i].shm+int(m_jsh[i].fs)*40;
					}
					if(sh>ma)ma=sh,zy=y;
				}
				if(zy!=-1)
				{
					int tx[4]={770,660,550,880},zz[20];
					for(int s=0;s<4;s++)zz[s]=GetZwShu(tx[s],zy);
					int rt=Find(zz,4);
					if(!UnderGaint(tx[rt],zy)&&(!UnderCar(tx[rt],zy)||rand()%10==0))
					{
						m_wnd->m_nzw=7;DestroyZw(tx[rt],zy);
						m_wnd->Plant(tx[rt],zy);jian[zy]+=1;
					}
				}
			}
		}
	}
	int xs=0,s1=0;
	for(int i=0;i<m_zshu;i++)
	{
		if(m_zhw[i].lx==1)
			xs+=1,s1+=1;
		if(m_zhw[i].lx==20)
			xs+=2;
	}
	int mx=28+(m_wnd->m_gq==60?6:0);
	if(m_jshu>=10)mx=15+(m_wnd->m_gq==60?4:0);
	if(m_jshu>=15)mx=8+(m_wnd->m_gq==60?2:0);//僵尸太多就不要着急种葵了
	if(m_jshu>=20)mx=0;
	if(xs<=mx&&Valid(8,25))
	{	
		bool zd=false;
		bool yj[5]={0};
		if(m_jshu>3&&zk)//有僵尸就需要坚果
		{
			for(int y=0;y<5;y++)
				yj[y]=(jian[y]==0);
		}
		for(int x=0;x<=880;x+=110)
		{
			for(int y=0;y<5;y++)
			{
				if(yj[y])continue;//后面没有坚果就不种植
				int r=GetZwShu(x,y);
				if(r!=-1&&m_zhw[r].lx==6)yj[y]=true;
				if(r==-1&&!UnderGaint(x,y)&&!UnderCar(x,y)&&!BeforeShe(x,y))
				{
					m_wnd->m_nzw=12;m_wnd->Plant(x,y);
					xs+=2;zd=true;break;
				}
			}
			if(zd)break;
		}
	}
	if(xs<=mx&&(m_zshu==0||(Valid(0,50)!=-1&&(rand()%18==0||s1<5))))//种植向日葵
	{
		bool zd=false;
		bool yj[5]={0};
		if(m_jshu>3&&zk)//有僵尸就需要坚果
		{
			for(int y=0;y<5;y++)
				yj[y]=(jian[y]==0);
		}
		for(int x=0;x<=880;x+=110)
		{
			for(int y=0;y<5;y++)
			{
				if(yj[y])continue;//后面没有坚果就不种植
				int r=GetZwShu(x,y);
				if(r!=-1&&m_zhw[r].lx==6)yj[y]=true;
				if(r==-1)
				{
					if(!UnderGaint(x,y)&&!UnderCar(x,y)&&!BeforeShe(x,y))//不能在巨人的面前种植
					{
						m_wnd->m_nzw=0;m_wnd->Plant(x,y);
						if(m_wnd->m_dzs>0&&!zk)
						{
							DaZhao(m_zhw[m_zshu-1],m_wnd);
							m_wnd->m_dzs-=1;
						}
						else zk=true;
						xs+=1;zd=true;break;
					}
				}
			}
			if(zd)break;
		}
	}
	XS=xs;
	if(xs>=5&&(m_yg>=600||rand()%5==0))//种瓜
	{
		int hg[5]={0},hj[5]={0};
		for(int i=0;i<m_zshu;i++)
		{
			if(m_zhw[i].lx==4||m_zhw[i].lx==8||m_zhw[i].lx==10)
			{
				hg[m_zhw[i].y]+=m_zhw[i].goj;
				if(m_zhw[i].hb)hg[m_zhw[i].y]+=1;
			}
		}
		for(int i=0;i<m_jshu;i++)
		{
			if(m_jsh[i].lx<100)
				hj[m_jsh[i].y]+=(m_jsh[i].shm+(m_jsh[i].eat-1)*4+int(m_jsh[i].fs)*25);
		}
		ma=1e9,zy=-1;int z,zz[20],mz;
		for(int y=0;y<5;y++)
		{
			if(!m_car[y])hg[y]-=4;
			if(hg[y]-hj[y]/16<ma)
				ma=hg[y]-hj[y]/16,mz=hg[y],zy=y;
		}
		if(mz<12+(m_wnd->m_gq==60?3:0)||rand()%24==0)//如果攻击力很高就先不种植
		{
			for(int x=0;x<=660;x+=110)
				zz[x/110]=GetZwShu(x,zy);
			int rt=Find(zz,7,mz);
			if(rt!=-1&&!UnderGaint(rt*110,zy)&&!UnderCar(rt*110,zy)&&!BeforeShe(rt*110,zy))//不能在危险处种植
			{
				if((z=Valid(5,100))!=-1&&(zz[rt]==-1||m_zhw[zz[rt]].yg<=200))
				{
					m_wnd->m_nzw=z;DestroyZw(rt*110,zy);
					m_wnd->Plant(rt*110,zy);
				}
				else if(((z=Valid(4,75))!=-1)&&rand()%12==0&&(zz[rt]==-1||m_zhw[zz[rt]].yg<=200))
				{
					m_wnd->m_nzw=z;DestroyZw(rt*110,zy);
					m_wnd->Plant(rt*110,zy);
				}
			}
		}
	}
	if(Valid(3,0)!=-1)//种植窝瓜
	{
		ma=-1;
		for(int x=0;x<=880;x+=110)
		{
			for(int y=0;y<5;y++)
			{
				int r=GetZwShu(x,y);
				if(r==-1||m_zhw[r].yg<=50)
				{
					int rt=FakeKill(x-75,x+75,y,90);
					if(rt>ma)ma=rt,zx=x,zy=y;
				}
			}
		}
		if(ma>=90)
		{
			m_wnd->m_nzw=8;DestroyZw(zx,zy);
			m_wnd->Plant(zx,zy);
		}
	}
	else if(Valid(6,0)!=-1)//种植炸弹
	{
		ma=-1;
		int next[8][2]={110,0,110,1,0,1,-110,1,-110,0,-110,-1,0,-1,110,-1};
		for(int x=0;x<=880;x+=110)
		{
			for(int y=0;y<5;y++)
			{
				int r=GetZwShu(x,y);
				if(r==-1||m_zhw[r].yg<=50)
				{
					int rt=0;
					for(int s=-1;s<=1;s++)
						rt+=FakeKill(x-185,x+185,y+s*110,100);
					if(rt>ma)ma=rt,zx=x,zy=y;
				}
			}
		}
		if(ma>=(m_wnd->jd<=100?120:140)+(m_wnd->m_gq==60?30:0))
		{
			m_wnd->m_nzw=3;DestroyZw(zx,zy);
			m_wnd->Plant(zx,zy);
		}
	}
	else if(Valid(7,25)!=-1)//种植辣椒
	{
		ma=-1;
		for(int y=0;y<5;y++)
		{
			int rt=FakeKillL(y,100);
			if(rt>ma)ma=rt,zy=y;
		}
		if(ma>(m_wnd->jd<=100?100:120))
		{
			int zz[20];
			for(int s=0;s<=880;s+=110)
				zz[s/110]=GetZwShu(s,zy);
			zx=Find(zz,9)*110;
			m_wnd->m_nzw=5;DestroyZw(zx,zy);
			m_wnd->Plant(zx,zy);
		}
	}
	else if(m_wnd->m_dzs>0)
	{
		int xh[5]={0};
		for(int i=0;i<m_jshu;i++)
		{
			if(m_jsh[i].lx<100)
				xh[m_jsh[i].y]+=m_jsh[i].shm;
		}
		ma=-1,zy=-1;
		for(int y=0;y<5;y++)
		{
			if(xh[y]>ma)
				ma=xh[y],zy=y;
		}
		if(ma>=200)
		{
			bool zd=false;
			for(int x=0;x<=220;x++)
			{
				int z=GetZwShu(x,zy);
				if(z!=-1&&m_zhw[z].lx==10&&m_zhw[z].time==100)
				{
					zd=true;
					break;
				}
			}
			if(!zd)
			{
				for(int x=0;x<=220;x++)
				{
					int z=GetZwShu(x,zy);
					if(z!=-1&&m_zhw[z].lx==10&&m_zhw[z].time!=100)
					{
						DaZhao(m_zhw[z],m_wnd);
						m_wnd->m_dzs-=1;break;
					}
				}
			}
		}
	}
	if(Valid(1,150)!=-1&&rand()%16==0)//在最右侧种植小坚果
	{
		int x=770+(rand()%2)*110,y=rand()%5;
		if(GetZwShu(x,y)==-1)
		{
			m_wnd->m_nzw=10;
			m_wnd->Plant(x,y);
		}
	}
	if(m_yg>1300&&m_wnd->m_dzs<5)
	{
		m_yg-=400;
		m_wnd->m_dzs+=1;
	}
	/*if(m_yg>700)
	{
		m_cc+=50;
		m_yg-=50;
	}*/
}
// 大战僵尸Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "大战僵尸.h"
#include "大战僵尸Dlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	m_gq = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON3);
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyDlg)
	DDX_Control(pDX, IDC_PROGRESS1, cpr_jd);
	DDX_Control(pDX, IDC_BUTTON1, cbu_zt);
	DDX_Text(pDX, IDC_EDIT1, m_gq);
	DDX_Check(pDX, IDC_CHECK1, m_ai);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_CHECK1, &CMyDlg::OnBnClickedCheck1)
END_MESSAGE_MAP()

/
// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()
{
	MessageBox(_T("规则:阳光自动收集。拖动植物种植,双击植物挖去,右键放大招。"));
	CDialog::OnInitDialog();
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	//创建植物:子弹颜色,攻击力,攻击时间,移动速度(子弹)
	m_zw[0].Create(0,-1,9000,1500,0,60,0,0,IDI_ICON2,50,1);//向日葵	
	m_zw[1].Create(RGB(0,255,0),1,2400,2000,4,60,0,0,IDI_ICON1,100,0);//豌豆射手
	m_zw[2].Create(0,0,1000000000,1000000000,0,600,0,0,IDI_ICON4,50,2);//坚果
	m_zw[3].Create(0,-2,1,0,0,50,0,0,IDI_ICON7,150,3);//炸弹
	m_zw[4].Create(RGB(255,0,0),2,2300,2000,4,60,0,0,IDI_ICON8,200,4);//火球射手
	m_zw[5].Create(0,-3,1,0,0,50,0,0,IDI_ICON9,125,5);//火爆辣椒	
	m_zw[6].Create(RGB(0,255,255),1,2400,2000,4,60,0,0,IDI_ICON48,175,9,10,true);//寒冰射手
	m_zw[7].Create(0,0,1000000000,1000000000,0,1600,0,0,IDI_ICON11,125,6);//高坚果
	m_zw[8].Create(0,-4,1,0,0,50,0,0,IDI_ICON12,50,7);//倭瓜
	m_zw[9].Create(RGB(0,200,0),4,2400,2500,6,60,0,0,IDI_ICON43,375,8,30);//西瓜
	m_zw[10].Create(0,-8,1000,1000000000,0,600,0,0,IDI_ICON82,75,19);//恢复坚果
	m_zw[11].Create(RGB(0,255,255),5,2600,2400,5,60,0,0,IDI_ICON55,500,10,30,true);//冰瓜
	m_zw[12].Create(0,-9,5000,1500,0,60,0,0,IDI_ICON94,125,20);//双子
	m_zw[13].Create(0,-10,1000,1500,0,20,0,0,IDI_ICON95,125,21);//医疗
	m_zw[14].Create(0,90,500,0,40,60,0,0,IDI_ICON68,150,16,0,false,false,true);//大嘴花
	m_zw[15].Create(0,0,1000000000,0,0,60,0,0,IDI_ICON56,25,11);//灯	
	m_zw[16].Create(0,90,500,0,0,60,0,0,IDI_ICON71,25,17,40,true,false,true);//土豆地雷
	m_zw[17].Create(0,-5,8900,0,0,60,0,0,IDI_ICON57,25,12,0,false,true);//阳光菇
	m_zw[18].Create(RGB(255,0,255),1,4800,1600,4,60,0,0,IDI_ICON58,0,13,5,false,true);//小喷菇
	m_zw[19].Create(0,-6,1,0,0,50,0,0,IDI_ICON63,125,15,10,false,true);//毁灭菇
	m_zw[20].Create(0,-7,1,0,0,60,0,0,IDI_ICON72,125,18,0,false,true);//寒冰菇
	m_zw[21].Create(0,0,1000000000,0,0,0,0,0,IDI_ICON62,25,14);//荷叶
	//创建僵尸:速度,生命,吃的速度,0,0,图片ID,编号,是否能跳跃,是否发射
	m_js[0].Create(1,5,1,0,0,IDI_ICON3,0);//普通僵尸
	m_js[1].Create(1,12,1,0,0,IDI_ICON5,1);//塑料僵尸
	m_js[2].Create(2,15,1,0,0,IDI_ICON29,5,true);//撑杆跳僵尸
	m_js[3].Create(1,30,1,0,0,IDI_ICON6,2);//铁桶僵尸
	m_js[4].Create(1,20,4,0,0,IDI_ICON32,6);//大嘴僵尸
	m_js[5].Create(3,16,1,0,0,IDI_ICON10,3);//跑步僵尸
	m_js[6].Create(1,15,1,0,0,IDI_ICON24,4);//报纸僵尸
	m_js[7].Create(1,75,2,0,0,IDI_ICON36,7);//盾牌僵尸
	m_js[8].Create(1,18,1,0,0,IDI_ICON73,13,false,true);//豌豆射手僵尸
	m_js[9].Create(2,20,1,0,0,IDI_ICON44,8,true);//跳跳僵尸
	m_js[10].Create(1,20,1,0,0,IDI_ICON79,14,false,true);//冰瓜僵尸
	m_js[11].Create(2,90,40,0,0,IDI_ICON65,12);//小车僵尸
	m_js[12].Create(1,200,200,0,0,IDI_ICON49,9);//巨人僵尸
	m_js[13].Create(1,20,0,0,0,IDI_ICON93,15);//苦力怕
	m_js[14].Create(2,25,2,0,0,IDI_ICON96,16,false,true);//末影人
	//冷却速度
	m_hf[0]=12;
	m_hf[1]=15;
	m_hf[2]=6;
	m_hf[3]=0.9;
	m_hf[4]=12;
	m_hf[5]=1.1;
	m_hf[6]=12;
	m_hf[7]=5;
	m_hf[8]=4;
	m_hf[9]=10;
	m_hf[10]=7.5;
	m_hf[11]=3.8;
	m_hf[12]=8;
	m_hf[13]=3;
	m_hf[14]=2.5;
	m_hf[15]=12;	
	m_hf[16]=5;
	m_hf[17]=15;
	m_hf[18]=12;
	m_hf[19]=2;
	m_hf[20]=1.8;
	m_hf[21]=12;
	//相对概率
	m_p[0]=3;
	m_p[1]=4;
	m_p[2]=4;
	m_p[3]=5;
	m_p[4]=6;
	m_p[5]=6;
	m_p[6]=5;
	m_p[7]=8;
	m_p[8]=8;
	m_p[9]=9;
	m_p[10]=6;
	m_p[11]=4;
	m_p[12]=3;
	m_p[13]=8;
	m_p[14]=7;
	int zws[MAXGQS+1]={2,1,1,1,1,1,1,2,2,2,2,0,0,1,0,0,0,0,0,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0},n=0;//植物增加量
	for(n=1;n<MAXGQS;n++)
		zws[n]+=zws[n-1];
	zws[n]=0;
	for(n=0;n<=MAXGQS;n++)
		m_zws[n]=zws[n];
	m_game.m_wnd=this;
	for(n=0;n<XUAN;n++)	
		m_xuan[n]=-1;
	SHU=JSH=ND=0;
	m_nzw=-1;
	m_dzs=0;
	//PlaySound("e:\\bjyy.wav",NULL,SND_FILENAME|SND_ASYNC);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyDlg::OnPaint() 
{
	CDC *dc=GetDC();
	CBrush b(RGB(128,128,128)),b2(RGB(240,240,240));
	dc->FillRect(CRect(0,660,XUAN*110,800),&b2);
	for(int n=0;n<XUAN;n++)
	{
		if(n>=SHU-(m_b11))
			break;
		dc->FillRect(CRect(n*110, 600,n*110+110,770),&b2);
		dc->DrawIcon(n*110+39, 600,AfxGetApp()->LoadIcon(m_zw[m_xuan[n]].id));
		if(!m_b11)
		{
			dc->FillRect(CRect(n*110, 600,n*110+110, 600 +int((800-m_en[m_xuan[n]])/800.0*80.0)),&b);
			CString str;
			str.Format("%d",m_zw[m_xuan[n]].yg);
			dc->SetBkColor(RGB(240,240,240));
			dc->TextOut(n*110+42,640,str);
		}
		dc->SetBkColor(RGB(240,240,240));
		CString nu;nu.Format("快捷键:%d",n+1);
		dc->TextOut(n*110+40,680,nu);
	}
	if(m_b11&&SHU)
		dc->FillRect(CRect((SHU-1)*110, 600,(SHU-1)*110+110,770),&b2);
	if(m_nzw!=-1)
	{
		dc->FillRect(CRect(1100,570,1210,680),&b2);
		HICON icon=HICON(LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(m_zw[m_nzw].id),IMAGE_ICON,110,110,LR_DEFAULTCOLOR));
		::DrawIconEx(dc->m_hDC,1100,570,icon,110,110,0,NULL,DI_NORMAL);
	}
	for(int n=0;n<5;n++)
	{
		if(n<m_dzs)
			dc->DrawIcon(1060,n*110+50,AfxGetApp()->LoadIcon(IDI_ICON78));
		else
			dc->FillRect(CRect(1060, n * 110 + 50,1100,n*1150+110),&b2);
	}
	ReleaseDC(dc);
	b.DeleteObject();
	b2.DeleteObject();
	m_game.m_wnd=this;
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting
		
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		
		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		
		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

bool CMyDlg::Plant(int x,int y)
{
	bool rt=false;
	if(x>=0&&x<=880&&y>=0&&y<5&&m_nzw!=-1)
	{
		if(!m_b11)
		{
			if(m_en[m_nzw]>=800)
			{
				m_zw[m_nzw].x=x;
				m_zw[m_nzw].y=y;
				if(m_game.NewZw(m_zw[m_nzw]))
					m_en[m_nzw]=0;
			}
			OnPaint();
		}
		else
		{
			m_zw[m_nzw].x=x;
			m_zw[m_nzw].y=y;
			if(m_game.NewZw(m_zw[m_nzw]))
			{
				int n = 0;
				for(n=0;n<SHU;n++)
				{
					if(m_xuan[n]==m_nzw)
						break;
				}
				ASSERT(n<SHU);
				for(n+=1;n<SHU;n++)
					m_xuan[n-1]=m_xuan[n];
				SHU-=1;
				m_xuan[SHU]=-1;
				m_game.m_yg=9999;
				OnPaint();
				m_game.Draw();
			}
		}
		rt=true;
	}
	m_nzw=-1;return rt;
}

bool CMyDlg::Plant(CPoint pt)
{
	ScreenToClient(&pt);
	return Plant(((pt.x-50)/110)*110,pt.y/110);
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
{
	CString str;
	cbu_zt.GetWindowText(str);
	if(m_game.m_over)
		return CDialog::PreTranslateMessage(pMsg);
	if(pMsg->message==WM_KEYDOWN)//快捷键
	{
		int z=pMsg->wParam;
		if(z==' ')
		{
			OnButton1();
			return true;
		}
		if(str=="继续")
			return CDialog::PreTranslateMessage(pMsg);
		if(z>='1'&&z<='9')
		{
			m_nzw=z-'1';
			if(m_nzw>=XUAN||m_nzw>=SHU-(m_b11))
				m_nzw=-1;
			else
				m_nzw=m_xuan[m_nzw];
		}
	}
	if(str=="继续")
		return CDialog::PreTranslateMessage(pMsg);
	if(pMsg->message==WM_LBUTTONDBLCLK)//挖
	{
		CPoint pt=pMsg->pt;
		ScreenToClient(&pt);
		int x=int((pt.x-50)/110.0)*110;
		int y=int(pt.y/110.0);
		if(x>=0&&x<=880&&y>=0&&y<5)
			m_game.DestroyZw(x,y);
	}
	else if(pMsg->message==WM_LBUTTONUP)
		Plant(pMsg->pt);
	else if(pMsg->message==WM_LBUTTONDOWN)
	{
		bool t=(m_nzw==-1);
		if(m_nzw!=-1)
		{
			if(!Plant(pMsg->pt))
				t=true;
		}
		if(t)
		{
			CPoint pt=pMsg->pt;
			ScreenToClient(&pt);		
			int x=int(pt.x/110.0);
			int y=int(pt.y/110.0);
			if(y==5&&x<XUAN&&x<SHU-(m_b11))
				m_nzw=m_xuan[x];
		}
	}
	else if(pMsg->message==WM_RBUTTONUP)
	{
		if(m_dzs>0)
		{
			CPoint pt=pMsg->pt;
			ScreenToClient(&pt);
			int x=int((pt.x-50)/110.0)*110;
			int y=int(pt.y/110.0);
			if(x>=0&&x<=880&&y>=0&&y<5)
			{
				int rt=m_game.GetZwShu(x,y);
				if(rt!=-1)
				{
					bool rtn=DaZhao(m_game.m_zhw[rt],this);
					m_game.Draw();
					if(rtn)
						m_dzs-=1;
				}
			}
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CMyDlg::OnTimer(UINT nIDEvent)
{
	if(m_game.m_over)
	{
		GameOver();
		return;
	}
	CString str;
	cbu_zt.GetWindowText(str);
	if(str=="继续")
		return;
	if(nIDEvent<1000)
		m_game.Goj(nIDEvent);
	else
	{
		if(nIDEvent==1000)//移动僵尸
		{
			for(int i=0;i<m_game.m_jshu;i++)
			{
				if(!m_game.m_hb||m_game.m_jsh[i].lx>=100||m_game.m_jsh[i].lx==12)
				{
					if(m_game.MoveJs(i))
						i-=1;
				}
			}
			for(int n=0;n<MAXSHU;n++)//冷却
			{
				m_en[n]+=m_hf[n];
				if(m_en[n]>800)
					m_en[n]=800;
			}
			tm+=1;
			m_game.Draw();
			OnPaint();
		}
		else if(nIDEvent==1001)//移动子弹
			m_game.MoveAllZd();
		else if(nIDEvent==1002)//产生僵尸
		{
			if(m_b11)//Boss关卡
			{
				int r2=rand()%m_p[m_nd],n=0;
				for(n=0;n<JSH;n++)
				{
					if(r2<m_p[n])
						break;
				}
				m_js[n].x=885;
				double r=double(rand())/RAND_MAX;
				int wz=int(r*5);
				if(wz<0)wz=0;
				if(wz>=5)wz=4;
				m_js[n].y=wz;
				if(m_jwbs[m_js[n].y]>0)
					m_game.NewJs(m_js[n]);
				return;
			}
			if(m_n==ND-1)//结束
			{
				if(m_game.m_jshu==0)
				{
					KillTimer(1002);
					m_game.m_over=true;
					CString st;int yg=400*m_dzs+m_game.m_yg;
					for(int i=0;i<m_game.m_zshu;i++)
						yg+=m_game.m_zhw[i].yg;
					int sc=jd+1+yg/25;
					for(int y=0;y<5;y++)
					{
						if(m_game.m_car[y])
							sc+=30;
					}
					st.Format("胜利\r\n得分:%d",sc);
					GameOver();
					MessageBox(st,"提示");
					m_game.KillAll();
				}
				return;
			}
			int r=rand()%m_p[m_nd],n=0;
			for(n=0;n<JSH;n++)
			{
				if(r<m_p[n])
					break;
			}
			m_js[n].x=885;
			if(n==10)
			{
				int maxs=-100,wz;
				if(m_hbzw)
				{
					for(int j=0;j<5;j++)
					{
						int shu=(tm-m_lstB[j])-(tm-m_lstC[j]);
						if(shu>maxs)
						{
							maxs=shu;
							wz=j;
						}
					}
				}
				if(maxs==-100)
				{
					for(int j=0;j<5;j++)
					{
						int shu=(tm-m_lstB[j])-(tm-m_lstJ[j]);
						if(shu>maxs)
						{
							maxs=shu;
							wz=j;
						}
					}
					if(maxs==-100)
					{
						for(int j=0;j<5;j++)
						{
							int shu=(tm-m_lstB[j])-(tm-m_lstD[j]);
							if(shu>maxs)
							{
								maxs=shu;
								wz=j;
							}
						}
						if(maxs==-100)
						{
							for(int j=0;j<5;j++)
							{
								int shu=(tm-m_lstB[j])-(tm-m_lstT[j]);
								if(shu>maxs)
								{
									maxs=shu;
									wz=j;
								}
							}
							if(maxs==-100)
							{
								double r=double(rand())/RAND_MAX;
								wz=int(r*5);
								if(wz<0)
									wz=0;
								if(wz>=5)
									wz=4;
							}
						}
					}
				}
				m_js[n].y=wz;
				m_lstB[wz]=tm;
			}
			else if(n==8||n==4)
			{
				int maxs=200,wz;
				for(int j=0;j<5;j++)
				{
					int shu=tm-m_lstC[j];
					if(shu<maxs)
					{
						maxs=shu;
						wz=j;
					}
				}
				if(maxs==200)
				{
					for(int j=0;j<5;j++)
					{
						int shu=tm-m_lstJ[j];
						if(shu<maxs)
						{
							maxs=shu;
							wz=j;
						}
					}
					if(maxs==200)
					{
						for(int j=0;j<5;j++)
						{
							int shu=tm-m_lstD[j];
							if(shu<maxs)
							{
								maxs=shu;
								wz=j;
							}
						}
						if(maxs==200)
						{
							for(int j=0;j<5;j++)
							{
								int shu=tm-m_lstT[j];
								if(shu<maxs)
								{
									maxs=shu;
									wz=j;
								}
							}
							if(maxs==200)
							{
								double r=double(rand())/RAND_MAX;
								wz=int(r*5);
								if(wz<0)
									wz=0;
								if(wz>=5)
									wz=4;
							}
						}
					}
				}
				m_js[n].y=wz;
			}
			else if(n==12)
			{
				int max=-1,wz;
				for(int j=0;j<5;j++)
				{
					int shu=tm-m_lstJ[j];
					if(shu>max)
					{
						max=shu;
						wz=j;
					}
				}
				m_js[n].y=wz;
				m_lstJ[wz]=tm;
			}
			else if(n==11)
			{
				int max=-1,wz;
				for(int j=0;j<5;j++)
				{
					int shu=tm-m_lstC[j];
					if(shu>max)
					{
						max=shu;
						wz=j;
					}
				}
				m_js[n].y=wz;
				m_lstC[wz]=tm;
			}
			else if(n==7)
			{
				int max=-1,wz;
				for(int j=0;j<5;j++)
				{
					int shu=tm-m_lstD[j];
					if(shu>max)
					{
						max=shu;
						wz=j;
					}
				}
				m_js[n].y=wz;
				m_lstD[wz]=tm;
			}
			else if(n==3)
			{
				int max=-1,wz;
				for(int j=0;j<5;j++)
				{
					int shu=tm-m_lstT[j];
					if(shu>max)
					{
						max=shu;
						wz=j;
					}
				}
				m_js[n].y=wz;
				m_lstT[wz]=tm;
			}
			else
			{
				double r=double(rand())/RAND_MAX;
				int wz=int(r*5);
				if(wz<0)wz=0;
				if(wz>=5)wz=4;
				m_js[n].y=wz;
			}
			m_game.NewJs(m_js[n]);
			if(!m_b11)
			{
				jd+=1;
				cpr_jd.SetPos(jd);
			}
		}
		else if(nIDEvent==1003)//阳光
		{
			m_game.m_yg+=25;
			m_game.Draw();
		}
		else if(nIDEvent==1004)//改变速度
		{
			if(m_b11)
			{
				KillTimer(1002);
				SetTimer(1002,1500,NULL);
				KillTimer(1004);
				return;
			}
			KillTimer(1002);
			int lj=m_jg[m_n];m_n+=1;
			if(m_n>ND-1)
				m_n=ND-1;
			SetTimer(1002,m_time[m_n],NULL);//重置生成速度
			KillTimer(1004);
			SetTimer(1004,m_jg[m_n],NULL);//重置修改速度
			t_ne=clock()+int(m_jg[m_n]/1000.0*CLOCKS_PER_SEC);
			if(lj!=1)
			{
				m_nd+=1;
				if(m_nd>JSH-1)
					m_nd=JSH-1;
			}
			if(m_time[m_n]<3000&&m_time[m_n]>1&&m_time[m_n-1]>3000&& m_time[m_n]!=100)
			{
				OnButton1();
				//MessageBox("一大波僵尸即将来袭!","提示");
				SJsh js;
				js.Create(2,5,1,885,2,IDI_ICON40,-1);
				m_game.NewJs(js);
				OnButton1();
			}
		}
		else if(nIDEvent==1005)//产生植物
		{
			if(SHU<XUAN)
			{
				int r;
				while(1)
				{
					r=rand()%(MAXSHU-1)+1;
					if((m_zw[r].lx==3||m_zw[r].lx==5||m_zw[r].lx==16)&&rand()%2==0)continue;
					if(!m_zw[r].mg&&m_zw[r].lx!=14&&m_zw[r].lx!=11&&m_zw[r].lx!=12&&m_zw[r].lx!=20&&m_zw[r].lx!=21)
						break;
				}
				m_xuan[SHU]=r;
				SHU+=1;
			}
			for(int n=0;n<5;n++)
				m_jwbs[n]=0;
			int n=0;
			for(int i=0;n<m_game.m_jshu;i++)
			{
				if(m_game.m_jsh[i].shm==-1)
					continue;		
				n+=1;
				if(m_game.m_jsh[i].lx==11)
					m_jwbs[m_game.m_jsh[i].y]=m_game.m_jsh[i].shm;
			}				
			jd=0;
			for(int n=0;n<5;n++)
				jd+=1000-m_jwbs[n];
			cpr_jd.SetPos(jd);
			if(jd==5000)
			{
				KillTimer(1002);
				m_game.m_over=true;
				GameOver();
				MessageBox("胜利","提示",MB_OK);
				m_game.KillAll();
			}
			for(int y=0;y<5;y++)
			{					
				if(m_jwbs[y]<=0||m_game.m_jsh[y].lx!=11)
					continue;					
				if(m_game.m_jsh[y].x>885)
				{
					m_game.m_jsh[y].x=885;
					m_game.m_jsh[y].sd=0;
				}
			}
		}
		else if(nIDEvent==1006)//取消寒冰
		{
			KillTimer(1006);
			m_game.m_hb=false;
		}
		else if(nIDEvent==1007)//踩
		{
			int ma[5]={0},max=-1,may;
			for(int n=0,i=0;n<m_game.m_zshu;i++)
			{
				if(m_game.m_zhw[i].shm==-1)
					continue;		
				n+=1;
				ma[m_game.m_zhw[i].y]+=m_game.m_zhw[i].yg;
			}
			for(int y=0;y<5;y++)
			{
				if(m_jwbs[y]<=0||m_game.m_jsh[y].lx!=11)
					continue;
				if(ma[y]>max)
				{
					max=ma[y];
					may=y;
				}
			}
			m_game.m_jsh[may].sd=10;
			m_game.KillJsLine(may,200);
			m_jwbs[may]+=200;
			m_game.m_jsh[may].shm+=200;
		}
		else if(nIDEvent==1008)
		{
			m_game.AI();
			OnPaint();
			m_game.Draw();
		}
		else
		{
			KillTimer(nIDEvent);
			QxDaZhao(m_game.m_zhw[nIDEvent-10000],this);
		}
	}
	CDialog::OnTimer(nIDEvent);
}

void CMyDlg::OnButton1()
{
	CString str;
	cbu_zt.GetWindowText(str);
	if(str=="暂停")
	{
		cbu_zt.SetWindowText("继续");
		t_la=clock();
		KillTimer(1004);
	}
	else
	{
		cbu_zt.SetWindowText("暂停");
		int t=int(double(t_ne-t_la)/CLOCKS_PER_SEC*1000)+100;
		if(t<0)t=10;
		SetTimer(1004,t,NULL);
		t_ne=clock()+(t_ne-t_la);
	}
}

int CMyDlg::MakeGq(int gq)//制作关卡
{
	int lx=(gq-1)/GQS;
	if(lx==5)
	{
		for(int s=10;s<=12;s++)
			m_p[s]+=1;
		for(int s=0;s<=21;s++)
		{
			if(s!=3&&s!=5&&s!=8&&s!=13)
				m_hf[s]*=0.8;
		}
		m_hf[3]*=0.704+0.02;
		m_hf[5]*=0.704+0.02;
		m_hf[8]*=0.704+0.02;
		m_hf[13]*=0.704+0.02;
		m_zw[0].time+=300;
		m_zw[12].time+=150;
		for(int s=1;s<=21;s++)m_zw[s].yg+=5;
		for(int s=3;s<=13;s++)
			m_js[s].shm+=3;
	}
	for(int n=1;n<MAXJSH;n++)
		m_p[n]+=m_p[n-1];
	int gq2=gq;
	gq=(gq-1)%GQS+1;
	m_b11=false;
	double mr=(lx==0?1.0:3.0);
	double jad=(MAXJSH-mr)/(MANG-1.0);
	JSH=int(mr)+int(jad*(gq-1)+0.5);
	SHU=m_zws[gq2-1];
	if(JSH>MAXJSH)
		JSH=MAXJSH;
	if(SHU>MAXSHU)
		SHU=MAXSHU;
	ND=5+int(DBS*(gq-1+(lx==5?1:0))*4+0.5)+4;
	m_jg[1]=m_jg[2]=m_jg[3]=1;m_time[1]=m_time[2]=m_time[3]=1e9;
	if(gq<=8)
		m_time[0]=20000,m_jg[0]=41000;
	else
	{
		m_time[0]=16000,m_jg[0]=17000;
		if(gq>=9)m_time[1]=100,m_jg[1]=180;
		if(gq>=10)m_time[2]=100,m_jg[2]=180;
		m_time[3] = 8000; m_jg[3] = 21000;
	}
	if(gq<=8)m_time[4] = 10000;
	else if(gq==9)m_time[4] = 9000;
	else m_time[4] = 7040;
	m_jg[4] = 22000;
	double dad=1010.0/(GQS-1.0);
	int dbs=1704-int(dad*(gq-1)+0.5)-(lx==5?140:0);
	int dbt=5000+(gq-1)*480+(lx==5?704:0);
	for(int n=5;n<ND;n+=4)
	{
		int i = 0, j = 0;
		for(i=n,j=0;i<ND-1&&j<3;i++,j++)
			m_time[i]=dbs+j*500,m_jg[i]=dbt;
		m_time[i]=4000,m_jg[i]=20000;
		dbt+=2100;
	}
	for(int n=0;n<ND;n++)
	{
		if(m_jg[n]%m_time[n]==0)
			m_jg[n]+=500;
	}
	int ms=-1;
	for(int n=0;n<ND-1;n++)
		ms+=int(m_jg[n]/m_time[n]);
	m_time[ND-1]=3000,m_jg[ND-1]=1000000000;
	if(gq2==MAXGQS+1)
	{
		SHU=0;
		JSH=MAXJSH;
		XUAN=8;
		m_b11=true;
		cpr_jd.SetRange(0,5000);
		SetTimer(1005,2500,NULL);
		SetTimer(1007,100000,NULL);
		return 0;
	}
	cpr_jd.SetRange(0,ms);
	XUAN=9;
	int tim=0;
	for(int i=0;i<ND-1;i++)
		tim+=m_jg[i];
	CString str;
	str.Format("游戏时间约为%.2lf分钟,约生成僵尸%d个。",tim/60000.0,ms);
	MessageBox(str,_T("提示"),MB_OK);
	if(SHU<=XUAN)
	{
		for(int n=0;n<XUAN;n++)
			m_xuan[n]=-1;
		for(int n=0;n<SHU;n++)
			m_xuan[n]=n;
	}
	else if(m_ai)
	{
		int xu[10]={0,10,7,8,9,11,3,5,12};
		for(int i=0;i<9;i++)
			m_xuan[i]=xu[i];
	}
	else
	{
		CXuan xuan;
		CString bt[6]={"普通","迷雾","黑夜","黑夜+迷雾","水池","极限"};
		xuan.m_ms=bt[lx];
		for(int n=0;n<MAXSHU;n++)
		{
			xuan.m_icon[n]=m_zw[n].id;
			xuan.m_ygs[n]=m_zw[n].yg;
		}
		for(int n=0;n<MAXJSH;n++)
			xuan.m_js[n]=m_js[n].id;
		for(int n=0;n<MAXSHU;n++)
		{
			if(n<SHU)
				xuan.m_show[n]=true;
			else
				xuan.m_show[n]=false;
		}
		for(int n=0;n<MAXJSH;n++)
		{
			if(n<JSH)
				xuan.m_jshow[n]=true;
			else
				xuan.m_jshow[n]=false;
		}
		if(xuan.DoModal()!=IDOK)
		{
			OnClose();
			return 0;
		}
		m_hbzw=false;
		for(int n=0;n<XUAN;n++)
		{
			m_xuan[n]=xuan.m_xuan[n];
			if(m_zw[m_xuan[n]].hb)
				m_hbzw=true;
		}
	}
	if(lx==2||lx==3)
		m_zw[0].time=10000,m_zw[12].time=5300;
	//if(m_gq==60)m_gq=59;
	m_gq=60;
	return lx;
}

void CMyDlg::OnButton2()
{
	UpdateData();
	if(m_gq<1||m_gq>MAXGQS+1)
		return;	
	GameOver();
	if(m_game.m_ks)
		m_game.KillAll();
	GetDlgItem(IDC_BUTTON3)->EnableWindow(1);
	StartGame(MakeGq(m_gq));
	if(m_b11)
	{
		SJsh j;
		j.Create(0,1000,2000,885,0,IDI_ICON54,11);
		for(int n=0;n<5;n++)
		{
			j.y=n;
			m_game.NewJs(j);
		}
	}
}

void CMyDlg::GameOver()
{
	KillTimer(1000);
	KillTimer(1001);
	KillTimer(1002);
	KillTimer(1003);
	KillTimer(1004);
	KillTimer(1005);
	KillTimer(1006);
	KillTimer(1007);
	m_zw[0].time=6500;
	SHU=JSH=ND=0;
}

void CMyDlg::StartGame(int lx)
{
	m_nzw=-1;
	m_game.m_wnd=this;
	m_n=0;
	m_nd=m_b11?JSH-1:0;
	srand(time(NULL));
	SetTimer(1000,lx==5?34:40,NULL);
	SetTimer(1001,20,NULL);
	SetTimer(1002,m_b11?10000:m_time[0],NULL);
	if(lx==0||lx==1||lx==4||lx==5)
		SetTimer(1003,6000,NULL);
	SetTimer(1004,m_b11?80000:m_jg[0],NULL);
	if(m_ai)SetTimer(1008,400,NULL);
	t_ne=clock()+int((m_jg[0]/1000.0)*CLOCKS_PER_SEC);
	for(int n=0;n<MAXSHU;n++)
		m_en[n]=800.0;
	m_game.CreateGame(lx);
	if(m_b11)
	{
		for(int n=0;n<5;n++)
		{
			m_game.m_car[n]=false;
			m_jwbs[n]=1000;
		}
		GetDlgItem(IDC_BUTTON3)->EnableWindow(0);
		m_game.m_yg=9999;
		m_game.Draw();
	}
	for(int n=0;n<5;n++)
		m_lstB[n]=-99999999;
	for(int n=0;n<5;n++)
		m_lstC[n]=-99999999;
	for(int n=0;n<5;n++)
		m_lstD[n]=-99999999;
	for(int n=0;n<5;n++)
		m_lstJ[n]=-99999999;
	for(int n=0;n<5;n++)
		m_lstT[n]=-99999999;
	jd=tm=0;
	m_dzs=5;
	if(lx==5)m_dzs=3;
	//m_dzs=1;
	OnPaint();
}

void CMyDlg::OnClose() 
{
	GameOver();
	CDialog::OnCancel();
}

void CMyDlg::OnButton3() 
{
	if(MessageBox("     花费400阳光购买一颗能量豆","提示",MB_OKCANCEL)==IDOK)
	{
		if(m_dzs==5)
		{
			MessageBox("能量豆数量已达到上限!","提示",MB_OK|MB_ICONWARNING);
			return;
		}
		if(m_game.m_yg<400)
		{
			MessageBox("阳光不足。","提示",MB_OK|MB_ICONWARNING);
			return;
		}
		m_game.m_yg-=400;
		m_dzs+=1;
		OnPaint();
	}
}

void CMyDlg::OnButton4() 
{
	UpdateData(1);
	if(m_gq<MAXGQS+1)
	{
		m_gq+=1;
		UpdateData(0);
		OnButton2();
	}
}
void CMyDlg::OnBnClickedCheck1()
{
	// TODO: 在此添加控件通知处理程序代码
}
// stdafx.cpp : source file that includes just the standard includes
//	大战僵尸.pch will be the pre-compiled header
//	stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"
#include "resource.h"
int XUAN;
int GetZwIcon(SZhw &zw)
{
	int rtn;
	switch(zw.lx)
	{
	case 0:
		return IDI_ICON1;
	case 1:
		return IDI_ICON2;
	case 2:
		if(zw.shm>600)
			return IDI_ICON76;
		else if(zw.shm>300)
			return IDI_ICON4;
		else if(zw.shm>100)
			return IDI_ICON13;
		else
			return IDI_ICON14;
	case 3:
		return IDI_ICON7;
	case 4:
		return IDI_ICON8;
	case 5:
		return IDI_ICON9;
	case 6:
		if(zw.shm>1600)
			return IDI_ICON77;
		else if(zw.shm>800)
			return IDI_ICON11;
		else if(zw.shm>300)
			return IDI_ICON15;
		else
			return IDI_ICON16;
	case 7:
		return IDI_ICON12;
	case 8:
		return IDI_ICON43;
	case 9:
		return IDI_ICON48;
	case 10:
		return IDI_ICON55;
	case 11:
		return IDI_ICON56;
	case 12:
		return zw.fu<10?IDI_ICON57:IDI_ICON64;
	case 13:
		return IDI_ICON58;
	case 15:
		return IDI_ICON63;
	case 16:
		return zw.fu==0?IDI_ICON68:IDI_ICON69;
	case 17:
		if(zw.fu>20)
			return IDI_ICON70;
		else if(zw.fu>0)
			return IDI_ICON90;
		else
			return IDI_ICON71;
	case 18:
		return IDI_ICON72;
	case 19:
		rtn=IDI_ICON82-(zw.shm-1)/100+7;
		if(rtn<IDI_ICON82)
			rtn=IDI_ICON82;
		return rtn;
	case 20:
		return IDI_ICON94;
	case 21:
		return IDI_ICON95;
	default:
		return 0;
	}
}
int GetJsIcon(SJsh &js,CGame &ga)
{
	/*if(js.lx!=2||js.shm<=10)
		PlaySound("e:\\zid.wav",NULL,SND_FILENAME|SND_ASYNC);
	else
		PlaySound("e:\\tt.wav",NULL,SND_FILENAME|SND_ASYNC);*/
	switch(js.lx)
	{
	case -1:
		if(js.shm>3)
			return IDI_ICON40;
		else if(js.shm>1)
			return IDI_ICON41;
		else
			return IDI_ICON42;
	case 0:
		if(js.shm>3)
			return IDI_ICON3;
		else if(js.shm>1)
			return IDI_ICON17;
		else
			return IDI_ICON18;
	case 1:
		if(js.shm>9)
			return IDI_ICON5;
		else if(js.shm>6)
			return IDI_ICON19;
		else if(js.shm>3)
			return IDI_ICON3;
		else if(js.shm>1)
			return IDI_ICON17;
		else
			return IDI_ICON18;
	case 2:
		if(js.shm>23)
			return IDI_ICON6;
		else if(js.shm>16)
			return IDI_ICON20;
		else if(js.shm>10)
			return IDI_ICON21;
		else if(js.shm>3)
			return IDI_ICON3;
		else if(js.shm>1)
			return IDI_ICON17;
		else
			return IDI_ICON18;
	case 3:
		if(js.shm>7)
			return IDI_ICON10;
		else if(js.shm>4)
			return IDI_ICON22;
		else
			return IDI_ICON23;
	case 4:
		if(js.shm>11)
			return IDI_ICON24;
		else if(js.shm>8)
			return IDI_ICON25;
		else
		{
			js.sd=js.eat=3;
			if(js.shm>4)
				return IDI_ICON26;
			else
				return IDI_ICON27;
		}
	case 5:
		if(js.shm>5)
			return js.beat?IDI_ICON29:IDI_ICON30;
		else
			return js.beat?IDI_ICON35:IDI_ICON31;
	case 6:
		if(js.shm>12)
			return IDI_ICON32;
		else if(js.shm>4)
			return IDI_ICON33;
		else 
			return IDI_ICON34;
	case 7:
		if(js.shm>55)
			return IDI_ICON36;
		else if(js.shm>40)
			return IDI_ICON37;
		else if(js.shm>25)
			return IDI_ICON38;
		else if(js.shm>10)
			return IDI_ICON39;
		else if(js.shm>3)
			return IDI_ICON3;
		else if(js.shm>1)
			return IDI_ICON17;
		else
			return IDI_ICON18;	
	case 8:
		if(js.shm>9)
			return js.beat?IDI_ICON44:IDI_ICON45;
		else
			return js.beat?IDI_ICON46:IDI_ICON47;
	case 9:
		if(js.shm<=90)
		{
			if(!js.fu)
			{
				SJsh j;
				int x=js.x-300;
				if(x<220)
					x=220;
				j.Create(2,3,1,x,js.y,IDI_ICON50,10);
				ga.NewJs(j);
				js.fu=true;
			}
			return js.shm<40?IDI_ICON52:IDI_ICON51;
		}
		else
			return IDI_ICON49;
	case 10:
		if(js.shm>3)
			return IDI_ICON50;
		else
			return IDI_ICON53;
	case 11:
		return IDI_ICON54;
	case 12:
		if(js.shm>70)
			return IDI_ICON65;
		else if(js.shm>50)
			return IDI_ICON66;
		else if(js.shm>30)
			return IDI_ICON67;
		else if(js.shm>10)
		{
			js.sd=1;
			js.eat=2;
			return IDI_ICON50;
		}
		else
		{
			js.sd=1;
			js.eat=2;
			return IDI_ICON53;
		}
	case 13:
		if(js.shm>8)
			return IDI_ICON73;
		else
			return IDI_ICON74;
	case 14:
		if(js.shm>10)
			return IDI_ICON79;
		else
			return IDI_ICON80; 
	case 15:
		if(js.shm>5)
			return IDI_ICON93;
		else
			return IDI_ICON92;
	case 16:
		if(js.shm>12)
			return IDI_ICON96;
		else
			return IDI_ICON97;
	case 100:
		return IDI_ICON75;
	case 101:
		return IDI_ICON81;
	default:
		return 0;
	}
}

int GetJsEat(SZhw&zw,SJsh&js,CGame &ga)//获得僵尸的跳跃,返回图标
{
	switch(js.lx)
	{
	case 5:
		if(zw.lx!=6)//并非高坚果
			js.x-=110;
		js.sd=1;
		js.beat=false;
		return IDI_ICON30;
	case 8:				
		if(zw.lx!=6)//并非高坚果
		{
			js.x-=82;
			return IDI_ICON44;
		}
		js.sd=1;
		js.beat=false;
		return IDI_ICON45;
	case 100://豌豆
		if(zw.shm<=100)
			zw.shm-=20;
		else
			zw.shm-=37;
		if(zw.shm<=0)
			ga.DestroyZw(zw.shu);
		ga.DestroyJs(js.shu);
		return 0;
	case 101://冰瓜
		if(zw.shm<=100)
			zw.shm-=30;
		else
			zw.shm-=100;
		if(zw.shm<=0)
			ga.DestroyZw(zw.shu);
		ga.DestroyJs(js.shu);
		zw.hbs=0;
		return 0;
	default:
		return 0;
	}
	zw.id=GetZwIcon(zw);
}

void Fash(SJsh &js,CGame &ga)
{
	switch(js.lx)
	{
	case 13://豌豆僵尸
		SJsh js2;
		js2.Create(10,10000,0,js.x,js.y,IDI_ICON75,100,true);
		ga.NewJs(js2);
		break;
	case 14://冰瓜僵尸
		SJsh js3;
		js3.Create(10,10000,0,js.x,js.y,IDI_ICON81,101,true);
		ga.NewJs(js3);
		break;
	case 16://末影人
		js.x=rand()%880;
		ga.hjs[js.y]-=1;
		js.y=rand()%5;
		ga.hjs[js.y]+=1;
		break;
	}
}

bool DaZhao(SZhw &zw,CWnd *wnd)
{
	switch(zw.lx)
	{
	case 1:
	case 0:
	case 4:
	case 9:
	case 8:
	case 10:
	case 13:
		zw.time=100;
		wnd->KillTimer(zw.shu);
		wnd->SetTimer(zw.shu,100,NULL);
		break;
	case 2:
	case 6:
	case 19:
		zw.shm+=zw.shm/2;
		break;
	default:
		return false;
	}
	zw.id=GetZwIcon(zw);
	wnd->SetTimer(10000+zw.shu,zw.dztm,NULL);
	return true;
}

void QxDaZhao(SZhw &zw,CWnd *wnd)
{
	switch(zw.lx)
	{
	case 0:
	case 4:
	case 9:
	case 8:
		zw.time=2400;
		break;
	case 10:
		zw.time=2600;
		break;
	case 13:
		zw.time=5000;
		break;
	case 1:
		zw.time=6500;
		break;
	}
	wnd->KillTimer(zw.shu);
	wnd->SetTimer(zw.shu,zw.time,NULL);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值