博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA课设--五子棋
阅读量:4966 次
发布时间:2019-06-12

本文共 3823 字,大约阅读时间需要 12 分钟。

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

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

a.界面蕴含基本事件设置

b.判断输赢

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

1103004-20170622092321882-318485650.png

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

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

想法:设置窗口名称“五子棋 人vs人”在界面中设置菜单栏,在菜单栏中实现按钮项,将按钮设置在工具面板中,并用FlowLayout BorderLayout(布局管理器)布局.

这里将用到 JMenuBar菜单栏类 JMenu菜单类 JMenuItem菜单项类 JButton按钮类。将按钮类和按钮事件都注册到事件监听器上,无论发生哪个都执行操作。

1103004-20170621194445945-65960654.png

1103004-20170622120514132-623827467.png

//将三个菜单项添加到菜单上                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();                }            }        }

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

1103004-20170621210753195-842271350.png
1103004-20170621210832335-60743340.png

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个棋子就获胜。

方向一:从左到右(横向)
方向二:从上到下(纵向)
方向三:从左下到右上(斜向)
方向四:从右上到左下(斜向)
1103004-20170621212755476-428419342.png

//  横向判断  ,先左后右         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.课程设计感想

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

转载于:https://www.cnblogs.com/jiaowoxiaotiancai/p/7061613.html

你可能感兴趣的文章
linux命令学习 不断更新
查看>>
ionic 弹窗(alert, confirm)
查看>>
C++中虚继承的作用及底层实现原理
查看>>
IOS网络访问之NSURLConnection
查看>>
css让背景颜色与背景图片同时显示
查看>>
如何解决vuex因浏览器刷新数据消失,保持数据持久化问题?
查看>>
特征选择
查看>>
Js 通过点击改变css样式
查看>>
WebApi传参总动员(三)
查看>>
HTML5+Bootstrap 学习笔记 3
查看>>
某考试 T3 C
查看>>
[Lydsy1806月赛] 超速摄像头
查看>>
[BZOJ3449] [Usaco2014 Feb]Secret Code
查看>>
XHTML与HTML区别
查看>>
软考-程序设计语言基础(编译原理)
查看>>
2016峰会:项目管理与高级项目管理(广州站)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
linux 命令之top
查看>>
有关远程设置的问题
查看>>
BZOJ 1800: [Ahoi2009]fly 飞行棋
查看>>