📄 roundabout_showview.cpp
字号:
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 + -