码迷,mamicode.com
首页 > 其他好文 > 详细

实验三 敏捷开发与XP实践

时间:2015-10-18 21:23:59      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

北京电子科技学院

              

                                           课程:移动平台应用开发实践   班级:201592     姓名:田仁贵  学号:20159215

                                           成绩:             指导教师:娄嘉鹏   实验日期:2015.10.11

                                           实验密级:         预习程度:             实验时间:

                                           仪器组次:          必修/选修:选修          实验序号:3

                                           实验名称:            实验三 敏捷开发与XP实践                                    

                                           实验目的与要求:1. XP基础    2. XP核心实践      3. 相关工具                 

 

                                           实验仪器:

 

名称

型号

数量

PC

Lenovo

1

实验楼环境

/

1

Eclipse

/

1

 

  

实验内容及步骤

敏捷开发与XP

1.了解敏捷开发

   敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。

2.极限开发

  极限编程(eXtreme Programming,XP)是 是一种全新而快捷的软件开发方法。

 

  • XP是以开发符合客户需要的软件为目标而产生的一种方法论
  • XP是一种以实践为基础的软件工程过程和思想
  • XP认为代码质量的重要程度超出人们一般所认为的程度
  • XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件

编码标准

编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,

甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当

的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。

重构

1. 概念

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。

2. eclipse中Refactor

重新命名:Rename

封装成员变量:Encapsulate Field...

抽象方法:Extract Method...

根据给出的代码重构后的程序代码截图

技术分享

技术分享

重构实用方法

技术分享

实践项目

五子棋java的事项

技术分享

代码主要由三部分构成

1.棋盘构建ChessBoard类

public class ChessBoard extends JPanel implements MouseListener {  
   public static final int MARGIN=30;//边距   
   public static final int GRID_SPAN=35;//网格间距   
   public static final int ROWS=15;//棋盘行数   
   public static final int COLS=15;//棋盘列数   
     
   Point[] chessList=new Point[(ROWS+1)*(COLS+1)];//初始每个数组元素为null   
   boolean isBlack=true;//默认开始是黑棋先   
   boolean gameOver=false;//游戏是否结束   
   int chessCount;//当前棋盘棋子的个数   
   int xIndex,yIndex;//当前刚下棋子的索引   
     
   Image img;  
   Image shadows;  
   Color colortemp;  
   public ChessBoard(){  
        
       setBackground(Color.orange);//设置背景色为橘黄色   
       img=Toolkit.getDefaultToolkit().getImage("board.jpg");  
      shadows=Toolkit.getDefaultToolkit().getImage("shadows.jpg");  
       addMouseListener(this);  
       addMouseMotionListener(new MouseMotionListener(){  
           public void mouseDragged(MouseEvent e){  
                 
           }  
             
           public void mouseMoved(MouseEvent e){  
                               //边距     网格间距
             int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;  
           
             //将鼠标点击的坐标位置转成网格索引   
             int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
             
             //游戏已经结束不能下   
             //落在棋盘外不能下   
             //x,y位置已经有棋子存在,不能下   
             if(x1<0||x1>ROWS||y1<0||y1>COLS||gameOver||findChess(x1,y1))  
                 setCursor(new Cursor(Cursor.DEFAULT_CURSOR));  
             //设置成默认状态   
             else setCursor(new Cursor(Cursor.HAND_CURSOR));  
               
           }  
       });  
   }   
     
    
 
//绘制   
   public void paintComponent(Graphics g){  
       
       super.paintComponent(g);//画棋盘   
       
       int imgWidth= img.getWidth(this);  
       int imgHeight=img.getHeight(this);//获得图片的宽度与高度   
       int FWidth=getWidth();  
       int FHeight=getHeight();//获得窗口的宽度与高度   
       int x=(FWidth-imgWidth)/2;  
       int y=(FHeight-imgHeight)/2;  
       g.drawImage(img, x, y, null);  
      
         
       for(int i=0;i<=ROWS;i++){//画横线   
           g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN);  
       }  
       for(int i=0;i<=COLS;i++){//画竖线   
           g.drawLine(MARGIN+i*GRID_SPAN, MARGIN, MARGIN+i*GRID_SPAN, MARGIN+ROWS*GRID_SPAN);  
             
      }  
         
       //画棋子   
       for(int i=0;i<chessCount;i++){  
           //网格交叉点x,y坐标   
           int xPos=chessList[i].getX()*GRID_SPAN+MARGIN;  
           int yPos=chessList[i].getY()*GRID_SPAN+MARGIN;  
           g.setColor(chessList[i].getColor());//设置颜色   
          // g.fillOval(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2,   
                           //Point.DIAMETER, Point.DIAMETER);   
           //g.drawImage(shadows, xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, Point.DIAMETER, Point.DIAMETER, null);   
           colortemp=chessList[i].getColor();  
           if(colortemp==Color.black){  
               RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 20, new float[]{0f, 1f}  
               , new Color[]{Color.WHITE, Color.BLACK});  
               ((Graphics2D) g).setPaint(paint);  
               ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  
               ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);  
 
           }  
           else if(colortemp==Color.white){  
               RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 70, new float[]{0f, 1f}  
               , new Color[]{Color.WHITE, Color.BLACK});  
               ((Graphics2D) g).setPaint(paint);  
               ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  
               ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);  
 
           }  
           
           Ellipse2D e = new Ellipse2D.Float(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, 34, 35);  
           ((Graphics2D) g).fill(e);  
           //标记最后一个棋子的红矩形框   
             
           if(i==chessCount-1){//如果是最后一个棋子   
               g.setColor(Color.red);  
               g.drawRect(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2,  
                           34, 35);  
           }  
       }  
   }
   public void mousePressed(MouseEvent e){//鼠标在组件上按下时调用   
         
       //游戏结束时,不再能下   
       if(gameOver) return;  
         
       String colorName=isBlack?"黑棋":"白棋";  
         
       //将鼠标点击的坐标位置转换成网格索引   
       xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;  
       yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;  
         
       //落在棋盘外不能下   
       if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS)  
           return;  
         
       //如果x,y位置已经有棋子存在,不能下   
       if(findChess(xIndex,yIndex))return;  
         
       //可以进行时的处理   
       Point ch=new Point(xIndex,yIndex,isBlack?Color.black:Color.white);  
       chessList[chessCount++]=ch;  
        repaint();//通知系统重新绘制   
        
         
       //如果胜出则给出提示信息,不能继续下棋   
         
       if(isWin()){  
           String msg=String.format("恭喜,%s赢了!", colorName);  
           JOptionPane.showMessageDialog(this, msg);  
           gameOver=true;  
       }  
       isBlack=!isBlack;  
     }  
   //覆盖mouseListener的方法   
   public void mouseClicked(MouseEvent e){  
       //鼠标按键在组件上单击时调用   
   }  
     
   public void mouseEntered(MouseEvent e){  
       //鼠标进入到组件上时调用   
   }  
   public void mouseExited(MouseEvent e){  
       //鼠标离开组件时调用   
   }  
   public void mouseReleased(MouseEvent e){  
       //鼠标按钮在组件上释放时调用   
   }  
   //在棋子数组中查找是否有索引为x,y的棋子存在   
   private boolean findChess(int x,int y){  
       for(Point c:chessList){  
           if(c!=null&&c.getX()==x&&c.getY()==y)  
               return true;  
       }  
       return false;  
   }  
     
     
   private boolean isWin(){  
       int continueCount=1;//连续棋子的个数   
        
       //横向向西寻找   
       for(int x=xIndex-1;x>=0;x--){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(x,yIndex,c)!=null){  
               continueCount++;  
           }else  
               break;  
       }  
      //横向向东寻找   
       for(int x=xIndex+1;x<=COLS;x++){  
          Color c=isBlack?Color.black:Color.white;  
          if(getChess(x,yIndex,c)!=null){  
             continueCount++;  
          }else  
             break;  
       }  
       if(continueCount>=5){  
             return true;  
       }else   
       continueCount=1;  
         
       //继续另一种搜索纵向   
       //向上搜索   
       for(int y=yIndex-1;y>=0;y--){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(xIndex,y,c)!=null){  
               continueCount++;  
           }else  
               break;  
       }  
       //纵向向下寻找   
       for(int y=yIndex+1;y<=ROWS;y++){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(xIndex,y,c)!=null)  
               continueCount++;  
           else  
              break;  
         
       }  
       if(continueCount>=5)  
           return true;  
       else  
           continueCount=1;
       //继续另一种情况的搜索:斜向   
       //东北寻找   
       for(int x=xIndex+1,y=yIndex-1;y>=0&&x<=COLS;x++,y--){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(x,y,c)!=null){  
               continueCount++;  
           }  
           else break;  
       }  
       //西南寻找   
       for(int x=xIndex-1,y=yIndex+1;x>=0&&y<=ROWS;x--,y++){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(x,y,c)!=null){  
               continueCount++;  
           }  
           else break;  
       }  
       if(continueCount>=5)  
           return true;  
       else continueCount=1;  
         
         
       //继续另一种情况的搜索:斜向   
       //西北寻找   
       for(int x=xIndex-1,y=yIndex-1;x>=0&&y>=0;x--,y--){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(x,y,c)!=null)  
               continueCount++;  
           else break;  
       }  
       //东南寻找   
       for(int x=xIndex+1,y=yIndex+1;x<=COLS&&y<=ROWS;x++,y++){  
           Color c=isBlack?Color.black:Color.white;  
           if(getChess(x,y,c)!=null)  
               continueCount++;  
           else break;  
       }  
       if(continueCount>=5)  
           return true;  
       else continueCount=1;  
         
       return false;  
     }  
     
     
   private Point getChess(int xIndex,int yIndex,Color color){  
       for(Point p:chessList){  
           if(p!=null&&p.getX()==xIndex&&p.getY()==yIndex  
                   &&p.getColor()==color)  
               return p;  
       }  
       return null;  
   }  
     
     
   public void restartGame(){  
       //清除棋子   
       for(int i=0;i<chessList.length;i++){  
           chessList[i]=null;  
       }  
       //恢复游戏相关的变量值   
       isBlack=true;  
       gameOver=false; //游戏是否结束   
       chessCount =0; //当前棋盘棋子个数   
       repaint();  
   }  
     
   //悔棋   
   public void goback(){  
       if(chessCount==0)  
           return ;  
       chessList[chessCount-1]=null;  
       chessCount--;  
       if(chessCount>0){  
           xIndex=chessList[chessCount-1].getX();  
           yIndex=chessList[chessCount-1].getY();  
       }  
       isBlack=!isBlack;  
       repaint();  
   }  
     
   //矩形Dimension   
 
   public Dimension getPreferredSize(){  
       return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2  
                            +GRID_SPAN*ROWS);  
   }  
     
     
     
}

2指针类的实现

 

public class Point {  
  private int x;//棋盘中的x索引   
  private int y;//棋盘中的y索引   
  private Color color;//颜色   
  public static final int DIAMETER=30;//直径   
    
  public Point(int x,int y,Color color){  
      this.x=x;  
      this.y=y;  
      this.color=color;  
  }   
    
  public int getX(){//拿到棋盘中x的索引   
      return x;  
  }  
  public int getY(){  
      return y;  
  }  
  public Color getColor(){//获得棋子的颜色   
      return color;  
  }  

3。StartChessJFrame主类的实现

 

package com.wuziqi.pk;
import java.awt.event.*;  
import java.awt.*;  
 
import javax.swing.*;  
/*
 五子棋主框架類,程序啟動類
 */  
public class StartChessJFrame extends JFrame {  
 
  private ChessBoard chessBoard;  
  private JPanel toolbar;  
  private JButton startButton,backButton,exitButton;  
    
  private JMenuBar menuBar;  
  private JMenu sysMenu;  
  private JMenuItem startMenuItem,exitMenuItem,backMenuItem;  
  //重新开始,退出,和悔棋菜单项   
  public StartChessJFrame(){  
      setTitle("单机版五子棋");//设置标题   
      chessBoard=new ChessBoard();  
      
        
      Container contentPane=getContentPane();  
      contentPane.add(chessBoard);  
      chessBoard.setOpaque(true);  
        
        
      //创建和添加菜单   
      menuBar =new JMenuBar();//初始化菜单栏   
      sysMenu=new JMenu("系统");//初始化菜单   
      //初始化菜单项   
      startMenuItem=new JMenuItem("重新开始");  
      exitMenuItem =new JMenuItem("退出");  
      backMenuItem =new JMenuItem("悔棋");  
      //将三个菜单项添加到菜单上   
      sysMenu.add(startMenuItem);  
      sysMenu.add(exitMenuItem);  
      sysMenu.add(backMenuItem);  
      //初始化按钮事件监听器内部类   
      MyItemListener lis=new MyItemListener();  
      //将三个菜单注册到事件监听器上   
      this.startMenuItem.addActionListener(lis);  
      backMenuItem.addActionListener(lis);  
      exitMenuItem.addActionListener(lis);  
      menuBar.add(sysMenu);//将系统菜单添加到菜单栏上   
      setJMenuBar(menuBar);//将menuBar设置为菜单栏   
        
      toolbar=new JPanel();//工具面板实例化   
      //三个按钮初始化   
      startButton=new JButton("重新开始");  
      exitButton=new JButton("退出");  
      backButton=new JButton("悔棋");  
      //将工具面板按钮用FlowLayout布局   
      toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));  
      //将三个按钮添加到工具面板   
      toolbar.add(startButton);  
      toolbar.add(exitButton);  
      toolbar.add(backButton);  
      //将三个按钮注册监听事件   
      startButton.addActionListener(lis);  
      exitButton.addActionListener(lis);  
      backButton.addActionListener(lis);  
      //将工具面板布局到界面”南方“也就是下方   
      add(toolbar,BorderLayout.SOUTH);  
      add(chessBoard);//将面板对象添加到窗体上   
      //设置界面关闭事件   
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
      //setSize(800,800);   
      pack();//自适应大小   
        
  }  
    
  private class MyItemListener implements ActionListener{  
      public void actionPerformed(ActionEvent e){  
          Object obj=e.getSource();//获得事件源   
          if(obj==StartChessJFrame.this.startMenuItem||obj==startButton){  
              //重新开始   
              //JFiveFrame.this内部类引用外部类   
              System.out.println("重新开始");  
              chessBoard.restartGame();  
          }  
          else if (obj==exitMenuItem||obj==exitButton)  
              System.exit(0);  
          else if (obj==backMenuItem||obj==backButton){  
              System.out.println("悔棋...");  
              chessBoard.goback();  
          }  
      }  
  }  
    
    
    
  public static void main(String[] args){  
      StartChessJFrame f=new StartChessJFrame();//创建主框架   
      f.setVisible(true);//显示主框架   
        
  }  
}

总结

从这次的实验来看,对linux操作系统的操作还是不够熟练,以后努力。

对java的熟练编程还是不够,以后要一边看一边脸=练,不去练永远学不会一门语言。

 

实验三 敏捷开发与XP实践

标签:

原文地址:http://www.cnblogs.com/20159215trg/p/4890271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!