📄 cartest01.java
字号:
else if((x>=300-MaxV)&&(x<=300)) //外围区
Area=2;
else if((x>300)&&(x<390)) //核心区
Area=3;
else if(x<=75) //进入区
Area=4;
else if(x>=655) //驶出区
Area=5;
else
Area=0;
peold=penew;
if (y==275) //下面车道
{
LeftLane=1;// right lane
switch(Area){
case 4: //进入
{
Dece=false;
v=MaxV;
for(int pe=x+1;pe<=x+20;pe++) //判断前方是否有车
{
if(Road.s[pe][y]==1) //这种判断方法是否有效,还需要详细考虑??
{
Dece=true;
}
}
if (!Dece)
{
Road.s[x][y]=0;
x=x+MaxV;
Road.s[x][y]=1;
}
break;
}
case 5:
{
v=MaxV;
Road.s[x][y]=0; //向西行驶
if (x<=690-v)
{
x=x+v;
//System.out.println("x"+x);
Road.s[x][y]=1;
}
else
{
x=1;
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=x;
penew=x;
for(int pe=x+40;pe>x;pe--) //判断前方是否有车
{
if(Road.s[pe][y]==1) //这种判断方法是否有效,还需要详细考虑??
{
Dece=true;
penew=pe;
//System.out.println("There is a car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=x+15;pe<=(x+40);pe++) //判断前方15-40是否有车
{
if(Road.s[pe][y]==1) //这种判断方法是否有效,还需要详细考虑??
{
flag1=true;
//System.out.println("There is a car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=x-75;pe<=(x+40);pe++) //判断上面车道是否有车
{
if(Road.s[pe][255]==1) //这种判断方法是否有效,还需要详细考虑??
{
flag2=false;
}
}
for (int pe=x+1;pe<x+25;pe++)
{
for (int m=255;m<275;m++)
{
if (Road.s[pe][m]==1)
flag3=false;
}
}
for (int pe=x-45;pe<x;pe++)
{
for (int m=255;m<275;m++)
{
if (Road.s[pe][m]==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;
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;
peold=x;
penew=x;
for(int pe=x+40;pe>x;pe--){ //判断前方是否有车
if(Road.s[pe][y]==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;
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=250;pe<=290;pe++){ //判断右转方向是否有车
if(Road.s[315][pe]==0) //yCenter+LaneWidth*5/4
RightWait=false;
else
RightWait=true;
}
if(RightWait)
//RunState=StopWait;
x=xCenter-50;
else
RunState=TurnRight;
Road.s[x][y]=0;
x=300;
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[3]==2) //如果是红灯就停车等待
{
v=300-x;
}
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==255) //上面车道
{
LeftLane=0;// left lane
switch(Area){
case 4:
{
Dece=false;
v=MaxV;
for(int pe=x+1;pe<=x+20;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+MaxV;
Road.s[x][y]=1;
}
break;
}
case 5:
{
v=MaxV;
Road.s[x][y]=0; //向西行驶
if (x<=690-v)
{
x=x+v;
Road.s[x][y]=1;
}
else
{
x=1;
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][255]==1) //这种判断方法是否有效,还需要详细考虑??
{
Dece=true;
penew=pe;
//System.out.println("There is a 1car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=x+10;pe<=(x+40);pe++) //判断前方10-40是否有车
{
if(Road.s[pe][255]==1)
{
flag1=true;
//System.out.println("There is a car1, x = "+x+"y ="+y+"pe ="+pe);
}
}
for(int pe=x-75;pe<=(x+40);pe++) //判断上面车道是否有车
{
if(Road.s[pe][275]==1) //这种判断方法是否有效,还需要详细考虑??
{
flag2=false;
}
}
for (int pe=x+1;pe<x+24;pe++)
{
for (int m=256;m<276;m++)
{
if (Road.s[pe][m]==1)
flag3=false;
}
}
for (int pe=x-45;pe<x;pe++)
{
for (int m=256;m<276;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(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;
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][y]==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;
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++){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -