-
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