Загрузка данных


package com.example.rps;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    // 0 - камень, 1 - ножницы, 2 - бумага
    private static final String[] NAMES = {"Камень", "Ножницы", "Бумага"};

    private final Random random = new Random();
    private int targetScore;
    private int playerScore;
    private int computerScore;
    private boolean gameOver;

    private TextView tvTarget, tvScore, tvChoices, tvResult;
    private ImageButton btnRock, btnScissors, btnPaper;

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

        tvTarget = findViewById(R.id.tvTarget);
        tvScore = findViewById(R.id.tvScore);
        tvChoices = findViewById(R.id.tvChoices);
        tvResult = findViewById(R.id.tvResult);
        btnRock = findViewById(R.id.btnRock);
        btnScissors = findViewById(R.id.btnScissors);
        btnPaper = findViewById(R.id.btnPaper);
        Button btnNewGame = findViewById(R.id.btnNewGame);
        Button btnSettings = findViewById(R.id.btnSettings);

        btnRock.setOnClickListener(v -> play(0));
        btnScissors.setOnClickListener(v -> play(1));
        btnPaper.setOnClickListener(v -> play(2));
        btnNewGame.setOnClickListener(v -> startNewGame());
        btnSettings.setOnClickListener(v ->
                startActivity(new Intent(this, SettingsActivity.class)));
    }

    // При возврате с экрана настроек начинаем игру заново с новым лимитом очков
    @Override
    protected void onResume() {
        super.onResume();
        startNewGame();
    }

    private void startNewGame() {
        targetScore = getSharedPreferences(SettingsActivity.PREFS, MODE_PRIVATE)
                .getInt(SettingsActivity.KEY_TARGET, SettingsActivity.DEFAULT_TARGET);
        playerScore = 0;
        computerScore = 0;
        gameOver = false;
        setButtonsEnabled(true);
        tvTarget.setText(getString(R.string.win_points, targetScore));
        tvChoices.setText("");
        tvResult.setText(R.string.choose);
        updateScore();
    }

    private void play(int player) {
        if (gameOver) return;

        int computer = random.nextInt(3);
        String result;

        if (player == computer) {
            result = "Ничья в этом раунде!";
        } else if ((player - computer + 3) % 3 == 2) {
            // камень > ножницы, ножницы > бумага, бумага > камень
            playerScore++;
            result = "Вы выиграли раунд!";
        } else {
            computerScore++;
            result = "Раунд за компьютером!";
        }

        tvChoices.setText("Вы: " + NAMES[player] + "   Компьютер: " + NAMES[computer]);
        updateScore();

        if (playerScore >= targetScore || computerScore >= targetScore) {
            gameOver = true;
            setButtonsEnabled(false);
            result = (playerScore >= targetScore)
                    ? "Игра окончена. Вы победили! 🎉"
                    : "Игра окончена. Победил компьютер!";
        }
        tvResult.setText(result);
    }

    private void updateScore() {
        tvScore.setText("Вы " + playerScore + " : " + computerScore + " Компьютер");
    }

    private void setButtonsEnabled(boolean enabled) {
        btnRock.setEnabled(enabled);
        btnScissors.setEnabled(enabled);
        btnPaper.setEnabled(enabled);
        float alpha = enabled ? 1f : 0.4f;
        btnRock.setAlpha(alpha);
        btnScissors.setAlpha(alpha);
        btnPaper.setAlpha(alpha);
    }
}