A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫言江城 中级黑马   /  2015-10-29 18:48  /  1085 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. <div class="blockcode"><blockquote>package app;
  2. import java.awt.Frame;
  3. import javax.swing.JFrame;
  4. import ui.CSZServiceFrame;
  5. public class MainApp {
  6.         public static void main(String[] args) {
  7.                 CSZServiceFrame csz=new CSZServiceFrame();
  8.                 csz.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  9.                 csz.setVisible(true);
  10.         }
  11. }
复制代码
  1. package service;

  2. import java.util.ArrayList;
  3. import java.util.Random;

  4. public class CSZService {
  5.         int index = 0;
  6.         String random = "";
  7.         String[] results = new String[8];

  8.         public boolean equalsRandom(String input) {
  9.                 return random.equals(input);
  10.         }

  11.         public void init() {
  12.                 for (int i = 0; i < results.length; i++) {
  13.                         results[i] = "";
  14.                 }
  15.                 index = 0;
  16.                 random = "";
  17.                 ArrayList<String> al = new ArrayList<String>();
  18.                 for (int i = 0; i < 10; i++) {
  19.                         al.add(i + "");
  20.                 }
  21.                 Random r = new Random();
  22.                 for (int i = 0; i < 4; i++) {
  23.                         String num = (String) al.remove(r.nextInt(10 - i));
  24.                         random += num;
  25.                 }
  26.                 //System.out.println("游戏产生的随机数为:" + random);
  27.         }
  28.         public  String[] getResult(){
  29.                 return results;
  30.         }
  31.         public int getIndex(){
  32.                 return index;
  33.         }
  34.         public String getRandom(){
  35.                 return random;
  36.         }
  37.         public void creatRsult(String input) {
  38.                 int numberRightCount = 0;
  39.                 int numberErrorCount = 0;
  40.                 for (int i = 0; i < input.length(); i++) {
  41.                         char charAt = input.charAt(i);
  42.                         if (random.contains(charAt + "")) {
  43.                                 int n = random.indexOf(charAt);
  44.                                 if (n == i) {
  45.                                         numberRightCount++;
  46.                                 } else {
  47.                                         numberErrorCount++;
  48.                                 }
  49.                         }
  50.                 }
  51.                 String result=numberRightCount+"A"+numberErrorCount+"b";
  52.                 results[index++]=index+">"+input+"-"+result;
  53.         }
  54.        
  55. }
复制代码
  1. package ui;

  2. import java.awt.BorderLayout;
  3. import java.awt.Font;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;

  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. import javax.swing.JOptionPane;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextField;

  12. public abstract class CSZFrame extends JFrame {
  13.         protected JTextField[] fields = new JTextField[4];// 创建长度为4的文本框数组
  14.         protected JButton btn = new JButton("确定");// 创建确定按钮
  15.         protected JLabel[] lables = new JLabel[2];// 创建长度为2标签数组

  16.         public CSZFrame() {
  17.                 // 初始化界面
  18.                 init();
  19.                 // 添加组件
  20.                 addComponent();
  21.                 // 添加监听器
  22.                 addListener();
  23.         }

  24.         private void addListener() {
  25.                 btn.addActionListener(new ActionListener() {

  26.                         public void actionPerformed(ActionEvent e) {
  27.                                 try {
  28.                                         String data=getInputAndValidate();
  29.                                         //lables[0].setText(data);
  30.                                         run(data);
  31.                                 }
  32.                                 catch (NumberFormatException e1) {
  33.                                         JOptionPane.showMessageDialog(CSZFrame.this, "请输入一个数字");
  34.                                 }
  35.                                 catch(RuntimeException e2){
  36.                                         JOptionPane.showMessageDialog(CSZFrame.this, "数字重复输入");
  37.                                        
  38.                                 }
  39.                                
  40.                         }

  41.                

  42.                 });
  43.         }
  44.         public abstract void run(String input);
  45.         public void clearTextFiels(){
  46.                 for (int i = 0; i < fields.length; i++) {
  47.                         fields[i].setText("");
  48.                 }
  49.         }
  50.         public String getInputAndValidate() throws RuntimeException,NumberFormatException {
  51.                 String result = "";
  52.                 for (int i = 0; i < fields.length; i++) {
  53.                         String input = fields[i].getText();
  54.                         int inputNum = Integer.parseInt(input);
  55.                         if (result.contains(inputNum + "")) {
  56.                                 throw new RuntimeException("数组输入重复");
  57.                         }
  58.                         result += inputNum;
  59.                 }

  60.                 return result;

  61.         }

  62.         private void addComponent() {
  63.                 // 设置布局(3个面板)
  64.                 JPanel j1 = new JPanel();
  65.                 JPanel j2 = new JPanel();
  66.                 JPanel j3 = new JPanel();
  67.                 // 设置面板拜访的位置
  68.                 this.add(j1, BorderLayout.NORTH);
  69.                 this.add(j2);
  70.                 this.add(j3, BorderLayout.SOUTH);
  71.                 // 创建4个文本框
  72.                 for (int i = 0; i < fields.length; i++) {
  73.                         // 创建每个文本输入框
  74.                         fields[i] = new JTextField(3);// 创建文本输入框,并设置宽度为3
  75.                         fields[i].setFont(new Font("宋体", 1, 18));// 设置文本框的字体
  76.                         j1.add(fields[i]);// 把文本框添加到面板1中
  77.                 }
  78.                 j1.add(btn);// 把按钮添加到面板1中
  79.                 for (int i = 0; i < lables.length; i++) {
  80.                         lables[i] = new JLabel();
  81.                         lables[i].setFont(new Font("宋体", 1, 14));// 设置字体
  82.                 }
  83.                 // 标签1添加到面板2中
  84.                 j2.add(lables[0]);
  85.                 // 标签2添加到面板3中
  86.                 j3.add(lables[1]);
  87.                 // lables[1].setText("A:代表数字出现,位置正确   B:代表数字出现,位置错误");
  88.                 lables[1]
  89.                                 .setText("<html><body>A:代表数字出现,位置正确 <br/>B:代表数字出现,位置错误</body></html>");

  90.         }

  91.         private void init() {
  92.                 // 设置窗体的宽高,位置,标题,不可改变大小
  93.                 this.setSize(300, 300);
  94.                 this.setLocation(500, 200);
  95.                 this.setTitle("猜数字小游戏");
  96.                 this.setResizable(false);
  97.         }
  98. }
复制代码
  1. package ui;

  2. import javax.swing.JOptionPane;

  3. import service.CSZService;

  4. public class CSZServiceFrame extends CSZFrame {
  5.         private CSZService csz = new CSZService();
  6.         boolean  youXiZhuangTai=true;
  7.         public CSZServiceFrame() {
  8.                 super();
  9.                 csz.init();
  10.         }

  11.        
  12.         public void run(String input) {
  13.                 //System.out.println("我被点击了");
  14.                 if(youXiZhuangTai==false){
  15.                         youXiZhuangTai=true;
  16.                         csz.init();
  17.                 }
  18.                 if(csz.equalsRandom(input)){
  19.                         JOptionPane.showMessageDialog(this, "恭喜你猜对了");
  20.                         youXiZhuangTai=false;
  21.                         clearTextFiels();
  22.                         return;
  23.                 }
  24.                 csz.creatRsult(input);
  25.                 String[] results= csz.getResult();
  26.                 String date="<html><body>";
  27.                 for (int i = 0; i < results.length; i++) {
  28.                         date+=results[i]+"<br/>";
  29.                 }
  30.                
  31.                  date+="</body></html>";
  32.                  lables[0].setText(date);
  33.                  if(csz.getIndex()==8){
  34.                          JOptionPane.showMessageDialog(this, "已猜8次,您的智商捉急,游戏结束,正确的数字为:"+csz.getRandom());
  35.                          youXiZhuangTai=false;
  36.                          clearTextFiels();
  37.                          
  38.                  }
  39.         }

  40. }
复制代码




4 个回复

正序浏览
不错不错
回复 使用道具 举报
这么长?
回复 使用道具 举报
是不是GUI实现的?
回复 使用道具 举报
好长的说
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马