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

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