qt-交通路口仿真
- 一、演示效果
- 二、核心代码
- 三、程序链接
一、演示效果
二、核心代码
#include "generator.h"Generator::Generator(SimulationScene *scene):m_scene(scene),m_mode(VEHICLEMETHOD::GO_THROUGH),m_running_state(false),m_VisionOn(false),m_IsInteraction(true)
{for(int i = 0 ; i < 4 ; ++i){m_timer.append( new QTimer());}this->connect(m_timer.at(0),SIGNAL(timeout()),this,SLOT(makeEastWest()));this->connect(m_timer.at(1),SIGNAL(timeout()),this,SLOT(makeNorthSouth()));this->connect(m_timer.at(2),SIGNAL(timeout()),this,SLOT(makeSouthNorth()));this->connect(m_timer.at(3),SIGNAL(timeout()),this,SLOT(makeWestEast()));//qsrand(static_cast<uint>(QTime(0,0,0).secsTo(QTime::currentTime())));
}Generator::Generator():m_number_N_S(0),m_number_S_N(0),m_number_W_E(0),m_number_E_W(0),m_time_N_S(0),m_time_S_N(0),m_time_W_E(0),m_time_E_W(0),m_mode(VEHICLEMETHOD::GO_THROUGH),m_running_state(false)
{for(int i = 0 ; i < 4 ; ++i){m_timer.append( new QTimer());}//qsrand(static_cast<uint>(QTime(0,0,0).secsTo(QTime::currentTime())));
}Generator::~Generator()
{delete m_timer.at(0);delete m_timer.at(1);delete m_timer.at(2);delete m_timer.at(3);
}void Generator::setMethod(const GENMETHOD& x)
{m_method = x;
}void Generator::startGenerator()
{m_timer.at(0)->start(m_time_E_W);m_timer.at(1)->start(m_time_N_S);m_timer.at(2)->start(m_time_S_N);m_timer.at(3)->start(m_time_W_E);}void Generator::stopGenerator()
{m_timer.at(0)->stop();m_timer.at(1)->stop();m_timer.at(2)->stop();m_timer.at(3)->stop();
}void Generator::startAutoGeneraion()
{setTimer(2500,2000,2600,3000);startGenerator();
}void Generator::setTimer(const int& N_S,const int& S_N,const int& E_W,const int& W_E)
{m_time_N_S = N_S;m_time_S_N = S_N;m_time_E_W = E_W;m_time_W_E = W_E;
}void Generator::makeNorthSouth()
{if(m_scene->getNumber(REGION_N_S) > MAX_N_S){return;}//qDebug()<<"Hello";switch (m_method) {case GEN_3:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;}break;case GEN_5:switch (qrand()%5){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 3:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 4:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;}break;case NO_TURN:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_N_S,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;}break;case ONLY_TURN:switch (qrand()%2) {case 0:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction));break;case 1:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_N_S,m_mode,m_VisionOn,m_IsInteraction));break;}break;}
}void Generator::makeSouthNorth()
{if(m_scene->getNumber(REGION_S_N) > MAX_S_N){return;}//qDebug()<<"Hello";switch (m_method) {case GEN_3:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;}break;case GEN_5:switch (qrand()%5){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;case 3:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;case 4:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction));//m_number_S_N++;break;}break;case NO_TURN:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_S_N,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;}break;case ONLY_TURN:switch (qrand()%2) {case 0:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction));break;case 1:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_S_N,m_mode,m_VisionOn,m_IsInteraction));break;}break;}
}void Generator::makeWestEast()
{if(m_scene->getNumber(REGION_W_E) > MAX_W_E){return;}//qDebug()<<"Hello";switch (m_method) {case GEN_3:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;}break;case GEN_5:switch (qrand()%5){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;case 3:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;case 4:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction));//m_number_W_E++;break;}break;case NO_TURN:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_W_E,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;}break;case ONLY_TURN:switch (qrand()%2) {case 0:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction));break;case 1:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_W_E,m_mode,m_VisionOn,m_IsInteraction));break;}break;}
}void Generator::makeEastWest()
{if(m_scene->getNumber(REGION_E_W) > MAX_E_W){return;}//qDebug()<<"Hello";switch (m_method) {case GEN_3:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;}break;case GEN_5:switch (qrand()%5){case 0:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;case 3:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;case 4:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction));//m_number_E_W++;break;}break;case NO_TURN:switch (qrand()%3){case 0:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,1,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 1:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,2,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;case 2:m_scene->addVehicle(VehiclesGenerator::getThroughVehicle(REGION_E_W,3,m_mode,m_VisionOn,m_IsInteraction));//m_number_N_S++;break;}break;case ONLY_TURN:switch (qrand()%2) {case 0:m_scene->addVehicle(VehiclesGenerator::getLeftTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction));break;case 1:m_scene->addVehicle(VehiclesGenerator::getRightTurningVehicle(REGION_E_W,m_mode,m_VisionOn,m_IsInteraction));break;}break;}
}void Generator::setMode(const VEHICLEMETHOD &mode)
{m_mode = mode;
}void Generator::setVisionOn(const bool &vision)
{m_VisionOn = vision;
}void Generator::setInteraction(const bool &interact)
{m_IsInteraction = interact;
}void Generator::setScene(SimulationScene *scene)
{m_scene = scene;
}void Generator::turnOn()
{m_running_state = true;
}void Generator::turnOff()
{m_running_state = false;
}
三、程序链接
https://download.csdn.net/download/u013083044/88850953