JAVA课设--五子棋

1.团队课程设计博客链接

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

2.个人负责模块或任务说明

a.界面蕴含基本事件设置
b.判断输赢

3.自己的代码提交记录截图

4.自己负责模块或任务详细说明

a.界面基本事件设置—按钮事件:重新开始,退出。菜单栏 工具栏 鼠标

想法:设置窗口名称“五子棋 人vs人”在界面中设置菜单栏,在菜单栏中实现按钮项,将按钮设置在工具面板中,并用FlowLayout BorderLayout(布局管理器)布局.
这里将用到 JMenuBar菜单栏类 JMenu菜单类 JMenuItem菜单项类 JButton按钮类。将按钮类和按钮事件都注册到事件监听器上,无论发生哪个都执行操作。

 //将三个菜单项添加到菜单上  
		      sysMenu.add(startMenuItem);  
		      sysMenu.add(exitMenuItem);  
		      sysMenu.add(backMenuItem);  
		      //初始化按钮事件监听器内部类  
		     MyItemListener lis=new MyItemListener();  
		     //将三个菜单注册到事件监听器上  
		      this.startMenuItem.addActionListener(lis);  
		      backMenuItem.addActionListener(lis); 
		     exitMenuItem.addActionListener(lis); 
 

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(mainpanel);//将面板对象添加到窗体上

 private class MyItemListener implements ActionListener{  
	      public void actionPerformed(ActionEvent e){  
	          Object obj=e.getSource();//获得事件源  
	          if(obj==MainFrame.this.startMenuItem||obj==startButton){  
	             
	        	  //重新开始  
	              //JFiveFrame.this内部类引用外部类  
	           System.out.println("重新开始");  
	            mainpanel.restartGame();  
	          }  
	          else if (obj==exitMenuItem||obj==exitButton)  
	              System.exit(0);  
	         else if (obj==backMenuItem||obj==backButton){  
	              System.out.println("悔棋...");  
	              mainpanel.goback();  
	          }  
	      }  
	  }  

再添加了鼠标监听器,当鼠标在棋盘界面上是“手”的标识,界面外是“箭头”(默认)

addMouseListener(this);  
		addMouseMotionListener(new MouseMotionListener(){  
	           public void mouseDragged(MouseEvent e){  
	                 
	           }  
	             
	           public void mouseMoved(MouseEvent e){  
	            int x1=(e.getX()-20+gap/2)/gap;  
	             //将鼠标点击的坐标位置转成网格索引  
	             int y1=(e.getY()-20+gap/2)/gap;  
	             
	             if(x1<0||x1>row||y1<0||y1>line||gameOver)  
	                 setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //就是鼠标移到相应的位置 鼠标形状为默认 默认的游标状态 
	             //设置成默认状态  
	             else setCursor(new Cursor(Cursor.HAND_CURSOR));  
	               
	           }  
	       });  

b.判断输赢

想法:有4个方向需要考虑,满5个棋子就获胜。
方向一:从左到右(横向)
方向二:从上到下(纵向)
方向三:从左下到右上(斜向)
方向四:从右上到左下(斜向)

//  横向判断  ,先左后右 
    	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 ++;
    	}

5.课程设计感想

一开始做五子棋时考虑的很少,认为只要有坐标索引,棋子,棋盘就可以实现。在做的过程中,发现设计一个游戏需要从玩家的角度去考虑。比如:玩完一局后,可以不立即退出界面,重开一局,或者玩家想悔棋,还有一个游戏的界面该有的标题,菜单栏等。这个设计还需要进一步完善,让界面更美观,还可以人机对战等。

posted @ 2017-06-22 09:27  叫我小天才  阅读(453)  评论(0编辑  收藏  举报