本篇文章给大家分享的是有关使用Java实现四连环棋游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>游戏规则:强>
(1)双人游戏,有黑红两色棋子,双方各执一色棋子。
(2)空棋局开盘,黑棋先发,从最上面一行开始下,棋子会落到最下行。
(3)黑,红交替下子,每次只能下一子,从最上行开始下。
(4)棋子下在任何位置,都会掉落至该列的最下方的空格处,只有该列已有棋子时,该棋子才落在该列最上面棋子的上一格(就是往上摞棋子),以此类推。
(5)棋子下定后便不可以移动。
(6)不许悔棋,下定即确定。
(7)允许中途认输,则对方获胜。
(8)哪一方最先出现横或竖或斜向四颗同色已落子,则该方获胜。
(9)若棋子填满双方仍未分出胜负则平局
<强>游戏原型:强>
<强>功能实现:强>
定义一个居中窗口,用画板画出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实现四连环棋游戏