C 언어 순환 체인 테이블 뱀 탐식 게임 실현
총체 적 사상
순환 링크 를 이용 하여 뱀 한 마리 의 좌 표를 저장 한 다음 에 gotoxy()함수(커서 를 지정 한 위치 로 지정 할 수 있 음)를 이용 하여 이때 뱀의 좌표 에 따라'@'을 출력 하고 여러 개 를 출력 하면 뱀 한 마 리 를 만 들 수 있 습 니 다.순환 링크 를 옮 겨 다 니 며 뱀의 이동 을 하고 순환 링크 의 삽입 요 소 를 뱀 이 길 어 지 는 효 과 를 낸다.다음은 각 기능 을 위 한 함수 입 니 다.
1.탐식 뱀 지도 함수 map()
2.뱀의 이동 move(),up(),left()등 함수
3.음식 food()생 성 및 음식 먹 기 eatfood()
4.뱀 이 먹 이 를 먹 으 면 길 어 지 는 효과 snake링크()함수
5.뱀의 죽음 을 판단,벽 에 부 딪 히 는 hitWall()과 자살 suicide()
1.탐식 뱀 지도 함수 map()
게임 지 도 는 닫 아야 할 영역 을 사용 합 니 다.하나의 배열 a[25][50]를 사용 하여 이 배열 을 0 으로 초기 화하 고 게임 벽의 가장자리 값 을 1 로 할당 합 니 다.배열 이 0 이면 출력 합 니 다.",배열 이 1 이면 출력"\#"을 출력 하여 지 도 를 만 듭 니 다.
코드 는 다음 과 같 습 니 다:
void map() //
{
int a[25][50] = {0};
int i,j;
for(i = 0; i < 50; i++)
{
a[0][i] = 1;
a[24][i] =1;
}
for(i = 0; i < 25; i++)
{
a[i][0] = 1;
a[i][49] =1;
}
for(i = 0; i < 25; i++)
for(j = 0; j < 50; j++)
{
if(j%50 == 0)
printf("
");
if(a[i][j] == 0)
{
printf(" ");
}
else
{
printf("#");
}
}
}
2.뱀의 이동 move(),up(),left()등 함수move()함 수 는 주로 뱀의 상하 좌우 변경 을 합 니 다.switch 함수 로 해결 합 니 다.(아래 코드 에서 ch 는 전역 변수 입 니 다)
코드 는 다음 과 같다.
void move(struct snake *p) //
{
while(1)
{
ch = getch();
switch(ch)
{
case 'W':p = up(p);break;
case 'A':p = left(p);break;
case 'D':p = right(p);break;
case 'S':p = down(p);break;
}
}
}
뱀 을 움 직 이게 하 는 것 은 바로 우리 가 주로 뱀의 좌 표를 바 꾸 는 것 이다.이때 뱀 머리 가 한 번 움 직 이면 우 리 는 gotoxy()함 수 를 이용 하여'@'을 출력 한 다음 에 뱀 꼬리 에서 출력 한다.''순환 을 따라 가면 뱀 이 움 직 이 는 효 과 를 낼 수 있 고 뱀의 상하 좌우 가 한 방향 으로 이동 할 때 단일 한 좌표 x 또는 y 를 변경 할 수 있다.그리고 변 경 된 좌 표를 순환 링크 에 저장 하면 됩 니 다.이동 함 수 는 주로 up(),left()등 이 있 습 니 다.방법 차이 가 많 지 않 기 때문에 up()함수 만 보 여 줍 니 다.코드 는 다음 과 같다.
struct snake *up(struct snake *p) //
{
int x;
int y;
x = p->pre->x; // x,y
y = p->pre->y;
while(p) // ,
{
Sleep(SNAKE_SPEED); //
y--; // ,
gotoxy(p->x,p->y); // , “ ”
printf(" ");
gotoxy(x, y); // ,"@", ,
printf("@");
suicide(p,x,y); //
p = p->next; //
p->pre->x = x; // ,
p->pre->y = y;
food(); //
eat_food(p,x,y); //
hit_wall(y); //
if(kbhit()) break; // ,
}
return p;
}
3.음식 food()생 성 및 음식 먹 기 eatfood()음식 과 음식 을 먹 으 면 음식 이 생기 면 무 작위 수 를 사용 하여 한 음식 을 만 드 는 x,y 좌 표 는 각각 전체 변수 food 에 보관 합 니 다.xy[2]배열 에서 마지막 으로 gotoxy(foodxy[0],food_xy[1])무 작위 음식 생 성
코드 는 다음 과 같다.
void food() //
{
int i;
if(!flag) // flag
{
srand( (unsigned)time( NULL ) );
for( i = 0; i < 2; i++ ) // food_(x,y)
{
food_xy[i] = rand()%24+2;
while(food_xy[0] == 1 || food_xy[0] == 25) // while
food_xy[0] = rand()%24+2; //
while(food_xy[1] >= 49 || food_xy[1] == 1)
food_xy[1] =rand()%24+2;
}
gotoxy(food_xy[0],food_xy[1]); //
printf("*");
flag = 1;
}
}
음식 먹 기 eatfood()는 뱀 머리 가 음식의 좌표 와 겹 치 는 지 판단 하고 겹 치면 뱀 이 음식 을 먹 었 음 을 나타 낸다.코드 는 다음 과 같다.
void eat_food(struct snake *p,int x, int y) // , x,y
{ //food_xy ,
if(x == food_xy[0] && y == food_xy[1]) //snake_link
{
p = snake_link(p);
flag = 0; // ,
printSnake(p);
gotoxy(8,0);
score = score + 1; //
printf("%d",score);
}
}
4.뱀 이 먹 이 를 먹 으 면 길 어 지 는 효과 snake링크()함수뱀 이 길 어 지면 뱀 이 음식 을 먹 을 때 우 리 는 음식의 좌 표를 뱀 머리 로 만 든 다음 에 다시 뱀 을 인쇄 한다.즉,뱀 이 변 하 는 효과 가 생 길 수 있 고 실질 적 으로 순환 링크 에 요 소 를 삽입 하 는 것 이다.
이렇게 음식의 좌 표를 순환 링크 에 꽂 아 뱀 이 되 는 효 과 를 얻 는 것 이다.
코드 는 다음 과 같다.
struct snake *snake_link(struct snake *p) //
{
struct snake *q;
q = (struct snake *)malloc(sizeof(struct snake)); // ,
q->x = food_xy[0]; // ,
q->y = food_xy[1];
q->pre = p->pre;
p->pre->next = q;
p->pre = q;
q->next = p;
return p;
}
5.뱀의 죽음 을 판단,벽 에 부 딪 히 는 hitWall()과 자살 suicide()벽 에 부 딪 히 면 뱀 머리의 단일 좌표 x 축 이나 y 축 이 벽의 좌표 와 같 는 지 판단 하고 같 으 면 뱀 이 벽 에 부 딪 혔 다 는 것 을 설명 한다.
코드 는 다음 과 같다.
void hit_wall(int n) // , x y , ,
{
if(ch == 'W'|| ch == 'S' )
if(n == 1 || n == 25) //
{
gotoxy(0,26);
printf(" !");
printf(" :%d",score);
exit(0);
}
if(ch == 'A'|| ch == 'D' )
if(n == 0 || n == 49)
{
gotoxy(0,26);
printf(" !");
printf(" :%d",score);
exit(0);
}
}
자살 suicide()즉,뱀 머리 가 뱀 몸 에 부 딪 혔 는 지 여 부 는 뱀 머리의 좌 표를 꺼 내 뱀 몸의 좌표 와 비교 하 는 것 이다.만약 에 같다 면 뱀 머리 가 뱀 몸 에 부 딪 혔 다 는 것 을 의미한다.본질 적 으로 순환 링크 의 값 이 일치 하고 옮 겨 다 니 는 것 이다.코드 는 다음 과 같다.
void suicide(struct snake *p, int x, int y) // ,
{
struct snake *q; // , ,
q = p;
while(q != p->next) //
{
if(p->x == x && p->y == y)
{
gotoxy(0,26);
printf(" !");
printf(" :%d",score);
exit(0);
}
else
p = p->next;
}
}
이 뱀의 기본 기능 은 이미 다 말 했 습 니 다.다음은 모든 코드 입 니 다.모든 코드 는 다음 과 같 습 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#define SNAKE_SPEED 200 //
int score = 0; //
int flag = 0; // ,0
int food_xy[2]; //
char ch; //
struct snake //
{
int x;
int y;
struct snake *next;
struct snake *pre;
};
void HideCursor()// ,
{
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
}
void gotoxy(int x, int y) // , , ( x,y x,y)
{
HideCursor();
COORD coord = {x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void map() //
{
int a[25][50] = {0};
int i,j;
for(i = 0; i < 50; i++)
{
a[0][i] = 1;
a[24][i] =1;
}
for(i = 0; i < 25; i++)
{
a[i][0] = 1;
a[i][49] =1;
}
for(i = 0; i < 25; i++)
for(j = 0; j < 50; j++)
{
if(j%50 == 0)
printf("
");
if(a[i][j] == 0)
{
printf(" ");
}
else
{
printf("#");
}
}
}
struct snake *createSnake() // , ,
{
int i;
struct snake *head,*p,*q;
p = q = (struct snake *)malloc(sizeof(struct snake));
head = NULL;
head = p;
head->pre = NULL;
for( i = 0; i < 5; i++)
{
p->x = 25 - i;
p->y = 13;
p->pre = head->pre;
head->pre = p;
q->next = p;
q = p;
p = (struct snake *)malloc(sizeof(struct snake));
}
q->next = head;
return head;
}
void printSnake(struct snake *p) // , gotoxy() ,
{
struct snake *q;
q = p;
while(q != p->next) //
{
gotoxy(p->x,p->y); // @,
printf("@");
p = p->next;
}
gotoxy(p->x,p->y);
printf("@");
gotoxy(0,0);
printf(" :"); //
}
void food() //
{
int i;
if(!flag) // flag
{
srand( (unsigned)time( NULL ) );
for( i = 0; i < 2; i++ ) // food_(x,y)
{
food_xy[i] = rand()%24+2;
while(food_xy[0] == 1 || food_xy[0] == 25) // while
food_xy[0] = rand()%24+2;
while(food_xy[1] >= 49 || food_xy[1] == 1)
food_xy[1] =rand()%24+2;
}
gotoxy(food_xy[0],food_xy[1]); //
printf("*");
flag = 1;
}
}
struct snake *snake_link(struct snake *p) //
{
struct snake *q;
q = (struct snake *)malloc(sizeof(struct snake)); // , ,
q->x = food_xy[0];
q->y = food_xy[1];
q->pre = p->pre;
p->pre->next = q;
p->pre = q;
q->next = p;
return p;
}
void eat_food(struct snake *p,int x, int y) // , x,y food_xy , snake_link
{
if(x == food_xy[0] && y == food_xy[1])
{
p = snake_link(p);
flag = 0;
printSnake(p);
gotoxy(8,0);
score = score + 1;
printf("%d",score);
}
}
void hit_wall(int n) // , x y , ,
{
if(ch == 'W'|| ch == 'S' )
if(n == 1 || n == 25)
{
gotoxy(0,26);
printf(" !");
printf(" :%d",score);
exit(0);
}
if(ch == 'A'|| ch == 'D' )
if(n == 0 || n == 49)
{
gotoxy(0,26);
printf(" !");
printf(" :%d",score);
exit(0);
}
}
void suicide(struct snake *p, int x, int y) // ,
{
struct snake *q; // , ,
q = p;
while(q != p->next) //
{
if(p->x == x && p->y == y)
{
gotoxy(0,26);
printf(" !");
printf(" :%d",score);
exit(0);
}
else
p = p->next;
}
}
struct snake *up(struct snake *p) //
{
int x;
int y;
x = p->pre->x; // x,y
y = p->pre->y;
while(p) // ,
{
Sleep(SNAKE_SPEED); //
y--; // ,
gotoxy(p->x,p->y); // , “ ”
printf(" ");
gotoxy(x, y); // ,"@", ,
printf("@");
suicide(p,x,y); //
p = p->next; //
p->pre->x = x; // ,
p->pre->y = y;
food(); //
eat_food(p,x,y); //
hit_wall(y); //
if(kbhit()) break; // ,
}
return p;
}
struct snake *left(struct snake *p) //
{
int x;
int y;
x = p->pre->x;
y = p->pre->y;
while(p)
{
Sleep(SNAKE_SPEED);
x--;
gotoxy(p->x,p->y);
printf(" ");
gotoxy(x, y);
printf("@");
suicide(p,x,y);
p = p->next;
p->pre->x = x;
p->pre->y = y;
food();
eat_food(p,x,y);
hit_wall(x);
if(kbhit()) break;
}
return p;
}
struct snake *down(struct snake *p) //
{
int x;
int y;
x = p->pre->x;
y = p->pre->y;
while(p)
{
Sleep(SNAKE_SPEED);
y++;
gotoxy(p->x,p->y);
printf(" ");
gotoxy(x, y);
printf("@");
suicide(p,x,y);
p = p->next;
p->pre->x = x;
p->pre->y = y;
food();
eat_food(p,x,y);
hit_wall(y);
if(kbhit()) break;
}
return p;
}
struct snake *right(struct snake *p) //
{
int x;
int y;
x = p->pre->x;
y = p->pre->y;
while(p)
{
Sleep(SNAKE_SPEED);
x++;
gotoxy(p->x,p->y);
printf(" ");
gotoxy(x, y);
printf("@");
suicide(p,x,y);
p = p->next;
p->pre->x = x;
p->pre->y = y;
food();
eat_food(p,x,y);
hit_wall(x);
if(kbhit()) break;
}
return p;
}
void move(struct snake *p) //
{
while(1)
{
ch = getch();
switch(ch)
{
case 'W':p = up(p);break;
case 'A':p = left(p);break;
case 'D':p = right(p);break;
case 'S':p = down(p);break;
}
}
}
int main()
{
struct snake *p;
map(); //
p = createSnake(); //
printSnake(p); //
move(p); //
return 0;
}
더 많은 재 미 있 는 클래식 게임 을 통 해 주 제 를 실현 하고 여러분 에 게 공유 합 니 다.C++클래식 게임 모음
python 클래식 게임 모음
python 러시아 블록 게임 집합
JavaScript 클래식 게임 을 계속 합 니 다.
자바 클래식 게임 모음
javascript 고전 게임 모음
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.