添加了公交车控制类
This commit is contained in:
parent
2c73b1d2ed
commit
48947253f2
54
include/busModel.h
Normal file
54
include/busModel.h
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
//
|
||||||
|
// Created by ricardo on 2022/6/10.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef AUTO_BUS_GUI_BUS_MODEL_H
|
||||||
|
#define AUTO_BUS_GUI_BUS_MODEL_H
|
||||||
|
|
||||||
|
#include "railsModel.h"
|
||||||
|
#include "queryModel.h"
|
||||||
|
#include "define.h"
|
||||||
|
|
||||||
|
#include "string"
|
||||||
|
#include "sstream"
|
||||||
|
|
||||||
|
class BusControllerModel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* 指向公交车所在站点的指针
|
||||||
|
*/
|
||||||
|
rail_node_t *rail_pos;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前行进的距离
|
||||||
|
*/
|
||||||
|
int distance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 轨道对象
|
||||||
|
*/
|
||||||
|
RailsModel *rail_manager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求控制对象
|
||||||
|
*/
|
||||||
|
QueryModel *query_manager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造函数
|
||||||
|
*/
|
||||||
|
BusControllerModel(RailsModel *railsModel, QueryModel *queryModel);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 析构函数
|
||||||
|
*/
|
||||||
|
~BusControllerModel();
|
||||||
|
|
||||||
|
std::string PrintState();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int GetBusPosition() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //AUTO_BUS_GUI_BUS_MODEL_H
|
122
src/busModel.cpp
Normal file
122
src/busModel.cpp
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
//
|
||||||
|
// Created by ricardo on 2022/6/10.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "busModel.h"
|
||||||
|
|
||||||
|
BusControllerModel::BusControllerModel(RailsModel *railsModel, QueryModel *queryModel)
|
||||||
|
{
|
||||||
|
rail_manager = railsModel;
|
||||||
|
query_manager = queryModel;
|
||||||
|
|
||||||
|
// 公交车开始时停在轨道起始处
|
||||||
|
rail_pos = railsModel->rails;
|
||||||
|
distance = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BusControllerModel::~BusControllerModel()
|
||||||
|
{
|
||||||
|
delete(rail_manager);
|
||||||
|
delete(query_manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
int BusControllerModel::GetBusPosition() const
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
rail_node_t *now_pos = rail_pos;
|
||||||
|
rail_node_t *node = rail_manager->rails;
|
||||||
|
|
||||||
|
// 先求一下当前所在位置离起始点的距离
|
||||||
|
do
|
||||||
|
{
|
||||||
|
result += node->next_node_distance;
|
||||||
|
node = node->next_node;
|
||||||
|
} while (node != now_pos);
|
||||||
|
|
||||||
|
if (now_pos == rail_manager->rails)
|
||||||
|
{
|
||||||
|
int length = distance;
|
||||||
|
if(length >= 0)
|
||||||
|
{
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return result + length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (now_pos == rail_manager->rails->last_node)
|
||||||
|
{
|
||||||
|
int length = distance;
|
||||||
|
if (length == now_pos->next_node_distance)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return distance + length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return result + distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BusControllerModel::PrintState()
|
||||||
|
{
|
||||||
|
int count, flag = 1;
|
||||||
|
rail_node_t *node;
|
||||||
|
char target[25], clockwise[25], counterclockwise[25];
|
||||||
|
|
||||||
|
//遍历轨道链表,将所有站点初始化为0,即:无任何请求;
|
||||||
|
for (count = 0, node = rail_manager->rails; flag == 1 || node != rail_manager->rails;
|
||||||
|
node = node->next_node, count++)
|
||||||
|
{
|
||||||
|
flag=0;
|
||||||
|
target[count] = '0';
|
||||||
|
clockwise[count] = '0';
|
||||||
|
counterclockwise[count] = '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在字符串的末尾填0
|
||||||
|
target[count] = '\0';
|
||||||
|
clockwise[count] = '\0';
|
||||||
|
counterclockwise[count] = '\0';
|
||||||
|
|
||||||
|
bus_query_t *query = query_manager->queries;
|
||||||
|
int pos;
|
||||||
|
|
||||||
|
while (query != nullptr)
|
||||||
|
{
|
||||||
|
pos = query->node->id - 1;
|
||||||
|
|
||||||
|
if(query->type == BUS_CLOCK_WISE)
|
||||||
|
{
|
||||||
|
clockwise[pos] = '1';
|
||||||
|
}
|
||||||
|
else if (query->type == BUS_COUNTER_CLOCK_WISE)
|
||||||
|
{
|
||||||
|
counterclockwise[pos] = '1';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
target[pos] = '1';
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query->next_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::stringstream format;
|
||||||
|
|
||||||
|
// 格式化输出字符串
|
||||||
|
format << "Time:" << std::endl
|
||||||
|
<< "BUS:" << std::endl
|
||||||
|
<< "position:" << GetBusPosition() << std::endl
|
||||||
|
<< "target:" << target << std::endl
|
||||||
|
<< "STATION:" << std::endl
|
||||||
|
<< "clockwise:" << clockwise << std::endl
|
||||||
|
<< "counterclockwise:" << counterclockwise << std::endl;
|
||||||
|
|
||||||
|
return format.str();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user