# include & ltgraphics.h & gt
# include & ltstdlib.h & gt
# include & ltdos.h & gt/* 가 참조하는 라이브러리 함수 */
# 왼쪽 0x4b00 정의
# 오른쪽 0x4d00 정의
# 0x5000 아래로 정의
# 최대 0x4800 으로 정의
# defineesc0x011b/* 매크로 정의 키 이름 */
# N 200 정의
Int I, 키
Int 레벨 /* 게임 등급 */
Int 점수 = 0; /* 점수 */
Int gamespeed/* 게임 속도 */
구조식품
{
Int x;; /* 음식 가로좌표 */
Int y;; /* 음식의 세로좌표 */
Int yes/* 음식 변수가 나타날지 결정합니다 */
} 음식 /* 음식의 구조 */
구조 뱀
{
Int x [n];
Int y [n];
Int 노드 /* 뱀의 매듭 수 */
Int 방향 /* 뱀의 이동 방향 */
Int life/* 뱀의 생명, 0 은 살아있다, 1 은 죽었다 */
} 뱀; /* 뱀의 구조 */
Void choice levle (void) : /* 게임 레벨 선택 */
Voidinit (void); /* 그래픽 드라이버 */
Void Close (유효하지 않음); /* 차트 끝 */
Void DRAW (유효하지 않음); /* 게임 영역 */
Void gameover (void); /* 게임 끝내기 */
Void 게임 (void); /* 게임을 하는 구체적인 절차 */
Void PrScore(void);) : /* 출력 결과 */
/* 주 함수 */
잘못된 탐색기 (잘못된 탐색기)
{
Init (); /* 그래픽 드라이버 */
Choiceleve (); /* 게임 레벨 선택 */
Draw (); /* 게임 영역 */
게임성 (); /* 게임을 하는 구체적인 절차 */
닫기 (); /* 차트 끝 */
}
/* 그래픽 드라이버 */
Void 초기화 (void)
{
Int gd=DETECT, GM;
Initgraph (& Gd, & ampgm, "\ \ 터보 2"); /* 그래픽 시스템 초기화 */
Cleardevice (); /* 그래픽 인터페이스 지우기 */
}
/* 게임 레벨 선택 */
유효하지 않은 선택 값 (유효하지 않음)
{문자
이름 [20]; Setcolor (노란색); Settextstyle (0,0,6); Outtextxy( 150, 150, "뱀"); Setcolor (녹색); Settextstyle (0,0,1); Outtextxy (200,250, "제발
영어 이름을 넣으십시오: "); Outtextxy(200, 270, "선택 레벨
1-9. "); Outtextxy (300,320, "이름: 양자용"); /* 제조업체 이름 *
/outtextxy (300,350, "번호: 0902060226"); /* 프로듀서 학생증 *
/outtextxy (300,380, "범주: 컴퓨터 과학
0602 "); /* 생산자 클래스 */getch (); Printf ("푸틴, 제발
이름: "); 가져오기 (이름); Printf ("선택하십시오
Levle: "); Scanf("%d ",& 수준); Gamespeed = 100000-400 * 레벨 -300 * 레벨 * 레벨; If (레벨 > 9 | | 레벨<1) {cleardevice ();
/* 그래픽 인터페이스 지우기 */setcolor (노란색); /* 글꼴 색상 설정 */settextstyle (0,0,2);
/* 글꼴 유형 설정 */outtextxy (150,200, "레벨 입력 오류");
/* 텍스트 표시 */getch (); 레벨 =1; }
}
유효하지 않은 도면 (유효하지 않은 도면)
{cleardevice (); /* 화면 정리 */setcolor (2); Setlinestyle(SOLID_LINE, 0, thick _ width); /* 선종류 설정 */rectangle (45,45,465,325); }
/* 게임을 하는 구체적인 절차 */
잘못된 게임 (void)
{setcolor (5); Setlinestyle(SOLID_LINE, 0, thick _ width); /*
선종류 설정 */randomize (); /* 난수 생성기 */food.yes =1; /* 1 새로운 음식이 나타나야 한다는 것을 의미하고, 0 은 음식이 이미 존재한다는 것을 의미합니다. *
/snake.life = 0; /* alive */snake.direction =1; /* 오른쪽 방향 */snake.x [0] = 320;
Snake.y [0] = 240; /* 뱀 머리 */뱀. x [1] = 330; Snake.y [1] = 240;
/* 두 번째 뱀의 위치 */snake.node = 3; /* 섹션 수 */prscore (); /* 출력 점수 */while( 1)/* 게임을 반복할 수 있습니다. ESC 키를 누릅니다.
빔 */{while (! Khit ())/* 뱀이 키를 누르지 않고 움직인다 */{if(food.yes== 1)/* 새로운 음식이 나타나야 한다 *
/{food.x = rand ()% 360+70; Food.y = rand ()% 250+60; 그리고 (food.x% 10! =0)/* 음식이 무작위로 나타난 후,
뱀이 */food.x++; 그리고 (food.y% 10! = 0) food.y++; Food.yes = 0;
/* 화면에 음식이 있어요 */}
If(food.yes==0)/* 화면에 음식이 있으면 */
{
Setcolor (녹색);
직사각형 (food.x, food.y, food.x+ 10, food.y-10);
}
For (I = snake.node-1; 나>0; 나-)/* 뱀의 모든 부분이 앞으로 움직인다 */
{
Snake.x [I] = snake.x [I-1];
Snake.y [I] = snake.y [I-1];
}
/* 1, 2,3,4 는 좌우 위아래를 의미하며, 뱀의 머리는 이 컨트롤을 통해 움직일 수 있습니다. */
스위치 (뱀 방향)
{
케이스1:snake.x [0]+=10; 깨뜨리다
사례 2: snake.x [0]-=10; 깨뜨리다
사례 3: snake.y [0]-=10; 깨뜨리다
사례 4: snake.y [0]+=10; 깨뜨리다
}
For(I = 3;; 나 & ltsnake. 노드; I++)/* 뱀의 4 절에서 자신을 맞혔는지 판단한다. 뱀의 머리에는 두 개의 섹션이 있고, 3 절은 몸을 돌릴 수 없기 때문이다. */
{
If (snake.x [I] = = snake.x [0] & & ampsnake.y[i]==snake.y[0])
{
Gameover (); /* 실패 표시 */
Snake.life =1; /* 뱀이 죽다 */
깨뜨리다
}
}
/* 만약 뱀의 머리가 벽에 닿으면, 뱀의 머리는 맞은편 벽에서 나온다. */
If (snake.x [0] < 50)
{snake.x [0] = 450;
/* 뱀의 머리는 왼쪽 경계를 넘어 오른쪽 경계에서 */snake.y [0] = snake.y [0]; /* 세로좌표는 변경되지 않습니다 */for (I = snake.node-1;
나>0; I-) {snake.x [I] = snake.x [I-1]; Snake.y [I] = snake.y [I-1];
/* 뱀의 다른 매듭은 앞으로 움직인다 */}
{
Setfillstyle(SOLID_FILL, 0); /* 채우기 모드 및 색상을 설정합니다. 0 은 검은색 */
Bar (50,55,455,315); /*bar 는 함수 */
}
}
기타
If (snake.x [0] > 450)
{snake.x [0] = 50;
/* 뱀의 머리가 오른쪽 경계를 넘으면 뱀의 머리는 왼쪽 경계에서 */snake.y [0] = snake.y [0]; /* 세로좌표는 변경되지 않습니다 */for(i=snake.node-
1; 나>0; I-) {snake.x [I] = snake.x [I-1]; Snake.y [I] = snake.y [I-1];
/* 뱀의 다른 매듭은 앞으로 움직인다 */}
{
Setfillstyle(SOLID_FILL, 0); /* 채우기 모드 및 색상을 설정합니다. 0 은 검은색 */
Bar (50,55,455,315); /*bar 는 함수 */
}
}
기타
If (snake.y [0] < 60)
{snake.y [0] = 320;
/* 뱀의 머리가 위쪽 경계를 넘으면 아래쪽 경계에서 */snake.x [0] = snake.x [0]; /* 가로좌표는 변경되지 않습니다 */for (I = snake.node-1;
나>0; I-) {snake.x [I] = snake.x [I-1]; Snake.y [I] = snake.y [I-1];
/* 뱀의 다른 매듭은 앞으로 움직인다 */}
{
Setfillstyle(SOLID_FILL, 0); /* 채우기 모드 및 색상을 설정합니다. 0 은 검은색 */
Bar (50,55,455,315); /*bar 는 함수 */
}
}
기타
If (snake.y [0] > (320)
{snake.y [0] = 60;
/* 뱀의 머리가 아래쪽 경계를 넘으면 위쪽 경계에서 */snake.x [0] = snake.x [0]; /* 가로좌표는 변경되지 않습니다 */for (I = snake.node-1;
나>0; I-) {snake.x [I] = snake.x [I-1]; Snake.y [I] = snake.y [I-1];
/* 뱀의 다른 매듭은 앞으로 움직인다 */}
{
Setfillstyle(SOLID_FILL, 0); /* 채우기 모드 및 색상을 설정합니다. 0 은 검은색 */
Bar (50,55,455,315); /*bar 는 함수 */
}
}
If(snake.life== 1)/* 뱀이 죽으면 내부 루프에서 뛰어내려 다시 시작 */
깨뜨리다
If (snake.x [0] = = food.x & & ampSnake.y[0]==food.y)/* 음식 먹기 */
{
Setcolor (0); /* 그림에서 음식 제거 */
직사각형 (food.x, food.y, food.x+ 10, food.y-10); /* 현재 선종류 및 색상을 사용하여 직사각형 그리기 */
Snake.x [snake.node] =-20; Snake.y [snake.node] =-20;
/* 먼저 새 세그먼트를 보이지 않는 곳에 두고 다음 루프에서 이전 세그먼트의 위치를 취한다 */
Snake.node++; /* 뱀의 몸은 긴 구간이 있다 */
Food.yes =1; /* 새 음식은 화면에 나타나야 합니다 */
점수+=10; /* 음식을 한 번 먹을 때마다 점수가 10 점 */
(점수% 100==0)
{레벨++; Gamespeed =100000-400 * 레벨-
레벨 300 * 레벨 * 레벨; /* 먹을 때마다 10 을 먹을 때마다 한 단계 올라서 */Prscore (); /* 새 점수 출력 */setcolor (노란색);
/* 글꼴 색상 설정 */settextstyle (0,0,4); /* 글꼴 유형 설정 */outtextxy (150,200, "levelup");
/* 텍스트 표시 */if (level = =10) {level =1,gamespeed =1;
레벨 300 * 레벨 * 레벨; }
지연 (6000000);
지연 (6000000);
지연 (6000000);
지연 (6000000);
지연 (6000000);
지연 (6000000);
지연 (6000000);
Bar (50,55,455,315); /*bar 는 함수 */
}
Prscore (); /* 새 점수 출력 */
}
Set color (4); /* 뱀 한 마리 그리기 */
For(I = 0;; 나 & ltsnake. 노드; I++)
직사각형 (snake.x[i], snake.y[i], snake.x[i]+ 10,
Snake.y [I]-10);
지연 (gamespeed); /* 게임 속도 제어 */
Setcolor (0);
직사각형 (snake.x[snake.node- 1], snake.y[snake.node- 1],
Snake.x [snake.node-1]+10, snake.y [snake.node-/kloc]
} /*endwhile (! Khit) */* 뱀의 마지막 단락을 검은색으로 빼라 */
If(snake.life== 1)/* 뱀이 죽으면 순환에서 뛰어내린다 */
깨뜨리다
키 = BIOS 키 (0); /* 수신 버튼 */
If (키 = = ESC)/* ESC 키를 눌러 종료 */
깨뜨리다
기타
If (키 = = up & & amp 뱀, 방향! =4)
/* 반대 방향으로 이동할지 여부를 결정합니다 */
Snake.direction = 3;
기타
If (키 = = right & & amp 뱀, 방향! =2)
Snake.direction =1;
기타
If (키 = = left & & amp 뱀, 방향! = 1)
Snake.direction = 2;
기타
If (키 = = down & & amp 뱀, 방향! =3)
Snake.direction = 4;
}/*endwhile( 1)*/
}
/* 게임 종료 */
유효하지 않은 게임 종료 (유효하지 않음)
{
Cleardevice (); /* 화면 비우기 */
Prscore ();
Setcolor (빨간색); /* 글꼴 색상 설정 */
Settextstyle (0,0,4); /* 글꼴 유형 설정 */
Outtextxy(200, 200, "게임 끝"); /* 텍스트 표시 */
Getch ();
}
/* 출력 결과 및 게임 레벨 */
유효하지 않은 PrScore (유효하지 않음)
{
Charstr1[20]; /* 문자 배열 설정 */
Setfillstyle(SOLID_FILL, 0);
가자 (50, 15, 390, 35); /* 채우기 직사각형 */
Set color (6); /* 텍스트 색상 설정 */
Settextstyle (0,0,2); /* 배열 표시 위치 설정 */
스프린트 (str1,"점수 %d 레벨 %d", 점수, 레벨); /* 배열 내용 표시 */
Outtextxy (55,20, str1);
Setcolor (노란색); /* 글꼴 색상 설정 */
Settextstyle (0,0,2); /* 글꼴 유형 설정 */
Outtextxy (250,400, "exit = ESC"); /* 텍스트 표시 */
}
무효 마감 (무효)
{
Closegraph ();
}