ZBLOG

import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.JTextField; import java...

以下是修改后的代码,实现了简单、普通、困难三种不同难度的拿火柴游戏:

import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.JTextField; import javax.swing.ButtonGroup; import javax.swing.JOptionPane; import javax.swing.JRadioButton;

public class Test1 extends JFrame implements ActionListener {

  1. private static final long serialVersionUID = 920921981358099067L;
  2. public int sumMatch, difficulty;
  3. private JLabel lbPer, lbCom, lbLast, lbDifficulty;
  4. private JButton btnStart, btnOne, btnTwo, btnThree;
  5. private JTextField tfPcshow, tfLastshow;
  6. private JRadioButton rbEasy, rbNormal, rbHard;
  7. private boolean win = true;
  8. public Test1() {
  9. super("计科2班第六组拿火柴小游戏");
  10. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  11. setSize(600, 350);
  12. setResizable(false);
  13. initUI();
  14. setLocationRelativeTo(null);
  15. }
  16. private void initUI() {
  17. Container container = getContentPane();
  18. ButtonGroup group = new ButtonGroup();
  19. btnStart = new JButton("开始游戏");
  20. btnStart.setBounds(410, 100, 150, 30);
  21. lbPer = new JLabel("你拿火柴数");
  22. lbPer.setBounds(40, 50, 120, 30);
  23. lbCom = new JLabel("电脑拿火柴数");
  24. lbCom.setBounds(40, 100, 120, 30);
  25. lbLast = new JLabel("剩余火柴数");
  26. lbLast.setBounds(40, 150, 120, 30);
  27. lbDifficulty = new JLabel("请选择难度");
  28. lbDifficulty.setBounds(40, 200, 120, 30);
  29. btnOne = new JButton("1");
  30. btnOne.setBounds(210, 50, 80, 40);
  31. btnTwo = new JButton("2");
  32. btnTwo.setBounds(310, 50, 80, 40);
  33. btnThree = new JButton("3");
  34. btnThree.setBounds(410, 50, 80, 40);
  35. tfPcshow = new JTextField();
  36. tfPcshow.setBounds(210, 100, 150, 30);
  37. tfPcshow.setEditable(false);
  38. tfLastshow = new JTextField();
  39. tfLastshow.setBounds(210, 150, 150, 30);
  40. tfLastshow.setEditable(false);
  41. rbEasy = new JRadioButton("简单", true);
  42. rbEasy.setBounds(180,200 ,60 ,30 );
  43. rbNormal = new JRadioButton("普通");
  44. rbNormal.setBounds(240 ,200 ,60 ,30 );
  45. rbHard= new JRadioButton("困难");
  46. rbHard.setBounds(300 ,200 ,60 ,30 );
  47. group.add(rbEasy);
  48. group.add(rbNormal);
  49. group.add(rbHard);
  50. container.setLayout(null);
  51. container.add(lbPer);
  52. container.add(lbCom);
  53. container.add(lbLast);
  54. container.add(btnStart);
  55. container.add(btnOne);
  56. container.add(btnTwo);
  57. container.add(btnThree);
  58. container.add(tfPcshow);
  59. container.add(tfLastshow);
  60. container.add(rbEasy);
  61. container.add(rbNormal);
  62. container.add(rbHard);
  63. btnStart.addActionListener(this);
  64. btnOne.addActionListener(this);
  65. btnTwo.addActionListener(this);
  66. btnThree.addActionListener(this);
  67. }
  68. public void actionPerformed(ActionEvent e) {
  69. if (e.getSource() == btnStart) {
  70. sumMatch = (int) (Math.random() * (50 - 20)) + 20;
  71. tfPcshow.setText("电脑已经确定了初始火柴数,你先拿吧!");
  72. tfLastshow.setText("剩余火柴数:" + sumMatch);
  73. if(rbEasy.isSelected()) {
  74. difficulty = 1;
  75. } else if(rbNormal.isSelected()) {
  76. difficulty = 2;
  77. } else if(rbHard.isSelected()) {
  78. difficulty = 3;
  79. }
  80. } else if (e.getSource() instanceof JButton) {
  81. int k = Integer.parseInt(((JButton)e.getSource()).getText());
  82. sumMatch -= k;
  83. if(sumMatch < 0) {
  84. JOptionPane.showMessageDialog(this, "请点击开始游戏按钮", "TEST", JOptionPane.INFORMATION_MESSAGE);
  85. return;
  86. }
  87. tfLastshow.setText("剩余火柴数:" + sumMatch);
  88. if(sumMatch == 0) {
  89. win = false;
  90. showResult();
  91. } else {
  92. tfPcshow.setText("电脑正在思考,请稍等...");
  93. computerMove();
  94. }
  95. }
  96. }
  97. private void computerMove() {
  98. new Thread(new Runnable() {
  99. public void run() {
  100. try{Thread.sleep(1000);} catch(Exception e){}
  101. int comNum;
  102. switch(difficulty) {
  103. case 1: // 简单难度,电脑随机拿取一定数量的火柴
  104. comNum=(int)(Math.random()*3)+1;
  105. break;
  106. case 2: // 普通难度,电脑根据当前火柴数量计算拿取数量
  107. comNum=(sumMatch-1)%4;
  108. if(comNum == 0) {
  109. comNum = (int)(Math.random()*3)+1;
  110. }
  111. break;
  112. case 3: // 困难难度,电脑使用人工智能算法计算拿取数量
  113. comNum=AI.calculate(sumMatch);
  114. break;
  115. default:
  116. return;
  117. }
  118. sumMatch -= comNum;
  119. if(sumMatch <= 0) {
  120. win = true;
  121. showResult();
  122. } else {
  123. tfPcshow.setText("电脑拿了 " + comNum + " 根火柴,轮到你了!");
  124. }
  125. tfLastshow.setText("剩余火柴数:" + sumMatch);
  126. }
  127. }).start();
  128. }
  129. private void showResult() { // 显示游戏结果的方法
  130. if(win) {
  131. JOptionPane.showMessageDialog(this, "恭喜你赢了!", "TEST", JOptionPane.INFORMATION_MESSAGE);
  132. } else {
  133. JOptionPane.showMessageDialog(this, "你输了,再试一次吧", "TEST", JOptionPane.INFORMATION_MESSAGE);
  134. }
  135. btnStart.setEnabled(true); // 结束后启用开始游戏按钮
  136. rbEasy.setEnabled(true); rbNormal.setEnabled(true); rbHard.setEnabled(true); // 启用单选按钮组
  137. }
  138. public static void main(String[] args) {
  139. Test1 frame = new Test1();
  140. frame.setVisible(true);
  141. }

}

在新的代码中,增加了一个单选按钮组用来选择难度,共有三个选项:简单、普通、困难。根据不同的难度,电脑会采取不同的策略来拿取火柴。

  • 简单难度:电脑随机拿取 1~3 根火柴。
  • 普通难度:电脑计算剩余火柴数对 4 取模后得到的余数,然后根据这个余数来决定拿多少根火柴。如果计算结果为 0,则电脑随机拿取 1~3 根火柴。
  • 困难难度:电脑使用人工智能算法计算应该拿多少根火柴。

当玩家点击开始游戏按钮时,程序会生成一个初始的火柴数量,并且让玩家先手。当玩家和电脑轮流拿取火柴时,程序会实时更新剩余的火柴数量,并在每一步之后显示出轮到谁操作以及提示信息。当最后一根火柴被拿走时,游戏结束并展示胜负结果。

需要注意的是,在新代码中我们使用了线程(Thread)来模拟电脑思考过程,并且在困难模式下使用了人工智能算法。这样可以让程序更加灵活,不会因为电脑思考过程而阻塞主线程的运行。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3682

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?