一、题目简介
1、计算机能对棋局进行分析、判断。根据棋局状态来确定机器方的下棋行为。
2、计算机能根据棋局状态实时的判断对弈双方的胜负。
3、控制双方交替下棋。
4、友好的界面呈现。
二、结对分工及过程
结对 刘永政(学号后四位:1139) 张斌(学号后四位:1136)
组员各自的优缺点:
1.刘永政: 代码的编写和代码规范。
2.张斌:程序的分析和程序的测试及测试代码的编写
三、结对编程优缺点:
优点:
1.结对编程时间紧密,在一定程度上可以督促双方学习,提高效率。
2.Coder在coding过程中会遇到一些细小的问题,而reviewer可以及时指出错误,并给予解决方案进行讨论。
3.遇到问题时,两个人一起讨论,并补充对方没有想到的地方,是完善程序最好的方式。
缺点:
在编程过程中,很长时间是coder在coding的过程中想思路,大概这也是每个程序员的特点,而这个时候reviewer就会长时间遇到空档期。
四、代码地址
https://github.com/heartgo/test
源代码:
| javax.swing.*; | |
| java.awt.*; | |
| java.awt.event.*; | |
| java.net.URL; | |
| JFrame { | |
| //棋盘背景位图 | |
| //黑子位图 | |
| //白子位图 | |
| //棋盘 | |
| JPanel east; | |
| JPanel west; | |
| 450; | |
| 500; | |
| //以下为下拉菜单 | |
| JMenuBar menubar; | |
| //人与人下还是人与电脑下,true与电脑下 | |
| Mouseclicked(); | |
| MouseMoved(); | |
| Menuitemclicked(); | |
| //构造函数 | |
| ChessMap(){ | |
| //改变系统默认字体 | |
| 12); | |
| .keys(); | |
| .hasMoreElements()) { | |
| .nextElement(); | |
| .get(key); | |
| .FontUIResource) { | |
| .put(key, font); | |
| } | |
| } | |
| FINAL_HEIGHT); | |
| false); | |
| init(); | |
| 2 | |
| .getDefaultToolkit() | |
| .height | |
| 2); | |
| .EXIT_ON_CLOSE); | |
| .reset(); | |
| true); | |
| } | |
| //初始化与默认值 | |
| init() | |
| { | |
| ChessPanel(map,blackchess,whitechess); | |
| JMenuBar(); | |
| ++) | |
| .add(menuitem1[i]); | |
| ++) | |
| .add(menuitem2[i]); | |
| ++) | |
| .add(menuitem3[i]); | |
| ++) | |
| .add(menu[i]); | |
| = getContentPane(); | |
| setJMenuBar(menubar); | |
| JPanel(); | |
| JPanel(); | |
| .addMouseListener(mouseclicked); | |
| .addMouseMotionListener(mousemoved); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| .addActionListener(menuclicked); | |
| } | |
| //判断鼠标左击并通知棋盘和电脑 | |
| { | |
| e) | |
| { | |
| false){ | |
| //和电脑博弈 | |
| Point(); | |
| .getY()); | |
| .x; | |
| .y; | |
| // 如果该位置已经放置棋子 | |
| +y); | |
| 2) | |
| return; | |
| // 玩家为黑棋,考虑禁手 | |
| 0) { | |
| .bw); | |
| null; | |
| switch(type){ | |
| : | |
| break; | |
| : | |
| break; | |
| : | |
| break; | |
| break; | |
| } | |
| null) { | |
| null,str); | |
| return; | |
| } | |
| } | |
| .bw); | |
| .update( x, y ); | |
| //落子声音 | |
| // 第一步棋,需初始化设置边界值 | |
| 1){ | |
| 0) | |
| 1; | |
| 15) | |
| 1; | |
| 0) | |
| 1; | |
| 15) | |
| 1; | |
| } | |
| else | |
| .resetMaxMin(x,y); | |
| if (flag) { | |
| .bw); | |
| return; | |
| } | |
| .bw); | |
| //和人博弈 | |
| Point(); | |
| .getY()); | |
| .x; | |
| .y; | |
| // 如果该位置已经放置棋子 | |
| +y); | |
| 2) | |
| return; | |
| // 玩家为黑棋,考虑禁手 | |
| 0) { | |
| .bw); | |
| null; | |
| switch(type){ | |
| : | |
| break; | |
| : | |
| break; | |
| : | |
| break; | |
| break; | |
| } | |
| null) { | |
| null,str); | |
| return; | |
| } | |
| } | |
| .bw); | |
| .update( x, y ); | |
| //落子声音 | |
| .repaint(); | |
| // 第一步棋,需初始化设置边界值 | |
| 1){ | |
| 0) | |
| 1; | |
| 15) | |
| 1; | |
| 0) | |
| 1; | |
| 15) | |
| 1; | |
| } | |
| else | |
| .resetMaxMin(x,y); | |
| if (flag) { | |
| .bw); | |
| return; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| //调试用,获得鼠标位置 | |
| { | |
| e) | |
| { | |
| .getPoint()); | |
| } | |
| e) | |
| {} | |
| } | |
| //菜单消息处理 | |
| { | |
| e) | |
| { | |
| .getSource(); | |
| .getActionCommand(); | |
| //重开一局 | |
| .reset(); | |
| .WHITE_ONE) | |
| 7); | |
| //player=cp.BLACK_ONE; | |
| } | |
| //悔棋 | |
| .win) { | |
| return; | |
| } | |
| // 当前轮到玩家下棋,取消两步 否则,取消一步 | |
| .sbw){ | |
| 2; | |
| 2; | |
| 2; | |
| .repaint(); | |
| } | |
| .sbw){ | |
| 2; | |
| --; | |
| .repaint(); | |
| } | |
| } | |
| //退出 | |
| 1); | |
| } | |
| //禁手选择 | |
| .showOptionDialog( | |
| .DEFAULT_OPTION, | |
| null, | |
| 0]); | |
| 1){ | |
| true; | |
| else{ | |
| false; | |
| } | |
| } | |
| //人机博弈 | |
| true; | |
| .showOptionDialog( | |
| .DEFAULT_OPTION, | |
| null, | |
| 0]); | |
| //机器先手 | |
| .WHITE_ONE; | |
| 7); | |
| //人先手 | |
| //player=cp.BLACK_ONE; | |
| .BLACK_ONE; | |
| } | |
| } | |
| //人人博弈 | |
| false; | |
| true); | |
| //规则 | |
| null, | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| .INFORMATION_MESSAGE); | |
| } | |
| //版权与帮助 | |
| + | |
| + | |
| .INFORMATION_MESSAGE); | |
| } | |
| } | |
| } | |
| args) { | |
| ChessMap(); | |
| } | |
| } |
运行截图
五、测试情况
六、心得
通过这次结对作业,我知道了两个人一起编程是需要配合的,如果配合不好会比较痛苦,但也有很多优点,这种方式减少了个人工作量,也会让程序编写的更好