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

📄 roundabout_showview.cpp

📁 09年数学建模美赛A题程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
									cel[deal].iscar=false;
									cel[turn].iscar=true;
									cel[turn].mtcar=oldcel[deal].mtcar;
									cel[turn].mtcar.v=1;
									cel[turn].mtcar.status=7;
									flag=1;
									
								}
							}
							if(flag==0){
								bool isred=false;
								if(cindex<=C){
									for(int g=1;g<=conterminal;g++){
										turn=conterminal*4*L+inroad[g];
										if((deal<=des && turn>deal && turn<=des) || (deal>=des && turn>deal && turn>=des) || (deal>=des && turn<deal && turn<=des))
											if(signal[g]>0 && redtime!=0)
												isred=true;								
									}
								}
								else{
									for(int g=1;g<=conterminal;g++){
										turn=conterminal*4*L+inroad[g]+C;
										if((deal<=des && turn>deal && turn<=des) || (deal>=des && turn>deal && turn>=des) || (deal>=des && turn<deal && turn<=des))
											if(signal[g]>0 && redtime!=0)
												isred=true;
									}
								}
								if(isred){
									cel[des].mtcar.v=0;
								}
								else{
									cel[deal].iscar=false;
									cel[des].iscar=true;
									cel[des].mtcar=oldcel[deal].mtcar;
									cel[des].mtcar.status=0;
								}
							}
						}
					}
					else if(oldcel[deal].mtcar.status==2){
						if(redtime!=0){
							if(oldcel[deal-C].iscar==false){
								cel[deal].iscar=false;
								cel[deal-C].iscar=true;
								cel[deal-C].mtcar=oldcel[deal].mtcar;
								cel[deal-C].mtcar.status=3;
								cel[deal-C].mtcar.v=1;
							}
							else
								cel[deal].mtcar.v=0;
						}
						else if(oldcel[deal-C].iscar==false && (oldcel[deal-C+1].iscar==false || oldcel[deal-C+1].mtcar.status>1) && (oldcel[((deal-C-1)==(conterminal*4*L+C)?conterminal*4*L+2*C:deal-C-1)].iscar==false || oldcel[((deal-C-1)==(conterminal*4*L+C)?conterminal*4*L+2*C:deal-C-1)].mtcar.status>1))
						{
							cel[deal].iscar=false;
							cel[deal-C].iscar=true;
							cel[deal-C].mtcar=oldcel[deal].mtcar;
							cel[deal-C].mtcar.status=3;
							cel[deal-C].mtcar.v=1;
							
						}
						else
							cel[deal].mtcar.v=0;
					}
					else if(oldcel[deal].mtcar.status==5){
						bool isentry;
						int pt=rand()%100;
						if(pt<p7){
							isentry=of1(deal);
						}
						else
							isentry=of2(deal);
						if(redtime!=0)
							isentry=of1(deal);
						if(isentry)
						{
							cel[deal].iscar=false;
							cel[deal+C].iscar=true;
							cel[deal+C].mtcar=oldcel[deal].mtcar;
							cel[deal+C].mtcar.status=6;
							cel[deal+C].mtcar.v=1;
							
						}
						else
							cel[deal].mtcar.v=0;
					}
					else if(oldcel[deal].mtcar.status==6){
						num_of_leave++;
						totalstay+=rt-cel[deal].mtcar.entertime;
						cel[deal].iscar=false;
						int entry;
						for(entry=1;entry<=conterminal;entry++)
							if((deal-4*conterminal*L-C) == outroad[entry]+1)
								break;

						if(entry==1){
							cel[4*L+(conterminal-1)*4*L].iscar=true;
							cel[4*L+(conterminal-1)*4*L].mtcar=oldcel[deal].mtcar;
						}
						else{
							cel[4*L+(entry-2)*4*L].iscar=true;
							cel[4*L+(entry-2)*4*L].mtcar=oldcel[deal].mtcar;
						}
					}
					else if(oldcel[deal].mtcar.status==7){
						num_of_leave++;
						totalstay+=rt-cel[deal].mtcar.entertime;
						cel[deal].iscar=false;
						int entry;
						for(entry=1;entry<=conterminal;entry++)
							if((deal-4*conterminal*L-C) == outroad[entry])
								break;
						if(entry==1){
							cel[3*L+(conterminal-1)*4*L].iscar=true;
							cel[3*L+(conterminal-1)*4*L].mtcar=oldcel[deal].mtcar;
						}
						else{
							cel[3*L+(entry-2)*4*L].iscar=true;
							cel[3*L+(entry-2)*4*L].mtcar=oldcel[deal].mtcar;
						}

					}
			}
		}
		if(rt==diji)
			Sleep(sec*1000);
	if(isshow)
	Show();
		CString tem;
		int num=0;
		for(j=conterminal*4*L+1;j<=conterminal*4*L+1+C;j+=C)
			for(int deal=j;deal<=j+C-1;deal++)
				if(cel[deal].iscar)
					num++;
		for(j=1;j<=conterminal;j++)
			for(int temp=1+(j-1)*4*L;temp<=L+1+(j-1)*4*L;temp+=L)
				for(int deal=temp;deal<=temp+L-1;deal++)
					if(cel[deal].iscar)
						num++;
		tem.Format("%d %d %d %d %d %d %d\n",rt,num_of_create,num_of_enter,num_of_create-num,num_of_create-last1,num_of_enter-last3,num_of_create-num-last2);
		out1.WriteString(tem);
		last1=num_of_create;
		last2=num_of_create-num;
		last3=num_of_enter;
	}
//	MessageBox("over");
}

void CRoundabout_showView::Show(){
//	isfirst=2;
	Sleep(stime);
//	
	struct rgb{
		int r;
		int g;
		int b;
	};
	rgb Rgb[10];
	Rgb[1].r=255;Rgb[1].g=0;Rgb[1].b=0;
	Rgb[2].r=0;Rgb[2].g=255;Rgb[2].b=0;
	Rgb[3].r=0;Rgb[3].g=0;Rgb[3].b=255;
	Rgb[4].r=255;Rgb[4].g=255;Rgb[4].b=0;
	Rgb[5].r=111;Rgb[5].g=255;Rgb[5].b=0;
	Rgb[6].r=000;Rgb[6].g=111;Rgb[6].b=11;
	Rgb[7].r=11;Rgb[7].g=20;Rgb[7].b=211;
	Rgb[8].r=221;Rgb[8].g=0;Rgb[8].b=111;
	Rgb[9].r=124;Rgb[9].g=123;Rgb[9].b=23;
	CString temp;
	CDC *pDC=GetDC();
	CBrush *nb,*ob;
	nb=new CBrush;
	nb->CreateSolidBrush(RGB(255,0,0));
	ob=pDC->SelectObject(nb);
	int i,j,x,y;
	x=10;y=20;
	for(i=1;i<=C;i++){
		if(cel[4*conterminal*L+i].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[4*conterminal*L+i].mtcar.des].r,Rgb[cel[4*conterminal*L+i].mtcar.des].g,Rgb[cel[4*conterminal*L+i].mtcar.des].b));
			pDC->SelectObject(nb);
		}
		else
			pDC->SelectObject(ob);
		pDC->Rectangle(x-5,y-5,x+5,y+5);
		x+=9;
	}
	x=10;
	y+=9;
	for(i=1;i<=C;i++){
		if(cel[4*conterminal*L+C+i].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[4*conterminal*L+C+i].mtcar.des].r,Rgb[cel[4*conterminal*L+C+i].mtcar.des].g,Rgb[cel[4*conterminal*L+C+i].mtcar.des].b));
			pDC->SelectObject(nb);
		}
		else
			pDC->SelectObject(ob);
		pDC->Rectangle(x-5,y-5,x+5,y+5);
		x+=9;
	}
	//******************************
		x=10+(inroad[1]-1)*9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[1+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[1+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[1+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[1+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
		}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		x+=9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[L+1+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[L+1+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[L+1+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[L+1+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		x=10+(outroad[1]-1)*9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[1+L*((conterminal-1)*4+2)+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[1+L*((conterminal-1)*4+2)+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[1+L*((conterminal-1)*4+2)+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[1+L*((conterminal-1)*4+2)+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		x+=9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[1+L*((conterminal-1)*4+3)+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[1+L*((conterminal-1)*4+3)+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[1+L*((conterminal-1)*4+3)+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[1+L*((conterminal-1)*4+3)+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		//**********************************************

		for(i=2;i<=conterminal;i++){
		x=10+(inroad[i]-1)*9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[4*L+1+(i-2)*4*L+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[4*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[4*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[4*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		x+=9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[5*L+1+(i-2)*4*L+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[5*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[5*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[5*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		x=10+(outroad[i]-1)*9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[2*L+1+(i-2)*4*L+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[2*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[2*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[2*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		x+=9;
		for(j=y+L*9;j>=y+9;j-=9){
			if(cel[3*L+1+(i-2)*4*L+(y+L*9-j)/9].iscar){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(Rgb[cel[3*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].r,Rgb[cel[3*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].g,Rgb[cel[3*L+1+(i-2)*4*L+(y+L*9-j)/9].mtcar.des].b));
			pDC->SelectObject(nb);
			}
			else
				pDC->SelectObject(ob);
			pDC->Rectangle(x-5,j-5,x+5,j+5);
		}
		
	}
	y=48;
	for(i=1;i<=conterminal;i++){
		x=10+(inroad[i]+2)*9;
		if(signal[i]>0){
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(0,255,0));
			pDC->SelectObject(nb);
			pDC->Ellipse(x-8,y-8,x+8,y+8);
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(255,0,0));
			pDC->SelectObject(nb);
			int x1=x-27,y1=y-40;
			pDC->Ellipse(x1-8,y1-8,x1+8,y1+8);
		}
		else{
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(255,0,0));
			pDC->SelectObject(nb);
			pDC->Ellipse(x-8,y-8,x+8,y+8);
			nb->DeleteObject();
			nb->CreateSolidBrush(RGB(0,255,0));	
			pDC->SelectObject(nb);
			int x1=x-27,y1=y-40;
			pDC->Ellipse(x1-8,y1-8,x1+8,y1+8);
		}

		
		
	}
	pDC->SelectObject(ob);
}

bool CRoundabout_showView::f_1(int j){
		if(oldcel[conterminal*4*L+j+C].iscar==false)
				return true;
	return false;

}

bool CRoundabout_showView::f0(int j){
		if(oldcel[conterminal*4*L+j+C].iscar==false)
			if(oldcel[conterminal*4*L+j+C+1].iscar==false || oldcel[conterminal*4*L+j+C+1].mtcar.status>1)
					if(oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].iscar==false || oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].mtcar.status>1)
						return true;
	return false;

}

bool CRoundabout_showView::f1(int j){
	if(oldcel[conterminal*4*L+j].iscar==false && oldcel[conterminal*4*L+j+C].iscar==false )
		return true;
	return false;

}

bool CRoundabout_showView::f2(int j){
	if(oldcel[conterminal*4*L+j].iscar==false && oldcel[conterminal*4*L+j+C].iscar==false && oldcel[((j-1)==0?conterminal*4*L+C:conterminal*4*L+j-1)].iscar==false)
				if(oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].iscar==false || oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].mtcar.status>1)
						return true;
	return false;

}
bool CRoundabout_showView::f3(int j){
	if(oldcel[conterminal*4*L+j].iscar==false && oldcel[conterminal*4*L+j+C].iscar==false && oldcel[conterminal*4*L+j+1].iscar==false && oldcel[((j-1)==0?conterminal*4*L+C:conterminal*4*L+j-1)].iscar==false)
			if(oldcel[conterminal*4*L+j+C+1].iscar==false || oldcel[conterminal*4*L+j+C+1].mtcar.status>1)
					if(oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].iscar==false || oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].mtcar.status>1)
						return true;
	return false;

}

bool CRoundabout_showView::f4(int j){
	if(oldcel[conterminal*4*L+j].iscar==false && oldcel[conterminal*4*L+j+C].iscar==false && oldcel[conterminal*4*L+j+1].iscar==false && oldcel[((j-1)==0?conterminal*4*L+C:conterminal*4*L+j-1)].iscar==false)
			if(oldcel[conterminal*4*L+j+C+1].iscar==false || oldcel[conterminal*4*L+j+C+1].mtcar.status>1)
				if(oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].iscar==false || oldcel[((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1)].mtcar.status>1){
					int left=((j-1)==0?conterminal*4*L+2*C:conterminal*4*L+j-1);
						if(oldcel[((left-1)==0?conterminal*4*L+2*C:conterminal*4*L+left-1)].iscar==false || oldcel[((left-1)==0?conterminal*4*L+2*C:conterminal*4*L+left-1)].mtcar.status>1)
						return true;
				}
	return false;

}

bool CRoundabout_showView::of1(int deal){
	if(oldcel[deal+C].iscar==false )
		return true;
	return false;
}	

bool CRoundabout_showView::of2(int deal){
	if(oldcel[deal+C].iscar==false && (oldcel[deal+C-1].iscar==false || oldcel[deal+C-1].mtcar.status>1) )
		return true;
	return false;
}
	
			

void CRoundabout_showView::OnSet() 
{
	// TODO: Add your command handler code here
	Set s;
	s.SetData(redtime,greentime,conterminal,L,C,runtime,vmax,cmax,vinit,gap,p1,p2,p3,p4,p5,p6,p7,p8,diji,sec,stime);
	if(s.DoModal()==IDOK){
			 redtime=s.m_redtime;
			 greentime=s.m_greentime;
			 L=s.m_L;
			 C=s.m_C;
		 	 conterminal=s.m_conterminal;
		 	 vinit=s.m_vinit;
		 	 vmax=s.m_vmax;
		 	 cmax=s.m_cmax;
		 	 p1=s.m_p1;
		 	 p2=s.m_p2;
		 	 p3=s.m_p3;
		 	 runtime=s.m_runtime;
		 	 stime=s.m_stime;
		 	 gap=s.m_gap;
		 	 diji=s.m_diji;
		 	 sec=s.m_sec;
		 	 p4=s.m_p4;
		 	 p5=s.m_p5;
		 	 p6=s.m_p6;
		 	 p7=s.m_p7;
		 	 p8=s.m_p8;
			 total=conterminal*4*L+C*2;
			outroad[1]=C-1;inroad[1]=1;
			int dis=(C-4*conterminal)/conterminal;
			for(int i=2;i<=conterminal;i++){
				outroad[i]=inroad[i-1]+dis+2;
				inroad[i]=outroad[i]+2;
			}
			for(i=1;i<=total;i++)
				cel[i].iscar=false;
	}
}

void CRoundabout_showView::OnStat() 
{
	// TODO: Add your command handler code here
	for(p1=98;p1>=50;p1--){
		OnBegin();
		CString tem;
		tem.Format("%d %d %d %f\n",100-p1,num_of_leave,totalstay,totalstay*1.0/num_of_leave);
		out2.WriteString(tem);
	}
	MessageBox("over");
}

⌨️ 快捷键说明

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