Minwoo Dev.

2048 구현 (2) 본문

Project

2048 구현 (2)

itisminu 2023. 6. 3. 15:59
728x90
반응형
SMALL

2021.08.25

 

2048 모바일 게임의 화면

 

 

우선 스마트폰에 2048 게임을 설치하여 기본적인 패턴을 분석하였다.

처음 시작하면 숫자 2가 4x4 칸에 무작위로 2개 형성된다.

4x4 사이즈로 제작할 것이기에 우선 2차원 배열을 이용하여 4x4 칸을 만들었다.

아래 코드는 random 함수를 이용하여 게임 초기 2가 두 개의 칸에 무작위로 형성되는 코드를 구현한 것이다.

 

#include<stdio.h>
#include<stdlib.h> // random 함수를 위한 라이브러리
#include<time.h> // time 함수를 위한 라이브러리

/*
2048 게임 콘솔 창으로 구현하기
키보드 화살표 키로 스와이프 방향 설정
같은 숫자의 카드가 더해지는 방식
*/


int main(void){
    int arr[4][4]={0,};
    srand(time(NULL)); // 매번 다른 난수 생성을 위함

    for(int i = 0;i<2;i++){ // 2번 반복(처음에 2 2개가 형성되고 시작)
        int a = rand()%4; // 0부터 3까지 난수 생성
        int b = rand()%4; // 0부터 3까지 난수 생성
        arr[a][b] = 2; 
    }

    for(int i = 0;i<4;i++){ // 배열 출력
        for(int j = 0;j < 4; j++){
            printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

 

4x4 배열과 무작위 형성을 표현하기 위해 함수로 만들지 않고 구현만 하였다.

그리고 스마트폰에서의 터치 스와이프를 키보드 화살표로 대신하기 위해 키보드 값을 인식하는 kbhit() 함수와 getch() 함수를 사용한다.

 

#include<stdio.h>
#include<conio.h>

int main(void){
    int key;
    while(1){
        if(kbhit()){
            key = getch();
            if(key==224 || key==0){
                key = getch();
                switch(key)
                {
                    case 72:
                        printf("위");
                        break;
                    case 75:
                        printf("왼");
                        break;
                    case 77:
                        printf("오");
                        break;
                    case 80:
                        printf("아래");
                        break;
                    default:
                        break;
                }
            }
        }
    }
    return 0;
}

위 코드는 kbhit() 함수와 getch() 함수로 입력된 키 값을 받아서 위, 아래, 왼, 오 중 해당되는 키를 출력하는 소스 코드 입니다.

while(1) 안에 있는 소스 코드들은 무한 반복 상태로 상시 대기합니다.

while문 안의 코드를 우리가 원하는 방향으로 스와이프하는 코드로 수정해야할 것 같습니다.

키보드 방향별 아스키코드 값은

위 : 224,72

아래 : 224, 80

왼쪽 : 224, 75

오른쪽 : 224, 77

1차 코드 구현

 

#include<stdio.h> 
#include<stdlib.h> // random 함수를 위한 라이브러리
#include<conio.h> // 콘솔 키보드 입력 관련 라이브러리
#include<time.h> // 매번 랜덤값이 다르게 시드 변경

void MakeArr(int a,int b) // 4x4 배열을 만드는 함수
{
    int arr[4][4]={0,}; // 배열 각 값을 0으로 초기화
    srand(time(NULL)); // 매번 다른 난수 생성을 위함

    for(int i = 0;i<2;i++){ // 2번 반복(처음에 2 2개가 형성되고 시작)
        a = rand()%4; // 0부터 3까지 난수 생성
        b = rand()%4; // 0부터 3까지 난수 생성
        arr[a][b] = 2; //랜덤으로 정해진 칸에 2 넣기
    }

    for(int i = 0;i<4;i++){ // 배열 출력 
        for(int j = 0;j < 4; j++){
            printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }
}

void Up()
{
    printf("위 화살표");
}

void Down()
{
    printf("아래 화살표");
}

void Left()
{
    printf("왼쪽 화살표");
}

void Right()
{
    printf("오른쪽 화살표");
}

void Key() // 키보드 입력 관련 함수
{
    int key;
    while(1){
        if(kbhit()){
            key = getch();
            if(key==224 || key==0){
                key = getch();
                switch(key)
                {
                    case 72:
                        Up();
                        // up 화살표 동작함수
                        break;
                    case 75:
                        Left();
                        // left 화살표 동작함수
                        break;
                    case 77:
                        Right();
                        // right 화살표 동작함수
                        break;
                    case 80:
                        Down();
                        // down 화살표 동작함수
                        break;
                    default:
                        break;
                }
            }
        }
    }
}

int main(void)
{
    int a=0,b=0;
    MakeArr(a,b);
    return 0;
}

 

추가 작업 예정 목록

- a, b값을 사용하여 배열 상으로 키보드 입력별 이동 알고리즘 수정

남은 일

- 키보드 화살표 입력값별 모션 넣기

- 2048 더해지는 방식 알고리즘화

숙제

- Github 가입해오기

- Github 사용법 익혀오기

728x90
반응형
LIST

'Project' 카테고리의 다른 글

[Web Project] 네이버 웹 클론코딩하기 (1)  (2) 2023.12.29
수학 문제 프로그래밍으로 해결하기  (1) 2023.09.06
(3) 2048 구현 - 3  (0) 2023.07.15
2048 구현 (1)  (0) 2023.06.03