== comment == 시간이 무한히 지나면 10대의 버스가 몰려가는 현상이 발견된다-_- 원래 이런건지 아니면 버그인지는 모르겠따; STL을 이용하고 함수별로 나누는 리팩토링이 필요하다 -ㅅ- 태훈아 너무 빨리 짜는거 아냐 ㅋㅋ 담에는 어떤 숙제를 내야 할지 ㅎㅎ - [상협] - ㅇㅅㅇ;;;; 아잉;; == main.cpp == {{{ #include #include #include #include //sleep #include #include 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(iBusLanelength()) 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 BusLanelength() + BusStationNo+1) buspos -= BusLanelength() + BusStationNo +1; pastTime(sec); //시간 지연시키기 return buspos; } int isstation(){ //현재 버스가 있는 위치가 버스 정류장이면 TRUE int i=0; while(getBusPos() != busStation[i]+i+1 && i<= BusStationNo-1){ i++; } if(BusStationNo-1 < i) return -1; //버스정류장이 아닐경우 return i; } bool ismove() { return movingbus; } // 현재 운행중인가? BusType() { KilloPerHour_Bus = 50.0; //버스의 속도 Km/h MeterPerMinute_Bus = KilloPerHour_Bus * ( 1000.0 / 60.0 ); //버스의 속도 m/m BusCapacity = 50; //버스 한대에 탈 수 있는 최대 사람수 busStation[0]=4; //시작 지점부터 각 버스 정류장 까지의 길이, 단위는 Km busStation[1]=8; busStation[2]=16; busStation[3]=20; busStation[4]=24; busStation[5]=28; busStation[6]=36; busStation[7]=40; busStation[8]=44; busStation[9]=52; CurrentMinute = 0; //현재 흐르 시간 sec buspos = 0; movingbus=false; // 현재 운행중인가? passengers=0; } int getBusCapacity() { return BusCapacity;} int getPassengers(int n=0) { return passengers+=n; } private: double MeterPerMinute_Bus; //버스의 속도 m/m double KilloPerHour_Bus; //버스의 속도 Km/h int BusCapacity; //버스 한대에 탈 수 있는 최대 사람수 int busStation[BusStationNo]; //10개의 버스 정류장, 버스 정류장의 위치를 나타낸다 long CurrentMinute; //현재 흐르 시간 sec long DueMinute; //몇초 후의 상황을 볼것인지 입력 받는 값 //Bus buses[BusNo]; //10 대의 버스들이 운행된다. int passengers; //현재 버스에 타고있는 승객의 숫자 double buspos; // 버스의 현재 위치 bool movingbus; // 현재 운행중인가? }; }}} == function.h == {{{ #include #include int zrnd(int start,int end) { int r; srand(time(NULL)); r = rand()%(end-start+1) + start; return r; } }}} ---- [BusSimulation] [CPPStudy_2005_1]