2일차


처음 시작 화면 메뉴를 화살표로 선택 진입


코드 보기

#include< stdio.h>

#include< conio.h>

#include< windows.h>

#include< stdlib.h>

#include< time.h>

 

#define  UP  72

#define  LEFT 75

#define  RIGHT 77

#define  DOWN 80

#define  ENTER 13

 


void textcolor(int color_number) //텍스트 칼라를 바꿔주는 함수

{

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_number);

}

 

gotoxy(int x,int y)

{

    COORD pos = ;

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

 

//게임 시작 화면의 문구를 원하는 위치에 출력하고, 선택하기 위해 좌표 값을 지정해주는
//gotoxy함수를 사용했다.

 


void interface01()

{

    int updown=1;

    int x=10,y=5;

    gotoxy(x,y);


    system("cls");

    fflush(stdin);


    system("mode con: cols=150 lines=41"); //창 화면 크기

    system("color 0b"); //색 변경

 

    int i;

        system("cls");

        printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");

         for(i=1; i<39; i++)

         {

            printf("                                                                                                                                                  ");

        }

            printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");


         // 게임 시작 화면 테두리

 

        textcolor(15);

        gotoxy(64,10);

        printf(" SNAKE GAME\n");

 

        gotoxy(67,13);  

        printf(" MEUN\n");

 

        gotoxy(64,16);  

        printf(" GAME START \n");

 

        gotoxy(67,17);  

        printf(" EXIT \n");

 

        gotoxy(59,16);

        printf("");


        // 게임 시작 화면 인터페이스

        while(1)

        {

            switch(getch())

        {

            case UP:

            updown=1;

            gotoxy(59,17);

            printf("  ");

            gotoxy(59,16);

            printf("");

            break;


            case DOWN:

            updown=2;

            gotoxy(59,16);

            printf("  ");

            gotoxy(59,17);

            printf("");

            break;

            //  game start , exit 선택

    //​ scanf 제외하고 enter 입력받아 화면을 이동하도록 설정


            case ENTER:

 

            if(updown==1)

            {

                system("cls");

            }

            else

            {

                system("cls");

                gotoxy(59,17);

                printf("안녕히 가세요\n");

                exit(0);

            }

 

        int i;

        system("cls");

        printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");

 

         for(i=1; i<39; i++)

         {

            printf("                                                                                                                                                  ");

        }

            printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■"); 

 

            //게임시작

 


//게임 실행 코드가 삽입될 부분

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

 


뱀 먹이 만들기


코드 보기

void play()


{

int direction = UP;

int X = 19;

int Y = 38;

int FX, FY;

int eat= 0 ;               //시작하자마자의 상태를 나타내주는 변수인데 이름이 부적절한 같다.

int length = 1;           //현재 뱀의 길이를 나타내주는 변수. 아직은 머리만 구현중이기에 쓸데는 없다.

int SnakeNStar[40][40] = { 0 };

//먹이와 뱀의 위치를 저장해놓는 배열이다.

//먹이와 뱀이 곂치지 않게 해주는 역할.

​//0 공백, 1 , 2 먹이이다.

 


SnakeNStar[X][Y/2] = 1;

gotoxy(Y, X);

printf("");


while (1)

{

if (eat == 0)

{

srand((unsigned)time(NULL));

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;

SnakeNStar[FX][FY / 2] = 2;

gotoxy(FY, FX);

printf("");

eat++;

}

//게임 시작 직후에 별을 하나 생성한다.


if (kbhit())

{

direction = getch();

}

switch (direction)

{

case UP:


   if (SnakeNStar[X-1][Y / 2] == 2)                         // 만약 다음에 움직일 칸이 먹이라면

 {

SnakeNStar[X][Y / 2] = 0;                                // 일단 현재칸을 0으로 만들고

gotoxy(Y, X);                                                // 커서를 현재칸에 옮긴 뒤

printf("  ");                                                   // 공백을 채워준다.

SnakeNStar[--X][Y / 2] = 1;                              // 그리고 움직일 칸에 이동해서 1

gotoxy(Y, X);                                                 // 커서를 움직일 칸에 이동 후

printf("");                                                   // Snake를 그려줌

FX = rand() % 38 + 1;                                     // 세로 랜덤값을 만들고

FY = (rand() % 38 + 1) * 2;                               // 가로 랜덤값을 만듬


while (1)                 // 먹이가 생성될 때 까지 무한반복

{

if (SnakeNStar[FX][FY / 2] != 1)                       // 먹이가 생성될 자리가 공백이면

{

SnakeNStar[FX][FY / 2] = 2;                // 먹이값을 채워준다.

gotoxy(FY, FX);                                // 먹이 포인터를 이동한 후

printf("");                                     // 먹이를 그림

break;

}

else                    // 먹이가 생성될 자리가 공백이 아니면

{

FX = rand() % 38 + 1;                        // 랜덤함수를 계속 돌린다.

FY = (rand() % 38 + 1) * 2;

}

}

}

else                                     // 다음에 움직이는 칸이 공백이면

{

SnakeNStar[X][Y / 2] = 0;                                // 현재칸을 공백값으로 만들고

gotoxy(Y, X);                                                // 커서를 현재칸으로 이동

printf("  ");                                                   // 공백을 채워줌

SnakeNStar[--X][Y / 2] = 1;                              // 다음에 움직이는 칸에 뱀값을 집어넣고

gotoxy(Y, X);                                                 // 커서를 다음칸으로 이동

printf("");                                                   // 뱀을 그려준다.

break;

}


case DOWN:


if (SnakeNStar[X + 1][Y / 2] == 2)

{

SnakeNStar[X][Y / 2] = 0;

gotoxy(Y, X);

printf("  ");

SnakeNStar[++X][Y / 2] = 1;

gotoxy(Y, X);

printf("");

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;


while (1)

{

if (SnakeNStar[FX][FY / 2] != 1)

{

SnakeNStar[FX][FY / 2] = 2;

gotoxy(FY, FX);

printf("");


break;

}

else

{

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;

}

}

}

else

{

SnakeNStar[X][Y / 2] = 0;

gotoxy(Y, X);

printf("  ");

SnakeNStar[++X][Y / 2] = 1;

gotoxy(Y, X);

printf("");

break;

}


case LEFE:


if (SnakeNStar[X][(Y - 2) / 2] == 2)

{

SnakeNStar[X][Y / 2] = 0;

gotoxy(Y, X);

printf("  ");

SnakeNStar[X][(Y-=2) / 2] = 1;

gotoxy(Y, X);

printf("");

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;


while (1)

{

if (SnakeNStar[FX][FY / 2] != 1)

{

SnakeNStar[FX][FY / 2] = 2;

gotoxy(FY, FX);

printf("");

break;

}

else

{

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;

}

}

}

else

{

SnakeNStar[X][Y / 2] = 0;

gotoxy(Y, X);

printf("  ");

SnakeNStar[X][(Y-=2) / 2] = 1;

gotoxy(Y, X);

printf("");

break;

}

 

case RIGHT:


if (SnakeNStar[X][(Y + 2) / 2] == 2)

{

SnakeNStar[X][Y / 2] = 0;

gotoxy(Y, X);

printf("  ");

SnakeNStar[X][(Y+=2) / 2] = 1;

gotoxy(Y, X);

printf("");

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;


while (1)

{

if (SnakeNStar[FX][FY / 2] != 1)

{

SnakeNStar[FX][FY / 2] = 2;

gotoxy(FY, FX);

printf("");

break;

}

else

{

FX = rand() % 38 + 1;

FY = (rand() % 38 + 1) * 2;

}

}

}

else

{

SnakeNStar[X][Y / 2] = 0;

gotoxy(Y, X);

printf("  ");

SnakeNStar[X][(Y+=2) / 2] = 1;

gotoxy(Y, X);

printf("");

}

}

Sleep(70);

}

}

 

void main()

{

system("mode con: cols=150 lines=41");

interface01();

play();

}


수정해야 부분

 

  • 화살표 부분 커서 제거
  • 먹이를 완전히 먹지않고 닿기만 해도 먹이가 없어짐 => 왼쪽에서 먹으면 그렇지 않은데 case LEFT 코드를 분석해야 .
  • 위에서 내려오며 먹이를 먹으면 왼쪽으로 한칸 이동함 => 코드를 입력한 같다.

  • 먹이가 이전 먹이와 가깝게 생기면 다음 먹이가 나오지 않음 => 먹이 생성 코드 수정.

  • 1일차의 대부분의 문제점

    •  

 

 

다음 목표

 

  • 게임 실행 부분 코드 삽입
  • 뱀이 벽에 닿으면 죽음
  • ​엔딩 화면 제작





'C언어' 카테고리의 다른 글

C언어 로또 프로그램 만들기  (0) 2015.08.26
C언어 게임 만들기(5일차)  (0) 2015.08.26
C언어 게임 만들기(4일차)  (0) 2015.08.26
C언어 게임 만들기(3일차)  (0) 2015.08.26
C언어 게임 만들기(1일차)  (0) 2015.08.26
블로그 이미지

토유

개발일지

,