JAVA课设--五子棋--团队博客

1 团队名称、团队成员介绍

徐璐琳 网络1511班 201521123010
1109999-20170621210148304-263154074.png

祁泽文 网络1511班 201521123011
1109999-20170621193108257-83392598.png

张晨晨 网络1511班 201521123009
1109999-20170621220420741-515832881.png


2 项目git地址 团队项目码云地址

1109999-20170622094906351-1222341211.png


3 项目git提交记录截图(要体现出每个人的提交记录、提交说明),老师将点击进去重点考核。

1109999-20170622092949804-1467408086.png

1109999-20170622092651085-282009928.png

1109999-20170622095233632-1923665624.png


4 项目功能架构图与主要功能流程图

架构图:

1109999-20170621210520007-1435893713.png

流程图:

1109999-20170621210415695-878303413.png


5 项目运行截图

1109999-20170622115930226-741791368.png

1109999-20170622115943429-1872999549.png

1109999-20170622115948507-1525151670.png

1109999-20170622115952898-44999104.png


6 项目关键代码

此程序最关键的是输赢判断的算法,以及下棋换色、落子。故关键代码如下:

public boolean isWin(int x,int y,boolean isColor){
        char ch=Chess[x][y];
        /*  横向判断  ,先左后右 */
        int LX = x;
        while(LX>=0 && Chess[LX][y]==ch){
            LX --;
        }
        int LNum = 0;//统计横向相同的棋子数
        LX ++; 
        while(LX<Chess.length && Chess[LX][y]==ch){
            LNum ++;
            LX ++;
        }
        /* 纵向判断 ,先上后下 */
        int RY = y;
        while(RY>=0 && Chess[x][RY]==ch){
            RY --;//坐标位置下降
        }
        int RNum = 0;//统计纵向相同的棋子数
        RY ++;
        while(RY<Chess[x].length && Chess[x][RY]==ch){
            RY ++;
            RNum ++;
        }
        /* 左下右上判断  ,*/
        int LDX = x;
        int RUY = y;
        while(LDX>=0 && RUY<Chess.length && Chess[LDX][RUY]==ch){
            LDX --;
            RUY ++;
        }
        int LDNum = 0;
        LDX ++;
        RUY --;
        while(LDX<Chess.length && RUY>=0 && Chess[LDX][RUY]==ch){
            LDNum ++;
            LDX ++;
            RUY --;
        }
        /* 右上左下判断  */
        int RUX = x;
        int LDY = y;
        while(RUX>=0 && LDY>=0 && Chess[RUX][LDY]==ch){
            RUX --;
            LDY --;
        }
        int RUNum = 0;
        RUX ++;
        LDY ++;
        while(RUX>=0 && LDY<Chess.length && Chess[RUX][LDY]==ch){
            RUX ++;
            LDY ++;
            RUNum ++;
        }
        if(RNum>=5||LNum>=5||RUNum>=5||LDNum>=5){                                            
            return true;
        }
        return false;
    } 
public void mouseClicked(MouseEvent e) {
        
    }   
    public void mousePressed(MouseEvent e) {//鼠标点击事件处理过程, 在源组件上按下鼠标按钮
        if(gameOver) return;
        /*int*/ click_x = e.getX();
        /*int*/ click_y = e.getY();
        int chess_x = Math.round((float)(click_x-20)/gap);//画一个区域这个区域都为对应的棋子坐标点
        int chess_y = Math.round((float)(click_y-20)/gap);
        click_X = chess_x;
        click_Y = chess_y;
        System.out.println("选中"+click_x+click_y);
        if((isBlack==true&&Chess[chess_x][chess_y]=='0' && flag == false )||(flag == true &&isBlack==false&&Chess[chess_x][chess_y]=='0')){

            Chess[chess_x][chess_y] = '2';
            
            isBlack = false;//换为白子
            flag = false;
        }
        if((isBlack==false&&Chess[chess_x][chess_y]=='0'&& flag == false ) || ( flag == true &&isBlack==true &&Chess[chess_x][chess_y]=='0')){
            Chess[chess_x][chess_y] = '1';
            isBlack = true;//换为黑子
            flag = false;
        }
        repaint();//重新扫描,图像修改
        if(isWin(chess_x,chess_y,isBlack)){
            if(isBlack){
                JOptionPane.showMessageDialog(null,"白子赢了");
               
            }else{
                JOptionPane.showMessageDialog(null,"黑子赢了");
                
            }
            gameOver=true;  
        }
    }
    public void mouseReleased(MouseEvent e) {
        
    }// 释放源组件上的鼠标按钮
    public void mouseEntered(MouseEvent e) {
        
    }//在鼠标进入源组件之后被调用
    public void mouseExited(MouseEvent e) {
        
    }
    public void restartGame(){  
           //清除棋子  
        for(int i=0;i<Chess.length;i++){
            for(int j=0;j<Chess[i].length;j++){
                Chess[i][j]='0';//棋子的坐标  令棋子为空
            }
        }
           //恢复游戏相关的变量值  
           isBlack=true;  
           gameOver=false; //游戏是否结束  
           repaint();  
       }  
     public void goback(){  
         flag = true;
         System.out.println("清除"+click_x+click_y);
         int chess_x = Math.round((float)(click_x-20)/gap);
         int chess_y = Math.round((float)(click_y-20)/gap);
         click_X = chess_x;
         click_Y = chess_y;
         repaint();
         Chess[chess_x][chess_y] = '0';
      }  
         

7 尚待改进或者新的想法

因为时间太仓促,所以界面不够完善。还有很多可以改进的地方,之后也想做得更精良。例如想尝试做人机版、联机版、增加认输、等级功能、游戏计时等功能。


8 团队成员任务分配,团队成员课程设计博客链接

姓名任务分配博客链接
徐璐琳(组长)鼠标事件,主函数链接:http://www.cnblogs.com/abonxxxu/p/7053331.html
祁泽文输赢判断算法,界面设置链接:http://www.cnblogs.com/jiaowoxiaotiancai/p/7061613.html
张晨晨绘制棋盘,按钮功能链接:http://www.cnblogs.com/z1450429983/p/7052856.html

转载于:https://www.cnblogs.com/abonxxxu/p/7054107.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值