ëŠ�ë‚€ì � ë°� 설명 ¶
ë”ê°€ 재미있어 보여서 만들기 시작했다.
C++��서 그런지.. 내가그런건지는 몰�� ��하게 �래스로만 �면 C로 작성하는 것 보다 시간� � 걸리는듯..
하지만 재미있다!!^^*
재미삼아 ëš�ë”± 거리다 보니.. ì�´ë¯¸ 버스 사람 ì •ê±°ìž¥ 길... ì§ˆëŸ¬ë²„ë ¸..
ê·¸ë ‡ì§€ë§Œ ì•„ì§�까지 ì�¼ì�€ í•˜ê³ ìžˆê³ , 시간ë�„ ì—†ê³ , 해서 좀 ë‚비스럽지만 메모리 관리 ë°� 소스가 ì—‰ë§�ì§„ì°½ì�´ë‹¤.ã…Ž
헤헤헤.. 그래ë�„ 재미있으니 ë�..ã…Žã…Ž
(사실 ì�´ ì¦�명 ì‹œë®¬ë ˆì�´ì…˜ì�€ 편ë�„ì—�서 버스 용량ì�´ ë¬´í•œëŒ€ê³ ì„¤ì‚¬ 승ê°�ì�´ 내리지 않ë�”ë�¼ë�„ 승ê°�ì�´ íƒ€ê³ , 타는ë�° 시간ì�´ 걸린다는 것만으로ë�„ 버스가 ëª°ë ¤ë‹¤ë‹ˆëŠ” 것으로 ì¦�명ë�˜ì–´ 있으나.. 재미없ìž�ë„�~ 버스는 ìž�ê³ ë¡œ 용량ì�´ 있어야.. ê·¸ë¦¬ê³ íƒ”ìœ¼ë©´ 내리는게 ì�¸ì§€ìƒ�ì •.ã…Ž)
ì�Œ 노약ìž�ì„�ì�´ë�¼ë�˜ê°€.. 길과 길ì�„ ì�´ì–´ë²„린다거나.. 버스를 왕복시킨다거나.. 하는것ì�€ í•´ë³´ê³ ì‹¶ì§€ë§Œ, 시간ìƒ� 보류!
사실 ì¶œë ¥ë¶€ë¶„ì�´ 대부분 테스트용으로 만들어 ì§„ê±´ë�°.. ì�¼ë‹¨ 임시로 그대로 사용하기로 했다. 나중ì—� 휴가기간ì—� 소스좀 ìˆ˜ì •í•˜ë�„ë¡� í•˜ê² ë‹¤.
ë“¤ë– ì„œ 다 ì �ê³ ë‚˜ì„œ 소스ì�˜ 설명ì�´ 안ë�˜ìžˆëŠ”ê²ƒì�„ ê¹¨ë‹«ê³ ì‹œê¸‰ížˆ ìˆ˜ì •.. 그런ë�° ì–´ëŠ�ë¶„ì�´ 그사ì�´ 페ì�´ì§€ë¥¼ 변경하셔서 눈물ì�„ ë¨¸ê¸ˆê³ ë‹¤ì‹œìž‘ì„±í•œë‹¤.ã… .ã…œ
C++��서 그런지.. 내가그런건지는 몰�� ��하게 �래스로만 �면 C로 작성하는 것 보다 시간� � 걸리는듯..
하지만 재미있다!!^^*
재미삼아 ëš�ë”± 거리다 보니.. ì�´ë¯¸ 버스 사람 ì •ê±°ìž¥ 길... ì§ˆëŸ¬ë²„ë ¸..
ê·¸ë ‡ì§€ë§Œ ì•„ì§�까지 ì�¼ì�€ í•˜ê³ ìžˆê³ , 시간ë�„ ì—†ê³ , 해서 좀 ë‚비스럽지만 메모리 관리 ë°� 소스가 ì—‰ë§�ì§„ì°½ì�´ë‹¤.ã…Ž
헤헤헤.. 그래ë�„ 재미있으니 ë�..ã…Žã…Ž
(사실 ì�´ ì¦�명 ì‹œë®¬ë ˆì�´ì…˜ì�€ 편ë�„ì—�서 버스 용량ì�´ ë¬´í•œëŒ€ê³ ì„¤ì‚¬ 승ê°�ì�´ 내리지 않ë�”ë�¼ë�„ 승ê°�ì�´ íƒ€ê³ , 타는ë�° 시간ì�´ 걸린다는 것만으로ë�„ 버스가 ëª°ë ¤ë‹¤ë‹ˆëŠ” 것으로 ì¦�명ë�˜ì–´ 있으나.. 재미없ìž�ë„�~ 버스는 ìž�ê³ ë¡œ 용량ì�´ 있어야.. ê·¸ë¦¬ê³ íƒ”ìœ¼ë©´ 내리는게 ì�¸ì§€ìƒ�ì •.ã…Ž)
ì�Œ 노약ìž�ì„�ì�´ë�¼ë�˜ê°€.. 길과 길ì�„ ì�´ì–´ë²„린다거나.. 버스를 왕복시킨다거나.. 하는것ì�€ í•´ë³´ê³ ì‹¶ì§€ë§Œ, 시간ìƒ� 보류!
사실 ì¶œë ¥ë¶€ë¶„ì�´ 대부분 테스트용으로 만들어 ì§„ê±´ë�°.. ì�¼ë‹¨ 임시로 그대로 사용하기로 했다. 나중ì—� 휴가기간ì—� 소스좀 ìˆ˜ì •í•˜ë�„ë¡� í•˜ê² ë‹¤.
ë“¤ë– ì„œ 다 ì �ê³ ë‚˜ì„œ 소스ì�˜ 설명ì�´ 안ë�˜ìžˆëŠ”ê²ƒì�„ ê¹¨ë‹«ê³ ì‹œê¸‰ížˆ ìˆ˜ì •.. 그런ë�° ì–´ëŠ�ë¶„ì�´ 그사ì�´ 페ì�´ì§€ë¥¼ 변경하셔서 눈물ì�„ ë¨¸ê¸ˆê³ ë‹¤ì‹œìž‘ì„±í•œë‹¤.ã… .ã…œ
버스는 ë�™ì�¼ 간격으로 ìƒ�성ë�˜ê²Œ ë�˜ì–´ìžˆìœ¼ë©°, 승ê°�ì�€ ëžœë�¤ìœ¼ë¡œ ìƒ�성ë�œë‹¤.( 승ê°�ì�´ ìƒ�성ë�˜ëŠ” 비율ì�„ ì—ì�„ 만들때 ì •í• ìˆ˜ 있다. )
편ë�„ì�¸ 관계로 승ê°�ì�˜ 목ì �지는 승ê°�ì�´ ìƒ�성ë�œ ì�´í›„ì�˜ ì—중 한곳(ëžœë�¤)으로 ì •í•´ì§„ë‹¤.
ë˜�한 ì�´ëŸ° ë¬¸ì œë¡œ 마지막 ì—ì�€ 승ê°�ì�„ 만들(!)수 없다.
버스가 ìž�ì‹ ì�˜ ì†�ë�„(만들때 ì •í• ìˆ˜ 있으며 ì�´ 소스ì—�는 80으로 통ì�¼í•˜ì˜€ë‹¤.)로 움ì§�ì�´ëŠ”ë�° 한턴ì�´ 소모ë�œë‹¤. (앞ì—� 차량ì�´ 있어서 ì •ì°¨í•˜ê±°ë‚˜, ì—ì—� 들어가게ë�˜ì–´ ìž�ì‹ ì�˜ ì�´ë�™ê±°ë¦¬ë¥¼ 다 가지 못하ë�”ë�¼ë�„ ë�™ì�¼í•˜ê²Œ 한턴ì�´ 소모ë�œë‹¤.)
승ê°� 1ì�¸ì�„ íƒœìš°ê³ , 승ê°�1ì�¸ì�„ 내리는ë�° 1í„´ì�´ 소모ë�œë‹¤. (둘중ì—� 한가지 ê³¼ì •ë§Œì�´ ì�´ë£¨ì–´ ì§€ë�”ë�¼ë�„ ë�™ì�¼í•˜ê²Œ 1í„´ì�´ 소모ë�œë‹¤.)
ì�´ëŸ¬í•œ 규칙ì�„ 기본으로 해서 ì‹œë®¬ë ˆì�´ì…˜ í•˜ê³ ìžˆë‹¤.
편ë�„ì�¸ 관계로 승ê°�ì�˜ 목ì �지는 승ê°�ì�´ ìƒ�성ë�œ ì�´í›„ì�˜ ì—중 한곳(ëžœë�¤)으로 ì •í•´ì§„ë‹¤.
ë˜�한 ì�´ëŸ° ë¬¸ì œë¡œ 마지막 ì—ì�€ 승ê°�ì�„ 만들(!)수 없다.
버스가 ìž�ì‹ ì�˜ ì†�ë�„(만들때 ì •í• ìˆ˜ 있으며 ì�´ 소스ì—�는 80으로 통ì�¼í•˜ì˜€ë‹¤.)로 움ì§�ì�´ëŠ”ë�° 한턴ì�´ 소모ë�œë‹¤. (앞ì—� 차량ì�´ 있어서 ì •ì°¨í•˜ê±°ë‚˜, ì—ì—� 들어가게ë�˜ì–´ ìž�ì‹ ì�˜ ì�´ë�™ê±°ë¦¬ë¥¼ 다 가지 못하ë�”ë�¼ë�„ ë�™ì�¼í•˜ê²Œ 한턴ì�´ 소모ë�œë‹¤.)
승ê°� 1ì�¸ì�„ íƒœìš°ê³ , 승ê°�1ì�¸ì�„ 내리는ë�° 1í„´ì�´ 소모ë�œë‹¤. (둘중ì—� 한가지 ê³¼ì •ë§Œì�´ ì�´ë£¨ì–´ ì§€ë�”ë�¼ë�„ ë�™ì�¼í•˜ê²Œ 1í„´ì�´ 소모ë�œë‹¤.)
ì�´ëŸ¬í•œ 규칙ì�„ 기본으로 해서 ì‹œë®¬ë ˆì�´ì…˜ í•˜ê³ ìžˆë‹¤.
(ìˆ˜ì •ë‹¹í•´ì„œ ë‚ ë ¸ë�˜ 충격ì�´ í�°í„°ë�¼ ë§Žì�´ 설명ì�´ 줄었지만 ì�´í•´í•˜ë¦¬ë�¼ 믿는다.^^)
- 물런 재미가 없긴 í•˜ê² ì§€ë§Œ ì�´ ì¦�명ì�€ 버스가 편ë�„로 움ì§�ì�´ê³ 버스용량ì�´ 무한ì�´ë©°, 승ê°�ì�´ 내리지 않ë�”ë�¼ë�„ 승ê°�ì�´ íƒ€ê³ ìŠ¹ê°�ì�´ 타는ë�° 시간만 걸린다면 버스ì�˜ 몰림현ìƒ�ì�´ ë°œìƒ�한다. (ê³ ë¡œ ì¦�명하기 위해 소스를 ë§Žì�´ 짤 필요가 ì—†ì�„ 수ë�„ 있다. 재미가 ì—†ê² ì§€ë§Œ..ã…Ž)
- 물런 재미가 없긴 í•˜ê² ì§€ë§Œ ì�´ ì¦�명ì�€ 버스가 편ë�„로 움ì§�ì�´ê³ 버스용량ì�´ 무한ì�´ë©°, 승ê°�ì�´ 내리지 않ë�”ë�¼ë�„ 승ê°�ì�´ íƒ€ê³ ìŠ¹ê°�ì�´ 타는ë�° 시간만 걸린다면 버스ì�˜ 몰림현ìƒ�ì�´ ë°œìƒ�한다. (ê³ ë¡œ ì¦�명하기 위해 소스를 ë§Žì�´ 짤 필요가 ì—†ì�„ 수ë�„ 있다. 재미가 ì—†ê² ì§€ë§Œ..ã…Ž)
메모리 ë‚비를 요로코롬 줄였답니다.^^*
ë§Žì�´ 줄ì�¸ëŒ€ì‹ ì—� ì—°ì‚°ì�´ 좀 늘어난 듯 하지만.. ì›�ì²´ ì›�본ì�´ 메모리 ë‚비ì�˜ 회심작..;;; ì�´ë‹¤ 보니..ã…Ž
ì•„ì•„ 메모리 관리는 너무 힘들엇..ã… .ã…œ ì €ë²ˆ 소스ì—�서 발견ë�˜ì§€ 않았ë�˜ ë¬¸ì œì �ì�´ 있어 그것 ì—시 ìˆ˜ì •í•˜ì˜€ìŠµë‹ˆë‹¤.
잘못ë�œ 메모리 ì ‘ê·¼ì˜¤ë¥˜..ã… .ã…œ 넘 찾기 힘들다는.ã…Ž
ë§Žì�´ 줄ì�¸ëŒ€ì‹ ì—� ì—°ì‚°ì�´ 좀 늘어난 듯 하지만.. ì›�ì²´ ì›�본ì�´ 메모리 ë‚비ì�˜ 회심작..;;; ì�´ë‹¤ 보니..ã…Ž
ì•„ì•„ 메모리 관리는 너무 힘들엇..ã… .ã…œ ì €ë²ˆ 소스ì—�서 발견ë�˜ì§€ 않았ë�˜ ë¬¸ì œì �ì�´ 있어 그것 ì—시 ìˆ˜ì •í•˜ì˜€ìŠµë‹ˆë‹¤.
잘못ë�œ 메모리 ì ‘ê·¼ì˜¤ë¥˜..ã… .ã…œ 넘 찾기 힘들다는.ã…Ž
소스 ¶
main.cpp ¶
~cpp
#include "bus_and_man.h"
#include <iostream>
using namespace std;
void Set_memory();
void Call_act();
road *cau_road;
void main()
{
cout << "시스템� 초기화 합니다.\n";
Set_memory();
Call_act();
}
void Set_memory()
{
cau_road=new road(3000);
cau_road->Build("ì •ë¬¸",5,0,5);
cau_road->Build("issac",10,700,5);
cau_road->Build("시장",3,1000,5);
cau_road->Build("중문",10,1320,5);
cau_road->Build("곰�리",10,1700,5);
cau_road->Build("공대건물",2,2100,5);
cau_road->Build("주차장",30,2750,5);
cau_road->Build("후문",10,2999,5);
}
void Call_act()
{
for (register int i=1; i<20; ++i)
{
for (register int j=0; j<5; ++j)
{
cau_road->Act();
cout << "\n";
system("PAUSE");
cout << "\n";
}
cau_road->Start_car(i,20,0,80);
}
delete cau_road;
}
bus_and_man.cpp ¶
~cpp
//버스 위치.
//승�
//하는 �
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "bus_and_man.h"
using namespace std;
const int MOVE=1;
const int STOP=0;
man::man(int input_from, int input_to)
{
from=input_from;
to=input_to;
}
man::~man()
{
}
int man::where_go()
{
return to;
}
station::station(int input_station_number, char *input_name, int input_percent, int input_size )
{
strcpy(name,input_name);
percent=input_percent;
station_size=input_size;
number_man=0;
station_number=input_station_number;
humans=new man*[station_size];
for (register int i=0; i<station_size; ++i)
humans[i]=0;
cout << name << "ì—ì�´ ìƒ�성ë�˜ì—ˆìŠµë‹ˆë‹¤.\n";
}
station::~station()
{
for (register int i=0; i<station_size; ++i)
{
if (0!=humans[i])
delete humans[i];
}
delete humans;
cout << name << "ì—ì�´ 파괴ë�˜ì—ˆìŠµë‹ˆë‹¤.\n";
}
void station::make_people(int numbers_station)
{
if (station_size!=number_man && numbers_station!=station_number+1)
{
if (0==rand()%percent)
{
humans[number_man]=new man(station_number,station_number+rand()%(numbers_station-station_number-1)+1);
++number_man;
cout << name << "ì—ì—� 사람ì�´ 한명 ìƒ�성ë�˜ì—ˆìŠµë‹ˆë‹¤.\n";
}
}
}
man* station::out_people()
{
if (0==number_man)
return 0;
man *temp_man=humans[0];
humans[0]=0;
for (register int i=1; i<number_man; ++i)
{
humans[i-1]=humans[i];
humans[i]=0;
}
--number_man;
return temp_man;
}
int station::where_here()
{
return station_number;
}
void station::act(int numbers_station)
{
make_people(numbers_station);
}
void bus::move(road *in_road)
{
int in_station=0;
int temp_where=where;
temp_where=in_road->car_move(&in_station, speed, where);
if (1==in_station)
state=STOP;
if (-1==temp_where)
in_road->car_stop(where);
else
{
where=temp_where;
cout << number << "번 버스가 " << where << "로 ��하였습니다.\n";
}
}
void bus::stop(station *in_station, road* in_road)
{
man*in_people=in_station->out_people();
if (0!=in_people)
{
humans[number_man]=in_people;
++number_man;
cout << number << "번 버스가 승�� 승차하였습니다.\n";
}
int suched=0;
for (register int i=0; i<number_man; ++i)
{
if (in_station->where_here()==humans[i]->where_go())
{
delete humans[i];
humans[i]=0;
for (register int j=i+1; j<number_man; ++j)
{
humans[j-1]=humans[j];
humans[j]=0;
}
--number_man;
suched=1;
cout << number << "번 버스가 승�� 하차하였습니다.\n";
}
}
if (0==suched && 0==in_people)
{
state=MOVE;
move(in_road);
}
}
bus::bus(int input_number, int input_size, int input_where, int input_speed)
{
number=input_number;
bus_size=input_size;
humans=new man*[bus_size];
state=STOP;
where=input_where;
number_man=0;
speed=input_speed;
for (register int i=0; i<bus_size; ++i)
humans[i]=0;
cout << number << "호차가 �성�었습니다.\n";
}
bus::~bus()
{
for (register int i=0; i<bus_size; ++i)
{
if (0!=humans[i])
delete humans[i];
}
delete humans;
cout << number << "호차가 파괴�었습니다.\n";
}
void bus::act(station* in_station, road* in_road)
{
if (STOP==state)
stop(in_station, in_road);
else
move(in_road);
}
road::road (int input_long)
{
srand(time(NULL));
road_long=input_long;
number_station=0;
cars=new bus*[road_long];
buildings=new station*[road_long];
for (register int i=0; i<road_long; ++i)
{
cars[i]=0;
buildings[i]=0;
}
cout << "�로1개가 �성�었습니다.\n";
}
road::~road()
{
for (register int i=0; i<road_long; ++i)
{
if (0!=buildings[i])
delete buildings[i];
if (0!=cars[i])
delete cars[i];
}
delete cars;
delete buildings;
cout << "�로1개가 파괴�었습니다.\n";
}
int road::Build(char *input_name, int input_percent, int where, int input_size)
{
if (0!=buildings[where])
{
cout << "ì—ì�„ ìƒ�성하는ë�° 실패하였습니다.\n";
return -1;
}
buildings[where]=new station(number_station,input_name,input_percent,input_size);
++number_station;
return 0;
}
int road::Start_car(int input_number, int input_size, int input_where, int input_speed)
{
if (0!=cars[input_where])
{
cout << "차를 �성하는� 실패하였습니다.\n";
return -1;
}
cars[input_where]=new bus(input_number,input_size,input_where, input_speed);
return 0;
}
void road::Act()
{
for (register int i=road_long-1; i>=0; --i)
{
if (0!=buildings[i])
buildings[i]->act(number_station);
if (0!=cars[i])
cars[i]->act(buildings[i],this);
}
}
int road::car_move(int *state, int speed, int where)
{
register int i;
for (i=where+1; i<=where+speed; ++i)
{
if (i>=road_long)
return -1;
if (0!=cars[i])
break;
if (0!=buildings[i])
{
*state=1;
++i;
break;
}
}
if (i-1!=where)
{
cars[i-1]=cars[where];
cars[where]=0;
}
return i-1;
}
void road::car_stop(int where)
{
delete cars[where];
cars[where]=0;
}
bus_and_man.h ¶
~cpp
class man;
class station;
class bus;
class road;
class man{
private:
int from;
int to;
public:
man(int input_from, int input_to);
~man();
int where_go();
};
class station{
private:
char name[256];
int station_number;
int percent;
int station_size;
int number_man;
man **humans;
void make_people(int);
public:
station(int, char*, int, int);
~station();
man* out_people();
int where_here();
void act(int);
};
class bus{
private:
int number;
int bus_size;
int state;
int where;
man **humans;
int number_man;
int speed;
void move(road*);
void stop(station*, road*);
public:
bus(int , int , int , int );
~bus();
void act(station* , road* );
};
class road{
private:
int road_long;
int number_station;
bus **cars;
station **buildings;
public:
road (int );
~road();
int Build(char*, int , int, int );
int Start_car(int , int , int , int );
void Act();
int car_move(int*, int , int );
void car_stop(int);
};
1ì°¨ ìˆ˜ì •ë²„ì „ 소스 ¶
main.cpp ¶
~cpp
#include "bus_and_man.h"
#include <iostream>
using namespace std;
void Set_memory();
void Call_act();
road *cau_road;
void main()
{
cout << "시스템� 초기화 합니다.\n";
Set_memory();
Call_act();
}
void Set_memory()
{
cau_road=new road(3000);
cau_road->Build("ì •ë¬¸",5,0,5);
cau_road->Build("issac",10,700,5);
cau_road->Build("시장",3,1000,5);
cau_road->Build("중문",10,1320,5);
cau_road->Build("곰�리",10,1700,5);
cau_road->Build("공대건물",2,2100,5);
cau_road->Build("주차장",30,2750,5);
cau_road->Build("후문",10,2999,5);
}
void Call_act()
{
for (register int i=1; i<20; ++i)
{
for (register int j=0; j<5; ++j)
{
cau_road->Act();
cout << "\n";
system("PAUSE");
cout << "\n";
}
cau_road->Start_car(i,20,0,80);
}
delete cau_road;
}
bus_and_man.cpp ¶
~cpp
//버스 위치.
//승�
//하는 �
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "bus_and_man.h"
using namespace std;
const int MOVE=1;
const int STOP=0;
man::man(int input_from, int input_to)
{
from=input_from;
to=input_to;
}
man::~man()
{
}
int man::where_go()
{
return to;
}
station::station(int input_station_number, char *input_name, int input_percent, int input_size, int input_where)
{
strcpy(name,input_name);
percent=input_percent;
station_size=input_size;
number_man=0;
station_number=input_station_number;
where=input_where;
humans=new man*[station_size];
for (register int i=0; i<station_size; ++i)
humans[i]=0;
cout << name << "ì—ì�´ ìƒ�성ë�˜ì—ˆìŠµë‹ˆë‹¤.\n";
}
station::~station()
{
for (register int i=0; i<station_size; ++i)
{
if (0!=humans[i])
delete humans[i];
}
delete humans;
cout << name << "ì—ì�´ 파괴ë�˜ì—ˆìŠµë‹ˆë‹¤.\n";
}
void station::make_people(int numbers_station)
{
if (station_size!=number_man && numbers_station!=station_number+1)
{
if (0==rand()%percent)
{
humans[number_man]=new man(station_number,station_number+rand()%(numbers_station-station_number-1)+1);
++number_man;
cout << name << "ì—ì—� 사람ì�´ 한명 ìƒ�성ë�˜ì—ˆìŠµë‹ˆë‹¤.\n";
}
}
}
man* station::out_people()
{
if (0==number_man)
return 0;
man *temp_man=humans[0];
humans[0]=0;
for (register int i=1; i<number_man; ++i)
{
humans[i-1]=humans[i];
humans[i]=0;
}
--number_man;
return temp_man;
}
int station::where_here()
{
return station_number;
}
void station::act(int numbers_station)
{
make_people(numbers_station);
}
int station::where_am_i()
{
return where;
}
void bus::move(road *in_road)
{
int in_station=0;
int temp_where=where;
temp_where=in_road->car_move(&in_station, speed, where);
if (1==in_station)
state=STOP;
if (-1==temp_where)
in_road->car_stop(number);
else
{
where=temp_where;
cout << number << "번 버스가 " << where << "로 ��하였습니다.\n";
}
}
void bus::stop(station *in_station, road* in_road)
{
man*in_people=0;
if (number_man<bus_size)
{
in_people=in_station->out_people();
if (0!=in_people)
{
humans[number_man]=in_people;
++number_man;
cout << number << "번 버스가 승�� 승차하였습니다.\n";
}
}
int suched=0;
for (register int i=0; i<number_man; ++i)
{
if (in_station->where_here()==humans[i]->where_go())
{
delete humans[i];
humans[i]=0;
for (register int j=i+1; j<number_man; ++j)
{
humans[j-1]=humans[j];
humans[j]=0;
}
--number_man;
suched=1;
cout << number << "번 버스가 승�� 하차하였습니다. (잔여승�수 : " << number_man << " ) \n";
break;
}
}
if (0==suched && 0==in_people)
{
state=MOVE;
move(in_road);
}
}
bus::bus(int input_number, int input_size, int input_where, int input_speed)
{
number=input_number;
bus_size=input_size;
humans=new man*[bus_size];
state=STOP;
where=input_where;
number_man=0;
speed=input_speed;
for (register int i=0; i<bus_size; ++i)
humans[i]=0;
cout << number << "호차가 �성�었습니다.\n";
}
bus::~bus()
{
for (register int i=0; i<bus_size; ++i)
{
if (0!=humans[i])
delete humans[i];
}
delete humans;
cout << number << "호차가 파괴�었습니다.\n";
}
void bus::act(station* in_station, road* in_road)
{
if (STOP==state)
stop(in_station, in_road);
else
move(in_road);
}
int bus::where_am_i()
{
return where;
}
int bus::what_number()
{
return number;
}
road::road (int input_long)
{
srand(time(NULL));
road_long=input_long;
number_station=0;
number_bus=0;
cars=NULL;
buildings=NULL;
cout << "�로1개가 �성�었습니다.\n";
}
road::~road()
{
for (register int i=0; i<number_bus; ++i)
delete cars[i];
for (register int i=0; i<number_station; ++i)
delete buildings[i];
if (cars!=NULL)
delete cars;
if (buildings!=NULL)
delete buildings;
cout << "�로1개가 파괴�었습니다.\n";
}
int road::Build(char *input_name, int input_percent, int where, int input_size)
{
if (0!=number_station)
{
for (register int i=0; i<number_station; ++i)
{
if (buildings[i]->where_am_i()==where)
{
cout << "ì—ì�„ ìƒ�성하는ë�° 실패하였습니다.\n";
return -1;
}
}
station** temp=new station*[number_station+1];
for (register int i=0; i<number_station; ++i)
{
temp[i]=buildings[i];
}
delete buildings;
buildings=temp;
buildings[i]=new station(number_station,input_name,input_percent,input_size,where);
}
else
{
buildings=new station*;
buildings[0]=new station(number_station,input_name,input_percent,input_size,where);
}
++number_station;
return 0;
}
int road::Start_car( int input_number, int input_size, int input_where, int input_speed)
{
if (0!=number_bus)
{
for (register int i=0; i<number_bus; ++i)
{
if (cars[i]->where_am_i()==input_where)
{
cout << "차를 �성하는� 실패하였습니다.\n";
return -1;
}
}
bus** temp=new bus*[number_bus+1];
for (register int i=0; i<number_bus; ++i)
{
temp[i]=cars[i];
}
delete cars;
cars=temp;
cars[number_bus]=new bus(input_number,input_size,input_where, input_speed);
}
else
{
cars=new bus*;
cars[0]=new bus(input_number,input_size,input_where, input_speed);
}
++number_bus;
return 0;
}
void road::Act()
{
for (register int i=0; i<number_station; ++i)
buildings[i]->act(number_station);
for (register int i=0; i<number_bus; ++i)
{
for (register int j=0; j<number_station; ++j)
{
if (buildings[j]->where_am_i()==cars[i]->where_am_i())
{
cars[i]->act(buildings[j],this);
break;
}
}
if (j==number_station)
cars[i]->act(0,this);
}
}
int road::car_move(int *state, int speed, int where)
{
int temp_where=where+speed;
for (register int i=0; i<number_station; ++i)
{
if (where<buildings[i]->where_am_i() && temp_where>=buildings[i]->where_am_i())
{
temp_where=buildings[i]->where_am_i();
*state=1;
}
}
for (register int i=0; i<number_bus; ++i)
{
if (where<cars[i]->where_am_i() && temp_where>=cars[i]->where_am_i())
{
temp_where=cars[i]->where_am_i();
*state=0;
}
}
if (temp_where>=road_long)
return -1;
if (*state==0)
return temp_where-1;
else
return temp_where;
}
void road::car_stop(int number)
{
bus** temp=new bus*[number_bus-1];
int swit=0;
for (register int i=0; i<number_bus; ++i)
{
if (0==swit)
{
if (cars[i]->what_number()==number)
{
delete cars[i];
swit=1;
}
else
temp[i]=cars[i];
}
else
temp[i-1]=cars[i];
}
delete cars;
cars=temp;
--number_bus;
}
bus_and_man.h ¶
~cpp
class man;
class station;
class bus;
class road;
class man{
private:
int from;
int to;
public:
man(int input_from, int input_to);
~man();
int where_go();
};
class station{
private:
char name[256];
int station_number;
int percent;
int station_size;
int number_man;
int where;
man **humans;
void make_people(int);
public:
station(int, char*, int, int, int);
~station();
man* out_people();
int where_here();
void act(int);
int where_am_i();
};
class bus{
private:
int number;
int bus_size;
int state;
int where;
man **humans;
int number_man;
int speed;
void move(road*);
void stop(station*, road*);
public:
bus(int , int , int , int );
~bus();
void act(station* , road* );
int where_am_i();
int what_number();
};
class road{
private:
int road_long;
int number_station;
int number_bus;
bus **cars;
station **buildings;
public:
road (int );
~road();
int Build(char*, int , int, int );
int Start_car( int, int , int , int );
void Act();
int car_move(int*, int , int );
void car_stop(int);
};










