ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • c언어/뱀 게임/스네이크 게임/snake game/네탈
    프로젝트 2017. 2. 10. 15:12


    snake game.cpp

    snake game.exe



    *소개*

    c언어로 스네이크 게임을 만들어 보았습니다.


    방향키로 뱀을 조작하며 벽에 닿거나 자신의 몸통에 닿을경우 죽습니다.


    아이템을 먹을때마다 점수가 10점씩 오르며 먹을때마다 속도가 증가합니다.



    *일단 플레이영상*





    *변수/함수 설명*



    typedef struct : 구조체를 선언합니다. 강의실에 올려두었습니다.

    gotoxy() : 커서를 원하는 위치로 옮깁니다. 강의실에 올려두었습니다.

    draw_screen : 처음시작할때맵을 그리는 함수입니다.

    move_snake : 화살표키를 입력받아 뱀을 움직이게 하는 부분입니다.

    {

    dir : 화살표를 입력받고 값을 저장하는 부분입니다.

    len : 뱀의 다음위치를 갈때 필요한 임시저장 변수입니다.

    }

    chack_snake : 뱀이 벽이나 자신의 몸에 충돌 했는지 검사합니다.

    main()

    {

    score = 점수를 저장합니다.

    speed = 현재 뱀의 속도를 저장합니다.

    }





    *코드*


    #include<stdio.h>

    #include<conio.h>

    #include<windows.h>

    #include<time.h>

    typedef struct

    {

        int x,y;

    }POS;

    void gotoxy(int x, int y, char* s)

    {

        COORD Pos={x*2,y};

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);

        printf("%s",s);

    }

    void draw_screen()  ///처음 맵 테두리 그리기

    {

        int i;

        system("cls");

        gotoxy(0,0,"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");

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

        {

            gotoxy(0,i,"■");

            gotoxy(30,i,"■");

        }

        gotoxy(0,20,"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");

    }

    void move_snake(POS* snake, int len)///뱀이 움직이는 부분

    {

        static int dir=-1;

        if(kbhit())///입력부분

        {

            int key;

            do{key=getch();}while(key==224);

            switch(key)

            {

                case 72: dir=0;break;//위

                case 80: dir=1;break;//아레

                case 75: dir=2;break;//왼쪽

                case 77: dir=3;break;//오른쪽

            }

        }

        if(dir!=-1)

        {

            int i;

            gotoxy(snake[len-1].x, snake[len-1].y,"  ");

            for(i=len-1;i>0;i--)snake[i]=snake[i-1];

            gotoxy(snake[1].x,snake[1].y,"○");

        }

        switch(dir)

        {

            case 0: snake[0].y--;;break;//위

            case 1: snake[0].y++;break;//아레

            case 2: snake[0].x--;break;//왼쪽

            case 3: snake[0].x++;break;//오른쪽

        }

        gotoxy(snake[0].x,snake[0].y,"●");

    }

    int check_snake(POS* snake, int len)///뱀이 충돌했는지 확인하는 부분

    {

        int i;

        if(snake[0].x==0||snake[0].y==0||snake[0].x==30||snake[0].y==20)return 0;

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

        {

            if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y)return 0;

        }

        return 1;

    }

    int main()

    {

        POS snake[100], item;

        int i, dir=-1, len=5, score=0;

        int speed=150;

        srand(time(NULL));

        draw_screen();

        for(i=0;i<len;i++)

        {

            snake[i].x=15+i;

            snake[i].y=10;

            gotoxy(snake[i].x,snake[i].y,"○");

        }

        item.x=rand()%28+1;

        item.y=rand()%18+1;

        gotoxy(1,21,"Score : 0");

        while(1)

        {

            if(check_snake(snake,len)==0)

            break;

            if(snake[0].x==item.x&&snake[0].y==item.y)///아이템 먹었을 경우

            {

                score+=10;

                item.x=rand()%28+1;

                item.y=rand()%18+1;

                gotoxy(1,21,"Score : ");

                printf("%d",score);

                if(speed>10)speed-=5;

                if(len<100)

                {

                    snake[len]=snake[len-1];

                    len++;

                }

            }

            gotoxy(item.x,item.y,"º");

            move_snake(snake,len);

            Sleep(speed);

        }

        gotoxy(0,22,"Game Over\n");

        system("pause");

    }



    TAG

    댓글 2

    • 고현정 2019.11.28 12:03

      안녕하세요. 학교 과제때문에 찾아보는 도중에 뱀게임에 흥미릉 가지게 되었는데요. 제가 이것저것 추가하니까(기본은 블로그님 코드 참고) 맵이 같이 움직이고... 뱀꼬리도 깔끔하게 누적되지않고. 지저분해요... 처음 만들어보는거라서요. 어떡해 해야 추가해도 지금 올리신 코드대로 깔끔하게 다시 동작할까요..ㅠㅠㅠ
      +
      머리를 가리키는 커서도 계속 움직여서 그런것 같아요...

    • 고현정 2019.11.28 12:05

      +추가한거는 무한루프 안에 메뉴 키받으면 게임실행하고 등등 만들었습니다..
      그리고 키 아스키코드 바꾸고 변수 추가한 상태입니다..

Designed by Tistory.