📄 road.cpp
字号:
// Road.cpp: implementation of the CRoad class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CrossSimulation1.h"
#include "Road.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRoad::CRoad()
{
ptrToEastLane1=NULL;
ptrToEastLane2=NULL;
ptrToWestLane1=NULL;
ptrToWestLane2=NULL;
ptrToNorthLane1=NULL;
ptrToNorthLane2=NULL;
ptrToSouthLane1=NULL;
ptrToSouthLane2=NULL;
}
CRoad::~CRoad()
{
}
void CRoad::EastGenerateCar()
{
static CCar* EastCarLane1Temp1=NULL;
static CCar* EastCarLane1Temp2=NULL;
static CCar* EastCarLane2Temp1=NULL;
static CCar* EastCarLane2Temp2=NULL;
float n1=(float)rand()/32768;
if(m_EastLaneNumber==4) //为双向四车道,有两个方向产生车流
{
float n2=(float)rand()/32768;
if(n1>0.99)
{
//第一个车道产生车,同时产生左转车辆;车道坐标点(60,m_EastLaneWidth/2);
if(ptrToEastLane1==NULL)
{
ptrToEastLane1=new CCar;
ptrToEastLane1->x=60;
ptrToEastLane1->y=m_EastLaneWidth/2;
ptrToEastLane1->direction=1;
ptrToEastLane1->m_RoadID=1;
ptrToEastLane1->ptrToBefore=NULL;
ptrToEastLane1->ptrToNext=NULL;
EastCarLane1Temp1=ptrToEastLane1;
EastCarLane1Temp2=ptrToEastLane1;
}
else
{
if(n2>0.4&&EastCarLane1Temp1->x<(60-EastCarLane1Temp1->m_CarLenth*2))
{
EastCarLane1Temp1->ptrToNext=new CCar;
EastCarLane1Temp1=EastCarLane1Temp1->ptrToNext;
EastCarLane1Temp1->ptrToBefore=EastCarLane1Temp2;
EastCarLane1Temp1->ptrToNext=NULL;
EastCarLane1Temp2=EastCarLane1Temp1;
EastCarLane1Temp1->x=60;
EastCarLane1Temp1->y=m_EastLaneWidth/2;
EastCarLane1Temp1->direction=1;
EastCarLane1Temp1->m_RoadID=1;
EastCarLane1Temp1->b_TurnLeft=TRUE; //产生左转车辆;
}
if(n2<0.4&&EastCarLane1Temp1->x<(60-EastCarLane1Temp1->m_CarLenth*2))
{
EastCarLane1Temp1->ptrToNext=new CCar;
EastCarLane1Temp1=EastCarLane1Temp1->ptrToNext;
EastCarLane1Temp1->ptrToBefore=EastCarLane1Temp2;
EastCarLane1Temp1->ptrToNext=NULL;
EastCarLane1Temp2=EastCarLane1Temp1;
EastCarLane1Temp1->x=60;
EastCarLane1Temp1->y=m_EastLaneWidth/2;
EastCarLane1Temp1->direction=1;
EastCarLane1Temp1->m_RoadID=1;
//产生非左转车辆;
}
}
}
if(n1<0.01)
{
//第二个车道产生车,同时产生右转车辆;车道坐标点(60,3*m_EastLaneWidth/2);
if(ptrToEastLane2==NULL)
{
ptrToEastLane2=new CCar;
ptrToEastLane2->x=60;
ptrToEastLane2->y=3*m_EastLaneWidth/2;
ptrToEastLane2->direction=1;
ptrToEastLane2->m_RoadID=1;
ptrToEastLane2->ptrToBefore=NULL;
ptrToEastLane2->ptrToNext=NULL;
EastCarLane2Temp1=ptrToEastLane2;
EastCarLane2Temp2=ptrToEastLane2;
}
else
{
if(n2<0.4&&EastCarLane2Temp1->x<(60-EastCarLane2Temp1->m_CarLenth*2))
{
EastCarLane2Temp1->ptrToNext=new CCar;
EastCarLane2Temp1=EastCarLane2Temp1->ptrToNext;
EastCarLane2Temp1->ptrToBefore=EastCarLane2Temp2;
EastCarLane2Temp1->ptrToNext=NULL;
EastCarLane2Temp2=EastCarLane2Temp1;
EastCarLane2Temp1->x=60;
EastCarLane2Temp1->y=3*m_EastLaneWidth/2;
EastCarLane2Temp1->direction=1;
EastCarLane2Temp1->m_RoadID=1;
EastCarLane2Temp1->b_TurnRight=TRUE;
}
if(n2>0.4&&EastCarLane2Temp1->x<(60-EastCarLane2Temp1->m_CarLenth*2))
{
EastCarLane2Temp1->ptrToNext=new CCar;
EastCarLane2Temp1=EastCarLane2Temp1->ptrToNext;
EastCarLane2Temp1->ptrToBefore=EastCarLane2Temp2;
EastCarLane2Temp1->ptrToNext=NULL;
EastCarLane2Temp2=EastCarLane2Temp1;
EastCarLane2Temp1->x=60;
EastCarLane2Temp1->y=3*m_EastLaneWidth/2;
EastCarLane2Temp1->direction=1;
EastCarLane2Temp1->m_RoadID=1;
}
}
}
}
}
void CRoad::WestGenerateCar()
{
static CCar* WestCarLane1Temp1=NULL;
static CCar* WestCarLane1Temp2=NULL;
static CCar* WestCarLane2Temp1=NULL;
static CCar* WestCarLane2Temp2=NULL;
float n1=(float)rand()/32768;
/////////////////////西向道路产生车流/////////////////////////
if(m_WestLaneNumber==4) //为双向四车道,有两个方向产生车流
{
float n2=(float)rand()/32768;
if(n1>0.99)
{
//第一个车道产生车,同时产生左转车辆;车道坐标点(-60,-m_WestLaneWidth/2);
if(ptrToWestLane1==NULL)
{
ptrToWestLane1=new CCar;
ptrToWestLane1->x=-60;
ptrToWestLane1->y=-m_WestLaneWidth/2;
ptrToWestLane1->direction=2;
ptrToWestLane1->m_RoadID=2;
ptrToWestLane1->ptrToBefore=NULL;
ptrToWestLane1->ptrToNext=NULL;
WestCarLane1Temp1=ptrToWestLane1;
WestCarLane1Temp2=ptrToWestLane1;
}
else
{
if(n2>0.4&&WestCarLane1Temp1->x>(-60+WestCarLane1Temp1->m_CarLenth*2))
{
WestCarLane1Temp1->ptrToNext=new CCar;
WestCarLane1Temp1=WestCarLane1Temp1->ptrToNext;
WestCarLane1Temp1->ptrToBefore=WestCarLane1Temp2;
WestCarLane1Temp1->ptrToNext=NULL;
WestCarLane1Temp2=WestCarLane1Temp1;
WestCarLane1Temp1->x=-60;
WestCarLane1Temp1->y=-m_WestLaneWidth/2;
WestCarLane1Temp1->direction=2;
WestCarLane1Temp1->m_RoadID=2;
WestCarLane1Temp1->b_TurnLeft=TRUE; //产生左转车辆;
}
if(n2<0.4&&WestCarLane1Temp1->x>(-60+WestCarLane1Temp1->m_CarLenth*2))
{
WestCarLane1Temp1->ptrToNext=new CCar;
WestCarLane1Temp1=WestCarLane1Temp1->ptrToNext;
WestCarLane1Temp1->ptrToBefore=WestCarLane1Temp2;
WestCarLane1Temp1->ptrToNext=NULL;
WestCarLane1Temp2=WestCarLane1Temp1;
WestCarLane1Temp1->x=-60;
WestCarLane1Temp1->y=-m_WestLaneWidth/2;
WestCarLane1Temp1->direction=2;
WestCarLane1Temp1->m_RoadID=2;
//产生非左转车辆;
}
}
}
if(n1<0.01)
{
//第二个车道产生车,同时产生右转车辆;车道坐标点(-60,-3*m_WestLaneWidth/2);
if(ptrToWestLane2==NULL)
{
ptrToWestLane2=new CCar;
ptrToWestLane2->x=-60;
ptrToWestLane2->y=-3*m_WestLaneWidth/2;
ptrToWestLane2->direction=2;
ptrToWestLane2->m_RoadID=2;
ptrToWestLane2->ptrToBefore=NULL;
ptrToWestLane2->ptrToNext=NULL;
WestCarLane2Temp1=ptrToWestLane2;
WestCarLane2Temp2=ptrToWestLane2;
}
else
{
if(n2<0.4&&WestCarLane2Temp1->x>(-60+WestCarLane2Temp1->m_CarLenth*2))
{
WestCarLane2Temp1->ptrToNext=new CCar;
WestCarLane2Temp1=WestCarLane2Temp1->ptrToNext;
WestCarLane2Temp1->ptrToBefore=WestCarLane2Temp2;
WestCarLane2Temp1->ptrToNext=NULL;
WestCarLane2Temp2=WestCarLane2Temp1;
WestCarLane2Temp1->x=-60;
WestCarLane2Temp1->y=-3*m_WestLaneWidth/2;
WestCarLane2Temp1->direction=2;
WestCarLane2Temp1->m_RoadID=2;
WestCarLane2Temp1->b_TurnRight=TRUE;
}
if(n2>0.4&&WestCarLane2Temp1->x>(-60+WestCarLane2Temp1->m_CarLenth*2))
{
WestCarLane2Temp1->ptrToNext=new CCar;
WestCarLane2Temp1=WestCarLane2Temp1->ptrToNext;
WestCarLane2Temp1->ptrToBefore=WestCarLane2Temp2;
WestCarLane2Temp1->ptrToNext=NULL;
WestCarLane2Temp2=WestCarLane2Temp1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -