五子棋游戏
2016-12-25 17:39
134 查看
五子棋游戏
关于画布
五子棋游戏中绘制棋盘时是需要用到画布,当然画布要从一个面板上得到,然后在画布上进行绘制横线和竖线得到画布用的方法是graphics=panel.getGraphics();那么接下来就可以绘制棋盘了。
这里以绘制十行十列棋盘为例
// 棋盘面板 JPanel panel_grid = new JPanel() { public void paint(Graphics g) { super.paint(g); for (int i = 0; i < 10; i++) { //水平直线 g.drawLine(10, 10 + 50 * i, 460, 10 + 50 * i); //垂直直线 g.drawLine(10 + 50 * i, 10, 10 + 50 * i, 460); } } }4000
>
关于paint和repaint
在窗口发生改变的时候,比如放大或缩小,就会自动调用paint()方法。而在下棋的过程中会发现如果没有将绘制棋子的方法写在paint()方法里,一旦将窗口关掉,那么棋盘上的棋子就会消失。
而repaint()方法是用来调用paint()方法的,在设计重新开始一局游戏的时候直接用repaint,就会将棋子抹掉,当然还要用到一点其他的方法。
关于监听和绘制棋子
绘制棋子的时候是通过对棋盘面板pannel_grid进行鼠标监听来绘制。在绘制的时候需要将所有的棋子都记录下来,这样在重绘的时候就能画出棋盘在窗口改变前棋盘的样子,那么就需要用到一个集合ArrayList,当鼠标点击的时候就向集合中添加一颗棋子,再用循环将集合重的元素遍历。为了将棋子画在交叉点上,需要调整绘制棋子的位置。
值得注意的是在实现鼠标监听的时候,要将监听里的所有方法实现,其中内容可以是空,但不可以没有这个方法。
panel_grid.addMouseListener(new MouseListener() {//匿名内部类 @Override public void mouseClicked(MouseEvent mouse) { int x1 = mouse.getX(); int y1 = mouse.getY(); int x0, y0; for (int i = 0; i <= 10; i++) { for (int j = 0; j <= 10; j++) { //x0,y0表示所有的交叉点 x0 = 50 * i; y0 = 50 * j; //flag数组用来记住棋盘上当前位置是否已有棋子 //0没有棋子,1为黑棋,2为白棋 if (flag[i][j] == 0) { if (x0 - 50 / 3 <= x1 && x1 < x0 + 50 / 3 && y0 - 50 / 3 <= y1 && y1 <= y0 + 50 / 3) { //flag_color是一个全局变量,用来判断是画白棋还是黑棋 if (flag_color == 0) { flag[i][j] = 1; //chess也是一个全局变量,用来创建当前要画的棋子 chess = new Chess(x0, y0, Color.black); // 黑棋 flag_color = 1; } else if (flag_color == 1) { chess = new Chess(x0, y0, Color.white); flag[i][j] = 2; // 白棋 flag_color = 0; } chess.draw(graphics); isWin(i, j); //list是一个棋子集合 list.add(chess) } } } } } @Override public void mouseEntered(MouseEvent arg0) { } @Override public void mouseExited(MouseEvent arg0) { } @Override public void mousePressed(MouseEvent arg0) { } @Override public void mouseReleased(MouseEvent arg0) { } });
遍历集合for (int j = 0; j < list.size(); j++) { list.get(j).draw(g); }
由于在集合中放置的是棋子类的对象,所以就需要建立一个棋子类。而棋子其实就是一个圆盘,那么用fillOval(x, y, width, height)就可以绘制棋子了。public class Chess { int x, y; Color color; public Chess(int x, int y, Color color) { this.color = color; this.x = x - 5; this.y = y - 5; } public void draw(Graphics g) { g.setColor(color); g.fillOval(x, y, 30, 30); } }
关于判断输赢
每下一颗棋子就需要判断四个方向是否有五颗连续相同颜色的棋子,四个方向分别是水平,垂直及对角线。那么就需要将棋盘的情况记录下来,而整个棋盘的交叉点就相当于是一个二维数组,因此在绘制一颗棋子的同时用二维数组记录下来,黑棋还是白棋。
这里给出水平方向的判断代码public void isWin(int x, int y) { int count = 1; int a, b 92e7 ; a = x; b = y; while (a > 0 && flag[a][b] == flag[a - 1][b]) {// 向左 count++; a--; } a = x; b = y; while (flag[a][b] == flag[a + 1][b] && a < 10) {// 向右 count++; a++; } if (count >= 5) { colorWin(flag[a][b]); }public void colorWin(int color) { if (color == 1) { JOptionPane.showMessageDialog(null, "黑棋赢了!"); } if (color == 2) { JOptionPane.showMessageDialog(null, "白棋赢了!"); } }
相关文章推荐
- 十四步实现拥有强大AI的五子棋游戏
- 教你开发一个简单的Android五子棋游戏
- 一个控制台上永远都是你赢的五子棋游戏,囧
- C++ 简易的五子棋游戏 初学者
- Java实现一个简单的两人五子棋游戏(五) 判断是否有一方胜出
- 网络五子棋游戏
- 原生JS+Canvas实现五子棋游戏
- Java实现两人五子棋游戏(二) 画出棋盘
- 十四步实现拥有强大AI的五子棋游戏
- android游戏开发之我的小小游戏1——五子棋游戏1之绘制棋子与棋盘
- java 五子棋游戏
- Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局
- Java实现一个简单的两人五子棋游戏(六) 行棋方变换
- 原生JS+Canvas实现五子棋游戏
- 五子棋游戏
- Java实现两人五子棋游戏(三) 画出棋子
- c 实现的两人对战命令行五子棋游戏
- android游戏开发之我的小小游戏1——五子棋游戏3之悔棋与重新开始
- 五子棋游戏
- Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局