From aa0868d50d4455970e0654b0d3c0da19df49a53a Mon Sep 17 00:00:00 2001 From: w-mj Date: Mon, 25 Dec 2017 15:25:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9C=8B=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- car.cpp | 14 +++++++------- car.h | 3 +++ parkingLotManager.cpp | 17 +++++++++++++++-- parkingLotManager.h | 2 ++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/car.cpp b/car.cpp index 8ba105d..910e53a 100644 --- a/car.cpp +++ b/car.cpp @@ -37,14 +37,8 @@ Car::Car(ParkingLotManager * manager, QGraphicsItem *parent, int dir, Car::Color connect(this, &Car::queueHead, manager, &ParkingLotManager::requestIn); connect(this, &Car::exit, manager, &ParkingLotManager::leave); connect(this, &Car::stair, manager, &ParkingLotManager::requestStair); - + connect(this, &Car::out, manager, &ParkingLotManager::requestOut); m_number = "1234"; - - // 测试:创建10s后离开 - QTimer *timer = new QTimer(this); - connect(timer, &QTimer::timeout, [this, manager](){emit manager->requestOut(this);}); - timer->setSingleShot(true); - timer->start(10000); } void Car::Forward(qreal vel) @@ -228,6 +222,12 @@ void Car::setStartTime(const QTime &value) startTime = value; } +void Car::leaveProbability(int p) +{ + if (rand() % 100 + 1 < p) + emit out(this, -1); +} + int Car::getTargetFloor() const { return targetFloor; diff --git a/car.h b/car.h index 58cc264..ad773b2 100644 --- a/car.h +++ b/car.h @@ -68,6 +68,8 @@ public: QTime getStartTime() const; void setStartTime(const QTime &value); + void leaveProbability(int p); + private: Status m_status; Color m_color; //车身颜色 N为0, 顺时针递增 @@ -89,6 +91,7 @@ signals: void stair(Car* car); void exit(Car* car); void queueHead(Car* car); + void out(Car *car ,int); }; #endif // CAR_H diff --git a/parkingLotManager.cpp b/parkingLotManager.cpp index e5362eb..f29fcdf 100644 --- a/parkingLotManager.cpp +++ b/parkingLotManager.cpp @@ -57,6 +57,10 @@ ParkingLotManager::ParkingLotManager(QObject* objectParent, QGraphicsScene* scen generatePool(true); Adapter *adapter = new Adapter(objectParent, &m_all_cars); // 注册model CarList::getInstance()->setAdapter(adapter); + + QTimer *timer = new QTimer(this); + connect(timer, &QTimer::timeout, this, &ParkingLotManager::periodWork); + timer->start(1000); // 轮询 } void ParkingLotManager::showParkingLot(uint pos) @@ -227,8 +231,6 @@ void ParkingLotManager::addCar(int entry) if (entry == -1) entry = (rand() % m_num_of_entry); - entry = 0; - Car *car = new Car(this); car->setEntryNum(entry + 1); m_waitting[entry].append(car); @@ -281,3 +283,14 @@ void ParkingLotManager::generatePool(bool sequence) std::random_shuffle(m_pool.begin(), m_pool.end()); Log::i(QString("生成车位池成功,当前共有") + QString::number(m_pool.size()) + "个空车位"); } + +void ParkingLotManager::periodWork() +{ + int generateProbability = 80; + if (rand() % 100 + 1 < generateProbability) + addCar(); + for (auto c: m_all_cars) { + if (c->getStatus() == Car::parking) + c->leaveProbability(2); + } +} diff --git a/parkingLotManager.h b/parkingLotManager.h index 34e0119..339cf8f 100644 --- a/parkingLotManager.h +++ b/parkingLotManager.h @@ -64,6 +64,8 @@ private: void generatePool(bool sequence); + void periodWork(void); + signals: void enableUpButton(bool); void enableDownButton(bool);