java做一个打地鼠小游戏

想起了了大学那会做过这个小游戏,今天重新写一下

首先准备几个素材图片,搜了半天没有,只好自己找了个图片截了一下(如果侵权了联系我删除)。

JFrame画一个主页面,设置了全局的行、列和总数,循环添加所有的地鼠洞并注册点击事件,我把所有的洞存在了一个ArrayList里面(随机访问,减少循环判断)

开一个线程用于地鼠钻出的事件,生成随机数,此位置是空洞的话(否则重新生成),添加地鼠,等设置时间结束,如果没有改变就消失,如此循环执行

添加点击事件,打中地鼠,调用一个线程,执行地鼠消失的事件

/**
 * 打地鼠页面
 * Created by will on 2020/7/27.
 */
public class MouseFrame extends JFrame implements MouseListener {

    // 行,列,总数
    private int row = 6;
    private int column = 8;
    private int count = row * column;
    // 存储每个画面
    List<JLabel> labelList = new ArrayList();
    //
    private JPanel mainPanel = new JPanel(new GridLayout(row, column));
    // 图片
    ImageIcon hole = new ImageIcon("./src/main/resources/images/hole.png");
    ImageIcon mouse1 = new ImageIcon("./src/main/resources/images/mouse1.png");
    ImageIcon mouse2 = new ImageIcon("./src/main/resources/images/mouse2.png");
    ImageIcon hit = new ImageIcon("./src/main/resources/images/hit.png");

    /**
     * 打地鼠主页面
     */
    public MouseFrame() {
        // 窗口大小
        this.setSize(800, 600);
        // 把窗口位置设置到屏幕中心
        this.setLocationRelativeTo(null);
        // 关闭窗口时退出程序
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setTitle("打地鼠");

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                JLabel holeLabel = new JLabel(hole);
                holeLabel.addMouseListener(this);
                labelList.add(holeLabel);
                mainPanel.add(holeLabel);
            }
        }
        // 地鼠刷新
        new Thread(new MouseThread()).start();

        this.setContentPane(mainPanel);
        this.setVisible(true);
    }

    /**
     * 鼠标点击事件
     *
     * @param e
     */
    @Override
    public void mouseClicked(MouseEvent e) {
        JLabel holeLabel = (JLabel) e.getSource();
        // 存在地鼠,调用消失事件
        if (holeLabel.getIcon() == mouse2) {
            new Thread(new MouseDisThread(holeLabel)).start();
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }

    /**
     * 地鼠钻出的事件
     */
    class MouseThread implements Runnable {

        @Override
        public void run() {
            while (true) {
                // 生成随机位置
                int num = new Random().nextInt(count);
                // 此位置如果是空的才进行出现的动作,否则生成新位置
                while (labelList.get(num).getIcon() != hole) {
                    num = new Random().nextInt(count);
                }
                // 地鼠出现的动作
                try {
                    labelList.get(num).setIcon(mouse1);
                    Thread.sleep(100);
                    labelList.get(num).setIcon(mouse2);
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                // 时间结束还是未点击的装态,设置为消失
                if (labelList.get(num).getIcon() == mouse2) {
                    labelList.get(num).setIcon(hole);
                }
            }
        }
    }

    /**
     * 被打消失
     */
    class MouseDisThread implements Runnable {

        JLabel holeLabel;

        public MouseDisThread(JLabel holeLabel) {
            this.holeLabel = holeLabel;
        }

        @Override
        public void run() {
            holeLabel.setIcon(hit);
            try {
                Thread.sleep(800);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            } finally {
                holeLabel.setIcon(hole);
            }
        }
    }

}

 

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Android Studio实现打地鼠小游戏的步骤: 1.创建一个新的Android Studio项目,选择Empty Activity模板。 2.在app/build.gradle文件中添加以下依赖项: ```gradle dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' } ``` 3.在activity_main.xml文件中添加一个RelativeLayout布局,并在其中添加一个ImageView元素,用于显示地鼠图片。 4.创建一个名为Mouse的Java类,用于表示地鼠对象。该类应该包含以下属性: ```java public class Mouse { private int x; private int y; private boolean visible; public Mouse(int x, int y) { this.x = x; this.y = y; this.visible = false; } public int getX() { return x; } public int getY() { return y; } public boolean isVisible() { return visible; } public void setVisible(boolean visible) { this.visible = visible; } } ``` 5.在MainActivity.java文件中添加以下代码: ```java public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageView mouseImageView; private Mouse mouse; private Handler handler; private int score; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mouseImageView = findViewById(R.id.mouseImageView); mouseImageView.setOnClickListener(this); mouse = new Mouse(0, 0); handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { update(); handler.postDelayed(this, 1000); } }, 1000); } private void update() { Random random = new Random(); int x = random.nextInt(mouseImageView.getWidth() - mouseImageView.getDrawable().getIntrinsicWidth()); int y = random.nextInt(mouseImageView.getHeight() - mouseImageView.getDrawable().getIntrinsicHeight()); mouse.setX(x); mouse.setY(y); mouse.setVisible(true); mouseImageView.setX(x); mouseImageView.setY(y); mouseImageView.setVisibility(View.VISIBLE); } @Override public void onClick(View v) { if (mouse.isVisible()) { score++; Toast.makeText(this, "Score: " + score, Toast.LENGTH_SHORT).show(); mouse.setVisible(false); mouseImageView.setVisibility(View.INVISIBLE); } } } ``` 6.运行应用程序,您应该能够看到一个ImageView元素,该元素将在屏幕上随机显示,并且当用户单击它时,将显示一个Toast消息,显示用户的得分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值