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