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