27-1-¸¶.ÀÚµ¿Â÷ Ŭ·¡½º

OOPÀÇ Á¤º¸ ÀºÆó ±â´ÉÀ» ¼³¸íÇϱâ À§ÇØ ´Ü°ñ·Î µîÀåÇÏ´Â »ç¹°ÀÌ ¹Ù·Î ÀÚµ¿Â÷À̸ç ÀÌ Ã¥µµ ¾Õ¿¡¼­ ÀÚµ¿Â÷¸¦ ¿¹·Î µé¾î ¼³¸íÇß´Ù. ÀÚµ¿Â÷ÀÇ ±â´ÉµéÀº ´ëºÎºÐÀÇ »ç¶÷µéÀÌ Àß ¾Ë°í ÀÖÀ¸¸ç ³»ºÎÀÇ º¹ÀâÇÑ ±¸Á¶¿¡ ºñÇØ °ø°³µÈ ÀÎÅÍÆäÀ̽º°¡ Àû¾î Á¤º¸ ÀºÆó ±â´ÉÀ» ¼³¸íÇϱ⿡ ÀûÀýÇϱ⠶§¹®ÀÌ´Ù. C++ÀÇ Å¬·¡½º´Â ½Ç¼¼°èÀÇ ¸ðµç »ç¹°À» ´Ù Ç¥ÇöÇÒ ¼ö Àִµ¥ °ú¿¬ ÀÚµ¿Â÷¸¦ ¾î¶»°Ô Ç¥ÇöÇÏ´ÂÁö ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

Ç¥Çö·ÂÀÌ ¼¶¼¼ÇÏ°í ¿ë·®¿¡ »ó°ü¾øÀÌ Ãß»óÈ­¸¦ ÇÑ´Ù¸é ½ÇÁ¦ ÀÚµ¿Â÷¿Í °ÅÀÇ ¶È°°Àº ÀÚµ¿Â÷ Ŭ·¡½º¸¦ ¸¸µé¾î »ç½ÇÀûÀ¸·Î ¹¦»çÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ·¸°Ô ÇÏÀÚ¸é ¿¹Á¦°¡ ³Ê¹« Ä¿Áö°í ÄÜ¼Ö È¯°æÀÇ Ç¥Çö·Âµµ ÃæºÐÇÏÁö ¾ÊÀ¸¹Ç·Î °³³äÀûÀÎ ÀÚµ¿Â÷¸¸ ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ÀÚµ¿Â÷ ¹® ¿­±â, ½Ãµ¿ °É±â, ±ô¹ÚÀÌ ³Ö±â µûÀ§´Â ¹«½ÃÇϰí ÁÖÇà ±â´É¸¸ Ç¥ÇöÇϱâ·Î ÇÑ´Ù.

 

¿¹ Á¦ : CarObject

#include <Turboc.h>

 

class Car

{

private:

     int Gear;

     int Angle;

     int Rpm;

 

public:

     Car() { Gear=0; Angle=0; Rpm=0; }

     void ChangeGear(int aGear) {

          if (aGear >= 0 && aGear <= 6) {

              Gear=aGear;

          }

     }

     void RotateWheel(int Delta) {

          int tAngle=Angle+Delta;

          if (tAngle >= -45 && tAngle <= 45) {

              Angle=tAngle;

          }

     }

     void Accel() {

          Rpm=min(Rpm+100,3000);

     }

     void Break() {

          Rpm=max(Rpm-500,0);

     }

     void Run() {

          int Speed;

          char Mes[128];

          gotoxy(10,12);

          if (Gear == 0) {

              puts("¸ÕÀú 1~6۸¦ ´­·¯ ±â¾î¸¦ ³ÖÀ¸½Ã¿À           ");

              return;

          }

          if (Gear == 6) {

              Speed=Rpm/100;

          } else {

              Speed=Gear*Rpm/100;

          }

          sprintf(Mes,"%dÀÇ ¼Óµµ·Î %sÂÊ %dµµ ¹æÇâÀ¸·Î %sÁøÁß      ",

              abs(Speed),(Angle >= 0 ? "¿À¸¥":"¿Þ"),abs(Angle),

              (Gear==6 ? "ÈÄ":"Àü"));

          puts(Mes);

     }

};

 

void main()

{

     Car C;

     int ch;

 

     for(;;) {

          gotoxy(10,10);

          printf("1~5:±â¾î º¯¼Ó, 6:ÈÄÁø ±â¾î, 0:±â¾î Á߸³");

          gotoxy(10,11);

          printf("À§:¾×¼¿, ¾Æ·¡:ºê·¹ÀÌÅ©, Á¿ì:ÇÚµé, Q:Á¾·á");

          if (kbhit()) ch=getch();

          if (ch == 0xE0 || ch == 0) {

              ch=getch();

              switch (ch) {

              case 75:

                   C.RotateWheel(-5);

                   break;

              case 77:

                   C.RotateWheel(5);

                   break;

              case 72:

                   C.Accel();

                   break;

              case 80:

                   C.Break();

                   break;

              }

          } else {

              if (ch >= '0' && ch <= '6') {

                   C.ChangeGear(ch-'0');

              } else if (ch == 'Q' || ch == 'q') {

                   exit(0);

              }

          }

          C.Run();

          delay(10);

     }

}

 

¼Ó¼ºÀ¸·Î Gear, ¾Õ ¹ÙÄûÀÇ °¢µµÀÎ Angle, ¿£ÁøÀÇ È¸Àü¼öÀÎ Rpm¸¸ Æ÷ÇÔÇßÀ¸¸ç ÀÌ ¼Ó¼ºµéÀº Ŭ·¡½ºÀÇ ¸â¹ö º¯¼ö·Î ¼±¾ðµÈ´Ù. »ý¼ºÀÚ¿¡¼­ ¸ðµç ¸â¹ö´Â 0À¸·Î ÃʱâÈ­Çß´Ù. »ç¿ëÀÚ´Â ¸ÕÀú ±â¾î¸¦ ³Ö°í ¾×¼¿À» ¹âÀ½À¸·Î½á ¿£ÁøÀ» ȸÀü½Ã۸ç ÇÚµéÀ» Á¿ì·Î ºñƲ¾î¼­ Â÷¸¦ ¿îÀüÇÑ´Ù. ¼Óµµ¸¦ ´õ ³»°í ½ÍÀ¸¸é ±â¾î¸¦ ¹Ù²Ù°í ÁÖÇàÁßÀÎ Â÷¸¦ ¸ØÃß°í ½ÍÀ» ¶§´Â ºê·¹ÀÌÅ©¸¦ ¹âÀ¸¸é µÈ´Ù. ÀÚµ¿Â÷ÀÇ ÇöÀç »óŸ¦ ³ªÅ¸³»´Â ¼¼ °¡Áö ÁÖ¿ä ¸â¹ö´Â private·Î ¼û°ÜÁ® ÀÖ¾î ¿ÜºÎ¿¡¼­ ÇԺηΠÁ¶ÀÛÇÒ ¼ö ¾øµµ·Ï º¸È£µÈ´Ù.

¿îÀüÀÚ´Â ±â¾î ½ºÆ½, ¾×¼¿, ºê·¹ÀÌÅ©, ÇÚµé µîÀÇ ¿ÜºÎ·Î °ø°³µÈ ÀåÄ¡·Î¸¸ ÀÚµ¿Â÷¸¦ Á¦¾îÇÒ ¼ö Àִµ¥ Car Ŭ·¡½º´Â ¿ÜºÎ ÀÎÅÍÆäÀ̽º¸¦ public ¸â¹ö ÇÔ¼ö·Î Á¦°øÇÑ´Ù. ±â¾î¸¦ º¯°æÇÒ ¶§´Â ChangeGear ÇÔ¼ö¸¦ È£ÃâÇϴµ¥ À¯È¿ÇÑ ±â¾î´Â 0~6±îÁö»ÓÀ̸ç ÀÌ ¿ÜÀÇ °ªÀÌ µé¾î¿À¸é ¹«½ÃÇÑ´Ù. Á¸ÀçÇÏÁöµµ ¾Ê´Â 8´Ü, 9´Ü ±â¾î¸¦ ³ÖÁö´Â ¾Ê´Â´Ù. ÀÚµ¿Â÷ÀÇ ¹æÇâÀ» º¯°æÇÏ°í ½ÍÀ» ¶§´Â RotateWheel ÇÔ¼ö¸¦ È£ÃâÇϴµ¥ Á¿ì·Î 45µµ±îÁö¸¸ °¢µµ¸¦ º¯°æÇÒ ¼ö ÀÖ¾î ¹ÙÄû°¡ µÚ·Î ȹ µ¹¾Æ°£´Ù°Å³ª ÇÏ´Â ÀÏÀº Àý´ë·Î ¾ø´Ù.

Accel°ú Break´Â ¿£Áø ȸÀü¼öÀÎ RpmÀ» Á¶Á¤Ç쵂 0~3000±îÁöÀÇ ¹üÀ§ ³»¿¡¼­¸¸ RpmÀ» Á¶ÀÛÇÑ´Ù. ¾×¼¿À» ¹âÀ» ¶§´Â ȸÀü¼ö°¡ õõÈ÷ ¿Ã¶ó°¡°í ºê·¹ÀÌÅ©¸¦ ¹âÀ» ¶§´Â ±Þ°ÝÇÏ°Ô ¶³¾îÁöµµ·Ï ÇÏ¿© Á¶±ÝÀ̳ª¸¶ »ç½Ç°¨ ÀÖ°Ô Ç¥ÇöÇß´Ù. ½ÇÁ¦ ȸÀü¼öÀÎ RpmÀº ¿ÜºÎ·ÎºÎÅÍ Ã¶ÀúÇÏ°Ô Â÷´ÜµÇ¾î ÀÖÀ¸¸ç Accel°ú Break ÇÔ¼ö´Â °ø°³µÇ¾î ÀÖÁö¸¸ ÀÚüÀûÀÎ ¿¡·¯ 󸮷Π¹«È¿ÇÑ °ªÀ» ¹æÁöÇÑ´Ù. ¿ÜºÎ¿¡¼­ ¾Æ¹«¸® ¾×¼¿À» ¿À·§µ¿¾È ¹â°í À־ ¿£Áø Çã¿ëÄ¡ ÀÌ»óÀº ´õ ¿Ã¶ó°¡Áö ¾ÊÀ¸¸ç ºê·¹ÀÌÅ©¸¦ ¾Æ¹«¸® ¼¼°Ô ¹â¾Æµµ RpmÀÌ À½¼ö°¡ µÇÁö´Â ¾Ê´Â´Ù.

Run ÇÔ¼ö´Â ±â¾î¿Í ¹ÙÄûÀÇ °¢µµ, ¿£Áø ȸÀü¼ö Á¤º¸¸¦ Á¾ÇÕÀûÀ¸·Î ÆÇ´ÜÇÏ¿© ÀÚµ¿Â÷¸¦ ¿îÇàÇÑ´Ù. ±â¾î°¡ Á߸³ÀÌ¸é ¿£Áø°ú ¹ÙÄû°¡ ¿¬°áµÇÁö ¾ÊÀº °ÍÀ¸¹Ç·Î Â÷´Â ¿îÇàÇÒ ¼ö ¾øÀ¸¸ç ÀüÁø ±â¾îÀÇ ´Ü¼ö¿¡ µû¶ó Rpm¿¡ °öÇØÁö´Â °ªÀÌ Æ²·ÁÁø´Ù. ÈÄÁø ±â¾îÀÏ °æ¿ì´Â õõÈ÷ µÚ·Î ÈÄÁøÇϵµ·Ï ÇßÀ¸¸ç ÇÚµéÀÇ ÇöÀç »óÅ¿¡ µû¶ó Á¿ì·Î ¹æÇâÀ» Ʋ±âµµ ÇÑ´Ù. ÄÜ¼Ö È¯°æ¿¡¼­ À̵¿ÁßÀÎ Â÷¸¦ ±×¸± ¼ö ¾ø¾î ÅØ½ºÆ® Ãâ·ÂÀ¸·Î ´ë½ÅÇßÁö¸¸ ±×·¡ÇÈ È¯°æÀ̶ó¸é À̵¿ÇÏ´Â Â÷¸¦ ¾ó¸¶µçÁö ±×¸± ¼ö ÀÖ´Ù.

main¿¡¼­ Car Ŭ·¡½ºÀÇ °´Ã¼ C¸¦ ¼±¾ðÇϰí Ű ÀÔ·ÂÀ» ¹Þ¾Æ ÀÚµ¿Â÷¸¦ Á¶ÀÛÇϴµ¥ Ŭ·¡½ºÀÇ ¿ÜºÎ¿¡¼­´Â °ø°³µÈ ¸â¹ö ÇÔ¼ö¸¸ È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç ÀÚµ¿Â÷ÀÇ ÁÖ¿ä ºÎǰÀ» Á÷Á¢ Á¶ÀÛÇÒ ¼ö´Â ¾ø´Ù. ÀÚµ¿Â÷°¡ ½º½º·Î¸¦ º¸È£Çϰí ÀÖÀ¸¹Ç·Î ÇÚµéÀ» °úÇÏ°Ô ºñƲ°Å³ª ¾×¼¿À» °è¼Ó ¹â°í À־ º° ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ÀÌ ¿¹Á¦¿¡¼­´Â ÀÚµ¿Â÷ °´Ã¼ Çϳª¹Û¿¡ ¾øÁö¸¸ ±æ, Àå¾Ö¹°, ¿©·¯ °³ÀÇ ÀÚµ¿Â÷¸¦ ¸¸µé¾î ¼­·Î°£ÀÇ °ü°è¸¦ Á¤ÀÇÇÏ¸é ¸ÚÁø ÀÚµ¿Â÷ °æÁÖ °ÔÀÓÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù.

ÀÌ ¿¹Á¦ÀÇ ÀÚµ¿Â÷´Â ¾ÆÁÖ ´Ü¼øÇÏ°Ô ¸ðµ¨¸µµÇ¾úÁö¸¸ ÇÁ·Î±×·¥ÀÇ Çʿ信 µû¶ó Ŭ·¡½º´Â ¾ó¸¶µçÁö ½Ç¼¼°èÀÇ »ç¹°°ú ¶È°°¾ÆÁú ¼ö ÀÖ´Ù. Â÷ ¹®Â¦µµ ´Þ ¼ö ÀÖ°í ¹é¹Ì·¯, ŸÀÌ¾î µîµµ ºÎÂøÇÒ ¼ö ÀÖÀ¸¸ç ÀüÁøÇÒ ¶§ µÚ·Î »Õ¾îÁ® ³ª¿À´Â ¹è±â °¡½ºµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. »ç½Ç ÀÌ·± ½ÄÀ̶ó¸é Ç×°ø¸ðÇÔÀ̳ª ¿ìÁÖ¼±, ·Îº¸Æ® Å层 Vµµ ¾ó¸¶µçÁö ¸¸µé ¼ö ÀÖ´Â ¼ÀÀÌ´Ù.