📄 cartest01.java
字号:
break;
}
case 0:{
Dece=false;
Dece1=false;
boolean flag1=false;
boolean flag2=true;
boolean flag3=true;
boolean flag4=true;
peold=y;
penew=y;
for(int pe=y+40;pe>y;pe--) //判断前方是否有车
{
if(Road.s[x][pe]==1) //这种判断方法是否有效,还需要详细考虑??
{
Dece=true;
penew=pe;
//System.out.println("There is a car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=y+15;pe<=(y+40);pe++) //判断前方15-40是否有车
{
if(Road.s[x][pe]==1) //这种判断方法是否有效,还需要详细考虑??
{
flag1=true;
//System.out.println("There is a car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=y-75;pe<=(y+40);pe++) //判断上面车道是否有车
{
if(Road.s[335][pe]==1) //这种判断方法是否有效,还需要详细考虑??
{
flag2=false;
}
}
for (int pe=y+1;pe<y+25;pe++)
{
for (int m=316;m<336;m++)
{
if (Road.s[m][pe]==1)
flag3=false;
}
}
for (int pe=y-45;pe<y;pe++)
{
for (int m=316;m<336;m++)
{
if (Road.s[m][pe]==1)
flag4=false;
}
}
if (flag1&&flag2&&flag3&&flag4)
Dece1=true;
if(Dece1)
{
RunState=ChangeLeft;
//System.out.println("ChangeLeft"+RunState);
}
else if (Dece)
{
if(penew-peold<=15)
v=0;
else if((penew-peold>15)&&(penew-peold<=20))
v=1;
else if((penew-peold>20)&&(penew-peold<=30))
v=3;
else if((penew-peold>30)&&(penew-peold<=35))
v=MaxV-2;
else if(penew-peold>35)
v=MaxV-1;
Road.s[x][y]=0;
y=y+v; //跟驰行驶逻辑结束
Road.s[x][y]=1;
}
else
{
v=MaxV;
Road.s[x][y]=0;
y=y+v; //向西行驶
Road.s[x][y]=1;
}
break;
}
case 1:{ //进入路口外围区
Dece=false;
peold=y;
penew=y;
for(int pe=y+40;pe>y;pe--){ //判断前方是否有车
if(Road.s[x][pe]==1){ //这种判断方法是否有效,还需要详细考虑??
Dece=true;
penew=pe;
}
}
if(Dece){
if(penew-peold<=15)
v=0;
else if((penew-peold>15)&&(penew-peold<=20))
v=1;
else if((penew-peold>20)&&(penew-peold<=30))
v=3;
else if((penew-peold>30)&&(penew-peold<=35))
v=MaxV-2;
else if(penew-peold>35)
v=MaxV-1;
}
else if(!Dece)
v=MaxV;
Road.s[x][y]=0;
y=y+v; //跟驰行驶逻辑结束
Road.s[x][y]=1;
if(v>0)
{
IsGoStrait=true;
//LeftLane=false;
//LeftLane=1;
}
break;
}//Area1结束
case 2:{ //进入路口核心区
/*if(Math.random()<0.6){
IsTurnRight=true;
IsGoStrait=false;
}
else{
IsTurnRight=false;
IsGoStrait=true;
}*/
if(IsTurnRight){ //是否右转
for(int pe=310;pe<=350;pe++){ //判断右转方向是否有车
if(Road.s[pe][215]==0) //yCenter+LaneWidth*5/4
RightWait=false;
else
RightWait=true;
}
if(RightWait)
//RunState=StopWait;
y=yCenter-50;
else
RunState=TurnRight;
Road.s[x][y]=0;
y=200;
Road.s[x][y]=1; //右转不用判断红绿灯,但要判断右转路上是否有车
}
/* else if(IsTurnLeft){ //是否左转
if(Road.lightstatus[4]==2) //??加入相应的信号灯相位??
//RunState=StopWait; //如果是红灯就停车等待
x=xCenter+40;
else
RunState=TurnLeft; //左转
}*/
else if(IsGoStrait){ //是否直行
if(Road.lightstatus[2]==2) //如果是红灯就停车等待
{
v=200-y;
}
else
{
v=5; //匀速通过路口,是否移至具体的函数中???
}
Road.s[x][y]=0;
y=y+v;
Road.s[x][y]=1;
}
break;
}//Area2区结束
case 3:{ //进入路口核心区
//System.out.println("Center x = "+x);
v=5; //匀速通过路口,是否移至具体的函数中???
Road.s[x][y]=0;
y=y+v;
Road.s[x][y]=1;
break;
}//Area3区结束
}//switch Area
}//end if 上面车道
else if (x==335) //右面车道
{
LeftLane=1;// right lane
switch(Area){
case 4:
{
Dece=false;
v=MaxV;
for(int pe=y+1;pe<=y+20;pe++) //判断前方是否有车
{
if(Road.s[x][pe]==1) //这种判断方法是否有效,还需要详细考虑??
{
//System.out.println("pe"+pe);
Dece=true;
}
}
if (!Dece)
{
Road.s[x][y]=0;
//System.out.println("x"+x);
y=y+MaxV;
Road.s[x][y]=1;
}
break;
}
case 5:
{
v=MaxV;
Road.s[x][y]=0; //向西行驶
if (y<=490-v)
{
y=y+v;
Road.s[x][y]=1;
}
else
{
y=1;
Road.s[x][y]=1;
}
break;
}
case 0:{
Dece=false;
Dece1=false;
peold=y;
penew=y;
boolean flag1=false;
boolean flag2=true;
boolean flag3=true;
boolean flag4=true; //四个标志决定是否换道
for(int pe=y+40;pe>y;pe--) //判断前方是否有车
{
if(Road.s[x][pe]==1) //这种判断方法是否有效,还需要详细考虑??
{
Dece=true;
penew=pe;
//System.out.println("There is a 1car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=y+10;pe<=(y+40);pe++) //判断前方10-40是否有车
{
if(Road.s[x][pe]==1)
{
flag1=true;
//System.out.println("There is a car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=y-75;pe<=(y+40);pe++) //判断上面车道是否有车
{
if(Road.s[315][pe]==1) //这种判断方法是否有效,还需要详细考虑??
{
flag2=false;
}
}
for (int pe=y+1;pe<y+24;pe++)
{
for (int m=315;m<335;m++)
{
if (Road.s[m][pe]==1)
flag3=false;
}
}
for (int pe=y-45;pe<y;pe++)
{
for (int m=315;m<335;m++)
{
if (Road.s[m][pe]==1)
flag4=false;
}
}
if (flag1&&flag2&&flag3&&flag4)
Dece1=true;
if(Dece1)
{
RunState=ChangeRight;
//System.out.println("ChangeLeft"+RunState);
}
else if (Dece)
{
if(penew-peold<=15)
v=0;
else if((penew-peold>15)&&(penew-peold<=20))
v=1;
else if((penew-peold>20)&&(penew-peold<=30))
v=3;
else if((penew-peold>30)&&(penew-peold<=35))
v=MaxV-2;
else if(penew-peold>35)
v=MaxV-1;
Road.s[x][y]=0;
y=y+v; //向西行驶
Road.s[x][y]=1;
}
else
{
v=MaxV;
Road.s[x][y]=0;
y=y+v; //向西行驶
Road.s[x][y]=1;
}
break;
}
case 1:{ //进入路口外围区
Dece=false;
penew=y;
peold=y;
for(int pe=y+40;pe>y;pe--){ //判断前方是否有车
if(Road.s[x][pe]==1){ //这种判断方法是否有效,还需要详细考虑??
Dece=true;
penew=pe;
}
}
if(Dece){
if(penew-peold<=15)
v=0;
else if((penew-peold>15)&&(penew-peold<=20))
v=1;
else if((penew-peold>20)&&(penew-peold<=30))
v=3;
else if((penew-peold>30)&&(penew-peold<=35))
v=MaxV-2;
else if(penew-peold>35)
v=MaxV-1;
}
else if(!Dece)
{
v=MaxV;
}
Road.s[x][y]=0;
y=y+v; //跟驰行驶逻辑结束
Road.s[x][y]=1;
if(v>0)
{
IsGoStrait=true;
//LeftLane=false;
//LeftLane=1;
}
break;
}//Area1结束
case 2:{ //进入路口核心区
/* if(IsTurnRight){ //是否右转
for(int pe=350;pe<=390;pe++){ //判断右转方向是否有车
if(Road.s[pe][275]==1) //yCenter+LaneWidth*5/4
RightWait=true;
}
if(RightWait)
//RunState=StopWait;
x=xCenter+40;
else
RunState=TurnRight; //右转不用判断红绿灯,但要判断右转路上是否有车
}*/
// if(IsTurnLeft){ //是否左转
if(Road.lightstatus[6]==2) //??加入相应的信号灯相位??
//RunState=StopWait; //如果是红灯就停车等待
y=yCenter-50;
else
RunState=TurnLeft; //左转
Road.s[x][y]=0;
y=200;
Road.s[x][y]=1;
// }
/* else if(IsGoStrait){ //是否直行
if(Road.lightstatus[2]==2) //如果是红灯就停车等待
{
v=200-y;
//System.out.println("x"+x);
}
else
{
v=3; //匀速通过路口,是否移至具体的函数中???
}
//RunState=GoAhead; //直行状态
Road.s[x][y]=0;
y=y+v;
Road.s[x][y]=1;
}*/
break;
}//Area2区结束
case 3:{ //进入路口核心区
//System.out.println("Center x = "+x);
v=5; //匀速通过路口,是否移至具体的函数中???
Road.s[x][y]=0;
y=y+v;
Road.s[x][y]=1;
break;
}//Area3区结束
}//switch Area
} //end if 下面车道
break;
}//FromNorth结束
case FromWest:
{
if((x>=200)&&(x<300-MaxV)) //判断车辆到达区域
Area=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -