14-4-ȍ.Frog

°³±¸¸® °ÔÀÓÀº 80³â´ë¿¡ ¿À¶ô½Ç¿¡¼­ À¯ÇàÇÏ´ø ÃÊâ±â ¾ÆÄÉÀÌµå °ÔÀÓÀÇ ´ëÇ¥ÀÛÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. °³±¸¸® ÇÑ ¸¶¸®°¡ Â÷µµ¸¦ Áö³ª ¶Â¸ñÀ» Ÿ°í Áý±îÁö ã¾Æ°¡´Â °ÍÀÌ ¸ñÀûÀε¥ Ä¿¼­ À̵¿Å°·Î °³±¸¸®¸¸ Àß Á¶Á¤ÇÏ¸é µÈ´Ù. ¾ÆÄÉÀÌµå °ÔÀÓÀÇ ¸ð¾çÀº ´ÙÀ½°ú °°´Ù.

80³â´ë °ÔÀÓÀÌ´Ù º¸´Ï ±×·¡ÇÈÀÌ Á¶±Ý ¶³¾îÁö´Â °¨ÀÌ ÀÖ±â´Â ÇÏÁö¸¸ ½ÇÁ¦·Î °ÔÀÓÀ» ÇØ º¸¸é ³ª¸§´ë·Î Àç¹Ì´Â ÀÖ´Â ÆíÀÌ´Ù. ÀÌ °ÔÀÓÀ» ÄÜ¼Ö ¹öÀüÀ¸·Î ÀÛ¼ºÇØ º¸¾Ò´Âµ¥ ¹®ÀÚ È¯°æ¿¡¼­´Â Ç¥Çö·ÂÀÌ ³Ê¹« ºÎÁ·Çϱ⠶§¹®¿¡ ¾Ç¾î³ª ²É µîÀÇ ¿ä¼Ò´Â Á¦¿ÜÇÏ°í °£´ÜÇÏ°Ô ÀÛ¼ºÇØ º¸¾Ò´Ù.

 

¿¹ Á¦ : Frog

// ¿øº» °ÔÀÓ¿¡¼­ Á¦¿ÜµÈ ±â´É :

// 1.½Ã°£ Á¦ÇÑ, 2.°¡¶ó¾É´Â ¶Â¸ñ. 3.Ä£±¸ °³±¸¸®, 4.²É, 5.±¸¸ÛÀÇ ¾Ç¾î. 6.¾Ç¾î ¶Â¸ñ

#include <Turboc.h>

 

#define LEFT 75

#define RIGHT 77

#define UP 72

#define DOWN 80

#define ESC 27

#define MAX 256

 

// Â÷·Î - Â÷ ¶Ç´Â Å볪¹«ÀÇ »ý¼º ±ÔÄ¢

struct Lane

{

     int y;                      // y ÁÂÇ¥

     int arWait[10];              // ´ÙÀ½ Â÷ »ý¼º±îÁö ´ë±â ½Ã°£ ¸ñ·Ï

     int nFrame;                 // Â÷ÀÇ ¼Óµµ

     int Delta;                // À̵¿ ¹æÇâ

     char *Shape;               // Â÷ÀÇ ¸ð¾ç

     int nWait;                // ÇöÀç ´ë±â ½Ã°£

     int nStay;               // ´ë±â ½Ã°£ Ä«¿îÆ®

};

Lane L[10]={

     {4,{300,},18,1,"MMMMMMMMM",},

     {5,{150,150,250,150,},20,-1,"OOOOO",},

     {6,{120,120,200,},12,1,"MMMMMM",},

     {7,{200,200,400,120,},30,-1,"OOO",},

     {8,{100,70,},10,1,"MMMM",},

 

     {10,{100,300,},10,-1,"Matiz",},

     {11,{50,50,200,},3,1,"Atoz",},

     {12,{150,50,200,},5,-1,"Sonata",},

     {13,{150,200,},5,1,"Visto",},

     {14,{200,},9,-1,"Verna",},

};

 

// Â÷ ¶Ç´Â Å볪¹«ÀÇ Á¤º¸

struct Car

{

     BOOL exist;

     char *Shape;

     int x,y;

     int Delta;

     int nFrame;

     int nStay;

};

Car C[MAX];

int fx,fy;

int nFrog;

BOOL arHole[5];

 

void DrawScreen();

void clipputs(int x,int y,const char *str);

void Move(int ch);

void Die();

void MakeCar();

void MoveCar(BOOL bDraw);

void ProcessKey();

int TestDie();

 

void main()

{

     int i,j;

     int Test;

     BOOL GameOver;

 

     randomize();

     // Àüü °ÔÀÓ ·çÇÁ

     for (;1;) {

          nFrog=4;

          for (i=0;i<5;i++) arHole[i]=FALSE;

          GameOver=FALSE;

          // Â÷, ¶Â¸ñ ÃʱâÈ­. óÀ½ºÎÅÍ Â÷¿Í ¶Â¸ñÀÌ ¾î´À Á¤µµ ÀÖ¾î¾ß ÇÑ´Ù.

          for (j=0;j<MAX;j++) {

              C[j].exist=FALSE;

          }

          j=2000+random(1000);

          for (i=0;i<j;i++) {

              MakeCar();

              MoveCar(FALSE);

          }

 

          // °³±¸¸® Çϳª¿¡ ´ëÇÑ ·çÇÁ

          for (;2;) {

              DrawScreen();

              fx=30;fy=16;

 

              // °³±¸¸®°¡ Áװųª ±¸¸Û¿¡ µé¾î°¥ ¶§±îÁöÀÇ ·çÇÁ

              for (;3;) {

                   MakeCar();

                   MoveCar(TRUE);

                   ProcessKey();

                   gotoxy(fx,fy);putch('F');

 

                   Test=TestDie();

                   if (Test==1) {

                        nFrog--;

                        if (nFrog==0) {

                             gotoxy(32,20);puts(" GAME OVER ");delay(2000);

                             GameOver=TRUE;

                        }

                        break;

                   } else if (Test==2) {

                        if (arHole[0]*arHole[1]*arHole[2]*arHole[3]*arHole[4]) {

                             gotoxy(32,20);puts(" Perfect ");delay(2000);

                             GameOver=TRUE;

                        }

                        break;

                   }

                   delay(20);

              }

              if (GameOver) break;

          }

     }

}

 

// È­¸é ±×¸²

void DrawScreen()

{

     int i;

 

     clrscr();

     gotoxy(0,2);puts("############################################################");

     gotoxy(0,3);puts("######### ######### ######### ######### ######### ##########");

     gotoxy(0,9);puts("............................................................");

     gotoxy(0,15);puts("............................................................");

     for (i=0;i<5;i++) {

          if (arHole[i]) { gotoxy(i*10+9,3);putch('F'); }

     }

     gotoxy(0,17);for (i=0;i<nFrog-1;i++) putch('F');

}

 

// »õ·Î¿î Â÷, Å볪¹« »ý¼º

void MakeCar()

{

     int i,j;

 

     for (i=0;i<10;i++) {

          if (++L[i].nStay==L[i].arWait[L[i].nWait]) {

              L[i].nWait++;

              if (L[i].arWait[L[i].nWait]==0) {

                   L[i].nWait=0;

              }

              L[i].nStay=0;

              for (j=0;j<MAX;j++) {

                   if (C[j].exist==FALSE) {

                        C[j].exist=TRUE;

                        C[j].nFrame=C[j].nStay=L[i].nFrame;

                        C[j].Shape=L[i].Shape;

                        C[j].Delta=L[i].Delta;

                        C[j].y=L[i].y;

                        C[j].x=(C[j].Delta==1 ? -10:60);

                        break;

                   }

              }

          }

     }

}

 

// Â÷¿Í ¶Â¸ñ À̵¿

void MoveCar(BOOL bDraw)

{

     int j,tx;

     char tshape[32];

 

     for (j=0;j<MAX;j++) {

          if (C[j].exist == FALSE) continue;

          if (--C[j].nStay == 0) {

              C[j].nStay=C[j].nFrame;

              // ¶Â¸ñ À§¿¡ °³±¸¸®°¡ ÀÖÀ¸¸é °°ÀÌ À̵¿

              if (fy == C[j].y && fx >= C[j].x && fx < C[j].x+(int)strlen(C[j].Shape)) {

                   fx+=C[j].Delta;

              }

              C[j].x+=C[j].Delta;

              // À̵¿Çϸ鼭 ÀÌÀü ÀÚ¸®ÀÇ ÀÜ»ó Áö¿ò

              if (bDraw) {

                   if (C[j].Delta == -1) {

                        wsprintf(tshape,"%s ",C[j].Shape);

                        tx=C[j].x;

                   } else {

                        wsprintf(tshape," %s",C[j].Shape);

                        tx=C[j].x-1;

                   }

                   clipputs(tx,C[j].y,tshape);

              }

              if (C[j].x == -20 || C[j].x == 60) {

                   C[j].exist=FALSE;

              }

          }

     }

}

 

void ProcessKey()

{

     int ch;

     // °³±¸¸® À̵¿

     if (kbhit()) {

          ch=getch();

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

              ch=getch();

              switch (ch) {

              case LEFT:

              case RIGHT:

              case UP:

              case DOWN:

                   Move(ch);

                   break;

              }

          } else {

              switch (ch) {

              case ESC:

                   exit(0);

              }

          }

     }

}

 

void Move(int ch)

{

     gotoxy(fx,fy);

     if (fy == 9 || fy == 15) {

          putch('.');

     } else {

          putch(' ');

     }

     switch (ch) {

     case LEFT:

          if (fx > 0) fx--;

          break;

     case RIGHT:

          if (fx < 59) fx++;

          break;

     case UP:

          fy--;

          break;

     case DOWN:

          if (fy < 16) fy++;

          break;

     }

}

 

// Ãѵ¹ ÆÇÁ¤. 0:¾Æ¹« ÀÏ ¾øÀ½, 1:Á×À½, 2:±¸¸Û¿¡ µé¾î°¨

int TestDie()

{

     int j;

 

     // ¶Â¸ñÀ§¿¡ Ÿ°í ÀÖ´ÂÁö °Ë»ç

     if (fy >= 4 && fy <= 8) {

          for (j=0;j<MAX;j++) {

              if (C[j].exist == FALSE || C[j].y != fy) continue;

              if (fx >= C[j].x && fx < C[j].x+(int)strlen(C[j].Shape)) {

                   break;

              }

          }

          if (j == MAX) {

              Die();

              return 1;

          }

     // Â÷¿Í Ãæµ¹ ÆÇÁ¤

     } else if (fy >= 10 && fy <= 14) {

          for (j=0;j<MAX;j++) {

              if (C[j].exist == FALSE || C[j].y != fy) continue;

              if (fx >= C[j].x && fx < C[j].x+(int)strlen(C[j].Shape)) {

                   Die();

                   return 1;

              }

          }

     // ±¸¸Û¿¡ µé¾î°¬´ÂÁö °Ë»ç

     } else if (fy == 3) {

          if (fx % 10 == 9 && arHole[fx/10] == FALSE) {

              arHole[fx/10]=TRUE;

              return 2;

          } else {

              Die();

              return 1;

          }

     }

     return 0;

}

 

// ÁÂ¿ì ¿À¸¥ÂÊ Å¬¸®ÇÎ ¹®ÀÚ¿­ Ãâ·Â ÇÔ¼ö

void clipputs(int x,int y,const char *str)

{

     int len=strlen(str);

     const char *p=str;

 

     if (x < 0) {

          if (-x > len) return;

          p+=-x;

          x=0;

     }

     gotoxy(x,y);

     for (;x < 60 && *p;x++) {

          printf("%c",*p++);

     }

}

 

// »ç¸Á ó¸® - ¼¼ ¹ø ±ô¹ÚÀÓ

void Die()

{

     int i;

 

     for (i=0;i<3;i++) {

          gotoxy(fx,fy);putch(' ');

          delay(200);

          gotoxy(fx,fy);putch('F');

          delay(200);

     }

}

 

½ÇÇà ÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù. ±×·¡ÇÈÀ» ¾µ ¼ö ¾ø±â ¶§¹®¿¡ ¸ð¾çÀÌ ´Ù¼Ò º¸±â¿¡ ÁÁÁö ¾ÊÁö¸¸ ÇÊ¿äÇÑ °ÔÀÓÀÇ ³í¸®´Â ´Ù ÀÛ¼ºµÇ¾î ÀÖ´Ù.

¼Ò½º¿¡ ÁÖ¼®ÀÌ ºñ±³Àû »ó¼¼ÇÏ°Ô ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ °ÔÀÓÀº Á÷Á¢ ºÐ¼®ÇØ º¸±â ¹Ù¶õ´Ù. Á¦´ë·Î ¸¸µé¾î º¸°í ½Í¾îµµ ¹®ÀÚ È¯°æÀÇ Á¦¾àÀ¸·Î ÀÎÇØ ´õ ÀÌ»óÀÇ °³¼±ÀÌ ¾î·Á¿îµ¥ Â÷ÈÄ¿¡ ±×·¡ÇÈ È¯°æ¿¡¼­ ÀÌ °ÔÀÓÀ» ¿øº»°ú ¿ÏÀüÈ÷ ¶È°°ÀÌ ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ¿¹»Û ºñÆ®¸Ê°ú »ç¿îµå¸¦ »ç¿ëÇϸé ÀÌ °£´ÜÇØ º¸ÀÌ´Â °ÔÀÓµµ ³ª¸§´ë·Î ÃæºÐÈ÷ ÇÒ¸¸ÇÑ °ÔÀÓÀÌ µÈ´Ù.