以前只是一个人完成一个项目,不论什么都是,现在突然要两个人一起来写, 听上去挺稀奇的,也挺简单的,可惜了就是“听上去”而已。我认为这也是一种技术啊~

我跟我的搭档研究了好久好久,选择了好久,然后也选了各种语言,最后决定了用Java。本来我打算做一个数独的小项目,可惜搭档说还是做五子棋的(主要我觉得做五子棋的人太多了),所以最后还是做了五子棋的,这是源码的github链接。

我们用Java编写了一个五子棋游戏,实现了实现了人人对战,人机对战。其中人机对战使用了很简单的AI,使棋子随机出现在棋盘的各个位置。在整个过程中,我有我的活儿,我的搭档(cnblongs)也有他的任务。

一、分工情况:

崔琪:GUI设计以及代码规范

孙明东:负责棋子胜负判断部分

二、过程分析:

这次我主要负责的是GUI设计以及代码规范,我来大概说说GUI吧。

GUI编程规范总结:

1、一般情况下对话框第一栏都是菜单栏,因此首先就是建立菜单栏。在GUI控件使用时所有的控件都是层层嵌套的,就是控件依托,最终整合到面板上,进而再添加事件监听器,已响应事件的发生;

建立菜单:

  1. public MenuBar getMB(){//创建菜单栏
  2. MenuBar mb = new MenuBar();
  3.  
  4. Menu file = new Menu("文件");//文件菜单
  5. MenuItem open = new MenuItem("打开");//打开菜单项
  6. file.add(open);
  7. MenuItem save = new MenuItem("保存");//保存菜单项
  8. file.add(save);
  9. file.addSeparator();
  10. MenuItem exit = new MenuItem("退出");//退出菜单项
  11. file.add(exit);
  12.  
  13. Menu game = new Menu("游戏");
  14.  
  15. MenuItem begin = new MenuItem("开始游戏");//开始游戏菜单项
  16. game.add(begin);
  17. game.addSeparator();
  18. MenuItem mantoman = new MenuItem("人人对战");
  19. game.add(mantoman);
  20. MenuItem mantocpu = new MenuItem("人机对战");
  21. game.add(mantocpu);
  22.  
  23. Menu have = new Menu("执子颜色");
  24. MenuItem haveblcak = new MenuItem("黑色");
  25. have.add(haveblcak);
  26. MenuItem havewhite = new MenuItem("白色");
  27. have.add(havewhite);
  28.  
  29. game.addSeparator();
  30. game.add(have);
  31.  
  32. Menu help = new Menu("帮助");//帮助菜单
  33. MenuItem about = new MenuItem("关于");//打开菜单项
  34. help.add(about);
  35.  
  36. mb.add(file);
  37. mb.add(game);
  38. mb.add(help);
  39.  
  40. MenuAction al = new MenuAction();
  41. open.addActionListener(al);
  42. save.addActionListener(al);
  43. about.addActionListener(al);
  44. exit.addActionListener(al);
  45. begin.addActionListener(al);
  46. mantoman.addActionListener(al);
  47. mantocpu.addActionListener(al);
  48. haveblcak.addActionListener(al);
  49. havewhite.addActionListener(al);
  50. return mb;
  51. }

在这里举一例。

GUI框架的设计步骤:

①首先要建立主框架:JFrame f=new JFrame();

②取得框架的内容窗格 Container contentPane=f.getContentPane();

③在制作复杂的用户界面时,常常需要使用多个JPanel将复杂的界面分解为先对建大的子界面,然后再对每个JPanel进行布局:

  1. Menu file = new Menu("文件");//文件菜单
      MenuItem open = new MenuItem("打开");//打开菜单项
      file.add(open);
      MenuItem save = new MenuItem("保存");//保存菜单项
      file.add(save);
      file.addSeparator();
      MenuItem exit = new MenuItem("退出");//退出菜单项
      file.add(exit);

④将面板添加到框架的内容窗格中,如:

  1. Menu have = new Menu("执子颜色");
  2. MenuItem haveblcak = new MenuItem("黑色");
  3. have.add(haveblcak);
  4. MenuItem havewhite = new MenuItem("白色");
  5. have.add(havewhite);
  6.  
  7. game.addSeparator();
  8. game.add(have);

⑤处理控件的依赖关系,及消息的定义,各种细节的设计

⑥控件的逐级加入

JSSFMenu.add(DBJFItem);//将下拉子菜单加入到主菜单中去

menuBar.add(DBJFItem);//将主菜单加入到主菜单工具条中

⑦将面板加入到框架的内容窗格中

contentPanel.add(P);

三、设计结果:

运行界面

接下来是运行的结果

以上是项目的过程

四、收获

在这次的结对项目中,我体会到了两人在一起工作时的状态,好处总要比弊处多。首先两个人在一起做一个项目会节省很多的时间,分工合作要比一个人瞎忙来得好;还有,一个人的思维往往是受局限的,有了伙伴之后总会让你在思维上有所启发。相互的交流学习是非常重要的,往往有所经验才有所收获。很高兴和搭档的这次合作!

Pair Project的更多相关文章

  1. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]

    软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题] 首先,在分组之前,我和室友薛亚杰已经详细阅读了往届学长的博客,认为电梯调度 ...

  2. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    软件工程  ---   Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] 说明结对编程的优点和缺点. 结对编程的优点如下: 在独立设计.实现代码的过程中不 ...

  3. Pair project(刘昊岩11061156 黄明源11061186)

    Pair project members:刘昊岩11061156,黄明源11061186 两周时间,工程下午刚刚结束,现做一些总结. 在现有工程基础上修改schedule 包下方法,主要思想是,也就是 ...

  4. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:谢勤政-11061197,吴润凡-11061185

    一,关于结对编程 结对编程的优点: 1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力. 2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高 ...

  5. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:刘耀先-11061183,罗凡-11061174

    本次为我们两个人的第一次结对编程.从总体而言,我们对结对编程比单人编程略显不适应.但是经过一段时间的磨合,我们逐渐的习惯了这种编程方式. 1.  结对编程的优缺点 结对编程的优点: (1)       ...

  6. 结对项目 Pair Project

    结对项目 Pair Project 一人编程,一人操作,共同检查. 源码 https://github.com/dpch16303/test/blob/master/%E5%AE%9E%E8%B7%B ...

  7. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    作业提交时间:10月9日上课前. Design and implement an Elevator Scheduler to aim for both correctness and performa ...

  8. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] --11061188刘强

    结对编程总结 队员:刘强(11061188) 林谋武(11061169) 结对编程: 结对编程的优点: 1.  两个人合作,相比于一个人自己奋斗而言,更能激发自己的潜能:我们在合作过程中,互相学习,互 ...

  9. Pair Project:电梯控制程序

    12061160刘垚鹏 & 12061166宋天舒 1.1结对编程的优缺点结对编程相对于个人编程有很多优点.首先,督促作用,在讨论过程中能够很快投入工作,为了不耽误对方时间,我们会尽快完成各自 ...

  10. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:思考题——谢勤政11061197

    第一题: 大楼里面的电梯一般分区域,或考虑思考题第四题的情况,运行楼层不一样的电梯属于不同的区域.然后在接口IRequest和IPassenger还有IElevator里面都加上int area这个属 ...

随机推荐

  1. PHP使用Apache中的ab(ApacheBench)测试网站的并发量

    AB(ApacheBench) 是 Apache 自带的超文本传输协议 (HTTP) 性能测试工具. 其设计意图是描绘当前所安装的 Apache 的执行性能, 主要是显示 Apache 每秒可以处理多 ...

  2. Python中关于with open file as 的用法

    最近用到python来处理文本文件了,然后需要处理文件.发现python中提供的with   open  as   这个还是用的不错的!好的,废话不多说了,看下例子: with open('./sig ...

  3. Git Extensions 使用小结

    1.查看仓库 2.创建分支 然后会自动创建一个 Commit ,推送到远端分支即可. 3.合并分支 注意1.自动提交需要没有无法自动合并的冲突才行. 注意2.快进线指的是将别人的提交原封不动附加到自己 ...

  4. ES5-ES6-ES7_class类

    传统创建对象模板的方式 JavaScript 语言中,生成实例对象的传统方法是通过构造函数 //JavaScript 语言中,生成实例对象的传统方法是通过构造函数 function Point(x, ...

  5. Linux 与 Unix 到底有什么不同?区别在哪?

    Linux 与 Unix 到底有什么不同?区别在哪? 如果你是一名20多岁或30多岁的软件开发人员,那么你已成长在一个由Linux主导的世界中.数十年来,它一直是数据中心的重要参与者,尽管很难找到明确 ...

  6. ElasticSearch(二):允许外网连接服务配置

    上一篇文章的配置,只能在本机使用,但是要想为集群或者其他的机器连接,则需要做以下配置: 一.修改/opt/elasticsearch-6.4.0/config/elasticsearch.yml文件 ...

  7. Navicat Premium 12.0.29 / 12.1.5.0安装与激活

    转自:https://www.jianshu.com/p/5f693b4c9468 本文介绍Navicat Premium 12.0.29和Navicat Premium 12.1.5.0的安装.激活 ...

  8. P1553 数字反转(升级版)(模拟)

    花了2个小时,写的..mmp只想说,还是我太菜了. #include<iostream> #include<cstring> using namespace std; ]; i ...

  9. P2802 回家 (DFS+剪枝)

    这里详细讲一下剪枝的点: 因为,可以重复在同一个点上走动.所以,这个步数是无穷的. 剪枝一:步数< n*m;    (因为起点不算所以不取等号) 剪枝二:步数当大于已有的答案时,直接退出DFS, ...

  10. CMake 常用方法

    CMake 允许开发者编写平台无关的 CMakeLists.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Linux 的Makefi ...