结对编程——黄金点游戏

    本次做业属于结对编程项目,由我和薛鹏飞用了2天时间共同完成。java

    开始作这个结对编程前,一开始我提议和薛鹏飞用C语言写,可是后来有看了老师对结对编程的细节要求,选择了最后刚最新学习的Java语言,C语言实现可视化界面十分困难,放弃了C语言。因为Java有不少优势,对于可视化界面编程很方便,正好薛鹏飞在eclipse里装了一个可视化编程工具——windowbulider,这样实现一个较为友好的的游戏界面就十分容易了。正则表达式

    有了便捷的编译环境必须考虑项目的需求分析,个人设计参考了其同窗输入输出,这样对玩游戏出现很大的可预测下,薛鹏飞说不该该要在游戏输入数据时出现可预测性,将每个输入的数据用加密输入,用*显示输出,这样保证了数据游戏乐趣,这样的游戏在内心上就刺激了游戏玩家,吸引更多的人去玩。由于咱们感受这个游戏的乐趣其实在于玩家会由上一组结果来预测其余人将输入的数并决定本次要输入多大的数(亲自试过这游戏,最后你们输入的数愈来愈小......),是一个心理博弈类的游戏,因此咱们决定设计一个不限人数和次数的黄金点游戏。编程

    咱们设计游戏界面,做为两个普通的理工科学生,咱们尽可能精简游戏的界面,经过定义了一个JPasswordField做为玩家的加密输入,定义了两个按钮JButton分别添加了单击事件用做输入本次结果和总成绩,定义了一个JTextArea用来显示结果。数组

    设计完界面后咱们进行具体编码操做,首先是显示本次结果部分:定义一个字符串用正则表达式获取玩家输入的数并显示结果,定义一个double类型的数组存输入的数(方便取绝对值),通过计算找出胜利者和失败者,算出他们得分和扣分,算出既没有得分又没扣分的人员得分均显示0分。app

    最后是显示总分的部分:以前打算在这里一次计算出总成绩。例如:m我的在玩,1号玩家赢了一次输了2次那么得分为m-2-2分。可是以前的单击事件(显示本次结果)获得的结果没有进行保存,而要达到输出目的必需要把每次结果存放到一个容器里而后在输出,因此咱们要在显示本次结果的事件里在写一些代码用来存放本次数据。首先咱们想到数组但马上就被我否决了,由于数组长度是固定的,而游戏人数咱们不但愿是固定的,就好像一帮人玩游戏,忽然有我的走了或者有其余人想加入了,那这游戏就不能玩了?因此数组不知足要求,和数组功能相似的是arraylist,这个能够改变长度,而且把索引位置看成玩家就能够输出该玩家的结果。但薛鹏飞感受既然是一我的对应了一个分数,那么这种映射关系仍是用HashMap来存放比较好,这样一个玩家(key)对应着一个得分(value)。因此咱们采用了HashMap,每轮都对里面的内容进行修改。而后在显示总分的事件里只须要打印里面的内容便可。eclipse

    经过这次结对编程,加深了对合做的认识,在如今社会就是一个合做的时代,并非一个适合特立独行的时代。要认识本身的劣势和长处,客观的认识本身,结对编程锻炼的是彼此统一的合做,必须一块儿努力。在此次结对编程中,特别感谢薛鹏飞同窗在此次合做时的全力以赴,在一些我出现错误分析时马上予以纠正,同时薛鹏飞有很强的创新思想,思考问题很全面,在自学Java学习方面很刻苦,用了很短的时间就学会了一门语言,学习能力很强,但愿之后可以与他多多合做。ide

    学海无涯,必须共同努力,多与任何人去参与项目,锻炼本身的团队意识,加油,走向“源始时代”。工具

    源代码以下:学习

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;

public class dfgsd extends JFrame {

    private JPanel contentPane;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    dfgsd frame = new dfgsd();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public dfgsd() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        
        HashMap<Integer,Double> map=new HashMap<Integer,Double>();
        
        textField = new JPasswordField();
        textField.setColumns(10);
        
        JTextArea textArea = new JTextArea();
        textArea.setWrapStyleWord(true);
        
        JLabel lblNewLabel = new JLabel("\u8BF7\u8F93\u5165");
        
        JButton btnNewButton = new JButton("\u67E5\u770B\u672C\u6B21\u7ED3\u679C");
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                
                int sum = 0;
                int length = 0;
                String result = textField.getText();
                String[] a = result.split("\\D");
                for(int i = 0;i < a.length;i++) {
                    textArea.append(((i+1)+"输入的数为" + a[i]));
                    textArea.append("\n");
                sum =sum + Integer.parseInt(a[i]);
                length ++;
                }
                double b = sum/(length)*0.618;
                textArea.append("结果为"+b);
                textArea.append("\n");
                
                double[] type = new double[a.length];
                int max = 1,min = 1;        
                for(int i = 0;i < a.length;i++) {
                    type[i] = Double.parseDouble(a[i]);
                }
                double Min = type[0];
                double Max = 0f;

                for(int i = 0;i < a.length;i++) {
                    if(Max < java.lang.Math.abs(type[i]-b)) {
                        Max = java.lang.Math.abs(type[i]-b);
                        max = i + 1;
                    }
                    else
                        if(Min > java.lang.Math.abs(type[i]-b)) {
                            Min = java.lang.Math.abs(type[i]-b);
                            min = i + 1;
                        }
                }
                
                textArea.append("获胜者是:"+min+"输入的数为"+type[min-1]+"加"+a.length+"分");
                textArea.append("\n");
                textArea.append("失败者是:"+max+"输入的数为"+type[max-1]+"减2分");
                textArea.append("\n");
                
                boolean contains = map.containsKey(max);
                if(contains) {
                    map.put(max, (double) (map.get(max) - 2));
                }else {
                    map.put(max, (double) - 2);
                }
                boolean contains2 = map.containsKey(min);
                if(contains2) {
                map.put(min, (double) (a.length)+map.get(min));
                }else {
                    map.put(min, (double) a.length);
                }    
            }
        });
        
        JButton btnNewButton_1 = new JButton("\u67E5\u770B\u6700\u7EC8\u5F97\u5206");
        btnNewButton_1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                
                for (Integer Key : map.keySet())  
                {  
                    textArea.append( Key + ":\t" + map.get(Key)); 
                    textArea.append("\n");
                }  
                textArea.append("其余人均为0分,请继续努力");
            }
        });
        
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
                        .addGroup(gl_contentPane.createSequentialGroup()
                            .addComponent(lblNewLabel)
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addComponent(textField, GroupLayout.PREFERRED_SIZE, 301, GroupLayout.PREFERRED_SIZE))
                        .addGroup(gl_contentPane.createSequentialGroup()
                            .addGap(60)
                            .addComponent(btnNewButton)
                            .addGap(37)
                            .addComponent(btnNewButton_1))
                        .addComponent(textArea, GroupLayout.PREFERRED_SIZE, 382, GroupLayout.PREFERRED_SIZE))
                    .addContainerGap(42, Short.MAX_VALUE))
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                        .addComponent(lblNewLabel)
                        .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                        .addComponent(btnNewButton)
                        .addComponent(btnNewButton_1))
                    .addGap(2)
                    .addComponent(textArea, GroupLayout.DEFAULT_SIZE, 206, Short.MAX_VALUE))
        );
        contentPane.setLayout(gl_contentPane);
    }
}

测试运行结果截图:测试

结对编程学习时的照片:

相关文章
相关标签/搜索