当前位置:   article > 正文

java做一个打地鼠小游戏_java打地鼠

java打地鼠

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

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

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

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

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

  1. /**
  2. * 打地鼠页面
  3. * Created by will on 2020/7/27.
  4. */
  5. public class MouseFrame extends JFrame implements MouseListener {
  6. // 行,列,总数
  7. private int row = 6;
  8. private int column = 8;
  9. private int count = row * column;
  10. // 存储每个画面
  11. List<JLabel> labelList = new ArrayList();
  12. //
  13. private JPanel mainPanel = new JPanel(new GridLayout(row, column));
  14. // 图片
  15. ImageIcon hole = new ImageIcon("./src/main/resources/images/hole.png");
  16. ImageIcon mouse1 = new ImageIcon("./src/main/resources/images/mouse1.png");
  17. ImageIcon mouse2 = new ImageIcon("./src/main/resources/images/mouse2.png");
  18. ImageIcon hit = new ImageIcon("./src/main/resources/images/hit.png");
  19. /**
  20. * 打地鼠主页面
  21. */
  22. public MouseFrame() {
  23. // 窗口大小
  24. this.setSize(800, 600);
  25. // 把窗口位置设置到屏幕中心
  26. this.setLocationRelativeTo(null);
  27. // 关闭窗口时退出程序
  28. this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  29. this.setTitle("打地鼠");
  30. for (int i = 0; i < row; i++) {
  31. for (int j = 0; j < column; j++) {
  32. JLabel holeLabel = new JLabel(hole);
  33. holeLabel.addMouseListener(this);
  34. labelList.add(holeLabel);
  35. mainPanel.add(holeLabel);
  36. }
  37. }
  38. // 地鼠刷新
  39. new Thread(new MouseThread()).start();
  40. this.setContentPane(mainPanel);
  41. this.setVisible(true);
  42. }
  43. /**
  44. * 鼠标点击事件
  45. *
  46. * @param e
  47. */
  48. @Override
  49. public void mouseClicked(MouseEvent e) {
  50. JLabel holeLabel = (JLabel) e.getSource();
  51. // 存在地鼠,调用消失事件
  52. if (holeLabel.getIcon() == mouse2) {
  53. new Thread(new MouseDisThread(holeLabel)).start();
  54. }
  55. }
  56. @Override
  57. public void mousePressed(MouseEvent e) {
  58. }
  59. @Override
  60. public void mouseReleased(MouseEvent e) {
  61. }
  62. @Override
  63. public void mouseEntered(MouseEvent e) {
  64. }
  65. @Override
  66. public void mouseExited(MouseEvent e) {
  67. }
  68. /**
  69. * 地鼠钻出的事件
  70. */
  71. class MouseThread implements Runnable {
  72. @Override
  73. public void run() {
  74. while (true) {
  75. // 生成随机位置
  76. int num = new Random().nextInt(count);
  77. // 此位置如果是空的才进行出现的动作,否则生成新位置
  78. while (labelList.get(num).getIcon() != hole) {
  79. num = new Random().nextInt(count);
  80. }
  81. // 地鼠出现的动作
  82. try {
  83. labelList.get(num).setIcon(mouse1);
  84. Thread.sleep(100);
  85. labelList.get(num).setIcon(mouse2);
  86. Thread.sleep(1500);
  87. } catch (InterruptedException e) {
  88. e.printStackTrace();
  89. }
  90. // 时间结束还是未点击的装态,设置为消失
  91. if (labelList.get(num).getIcon() == mouse2) {
  92. labelList.get(num).setIcon(hole);
  93. }
  94. }
  95. }
  96. }
  97. /**
  98. * 被打消失
  99. */
  100. class MouseDisThread implements Runnable {
  101. JLabel holeLabel;
  102. public MouseDisThread(JLabel holeLabel) {
  103. this.holeLabel = holeLabel;
  104. }
  105. @Override
  106. public void run() {
  107. holeLabel.setIcon(hit);
  108. try {
  109. Thread.sleep(800);
  110. } catch (InterruptedException e1) {
  111. e1.printStackTrace();
  112. } finally {
  113. holeLabel.setIcon(hole);
  114. }
  115. }
  116. }
  117. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/746402
推荐阅读
相关标签
  

闽ICP备14008679号