You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio数学游戏难度选择界面仅显示标题不显示等级求助

解决Android数学游戏难度等级选择功能的实现方案

看起来你已经完成了“难度”标题的展示,现在只需要补上具体的等级选项和对应的逻辑就行。我给你两种常用的实现方案,你可以根据自己的布局需求来选:

方案一:在当前Activity布局中嵌入难度选择区域

这种方式适合希望把选择界面和游戏界面放在同一个布局的场景,步骤如下:

1. 修改你的activity_brain.xml布局

在现有布局中添加难度选择的UI组件(初始隐藏,点击新游戏按钮后显示):

<!-- 假设你的布局是LinearLayout/ConstraintLayout,添加以下代码 -->
<LinearLayout
    android:id="@+id/difficulty_selection_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:visibility="gone" <!-- 初始状态隐藏 -->
    android:padding="16dp"
    android:layout_marginTop="20dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="难度等级"
        android:textSize="20sp"
        android:textStyle="bold"/>

    <RadioGroup
        android:id="@+id/difficulty_radio_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="12dp">

        <RadioButton
            android:id="@+id/easy_radio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="简单(1-10加减法)"
            android:textSize="16sp"/>

        <RadioButton
            android:id="@+id/medium_radio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="中等(1-50加减乘)"
            android:textSize="16sp"/>

        <RadioButton
            android:id="@+id/hard_radio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="困难(1-100四则运算)"
            android:textSize="16sp"/>
    </RadioGroup>

    <Button
        android:id="@+id/confirm_difficulty_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始游戏"
        android:layout_marginTop="16dp"/>
</LinearLayout>

2. 在BrainActivity中添加逻辑处理

初始化控件,绑定点击事件,处理难度选择和游戏启动:

public class BrainActivity extends AppCompatActivity {
    private LinearLayout difficultyLayout;
    private RadioGroup difficultyRadioGroup;
    private Button confirmBtn;
    private Button newGameBtn;

    // 定义难度常量,方便后续逻辑判断
    private static final int DIFFICULTY_EASY = 1;
    private static final int DIFFICULTY_MEDIUM = 2;
    private static final int DIFFICULTY_HARD = 3;
    private int selectedDifficulty = DIFFICULTY_EASY; // 默认选中简单难度

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

        // 初始化所有需要用到的控件
        newGameBtn = findViewById(R.id.new_game_btn);
        difficultyLayout = findViewById(R.id.difficulty_selection_layout);
        difficultyRadioGroup = findViewById(R.id.difficulty_radio_group);
        confirmBtn = findViewById(R.id.confirm_difficulty_btn);

        // 新游戏按钮点击事件:显示难度选择区域
        newGameBtn.setOnClickListener(v -> {
            difficultyLayout.setVisibility(View.VISIBLE);
            // 如果有游戏内容区域,这里可以隐藏它,比如:
            // findViewById(R.id.game_content_layout).setVisibility(View.GONE);
        });

        // 确认难度按钮点击事件:获取选中难度并启动游戏
        confirmBtn.setOnClickListener(v -> {
            int selectedRadioId = difficultyRadioGroup.getCheckedRadioButtonId();
            if (selectedRadioId != -1) {
                // 根据选中的RadioButton设置难度
                switch (selectedRadioId) {
                    case R.id.easy_radio:
                        selectedDifficulty = DIFFICULTY_EASY;
                        break;
                    case R.id.medium_radio:
                        selectedDifficulty = DIFFICULTY_MEDIUM;
                        break;
                    case R.id.hard_radio:
                        selectedDifficulty = DIFFICULTY_HARD;
                        break;
                }
                // 隐藏难度选择区域,启动游戏
                difficultyLayout.setVisibility(View.GONE);
                startNewGame(selectedDifficulty);
            } else {
                // 用户未选择难度时提示
                Toast.makeText(this, "请先选择一个难度等级", Toast.LENGTH_SHORT).show();
            }
        });
    }

    // 根据选中的难度启动新游戏的核心方法
    private void startNewGame(int difficulty) {
        // 这里替换成你自己的游戏逻辑:根据难度生成对应题目、初始化得分等
        switch (difficulty) {
            case DIFFICULTY_EASY:
                generateEasyQuestions();
                break;
            case DIFFICULTY_MEDIUM:
                generateMediumQuestions();
                break;
            case DIFFICULTY_HARD:
                generateHardQuestions();
                break;
        }
        // 显示游戏内容区域(如果之前隐藏了)
        // findViewById(R.id.game_content_layout).setVisibility(View.VISIBLE);
    }

    // 以下是示例方法,你需要根据自己的需求实现具体逻辑
    private void generateEasyQuestions() {
        Toast.makeText(this, "开始简单难度游戏!", Toast.LENGTH_SHORT).show();
        // 生成1-10范围内的加减法题目并展示
    }

    private void generateMediumQuestions() {
        Toast.makeText(this, "开始中等难度游戏!", Toast.LENGTH_SHORT).show();
        // 生成1-50范围内的加减乘题目并展示
    }

    private void generateHardQuestions() {
        Toast.makeText(this, "开始困难难度游戏!", Toast.LENGTH_SHORT).show();
        // 生成1-100范围内的四则运算题目并展示
    }
}

方案二:使用AlertDialog弹出难度选择对话框

这种方式更简洁,不需要修改主布局,适合希望快速弹出选择界面的场景,只需修改BrainActivity中的新游戏按钮点击逻辑:

public class BrainActivity extends AppCompatActivity {
    private Button newGameBtn;
    private static final int DIFFICULTY_EASY = 1;
    private static final int DIFFICULTY_MEDIUM = 2;
    private static final int DIFFICULTY_HARD = 3;
    private int selectedDifficulty = DIFFICULTY_EASY;

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

        newGameBtn = findViewById(R.id.new_game_btn);

        newGameBtn.setOnClickListener(v -> {
            // 构建难度选择对话框
            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(BrainActivity.this);
            dialogBuilder.setTitle("选择游戏难度");

            // 定义难度选项数组
            String[] difficultyOptions = {
                "简单(1-10加减法)",
                "中等(1-50加减乘)",
                "困难(1-100四则运算)"
            };
            int defaultSelected = 0; // 默认选中第一个选项

            // 添加单选列表
            dialogBuilder.setSingleChoiceItems(difficultyOptions, defaultSelected, (dialog, which) -> {
                // 记录用户选中的难度
                switch (which) {
                    case 0:
                        selectedDifficulty = DIFFICULTY_EASY;
                        break;
                    case 1:
                        selectedDifficulty = DIFFICULTY_MEDIUM;
                        break;
                    case 2:
                        selectedDifficulty = DIFFICULTY_HARD;
                        break;
                }
            });

            // 确认按钮
            dialogBuilder.setPositiveButton("开始游戏", (dialog, which) -> {
                dialog.dismiss();
                startNewGame(selectedDifficulty);
            });

            // 取消按钮
            dialogBuilder.setNegativeButton("取消", (dialog, which) -> dialog.dismiss());

            // 显示对话框
            dialogBuilder.create().show();
        });
    }

    // 这个startNewGame方法和方案一的实现一致,这里就不重复写了
    private void startNewGame(int difficulty) {
        // 你的游戏逻辑...
    }
}

注意事项

  • 确保所有控件的ID和代码中的findViewById对应,比如你的“新游戏”按钮ID是new_game_btn,要和XML中的一致
  • startNewGame方法需要结合你自己的游戏逻辑来实现,比如生成题目、更新UI、初始化得分等
  • 你可以根据需求调整难度选项的内容,比如增加“专家级”难度,或者修改运算类型、数字范围

内容的提问来源于stack exchange,提问作者lele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:33:17