#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);
}