 ؽƮ ũ  ¸ ϰڽϴ.

ùðε..   ..

 켱 üҽ 캸,  Լ ɼ

ֹ迭, ȭǥ, ѵ ϼ ڼ ˾ƺ

 ϰڽϴ.

¸ ôٰ ñ ø ּ.

ǲ 帮ڽϴ.

׸ ʺе

"̰   ?" "ȸ.. ׳ 𸣰 .."

  ϸ ñ⸦ Ͻôµ,  ð

ּ.

.. 峡 ; ٴµ  include ʺ? .. ̷ 

ϳ ǲ 亯 帮ڽϴ.

//׸      Ʋ , ùٸ

   ֽø ϰڽϴ. ׸  Ѱ,  C

    .. Ƹ κ  

ø  ¿ ڼ  ص帮ڽϴ.//

׷ üҽ 캸 ϰڽϴ.

//////////////////////////////////////////////////////////////////
/* Snake4 ver1.0 */

//ش Ժκ//
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <dos.h>

//Լκ//
void obj(int level);
void game(int *sp,int *ep);
void death(int d);

//ȭ ǥ Ӽ  迭.//
int ground[24][80];

//Լ//
main()
{
	int level,score,energy;

	score=0;

	// ȯκ//
	for(level=0;level<6;level++) {
        clrscr();
		randomize();
		energy=999-(60*level);
		obj(level);
		game(&score,&energy);
	}
	//(^^;;;)//
	gotoxy(30,12);cprintf(" #### Finish!! #### ");
	gotoxy(29,13);cprintf(" >^===============+++ ");
	//  Լ(״Լ ƴ..)//
	death(0);
}

//迭,ǥԼ//
void obj(int level)
{
	int rock,tree,gx,gy,x,y,i;

	// ֹ(,) (Ǵ )ϴ κ//
	rock=20+(level*7);
	tree=10+(level*3);

	//ȭӼ 迭 ȭ׵θп (?) ġ ϴ κ//
	for(gy=0;gy<24;gy++) {
		for(gx=0;gx<80;gx++) {
			ground[gy][gx]=11; /* box */
		}
	}

	//ȭӼ 迭   ġ ϴ κ//
	for(gy=1;gy<23;gy++) {
		for(gx=1;gx<79;gx++) {
			ground[gy][gx]=10; /* empty */
		}
	}
	
	//ȭӼ 迭  ġ ϴ κ//
	for(i=0;i<rock;i++) {
		y=random(22);
		x=random(78);
		ground[y+1][x+1]=12; /* rock */
	}

	//ȭӼ 迭  ġ ϴ κ//
	for(i=0;i<tree;) {
		y=random(22);
		x=random(78);
		if(!(ground[y+1][x+1]==12)) {
			ground[y+1][x+1]=3; /* tree */
			i++;
		}
	}

	//ȭӼ 迭 ڵ ġ ϴ κ//
	for(i=21;i<30;) {
		y=random(23);
		x=random(79);
		if(!((ground[y+1][x+1]>10) || (ground[y+1][x+1]==3))) {
			ground[y+1][x+1]=i; /* number */
			i++;
		}
	}

	//ȭӼ 迭 Ÿ  ġ ϴ κ//
	ground[4][0]=20; /* ġ */
	ground[19][79]=31; /* Żġ */
	ground[4][1]=15; /* 첿ġ */
	ground[4][2]=10; /* ۽ տ ִ ֹ  */
	ground[4][3]=10; /* ۽ տ ִ ֹ  */
	ground[4][4]=10; /* ۽ տ ִ ֹ  */
	ground[19][78]=10; /* ۽ Żտ ִ ֹ  */
	ground[19][77]=10; /* ۽ Żտ ִ ֹ  */
	ground[19][76]=10; /* ۽ Żտ ִ ֹ  */

	//ȭ鿡  ǥϴ κ//
	for(gy=0;gy<24;gy++) {
		for(gx=0;gx<80;gx++) {
			gotoxy(gx+1,gy+1);
			if(ground[gy][gx]==15) cprintf("O");
			else if(ground[gy][gx]==10) cprintf(" ");
ڸ ̻..--; -->else if(ground[gy][gx]==11) cprintf(");
			else if(ground[gy][gx]==12) cprintf("*");
			else if(ground[gy][gx]==3) cprintf("Y");
			else if(ground[gy][gx]==20) cprintf("S");
			else if(ground[gy][gx]==31) cprintf("E");
			else if(ground[gy][gx]>20 && ground[gy][gx]<30) {
				textcolor(2);
				cprintf("%d",(ground[gy][gx]-20));
				textcolor(7);
				}
		}
	}
}

//  Լ//
void game(int *sp,int *ep)
{
	int x,y,mx,my,i,t,plus,ch,chb,tail[2][60];

	x=1;
	y=4;
	i=0;
	t=15;
	plus=1;
	ch=77;

	//ǽ۽ ǥ κ//
	gotoxy(27,25);cprintf("Score: %3d     Energy: %3d",*sp,*ep);

	getch();
	//ǹݺκ( κ..ŰԷ,ó,ǥ,̵..)//
	for(;;) {
		mx=0;
		my=0;

		//Ű ȴ ˾ƺ κ//
		if(kbhit()) {
			chb=ch;
			ch=getch();
			if(ch==0) {
				ch=getch();
			}
		}
		
		//Űóκ//
		switch(ch) {
			case (0x48):
				my--;
				break;
			case (0x50):
				my++;
				break;
			case (0x4d):
				mx++;
				break;
			case (0x4b):
				mx--;
				break;
			case (0x1b):
				death(0);
			default:
				ch=chb;
				switch(ch) {
					case (0x48):
						my--;
						break;
					case (0x50):
						my++;
						break;
					case (0x4d):
						mx++;
						break;
					case (0x4b):
						mx--;
						break;
				}
		}

		// ϴ κ//
		tail[0][i]=x;
		tail[1][i]=y;

		i++;

		if(i==t) {
			ground[ (tail[1][i-i]) ][ (tail[0][i-i]) ]=10;
			gotoxy( (tail[0][i-i])+1 , (tail[1][i-i])+1 );cprintf(" ");
			for(i=1;i<t;i++) {
				tail[0][i-1]=tail[0][i];
				tail[1][i-1]=tail[1][i];
			}
			i=t-1;
		}
		
		// ̵Ұ ֹ ִ ˾ƺ óϴ κ//
		if(ground[y+my][x+mx]>10 && ground[y+my][x+mx]<21) death(1);
		else if(ground[y+my][x+mx]==3) {// ִ ˾ƺ óϴ κ//
			gotoxy(x+mx+1,y+my+1);cprintf("O");
			ground[y+my][x+mx]=15;
			(*sp)-=20;
			(*ep)-=21;
		}
		else if(ground[y+my][x+mx]==31) {//Ż ִ ˾ƺ óϴ κ//
			if(plus==10) goto finish;
			else death(1);
		}
		else if(ground[y+my][x+mx]==10) {// ִ ˾ƺ óϴ κ//
			gotoxy(x+mx+1,y+my+1);cprintf("O");
			ground[y+my][x+mx]=15;
			(*ep)--;
		}
		//ڰ ִ ˾ƺ óϴ κ//
		else if((ground[y+my][x+mx]>20) && (ground[y+my][x+mx]<30)) {
			// ڰ  ´  ˾ƺ óϴ κ//
			if((ground[y+my][x+mx]-20)==plus) {
			gotoxy(x+mx+1,y+my+1);cprintf("O");
			(*ep)--;
			plus++;
			t+=(ground[y+my][x+mx]-20);
			(*sp)+=(ground[y+my][x+mx]-20);
			ground[y+my][x+mx]=15;
			}
			else death(1);
		}
		//Ÿ óκ//
		x+=mx;
		y+=my;
		if(!((*ep)>0)) death(1);
		gotoxy(27,25);cprintf("Score: %3d     Energy: %3d",*sp,*ep);
		delay(1200);
	}
	//  óϴ κ//
	finish:
	gotoxy(36,12);cprintf(" Finish!! ");
	(*sp)+=30;
	getch();
}

//  Լ//
void death(int d)
{
	char ch;

	//׾  , ϱȾ   ˾ƺ óϴ κ//
	switch(d) {
		//׾  óϴ κ//
		case 1:
			gotoxy(32,12);cprintf(" ## Game Over.. ## ");
			ch=getch();
			if(ch==0) {
				getch();
			}
		//, ѹ  , óϴ κ, ޼  κ//
		case 0:
			gotoxy(22,14);cprintf(" Do you want start new game? (Y/N) ");
			for (;ch!=100;) {
				ch=getch();
				switch(toupper(ch)) {
					case 'Y':
						main();
					case 'N':
						ch=100;
						break;
					default:
						gotoxy(50,16);cprintf(" (Y/N) ");
				}
			}
			clrscr();
			gotoxy(34,2);cprintf("Snake4 ver1.0");
			gotoxy(30,3);cprintf("Make by Kim Byung Jin.");
			gotoxy(47,5);cprintf("2.19");
			getch();
			exit(0);
	}
}

////////////////////////////////////////////////////////////////////

.. ̹´ ⼭ ~

üҽ  ôµ ׸  ʴٴ   е ǲ

 Ƹϴٴ е ǲϴ.   .

¿  Լ Ӽӵ ĵ帱´..^^

׷  м غñ..

////////////////////////////////////////////////////////////////////

## ¿ ##
gotoxy()Լ,clrscr()Լ,exit()Լ,delay()Լ,random()Լ

randomize()Լ,kbhit()Լ,getch()Լ ؼ ˾ƺ

ϰڽϴ.
