ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android 실습 (3)
    Android 2022. 7. 12. 15:38

    주사위 게임을 만들어보겠습니다. 동점인 경우 특정 문구가 휴대폰 하단에 뜨게 됩니다.

    package com.example.ex_0708;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.media.Image;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.Random;
    
    public class MainActivity6 extends AppCompatActivity {
    
        TextView score1, score2;
        ImageView dice1, dice2;
        Button btn_shake;
    
        // 주사위 이미지 관리를 위한 배열 생성
        int[] arr = {R.drawable.dice1,R.drawable.dice2,R.drawable.dice3,
                     R.drawable.dice4,R.drawable.dice5,R.drawable.dice6};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main6);
    
            score1 = findViewById(R.id.score1);
            score2 = findViewById(R.id.score2);
            dice1 = findViewById(R.id.dice1);
            dice2 = findViewById(R.id.dice2);
            btn_shake = findViewById(R.id.btn_shake);
    
            btn_shake.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // 주사위를 굴린다! -> 랜덤으로 이미지 띄우기 -> 랜덤수 생성!
    
                    Random rd = new Random();
                    int rd1 = rd.nextInt(6); // 0~5
                    int rd2 = rd.nextInt(6);
    
                    // 생성된 랜덤수를 활용하여 주사위 이미지 변경하기!
                    dice1.setImageResource(arr[rd1]);
                    dice2.setImageResource(arr[rd2]);
    
                    // 점수비교 하기
                    if(rd1 > rd2){
                        int num1 = Integer.parseInt(score1.getText().toString());
                        num1++;
                        score1.setText(num1+"");
                    }else if(rd1 < rd2){
                        int num2 = Integer.parseInt(score2.getText().toString());
                        num2++;
                        score2.setText(num2+"");
                    }else{
                        // makeTest(어플의 정보(getApplicationContext), 메세지, 띄워질 시간).show();
                        Toast.makeText(getApplicationContext(),"동점 입니다!",Toast.LENGTH_SHORT).show();
                    }
    
                }
            });
        }
    }

     

     

    1부터 45까지의 숫자를 차례로 누르는 게임을 만들어보겠습니다. start버튼을 클릭하게 되면 숫자들이 뜨게 됩니다.

    package com.example.ex_0711;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    import java.util.Arrays;
    import java.util.Random;
    
    public class MainActivity extends AppCompatActivity {
    
        Button btn_start;
    
        // 9개의 버튼을 관리할 수 있는 Button 타입의 배열 선언!
        Button[] btnArr = new Button[9];
    
        Random rd = new Random();
    
        // 9개의 랜덤수를 관리할 수 있는 int 타입의 배열 선언!
        int[] numArr = new int[9];
    
        // 정답을 체크할 수 있는 변수
        int ans = 1;
    
        // 횟수를 체크할 수 있는 변수
        int cnt = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 버튼을 초기화하는 메소드
            initView();
    
            // 게임시작을 하기전에는 버튼들이 보이지 않도록 하기!
            for (int i = 0; i < btnArr.length; i++){
                btnArr[i].setVisibility(View.INVISIBLE);
            }
    
            // btn_start에 이벤트 걸어주기!
            btn_start.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    // 처음 한번 클릭 이후 버튼을 사용하지 못하도록 만들기!
                    // t : 클릭 허용 / f : 클릭 비허용
                    btn_start.setClickable(false);
    
                    // - 버튼에 랜덤수 부착
                    // - 순서에 맞춰 버튼 클릭하기
    
                    // 랜덤수 생성하는 메소드
                    makeRandom(cnt);
    
                    // 버튼에 랜덤수 달아주는 메소드
                    numberInit();
    
                    // 9개의 버튼에 이벤트 리스너 달아주기!
                    for (int i = 0; i < btnArr.length; i++){
    
                        // 변수인 i를 상수로 변경시키기!
                        final int pos = i;
                        btnArr[i].setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                // 실제 맞춰야 하는 정답과 눌린 버튼의 값이 같은지 판단!
                                // 익명클래스에서는 변수는 사용이 불가능 하다! -> 상수만 사용 가능!
    
                                if(numArr[pos] == ans){
                                    btnArr[pos].setVisibility(View.INVISIBLE);
                                    ans++;
                                    ++cnt;
    
                                    // 첫번째 판이 끝나면 다음판으로 넘어갈 수 있는 기능 만들기!
    
                                    if (cnt == 9){
                                        makeRandom(cnt);
                                        numberInit();
                                    }else if(cnt == 18){
                                        makeRandom(cnt);
                                        numberInit();
                                    }else if(cnt == 27){
                                        makeRandom(cnt);
                                        numberInit();
                                    }else if(cnt == 36){
                                        makeRandom(cnt);
                                        numberInit();
                                    }else if(cnt == 45){
                                        btn_start.setText("end");
                                    }
    
                                }
                            }
                        });
                    }
    
                }
            });
    
        }
    
        private void numberInit() {
            for(int i = 0; i < btnArr.length; i++){
                btnArr[i].setText(numArr[i]+"");
    
                // 사라진 버튼을 띄우기
                btnArr[i].setVisibility(View.VISIBLE);
            }
        }
    
        private void makeRandom(int cnt) {
            for (int i = 0; i < numArr.length; i++){
                numArr[i] = rd.nextInt(9)+(1+cnt);
    
                // 중복되는 수 확인하기
                for (int j = 0; j < i; j++){
                    if(numArr[i] == numArr[j]){
                        i--;
                    }
                }
            }
    
            Log.d("random", Arrays.toString(numArr));
        }
    
        private void initView() {
            btn_start = findViewById(R.id.btn_start);
    
            for (int i = 0; i < btnArr.length; i++) {
                // getResources() : 리소스 파일에 접근할 수 있는 메소드
                // getIdentifier() : name(Id이름), defType(view인지 layout인지..), defpackage()
                // getPackageName() : 현재 사용하는 패키지의 이름을 가져오는 메소드
                int btnId = getResources().getIdentifier("btn" + (i+1), "id", getPackageName());
    
                btnArr[i] = findViewById(btnId);
    
            }
        }
    }

     

    'Android' 카테고리의 다른 글

    Android 실습 (5)  (0) 2022.07.13
    Android 실습 (4)  (1) 2022.07.12
    Android 이론 (2)  (0) 2022.07.07
    Android 실습 (2)  (0) 2022.07.07
    Android 실습 (1)  (0) 2022.07.06

    댓글

Designed by Tistory.