使用Java实现四连环棋游戏

  介绍

本篇文章给大家分享的是有关使用Java实现四连环棋游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>游戏规则:

(1)双人游戏,有黑红两色棋子,双方各执一色棋子。
(2)空棋局开盘,黑棋先发,从最上面一行开始下,棋子会落到最下行。
(3)黑,红交替下子,每次只能下一子,从最上行开始下。
(4)棋子下在任何位置,都会掉落至该列的最下方的空格处,只有该列已有棋子时,该棋子才落在该列最上面棋子的上一格(就是往上摞棋子),以此类推。
(5)棋子下定后便不可以移动。
(6)不许悔棋,下定即确定。
(7)允许中途认输,则对方获胜。
(8)哪一方最先出现横或竖或斜向四颗同色已落子,则该方获胜。
(9)若棋子填满双方仍未分出胜负则平局

<强>游戏原型:

使用Java实现四连环棋游戏

<强>功能实现:

定义一个居中窗口,用画板画出6 x7的格子。添加鼠标监听器,鼠标点击时获取坐标,用数组存储黑红双方棋子位置。给下黑棋赋一个布尔值,黑子下完后改变布尔值,改为下红棋的布尔值,实现黑红棋交替下在棋盘上。通过查找空格的方法,使棋子下在任何位置,都会落在该列格子中最下面的空格子里,如果该列已有棋子,则该棋子落在该列最上面的棋子的上一格空格处。每下一个棋子时就依次横向和纵向做出判断是否连成四子,以四子棋的颜色为判断基础,如果横向和纵向都不符合要求,开始进行斜着判断,直到发现四子相同为止,如果都不成立就代表没有连成四子,如果棋盘下满了仍未有任意一方连成同色四子,则为双方平局。设置重新开始,游戏规则,退出游戏,认输选项,用获取到的坐标确定选择的是哪个功能,点击后会弹出居中的消息框,判断是否确定选择。

代码部分如下:

包象棋;
  
  进口java.awt.Color;
  进口java.awt.Graphics;
  进口java.awt.event.MouseEvent;
  进口java.awt.event.MouseListener;
  进口java.awt.image.BufferedImage;
  进口java.io.IOException;
  进口javax.imageio.ImageIO;
  进口javax.swing.JFrame;
  进口javax.swing.JOptionPane;
  
  公开课四连环棋延伸JFrame实现MouseListener {/* *
  *为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入私人静态最终长serialVersionUID这个属性,具体数值自己定义。
  */私有静态最终长serialVersionUID=7715397504806319506 l;
  
  int [] [] allChess=new int [7] [6];//用数组来保存棋子,0表示无子,1表示黑子,2表示红子
  int [] chessX=new int[42];//保存棋谱,记录双方每一步落子的位置
  int [] chessY=new int [42];
  int x;//定义鼠标的坐标
  int y;
  布尔isblack=true;//用来表示黑子还是红子,真表示黑子假表示红子
  布尔canPlay=true;//用来表示当前游戏是否结束
  BufferedImage背景;
  
  四连环棋(){
  setBounds(600、270、580、450);//设置窗口的位置坐标,距左上角的,窗口的大小
  setVisible(真正);//显示窗口
  setTitle(“四连环棋“);
  setBackground (Color.yellow);
  addMouseListener(这个);
  setDefaultCloseOperation (EXIT_ON_CLOSE);
  setResizable(假);//不可改变大小
  
  }//画棋盘界面
  公共空间油漆(图形g) {//异常处理,找不到背景图片
  尝试{
  
  背景=ImageIO.read (getClass () .getResource (“5. png"));
  
  }捕捉(IOException) {
  m.printStackTrace ();
  }
  g.drawImage(背景,0,0,null);
  
  for (int i=0;i<7;我+ +){
  for (int j=0;j & lt;6;j + +) {//画实心黑子
  如果(allChess[我][j]==1) {
  int weizhiX=我* 53 + 50;
  int weizhiY=j * 53 + 68;
  g.setColor (Color.BLACK);
  g。fillOval (weizhiX weizhiY 40、40);
  g。drawOval (weizhiX weizhiY 40、40);
  }//画实心白子
  如果(allChess[我][j]==2) {
  int weizhiX=我* 53 + 50;
  int weizhiY=j * 53 + 68;
  g.setColor (Color.red);
  g。fillOval (weizhiX weizhiY 40、40);
  g。drawOval (weizhiX weizhiY 40、40);
  }
  }
  }
  
  }
  
  公共空间mousePressed (MouseEvent e) {
  
  x=e.getX ();
  y=e.getY ();//用来获取鼠标坐标//异常处理
  如果(e.getX () & lt; 30岁=| | e.getX()在43=460 + | | e.getY () & lt;=50 | | e.getY()在=329 + 60){
  尝试{
  把新的BeyondBoardException(“您所点击位置超出棋盘“);
  }捕捉(BeyondBoardException k) {//TODO自动生成的catch块
  System.out.println (k);
  }
  }
  
  如果(x> 43,,x

使用Java实现四连环棋游戏