📄 elevator.cpp
字号:
#include"elevator.h"
//////////////////////////////////////////////
// function definition for class floor
//////////////////////////////////////////////
floors::floors(int floor_number):current_number(floor_number){
int out_people=0;
in_people_number[UP]=0;
in_people_number[DN]=0;
//init_graphics();
//clear_screen();
}
//--------------------------------------------
void floors::record_rep(){
char chDirection;
char ustring[BUF_LENGTH];
int people_number;
cout << "请选择你是上去还是下去 (u or d): ";
cin.get(chDirection);
cin.ignore(10, '\n');
cout << "请输入这层进电梯的人数(最多14人): ";
cin.get(ustring, BUF_LENGTH);
cin.ignore(10, '\n');
people_number = atoi(ustring);
if(chDirection=='u' || chDirection=='U'){
in_people_number[UP]=in_people_number[UP]+people_number;
}
if(chDirection=='d' || chDirection=='D'){
in_people_number[DN]=in_people_number[DN]+people_number;
}
set_cursor_pos(1,17); clear_line();
set_cursor_pos(1,18); clear_line();
set_cursor_pos(1,19); clear_line();
}
//--------------------------------------------------------------
int floors::get_floor_in_num(const int dir)const{
return in_people_number[dir];
}
//--------------------------------------------------------------
void floors::set_floor_in_num(const int dir) {
in_people_number[dir]=0;
}
//----------------------------------------------
///////////////////////////////////////////////////////////////
// function definition for class building //
/////////////////////////////////////////////////////////////////
building::building(){
char ustring[BUF_LENGTH];
init_graphics();
clear_screen();
number_cars=0;
for(int k=0;k<NUMBER_CAR;k++){
car_list[k]=new elevator(this,number_cars);
number_cars++;
}
number_floors=0;
for(int j=0;j<NUMBER_FLOOR;j++){
ptrFloor[j]=new floors(number_floors);
number_floors++;
}
for(int z=0; z<NUMBER_FLOOR; z++){
set_cursor_pos(3, NUMBER_FLOOR-z);
itoa(z+1, ustring, 10);
cout << setw(3) << ustring;
}
}
//-----------------------------------------
void building::master_tick(){
show_floor_rep();
int j;
for(j=0; j<NUMBER_CAR; j++)
car_list[j]->car_tick();
for(j=0;j<NUMBER_CAR;j++)
car_list[j]->move();
}
//---------------------------------------------------
void building::record_each_floor_rep(){
char ch = 'x';
char ustring[BUF_LENGTH];
int iFloor;
set_cursor_pos(1,17);
cout << "请按 [Enter] 来呼叫电梯: ";
if( !kbhit() )
return;
cin.ignore(10, '\n');
if(ch=='\x1B')
exit(0);
set_cursor_pos(1,17); clear_line();
set_cursor_pos(1,17);
cout << "请输入你现在所在的楼层号: ";
cin.get(ustring, BUF_LENGTH);
cin.ignore(10, '\n');
iFloor = atoi(ustring);
ptrFloor[iFloor-1]->record_rep();
}
//---------------------------------------------------
void building::show_floor_rep()const{
for(int j=0; j<NUMBER_FLOOR; j++){
set_cursor_pos(SPACING, NUMBER_FLOOR-j);
if(ptrFloor[j]->in_people_number[UP])
cout << '\x1E';
else
cout << ' ';
set_cursor_pos(SPACING+3, NUMBER_FLOOR-j);
if(ptrFloor[j]->in_people_number[DN])
cout << '\x1F';
else
cout << ' ';
}
}
//-----------------------------------------------------------
int building::get_cars_floor(const int carNo) const {
return car_list[carNo]->get_current_floor();
}
//------------------------------------------------------------
direction building::get_cars_dir(const int carNo) const {
return car_list[carNo]->get_current_dir();
}
//////////////////////////////////////////////////////////////
// function definition for class elevator //
///////////////////////////////////////////////////////////////
elevator::elevator(building* ptrB, int nc) :
ptrBuilding(ptrB), car_number(nc) {
current_floor = 0;
old_floor = 0;
current_dir = STOP;
for(int j=0; j<NUMBER_FLOOR; j++)
destination[j] = 0;
limit_people_number=14;
current_people_number=0;
}
void elevator::car_tick(){
car_display();
destination_display();
dicide_next();
}
//------------------------------------------------------------------
int elevator::get_current_floor() {
return current_floor;
}
//--------------------------------------------------------------
direction elevator::get_current_dir() {
return current_dir;
}
//--------------------------------------------------------------
int elevator::get_destination_num(int num){
return destination[num];
}
//--------------------------------------------------------------
void elevator::set_destination_num(int num){
destination[num]=0;
}
//--------------------------------------------------------------
void elevator::car_display(){
set_cursor_pos(SPACING+(car_number+1)*SPACING, NUMBER_FLOOR-old_floor);
cout << " ";
int in_people_number=0;
int up_people_number=0;
int down_people_number=0;
int out_people_number=0;
up_people_number=ptrBuilding->ptrFloor[current_floor]->get_floor_in_num(UP);
ptrBuilding->ptrFloor[current_floor]->set_floor_in_num(UP);
down_people_number=ptrBuilding->ptrFloor[current_floor]->get_floor_in_num(DN);
ptrBuilding->ptrFloor[current_floor]->set_floor_in_num(DN);
out_people_number= get_destination_num(current_floor);
set_destination_num(current_floor);
set_cursor_pos(SPACING+(car_number+1)*SPACING, NUMBER_FLOOR-current_floor);
if(up_people_number||down_people_number){
if(up_people_number)
in_people_number=up_people_number;
if(down_people_number)
in_people_number=down_people_number;
for(int i=0;i<in_people_number;i++){
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout<<"\x3D\x01\x3D";
wait(1000);
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout << " ";
}
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout<<"\x3D\x3D\x3D";
get_destination();
current_people_number+=in_people_number;
if(current_people_number>=limit_people_number){
set_cursor_pos(1,17); clear_line();
set_cursor_pos(1, 17);
cout<<"this elevator is full,please upload the next";
}
}
if(out_people_number){
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout << " ";
for(int i=0;i<out_people_number;i++){
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout<<"\x3D\x01\x3D";
wait(1000);
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout << " ";
}
set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
cout<<"\x3D\x3D\x3D";
current_people_number-=out_people_number;
}
if(!in_people_number&&!out_people_number)
cout<<"\x3D\x3D\x3D";
old_floor = current_floor;
}
//-------------------------------------------------------------
void elevator::destination_display(){
for(int j=0; j<NUMBER_FLOOR; j++){
set_cursor_pos(SPACING-2+(car_number+1)*SPACING, NUMBER_FLOOR-j);
if( destination[j])
cout << '\x11';
else
cout << ' ';
}
}
//--------------------------------------------------------------
void elevator::get_destination(){
int dest_floor;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -