상세 컨텐츠

본문 제목

[안드로이드] 같은 그림 찾기 게임 만드는 방법 part3 - 클릭&뒤집기

안드로이드

by aries574 2022. 4. 4. 14:35

본문


이번 시간에는 저번 포스팅에 이어서 하겠습니다.

8개의 이미지를 섞어서 이미지 버튼에 보여주는

것까지 했습니다.

이번엔 처음에는 기본 이미지들로 보이다가 버튼을

클릭하면 해당 위치의 이미지를 이미지 버튼에 보여주는

기능을 구현해보도록 하겠습니다.

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.04.03 - [안드로이드] - [안드로이드] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기

 

[안드로이드] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기

이번 시간에는 저번 포스팅에 이어서 하겠습니다. 화면을 구성했으니, 8개의 이미지 버튼에 이미지를 보여주도록 하겠습니다. 이미지는 나중에 똑같은 이미지를 맞춰야 하기 때문에 섞어서 보

aries574.tistory.com


목차

1. 실행 화면

2. 메인 코드 구현 MainActivity.java


1. 실행 화면

2. 메인 코드 구현 MainActivity.java

 - 수정 - 

 2-1 init() : 기본 이미지로 변경

            //각 버튼에 이미지 적용
            buttons[i].setImageResource(R.drawable.question);

 2-2 onClick(): 이미지버튼 클릭 시 데이터와 뷰 변경  기능 구현

        //업데이트 모델
        updateModel(position);


        //업데이트 뷰
        updateView(position);

 2-3 updateModel, updateView 구현

    //데이터 변경
    private void updateModel(int position){

        MemoryCard card = cards.get(position);

        //나중에 카드 비교 할때 뒤집고 다시 클릭하는거 방지
        if(card.isFaceUp()){

            Toast.makeText(this, "이미 뒤집혔음", Toast.LENGTH_SHORT).show();
            return;
        }

        //반대의 값을 넣는다. 앞면 -> 뒷면 , 뒷면 -> 앞면
        cards.get(position).setFaceUp(!card.isFaceUp());
    }

    //뷰 변경
    private void updateView(int position){

        MemoryCard card = cards.get(position);

        //뒤집었음 랜덤 이미지로 보여준다.
        if(card.isFaceUp()){
            buttons[position].setImageResource(card.getImageId());

        }else{ //기본 이미지
            buttons[position].setImageResource(R.drawable.question);
        }
    }

 2-4 전체 코드

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    //버튼 배열
    private ImageButton[] buttons = new ImageButton[8];



    //이미지 리스트
    private ArrayList<Integer> imageList;

    //카드 리스트
    private ArrayList<MemoryCard> cards;


    //결과 텍스트
    private TextView resultText;

    //초기화 버튼
    private Button resetBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        resultText = findViewById(R.id.result_text);

        //초기화
        init();

        resetBtn = findViewById(R.id.reset_btn);
        resetBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //초기화
                init();
            }
        });

    }//onClick

    //초기화
    public void init(){

        imageList = new ArrayList<>();

        //이미지 리스트에 데이터 등록
        imageList.add(R.drawable.dog);
        imageList.add(R.drawable.pig);
        imageList.add(R.drawable.rabbit);
        imageList.add(R.drawable.cat);
        imageList.add(R.drawable.dog);
        imageList.add(R.drawable.pig);
        imageList.add(R.drawable.rabbit);
        imageList.add(R.drawable.cat);

        //순서 섞기
        Collections.shuffle(imageList);

        //카드 초기화
        cards = new ArrayList<>();

        // 버튼 초기화
        for(int i = 0; i < buttons.length; i++){

            String buttonID = "imageBtn" + i;
            int resourceID = getResources().getIdentifier(buttonID, "id", getPackageName());
            buttons[i] = findViewById(resourceID);

            //각 버튼에 클릭이벤트 적용
            buttons[i].setOnClickListener(this);

            //카드 리스트에 이미지 담기
            cards.add(new MemoryCard(imageList.get(i), false, false));

            //각 버튼에 기본 이미지로 변경
            buttons[i].setImageResource(R.drawable.question);
        }
    }

    //버튼 클릭이벤트
    @Override
    public void onClick(View view) {

        int id = view.getId();

        int position = 0;

        if(id == R.id.imageBtn0){

            position = 0;

        }else if(id == R.id.imageBtn1){
            position = 1;

        }else if(id == R.id.imageBtn2){
            position = 2;

        }else if(id == R.id.imageBtn3){
            position = 3;

        }else if(id == R.id.imageBtn4){
            position = 4;

        }else if(id == R.id.imageBtn5){
            position = 5;

        }else if(id == R.id.imageBtn6){
            position = 6;

        }else if(id == R.id.imageBtn7){
            position = 7;
        }

        //업데이트 모델
        updateModel(position);

        //업데이트 뷰
        updateView(position);
    }

    //데이터 변경
    private void updateModel(int position){

        MemoryCard card = cards.get(position);

        //나중에 카드 비교 할때 뒤집고 다시 클릭하는거 방지
        if(card.isFaceUp()){

            Toast.makeText(this, "이미 뒤집혔음", Toast.LENGTH_SHORT).show();
            return;
        }

        //반대의 값을 넣는다. 앞면 -> 뒷면 , 뒷면 -> 앞면
        cards.get(position).setFaceUp(!card.isFaceUp());
    }

    //뷰 변경
    private void updateView(int position){

        MemoryCard card = cards.get(position);

        //뒤집었음 랜덤 이미지로 보여준다.
        if(card.isFaceUp()){
            buttons[position].setImageResource(card.getImageId());

        }else{ //기본 이미지
            buttons[position].setImageResource(R.drawable.question);
        }
    }
}//MainActivity

2022.03.28 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part1 - 화면 구성

 

[안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part1 - 화면 구성

 이번 시간에는 랜덤한 숫자를 생성하면, 사용자는 숫자를 입력해서 맞추는 게임을 만들어 보려고 합니다. 물론 무작정 맞추는 게 아니라 입력한 숫자가 랜덤한 숫자보다 큰지, 작은지 정도는

aries574.tistory.com

2022.03.29 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현

 

[안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현

이번 시간에는 저번 포스팅에 이어서 실제 기능을 구현해 보도록 하겠습니다. 이전 포스팅을 먼저 보고 오시면 됩니다. 2022.03.28 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방

aries574.tistory.com

2022.03.23 - [안드로이드] - [안드로이드] tic-tac-toe 보드게임 만드는 방법 part1 - 화면구성

 

[안드로이드] tic-tac-toe 보드게임 만드는 방법 part1 - 화면구성

이번 시간에는 Tic Tac Toe라는 게임을 만들어 보겠습니다. 두 명이서 번갈아 가며 클릭을 하며 가로, 세로, 대각선 중 한 줄을 만들면 이기는 단순한 게임입니다. 이번에는 화면만 구성하겠습니다.

aries574.tistory.com

2022.03.24 - [안드로이드] - [안드로이드] tic-tac-toe 보드게임 만드는 방법 part2- 기능구현

 

[안드로이드] tic-tac-toe 보드게임 만드는 방법 part2- 기능구현

이번 시간에는 저번 포스팅에 이어서 하겠습니다. 저번 포스팅에선 화면 구성을 했고, 이번에는 기능 구현을 해보겠습니다. 2022.03.23 - [안드로이드] - [안드로이드] tic-tac-toe 보드게임 만드는 방

aries574.tistory.com

반응형

관련글 더보기

댓글 영역