#3 게임 - 카드섞는 거 만들어보기 - (스팀 카드매칭게임 )

tcban(47)
Published in
#kr-game
Words
224
Reading
1 min
9y
Listen to this post
~1 min

안녕하세요. tcban@tcban입니다.

설 연휴로

게임 작업은 머릿속에서만 하고
구현을 지금에서야 하네요.
지금까지 누적 작업시간 : 총 2시간 (반성합니다..)

혼자 게임 만들면 정리하느라 어질어질하옵니다.. 왜냐고요?
사실 기획서가 마무리 안되었기 때문이죠.

그래서 기획서 없이는 키보드 치지 말자고 다짐해도
머릿속에 있는 그림으로 한 번 해보려는 습관이 발동했어요.
(일종의 방황? 반항 그런 거 같아요)

게임제작 정식 일지로 기록하고 싶지는 않지만
책상 위 스탠드 불빛이 예뻐요.
괜히 감성수치 올라와 기록해봅니다.

앞으로 할 일

  1. 나도 모르겠는 아래 이 코드는 구조화 (반성합니다.)
  2. 기획안 정리 먼저 하자 다짐해 봅니다.

첫번째 해야할 일은

  • 약 20개 카드를 랜덤으로 섞어서 나타나게 하는 것입니다.

고려할 점

  • 20개 카드 배열을 만들어 놓았습니다.
  • 사실 똑같은 카드를 뒤집어 찾는 것이니 실제 카드는 10개만 있으면 되겠죠
  • 배열을 2개로 분리해 봅니다.

배열 정리

  • 첫번째, 두번째 배열에 1~10까지 숫자를 랜덤으로 뽑아 저장 (2회)
  • 세번째 배열에 첫번째와 두번째 배열을 합쳐 숫자열을 만듭니다.

카드 이미지 불러오기

  • 위에서 만든 세번째 배열 순서가 있습니다. (1~20까지 랜덤으로 섞인)
  • 배열 순서에 따라 이미 정해진 카드 이미지를 불러옵니다

일단 첫번째 배열만 구현해봅니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;`

//함수 
public class questionBox : MonoBehaviour {
    public static questionBox instace; //싱글톤 선언
    public int[] questionBoxArray;  //첫번째 배열 - 인스펙터에서 10으로 설정
    public List<Sprite> questionImages = new List<Sprite>(); //카드 이미지 배열

// 싱글톤 호출
    void Awake()
    {
        if (questionBox.instace == null)
            questionBox.instace = this;
    }

// 첫번째 카드 생성 -> 불러오기

    void firstQBoxDisplay ()
    {
        firstBoxCheckSum = 0;

        for (int i=0; i<questionBoxArray.Length; i++)
        {
            questionBoxArray[i] = Random.Range(1, questionBoxArray.Lengt+1); 

// 랜덤으로 뽑은 함수에 이미지 대입하기, ShapeManager 별도)

            if (questionBoxArray[i] == 1)
            {
                int randomImageNum = Random.Range(0, shapeManager.instace.randomimages.Length);
                shapeManager.instace.firstBoxImages[i].sprite = shapeManager.instace.randomimages[randomImageNum];
            }
            else
            {
                shapeManager.instace.firstBoxImages[i].sprite = null;
            }
        }
        checkTheFirstQBox();
    }

 // Use this for initialization
       void Start () {
        firstQBoxDisplay();
        checkTheFirstQBox();      
       } 

       void Update () {     
       }
}

카드 이미지 Manager

  • 배열로 카드 이미지 관리해 두었습니다. 임시로요.. 임시 temp.. tmp..
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class shapeManager : MonoBehaviour {
    public static shapeManager instace;
    public Sprite [] randomimages;
    public Image[] firstBoxImages;
    void Awake()
    {
        if (shapeManager.instace == null) shapeManager.instace = this;
    }
   
  
  
    void Start () {
 
    }
       
       void Update () {
              
       }
}

똑같은 숫자를 뽑았을때 처리

  • 스트링으로 테스트 진행했습니다.
  • 사실 이미 라이브러리에 완성된 거 있습니다.
  • 머릿속으로 만든 거 구현해 봅니다.
public void randomNumberCheck()
    {

        int tmp1;
        int tmp2;

                 //ES2는 내부 데이터 베이스 Asset
        if (!ES2.Exists ("chatInt")) {

            //카드 하나를 뽑는다 
            tmp1 = Random.Range (0, _stringTemp.Count);

            //뽑은 번호를 저장한다 
            ES2.Save (tmp1, "chatInt");

            //랜덤으로 뽑은 카드를 뿌린다 
            _charText.text = _stringTemp [tmp1];

        } else {

            //랜덤으로 번호를 뽑는다 
            tmp2 = Random.Range (0, _stringTemp.Count);

            //이미 뽑은 번호를 가져온다 
            tmp1 = ES2.Load<int> ("chatInt");

            // 둘 이 같 으 면 
            while (tmp1 == tmp2) {

                // 한 번 더 뽑는다 
                tmp2 = Random.Range (0, _stringTemp.Count);

                // 그리고 같지 않으면 끝낸 다 
                if (!(tmp1 == tmp2)) {

                    break;
                }

            }

            // 같 지 않은 새 로 생긴 번호의 스트링을  출력 한 다 
            _charText.text = _stringTemp [tmp2];

            // 새로 뽑은 번호를 과거 스트링 셋으로 저장한다. 
            ES2.Save (tmp2, "chatInt");


        }
    }

결과

  • 테스트 하느라 카드는 3개 밖에 없습니다만,
  • 카드 2개씩 나오도록 짝 맞추기는 성공!

지난 이야기

#1 게임 - 카드매칭게임 컨셉
#2 게임 - 카드매칭게임 - 메인화면 샘플

follow me!

#3 게임 - 카드섞는 거 만들어보기 - (스팀 카드매칭게임 ) | Ecency