안드로이드 6일차

ParkJinYoung·2022년 10월 14일

랜덤다이스

package com.jyp.ex1014;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
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 MainActivity extends AppCompatActivity {
    Random rd = new Random();
    ImageView img_Dice1;
    ImageView img_Dice2;
    //img를 담을 배열 R.drawable.___ ==> int(id값)
    int[] imgs1= new int[]{R.drawable.dice1,R.drawable.dice2,R.drawable.dice3,R.drawable.dice4,
            R.drawable.dice5,R.drawable.dice6};
    int[] imgs2= new int[]{R.drawable.dice1,R.drawable.dice2,R.drawable.dice3,R.drawable.dice4,
            R.drawable.dice5,R.drawable.dice6};;
    int currentImg1=0;
    int currentImg2=0;
    //점수가 btn을 누를때마다 초기화되면 안되니 밖에다 선언
    //int score1 = 0; int score2 = 0;
    TextView tv_score1;
    TextView tv_score2;
    Button btn_shake;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //id값을 초기화 시켜주기
        //tv_Score1,2 img_Dice1,2 btn_shake
        //img_Dice1,2 이미지를 랜덤으로 바꿔주고 싶다
        //img1.png에 있는 숫자에 랜덤 숫자를 줄 수 없다
        //===> img들이 담길 수 있는 배열을 만들어서 인덱스 값에 랜덤으로 접근
        //btn에 OnClickListener 달아주기
        //1-1) 랜덤한 두 수를 생성( 0 ~ 5 )
        //내부적으로 생성자만 사용
        // rd = new Random();
        //1-2) num1, num2에 저장 (1-1)에서 생성한 랜덤수
        //int num1 = rd.nextInt(6);
        //int num2 = rd.nextInt(6);
        //2-1)어떤 눈금이 큰지 판단 인덱스 값을 활용
        //img_Dice1.setImageResource(imgs1[num1]);
        //img_Dice2.setImageResource(imgs1[num2]);
        //if (num1>num2){
        //score1++;
        // tv_Score1.setText(score1+"");}
        //else if(num1<num2){
        //score2++;
        // tv_Score2.setText(score2+"");}
        // }else{
        // Toast.makeText(MainActivity.this,"무승부입니다.",
        // Toast.LENGTH_SHORT).show();)
        // }
            //2-2) 동점일 경우 토스트로 "동점입니다."
        img_Dice1 = findViewById(R.id.img_Dice1);

        img_Dice2 = findViewById(R.id.img_Dice2);
    }
    public void InputClick (View View){
        tv_score1 = findViewById(R.id.tv_score1);
        tv_score2 = findViewById(R.id.tv_score2);
        switch (View.getId()){
            case R.id.btn_shake:
                currentImg1= rd.nextInt(6);
                currentImg2= rd.nextInt(6);
                if (currentImg1>currentImg2){
                    String num1 = tv_score1.getText().toString();
                    int plus_num = Integer.parseInt(num1);
                    plus_num+=1;
                    tv_score1.setText(plus_num+"");
                }else if(currentImg1<currentImg2){
                    String num2 = tv_score2.getText().toString();
                    int plus_num = Integer.parseInt(num2);
                    plus_num+=1;
                    tv_score2.setText(plus_num+"");
                }else{
                    Toast.makeText(MainActivity.this,"무승부입니다.",
                    Toast.LENGTH_SHORT).show();
                }


        }
        img_Dice1.setImageResource(imgs1[currentImg1]);
        img_Dice2.setImageResource(imgs2[currentImg2]);



    }
}

1 to 25 Game

package com.jyp.ex1014_2;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;

public class MainActivity extends AppCompatActivity {
    //버튼 for문 사용하여 findViewById 진행 ==>id가 많아서 사용한다.
    Button[] btns;
    int[] nums;
    Chronometer timer;
    Random rd = new Random();
    int currentIndex = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timer = findViewById(R.id.tv_timer);
        btns = new Button[25];
        //중복되지않게 25개 랜덤숫자
        nums = new int[25];
        //✔✔✔ 1. 이중 for문
        // i 와 j 비교해서 같을때는 i에서 1을 빼서 다시 랜덤을 돌리도록한다.
        for (int i = 0; i < nums.length; i++) {
            nums[i] = rd.nextInt(25) + 1;
            //0번부터 i보다 작을때 까지 하나씩
            for (int j = 0; j < i; j++) {
                //i 번째 숫자와 j번째 숫자가 같다면
                if (nums[i] == nums[j]) {
                    i--;
                    break;
                }
            }
        }
        //✔✔✔ 2. ArrayList
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i <nums.length;i++){
            list.add(i+1);// 1 ~ 25 만들어짐
        }
        //리스트 뽑아서 nums에 넣고 지우는 반복문
        for(int i = 0; i<nums.length;i++){
            //남아있는 리스트 인덱스 중 하나
            int ranlist = new Random().nextInt(list.size());
            nums[i]= list.get(ranlist);
            //랜덤으로 뽑은 리스트 인덱스 제거하기
            list.remove(ranlist);
        }

        //✔✔✔ 3. 치환하기
        for (int i = 0;i<nums.length;i++){
            //1~25 순서대로 세팅
            nums[i] = i+1;
        }

        for(int i = 0 ; i<100 ; i++){
            int ranInx1=new Random().nextInt(nums.length);
            int ranInx2=new Random().nextInt(nums.length);

            int temp =  nums[ranInx1];
            nums[ranInx1]=nums[ranInx2];
            nums[ranInx2]=temp;

        }

        for (int i = 0; i < btns.length; i++) {
            // 찾고자하는 버튼 id
            // id(string) => id(int-주소)
            // R.id.(string) => int로 표기한거

            int resId = getResources().getIdentifier("btn" + (i + 1), "id", getPackageName());
            btns[i] = findViewById(resId);
            // 버튼 요소바꾸기 (ex: 색깔)
            // => 데이터 배열저장해서 인덱스를 부여하면 속성값을 바꾸기편하다
            btns[i].setTextColor(Color.parseColor("#33691E"));
            btns[i].setText(nums[i] + "");
            btns[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View currentEvent) {
                    //onClick의 매개변수가 View 타입이라는 것은
                    //View 클래스를 상속받고 있는 객체들은 전부 매개변수로 전달될 수 있다.
                    // =>업캐스팅 (하위 클래스 타입의 객체가 상위클래스 타입으로 형변환 되는 것)

                    //다시 하위클래스로 형변환시키는 것 : 다운캐스팅
                    Button btn = (Button) currentEvent;

                    if(Integer.parseInt(btn.getText().toString())==currentIndex) {
                        currentEvent.setVisibility(View.INVISIBLE);
                        currentIndex++;
                        if(currentIndex==25){
                            timer.stop();
                        }
                        timer.start();
                    }
                    // 매개변수 currentEvent => 안보이게 만듬
                    // 그 다음 단계 순서에 맞게 클릭했는지 확인
                    //currentIndex와 btn에 적혀있는 숫자가 일치한다면

                }
            });

        }
    }
}
profile
꾸준히

0개의 댓글