1.团队课程设计博客链接
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=0 && Chess[x][RY]==ch){ RY --;//坐标位置下降 } int RNum = 0;//统计纵向相同的棋子数 RY ++; while(RY =0 && 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
5.课程设计感想
一开始做五子棋时考虑的很少,认为只要有坐标索引,棋子,棋盘就可以实现。在做的过程中,发现设计一个游戏需要从玩家的角度去考虑。比如:玩完一局后,可以不立即退出界面,重开一局,或者玩家想悔棋,还有一个游戏的界面该有的标题,菜单栏等。这个设计还需要进一步完善,让界面更美观,还可以人机对战等。