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

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

徐璐琳 网络1511班 201521123010

祁泽文 网络1511班 201521123011

张晨晨 网络1511班 201521123009


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


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


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

架构图:

流程图:


5 项目运行截图


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

posted @ 2017-06-22 08:35  徐鹿林  阅读(513)  评论(0编辑  收藏  举报