java 编写的带人机对战功能五子棋程序 功能齐全 下载即可以运行

今天为大家继续分享泡泡堂小游戏的开发与制作 420,目前系统已经完成了初步功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步!!

开发环境 

  开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序

系统框架

  利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。选中Main.java,点右键 run as application启动相关程序。也客户把程序打包成JAR包,双击JAR即可以启动相关的程序。

游戏主要功能

    五子棋游戏简介

五子棋起源于中国,是全国智 竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。

    游戏规则

(1)对局双方各执一色棋子。

(2)空棋盘开局。

(3)黑先、白后,交替下子,每次只能下一子。

(4)棋子下在棋盘的空白点上,棋子下定后不得移动或拿走。

(5)黑方的第一枚棋子必须下在天元点上,即中心交叉点

五子棋对局,执行黑方指定开局、三手可交换、五手两打的规定。整个对局过程中黑方有禁手,白方无禁手。黑方禁手有三三禁手、四四禁手和长连禁手三种。

   人机对战功能 

      本程序的最大特色是有人对战功能,其中人为黑方,机器和白方。机器有较高的AI水平,能打败90%以上的用户。人下完一颗棋后,机器能在1秒时间完成下棋。游戏结束后,系统会给出相关的提示,并且恭喜获胜选手。

运行效果

1 开始界面

2 人机对战界面

3 游戏结束界面

关键代码 

 public void updatePaint(Graphics g) {
        if (!this.over) {   //如果是轮到电脑下
            if (this.computer)
                this.ComTurn();  //得到最佳下子点
            //遍历当前棋盘上的五连子情况,判断输赢
            for (i = 0; i <= 1; i++)
                for (j = 0; j < 672; j++) {
                    if (this.win[i][j] == 5)
                        if (i == 0) {                //人赢
                            this.pwin = true;
                            this.over = true;    //游戏结束
                            break;
                        } else {
                            this.cwin = true;    //电脑赢
                            this.over = true;
                            break;
                        }
                    if (this.over)               //一遇到五连子退出棋盘遍历
                        break;
                }
            g.setFont(new Font("华文行楷", 0, 20));
            g.setColor(Color.RED);
            //画出当前棋盘所有棋子
            for (i = 0; i <= 15; i++)
                for (j = 0; j <= 15; j++) {   //如果board元素值为0,则该坐标处为黑子
                    if (this.board[i][j] == 0) {
                        g.drawImage(black.getImage(), i * 30 + 31, j * 30 + 31, black.getImage().getWidth(black.getImageObserver()) - 3, black.getImage().getHeight(black.getImageObserver()) - 3, black.getImageObserver());
                    }
                    //如果board元素值为1,则该坐标处为白子
                    if (this.board[i][j] == 1) {
                        g.drawImage(white.getImage(), i * 30 + 31, j * 30 + 31, white.getImage().getWidth(white.getImageObserver()) - 3, white.getImage().getHeight(white.getImageObserver()) - 3, white.getImageObserver());
                    }
                }
            //画出白子(电脑)当前所下子,便于辨认
            if (this.board[m][n] != 2)
                g.drawImage(current.getImage(), m * 30 + 31, n * 30 + 31, current.getImage().getWidth(current.getImageObserver()) - 4, current.getImage().getHeight(current.getImageObserver()) - 4, current.getImageObserver());
            //判断输赢情况
            //人赢
            if (this.pwin)
                g.drawString("您太厉害了!再来一次请重新开始游戏..", 20, 200);
            //电脑赢
            if (this.cwin)
                g.drawString("很遗憾,你输了!再来一次请重新开始游戏..", 84, 190);
            //平局
            if (this.tie)
                g.drawString("不分胜负!再来一次请重新开始游戏..", 80, 200);
            g.dispose();
        }
    }

猜你喜欢

转载自blog.csdn.net/bangxiecode/article/details/129868976