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

Android原生库实现2x2网格1秒内触摸检测问题求助

游戏实现问题分析与解决

一、游戏核心需求

屏幕元素

  • TextView:显示游戏分数
  • 屏幕其余部分分为4个均等的彩色矩形视图

游戏目标

每秒随机将一个矩形视图变为灰色,灰色持续1秒后恢复原色,随后再次随机选中一个矩形变灰。玩家需在1秒内点击灰色矩形,确保每秒至少点击一次。

游戏规则

  • 点击灰色矩形:分数+1
  • 未在1秒内点击灰色矩形:游戏结束
  • 点击非灰色矩形:游戏结束

简言之,目标是1秒内点击灰色矩形,未点击或点击错误矩形均会导致游戏结束。


二、现有代码的问题分析

你写的这段代码有了基本框架,但存在不少会导致游戏无法正常运行的问题:

  1. 控件未绑定布局:startgame按钮、四个彩色按钮(ba/bb/bc/bd)、score文本框都没有通过findViewById和布局文件中的控件关联,直接调用setOnClickListener或者设置文本会触发空指针异常。
  2. 倒计时逻辑完全偏离需求:原代码用3秒的CountDownTimer,还把倒计时进度当成分数显示,这和“每秒切换灰色矩形、1秒内未点击则结束”的核心规则完全不符。
  3. 点击事件未处理:四个彩色矩形按钮没有设置点击监听器,玩家点击操作无法被捕获,clicked变量永远不会被正确赋值,游戏无法判断玩家是否点击了正确的按钮。
  4. 颜色控制方法为空:revertToOriginalColor和setGrayButton是空方法,没有实际修改按钮颜色的逻辑,根本实现不了“变灰-恢复原色”的视觉效果。
  5. 状态变量存在隐患:greyButton数组初始长度为2但未初始化默认值,第一次调用randomize时,会尝试恢复一个未赋值的索引,可能引发错误;firstrun的逻辑也没办法支撑循环切换灰色按钮的流程。

三、已解决方案的补充说明

你补充的实现View.OnClickListener并调整倒计时的思路是对的,这里再帮你理清楚关键逻辑细节:

  1. 绑定点击事件:实现接口后,要在onCreate里通过findViewById初始化所有按钮,然后调用setOnClickListener(this)把点击事件绑定到Activity,在重写的onClick方法里判断点击的按钮是否为当前灰色按钮:

    • 如果点击正确:分数+1,重置倒计时,调用randomize切换下一个灰色按钮
    • 如果点击错误:直接触发游戏结束
  2. 倒计时的正确用法:你补充的1秒倒计时逻辑是对的,它的核心作用是检测玩家是否在1秒内点击了灰色按钮:

    • 每次切换灰色按钮时,启动这个倒计时
    • 如果倒计时走完(1秒到了),说明玩家没点击,触发游戏结束
    • 如果玩家点击正确,立刻取消当前倒计时,再启动新的倒计时

你补充的倒计时代码片段:

// 初始化CountDownTimer
timer = new CountDownTimer(1000, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        // 这里可以不需要操作,或者显示剩余时间(可选)
    }

    @Override
    public void onFinish() {
        gameOver = true;
        this.cancel();
        simpleAlert(score); // 弹出游戏结束提示
    }
};

另外还要完善颜色控制方法:

  • setGrayButton里要保存按钮的原始颜色到greyButton[1],然后把按钮设置为灰色
  • revertToOriginalColor里根据索引找到对应的按钮,恢复它的原始颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:52:45