#include <iostream>
#include <fstream>
#include <vector>
#include <windows.h> //sleep
#include <string>
#include <conio.h>
const int BusStationNo = 10; // 개
const int BusNo = 10; //
const long timerate = 1*60; // 간
#include "class.h"
#include "function.h"
using namespace std;
void gotoxy(int x, int y);
int main()
{
BusType bus[BusNo]; //
int MinuteOfInterval=12*60; // 간격 sec
long waitingPeopleInBusStation[BusStationNo] = {0,0,}; //각 기
int IncreasePerMinute_People = 4; // 1
int ridingSecond = 2; //1 걸 간()
int LastMovingBusIndex=-1; // 기
int LastMovingBusStartTime= -1 * MinuteOfInterval;
int i,j; //iterator
long Now=0;
while(1)
{
Now += timerate;
// 기
cout << endl << " ";
for(i=0,j=0;i<=bus->BusLanelength();++i) {
if(bus->BusStationPos(j)==i) {
gotoxy(i+j+2,1);
waitingPeopleInBusStation[j]+= timerate * (IncreasePerMinute_People/60.0);
cout << waitingPeopleInBusStation[j] ;
gotoxy(i+j+2,2);
cout << "*";
j++;
}
if(i<bus->BusLanelength()) cout << "-";
}
gotoxy(1,BusNo+3);
for(i=0;i<=bus->BusLanelength()+BusStationNo;++i ) cout<< "-";
cout << endl;
// 기, 간격 고
if(bus[LastMovingBusIndex+1].ismove()==false && LastMovingBusIndex+1 <= BusNo
&& Now - LastMovingBusStartTime >= MinuteOfInterval) {
bus[LastMovingBusIndex+1].start();
LastMovingBusStartTime=Now;
LastMovingBusIndex++;
}
// 기
for(i=0;i<BusNo;++i) {
if(bus[i].isstation() != -1 ){ // 경
int withdraw = zrnd(0,bus[i].getPassengers()); //
int cangetno = bus[i].getBusCapacity() - bus[i].getPassengers(); //
long& stationno = waitingPeopleInBusStation[bus[i].isstation()]; //
int ride_no =0;
// 기
bus[i].getPassengers(-1 * withdraw);
cangetno += withdraw;
// 기
if(stationno < cangetno){ // 경
ride_no=stationno;
while(timerate - ride_no * ridingSecond < 0)
ride_no--;
bus[i].getPassengers(ride_no);
waitingPeopleInBusStation[bus[i].isstation()]=stationno-ride_no;
} else { // 경
ride_no=cangetno;
while(timerate - ride_no * ridingSecond < 0)
ride_no--;
bus[i].getPassengers(ride_no);
stationno -= ride_no;
}
gotoxy(bus[i].getBusPos()+1,1);
cout << stationno << " ";
bus[i].movebus(timerate - ride_no * ridingSecond);
} else{ // 경
bus[i].movebus();
}
gotoxy(bus[i].getBusPos()+1,i+3);
cout << i;
gotoxy(bus[i].getBusPos()+1,BusNo+4);
cout << i << endl;
}
//
for(i=0;i<BusNo;++i)
cout << i << ":" << bus[i].getBusPos() << "," << bus[i].isstation() << ", 객:" << bus[i].getPassengers() <<endl;
cout << Now;
//Sleep(100);
//ESC
//if(getch()==27) break;
system("cls");
}
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = {x - 1, y - 1};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}