현재 위치 - 주공해몽공식사이트 - 랜덤 번호 뽑기 점술 - C 언어 뱀 프로그램

C 언어 뱀 프로그램

기본 아이디어:?

뱀이 음식을 먹을 때마다 뱀의 몸은 한 칸을 더하고, 뱀의 머리의 움직임은 위 아래, 왼쪽, 오른쪽으로 제어되며, 뱀의 몸은 뱀의 머리를 따라 가고, 뱀의 몸은 마지막 칸을 걸을 때마다 한 칸의 뱀의 자리로 가는 등.

# include & ltstdio.h & gt

# include & ltconio.h & gt

# include & ltwindows.h & gt

# BEG _ X 2 정의

# define BEG _ Y 1

# WID 20 정의

# HEI 20 정의

Hout 처리

Typedef 열거 {UP, DOWN, LEFT, RIGHT} DIR.

Typedef 구조 Snake_body

{

좌표 위치 //뱀 몸의 위치

Struct Snake _ body * next// 다음 뱀

Struct Snake _ body * prev// 마지막 뱀 몸

}SNAKE, * PSNAKE

PSNAKE head = NULL// 뱀 머리

PSNAKE tail = NULL// 뱀 꼬리

//게임 경계 함수 그리기

Void DrawBorder ()

{

Int I, j;

COORD pos = {BEG_X, BEG _ Y };;

For(I = 0;; 나< 블랙; ++i)

{

SetConsoleCursorPosition(hout, pos);

For(j = 0;; J & ltWID;; ++j)

{

If(i == 0)// 첫 번째 줄

{

(j == 0) 인 경우

Printf ("ⓣ");

Else if(j == WID-1)

Printf ("♂");

기타

Printf ("━");

}

Else if(i == HEI- 1)// 마지막 줄

{

(j == 0) 인 경우

Printf ("┖");

Else if(j == WID-1)

Printf ("┘");

기타

Printf ("━");

}

Elseif (j = = 0 | | j = = wid-1)//첫 번째 열 또는 마지막 열

Printf ("★");

기타

Printf ("? );

}

++위치. Y;

}

}

//뱀 기능 추가

빈 추가체 (좌표 위치)

{

P snakepnew = (p snake) calloc (1,sizeof(SNAKE)););

Pnew-& gt;; Pos = pos

만약 (! 머리)

{

Head = tail = pnew

}

기타

{

Pnew-& gt;; 다음 = 머리; //새로 만든 뱀의 몸의 넥스트가 원래의 뱀의 머리를 가리켰다.

헤드->; Prev = pnew// 원래 뱀의 머리에 대한 prev 는 새로 만든 뱀의 몸을 가리킵니다.

Head = pnew// 새로 만든 뱀의 몸을 새로운 뱀의 머리로 삼다.

}

SetConsoleCursorPosition(hout, head-& gt;; Pos);

Printf("◎"; ◎ ";

}

//뱀 운동의 기능

Void MoveBody (방향)

{

PSNAKE ptmp

Coordpos = head-> Pos

스위치 (방향)

{

시나리오 위로:

If (헤드-> 위치. Y & gtBEG_Y+1)

-위치. Y;

기타

반환;

깨뜨리다

시나리오 아래로:

If (헤드-> 위치. Y & ltBEG_Y+HEI-2)

++위치. Y;

기타

반환;

깨뜨리다

시나리오 왼쪽:

If (헤드-> 위치. X & gtBEG_X+2)

위치. X-= 2;

기타

반환;

깨뜨리다

사례 권한:

If (헤드-> 위치. X & ltBEG_X+(WID-2) * 2)

위치. X+= 2;

그렇지 않으면요?

반환;

깨뜨리다

}

AddBody (위치); //새로운 뱀 머리를 추가했습니다.

Ptmp = tail// 현재 뱀 꼬리를 저장합니다.

Tail = tail-& gt;; Prev

If (꼬리)

꼬리-> Next = NULL

SetConsoleCursorPosition(hout, ptmp-& gt;; Pos);

Printf ("? );

무료 (ptmp);

}

Int main ()

{

Int ctrl

DIR dir = 오른쪽; //초기 뱀 방향은 오른쪽입니다.

COORD pos = {BEG_X+2, beg _ y+hei/2};

시스템 ("color0e");

시스템 ("모드 제어 열 =90 행 =30 행");

Hout = getstdhandle (STD _ output _ handle);

Printf("-뱀의 운동);

Drawborder ();

//몇 마리의 뱀의 몸을 사용자 정의하십시오.

AddBody (위치);

위치. X+= 2;

AddBody (위치);

위치. X+= 2;

AddBody (위치);

위치. X+= 2;

AddBody (위치);

위치. X+= 2;

AddBody (위치);

위치. X+= 2;

AddBody (위치);

위치. X+= 2;

AddBody (위치);

//뱀의 움직임을 제어합니다

While(ctrl = getch ())

{

스위치 (ctrl)

{

사례' w':

If(dir == DOWN)

계속;

Dir = UP

깨뜨리다

시나리오:

If(dir == UP)

계속;

Dir = DOWN

깨뜨리다

사례 "a":

If(dir == RIGHT)

계속;

Dir = LEFT

깨뜨리다

사례' d':

If(dir == LEFT)

계속;

Dir = RIGHT

깨뜨리다

사례' q':

0 을 반환합니다

}

Move body (dir);

}

0 을 반환합니다

}

확장 데이터:

논리를 실현하다

1, 커서를 설정하여 배합표 위치에 배합표 기호를 인쇄할 수 있습니다.

2, 두 개의 요소 좌표 요소와 하나의 구조 포인터를 포함하는 구조를 포함합니다.

3. 구조를 연결하여 연결된 목록을 만들고, 구성원의 좌표를 통과하고, 기호를 인쇄하여 뱀체를 얻습니다.

4, 계속 머리를 더하고, 꼬리를 제거하고, 좌표를 다시 순회하고, 뱀을 형성하는 운동을 프린트한다.

5. 식품이 생산되는 장소는 국경을 넘을 수 없고 뱀의 몸과 일치할 수 없다.

6, 뱀의 회전 판단, 규칙, 후퇴는 허용되지 않습니다.

7. 조향을 실현하고 행진 방향으로 새로운 관절 좌표 (현재 머리 위, 아래, 좌우) 를 결정합니다

8, 사망 감지, 머리 노드 좌표가 벽과 일치하는지 여부, 신체의 다른 관절과 일치하는지 여부.

9. 속도를 높이거나 낮추고 새로 고침 수면 시간을 설정합니다.

바이두 백과 -C 언어