• <i id='gl71z68t'><tr id='htrt2tpd'><dt id='sf0nwsxt'><q id='m2oghmii'><span id='7twyv7bs'><b id='ul3u6vpw'><form id='v3fvzxvr'><ins id='uuhj9bzu'></ins><ul id='g0vleknd'></ul><sub id='4euxo0r2'></sub></form><legend id='gftw06vn'></legend><bdo id='dia3a5cd'><pre id='h67h1bwh'><center id='t6yqk9m5'></center></pre></bdo></b><th id='z3wmscmg'></th></span></q></dt></tr></i><div id='k723ojtk'><tfoot id='6zd3joll'></tfoot><dl id='glfsxinz'><fieldset id='jg79iyb8'></fieldset></dl></div>
  • <legend id='172wl1a0'><style id='zktpg9jc'><dir id='8qhfkw7s'><q id='mvoedq9k'></q></dir></style></legend>

      <bdo id='pxqnmwxa'></bdo><ul id='ke14ctrw'></ul>

    <tfoot id='xv71nwrv'></tfoot>

        <small id='bf5j1d91'></small><noframes id='0nr0rdwy'>

      1. 欢迎来到入门教程网!

        Java编程

        当前位置:主页 > 软件编程 > Java编程 >

        五子棋游戏的java代码 基于java的五子棋游戏的设计代码

        来源:本站原创|时间:2023-04-10|栏目:Java编程|点击:

        java五子棋源代码

        我这有算法 不过没做swing界面 DOS下可以直接运行 要不你拿去改改

        import java.io.BufferedReader;

        import java.io.InputStreamReader;

        /*

        * 五子棋源码

        * 所用的符号标识 ○ ● ┼

        * 在dos界面下运行效果最佳

        * 黑白双方交叉输入落子点坐标 以逗号隔开如 1,1

        * 输入空 或者一方胜出 程序停止

        */

        public class Chess {

        // 定义棋盘大小

        private static int SIZE = 15;

        private String[][] board;

        public static void main(String[] args) throws Exception {

        Chess chess = new Chess();

        // 初始化棋盘

        chess.initBoard();

        // 画出棋盘

        chess.paintBoard();

        // 根据who的奇偶性 判断该谁落子

        int who = 0;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = null;

        while ((str = br.readLine()) != null) {

        // 提取输入的 以","分开的数 分别对应x y坐标

        String[] posStr = str.split(",");

        int x = Integer.parseInt(posStr[0]);

        int y = Integer.parseInt(posStr[1]);

        // 判断落子点是否合法

        if (!"┼".equals(chess.board[x][y])) {

        System.out.println("这里不允许落子,请重下..");

        continue;

        }

        if (who % 2 == 0) {

        chess.board[x][y] = "○";

        chess.paintBoard();

        // 判断是否胜出

        if (chess.isWin("○")) {

        System.out.println("○获胜");

        return;

        }

        } else {

        chess.board[x][y] = "●";

        chess.paintBoard();

        // 判断是否胜出

        if (chess.isWin("●")) {

        System.out.println("●获胜");

        return;

        }

        }

        who++;

        }

        }

        // 以 "┼" 初始化棋盘

        public void initBoard() {

        board = new String[SIZE][SIZE];

        for (int i = 0; i SIZE; i++) {

        for (int j = 0; j SIZE; j++) {

        board[i][j] = "┼";

        }

        }

        }

        // 描绘出当前棋盘

        public void paintBoard() {

        // 以下代码 这里为了使得棋盘坐标看的清楚 加入了坐标值

        System.out.print(" ");

        for (int i = 0; i SIZE; i++) {

        if (i 10) {

        System.out.print(i + " ");

        } else {

        System.out.print((i - 10) + " ");

        }

        }

        System.out.println();

        // 以上代码 这里为了使得棋盘坐标看的清楚 加入了坐标值

        for (int i = 0; i SIZE; i++) {

        if (i 10) {

        System.out.print(" " + i);

        } else {

        System.out.print(i);

        }

        for (int j = 0; j SIZE; j++) {

        System.out.print(board[i][j]);

        }

        System.out.println();

        }

        }

        // 判断是否获胜

        public boolean isWin(String sign) {

        int count = 0;

        // 横向扫描各行

        // 有一个sign的子 计数器+1

        // 碰到不是sign的子 计数器置零

        // 计数器到达5时 返回true 胜出

        for (int i = 0; i SIZE; i++) {

        count = 0;

        for (int j = 0; j SIZE; j++) {

        if (board[i][j].equals(sign)) {

        count++;

        if (count == 5) {

        return true;

        }

        } else {

        count = 0;

        }

        }

        }

        // 纵向扫描各列

        // 方法同上

        for (int i = 0; i SIZE; i++) {

        count = 0;

        for (int j = 0; j SIZE; j++) {

        if (board[j][i].equals(sign)) {

        count++;

        if (count == 5) {

        return true;

        }

        } else {

        count = 0;

        }

        }

        }

        // 扫描斜右下

        // 在横向扫描基础上 外层套一个循环 以k为标识

        // 坐标x-y的范围在-SIZE+1到SIZE-1之间

        // 当x-y的值相等时 在同一右下斜线上

        for (int k = -SIZE + 1; k = SIZE - 1; k++) {

        count = 0;

        for (int i = 0; i SIZE; i++) {

        for (int j = 0; j SIZE; j++) {

        if (i - j == k) {

        if (board[i][j].equals(sign)) {

        count++;

        if (count == 5) {

        return true;

        }

        } else {

        count = 0;

        }

        }

        }

        }

        }

        // 扫描斜左边上

        // 方法同上 坐标x+y的值相等时 在同一左上斜线上

        for (int k = -SIZE + 1; k = SIZE - 1; k++) {

        count = 0;

        for (int i = 0; i SIZE; i++) {

        for (int j = 0; j SIZE; j++) {

        if (i + j == k) {

        if (board[i][j].equals(sign)) {

        count++;

        if (count == 5) {

        return true;

        }

        } else {

        count = 0;

        }

        }

        }

        }

        }

        return false;

        }

        }

        求五子棋Java代码旁边就注释 让我看的清楚明白一些,要详细的解释和思路

        import java.applet.*;

        import t.*;

        import t.event.*;

        import java.applet.Applet;

        import t.Color; //这一段import就不说了,下面要用到的就import进来

        public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener

        //继承Applet表明是个applet,后面的接口必须要实现每个接口的所有方法

        {

        int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子

        int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

        int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态 0 无子 1 白子 2 黑子

        求java五子棋代码要注释~现在1小时等待

        package org.crazyit.gobang;

        import java.io.BufferedReader;

        import java.io.InputStreamReader;

        /**

        * 五子棋游戏类

        *

        * @author yangenxiong [email protected]

        * @author Kelvin Mak [email protected]

        * @version 1.0

        * br/网站: a href=""疯狂Java联盟/a

        * brCopyright (C), 2009-2010, yangenxiong

        * brThis program is protected by copyright laws.

        */

        public class GobangGame {

        // 定义达到赢条件的棋子数目

        private final int WIN_COUNT = 5;

        // 定义用户输入的X坐标

        private int posX = 0;

        // 定义用户输入的X坐标

        private int posY = 0;

        // 定义棋盘

        private Chessboard chessboard;

        /**

        * 空构造器

        */

        public GobangGame() {

        }

        /**

        * 构造器,初始化棋盘和棋子属性

        *

        * @param chessboard

        * 棋盘类

        */

        public GobangGame(Chessboard chessboard) {

        this.chessboard = chessboard;

        }

        /**

        * 检查输入是否合法。

        *

        * @param inputStr

        * 由控制台输入的字符串。

        * @return 字符串合法返回true,反则返回false。

        */

        public boolean isValid(String inputStr) {

        // 将用户输入的字符串以逗号(,)作为分隔,分隔成两个字符串

        String[] posStrArr = inputStr.split(",");

        try {

        posX = Integer.parseInt(posStrArr[0]) - 1;

        posY = Integer.parseInt(posStrArr[1]) - 1;

        } catch (NumberFormatException e) {

        chessboard.printBoard();

        System.out.println("请以(数字,数字)的格式输入:");

        return false;

        }

        // 检查输入数值是否在范围之内

        if (posX 0 || posX = Chessboard.BOARD_SIZE || posY 0

        || posY = Chessboard.BOARD_SIZE) {

        chessboard.printBoard();

        System.out.println("X与Y坐标只能大于等于1,与小于等于" + Chessboard.BOARD_SIZE

        + ",请重新输入:");

        return false;

        }

        // 检查输入的位置是否已经有棋子

        String[][] board = chessboard.getBoard();

        if (board[posX][posY] != "十") {

        chessboard.printBoard();

        System.out.println("此位置已经有棋子,请重新输入:");

        return false;

        }

        return true;

        }

        /**

        * 开始下棋

        */

        public void start() throws Exception {

        // true为游戏结束

        boolean isOver = false;

        chessboard.initBoard();

        chessboard.printBoard();

        // 获取键盘的输入

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String inputStr = null;

        // br.readLine:每当键盘输入一行内容按回车键,则输入的内容被br读取到

        while ((inputStr = br.readLine()) != null) {

        isOver = false;

        if (!isValid(inputStr)) {

        // 如果不合法,要求重新输入,再继续

        continue;

        }

        // 把对应的数组元素赋为"●"

        String chessman = Chessman.BLACK.getChessman();

        chessboard.setBoard(posX, posY, chessman);

        // 判断用户是否赢了

        if (isWon(posX, posY, chessman)) {

        isOver = true;

        } else {

        // 计算机随机选择位置坐标

        int[] computerPosArr = computerDo();

        chessman = Chessman.WHITE.getChessman();

        chessboard.setBoard(computerPosArr[0], computerPosArr[1],

        chessman);

        // 判断计算机是否赢了

        if (isWon(computerPosArr[0], computerPosArr[1], chessman)) {

        isOver = true;

        }

        }

        // 如果产生胜者,询问用户是否继续游戏

        if (isOver) {

        // 如果继续,重新初始化棋盘,继续游戏

        if (isReplay(chessman)) {

        chessboard.initBoard();

        chessboard.printBoard();

        continue;

        }

        // 如果不继续,退出程序

        break;

        }

        chessboard.printBoard();

        System.out.println("请输入您下棋的坐标,应以x,y的格式输入:");

        }

        }

        /**

        * 是否重新开始下棋。

        *

        * @param chessman

        * "●"为用户,"○"为计算机。

        * @return 开始返回true,反则返回false。

        */

        public boolean isReplay(String chessman) throws Exception {

        chessboard.printBoard();

        String message = chessman.equals(Chessman.BLACK.getChessman()) ? "恭喜您,您赢了,"

        : "很遗憾,您输了,";

        System.out.println(message + "再下一局?(y/n)");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        if (br.readLine().equals("y")) {

        // 开始新一局

        return true;

        }

        return false;

        }

        /**

        * 计算机随机下棋

        */

        public int[] computerDo() {

        int posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1));

        int posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1));

        String[][] board = chessboard.getBoard();

        while (board[posX][posY] != "十") {

        posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1));

        posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1));

        }

        int[] result = { posX, posY };

        return result;

        }

        /**

        * 判断输赢

        *

        * @param posX

        * 棋子的X坐标。

        * @param posY

        * 棋子的Y坐标

        * @param ico

        * 棋子类型

        * @return 如果有五颗相邻棋子连成一条直接,返回真,否则相反。

        */

        public boolean isWon(int posX, int posY, String ico) {

        // 直线起点的X坐标

        int startX = 0;

        // 直线起点Y坐标

        int startY = 0;

        // 直线结束X坐标

        int endX = Chessboard.BOARD_SIZE - 1;

        // 直线结束Y坐标

        int endY = endX;

        // 同条直线上相邻棋子累积数

        int sameCount = 0;

        int temp = 0;

        // 计算起点的最小X坐标与Y坐标

        temp = posX - WIN_COUNT + 1;

        startX = temp 0 ? 0 : temp;

        temp = posY - WIN_COUNT + 1;

        startY = temp 0 ? 0 : temp;

        // 计算终点的最大X坐标与Y坐标

        temp = posX + WIN_COUNT - 1;

        endX = temp Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1

        : temp;

        temp = posY + WIN_COUNT - 1;

        endY = temp Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1

        : temp;

        // 从左到右方向计算相同相邻棋子的数目

        String[][] board = chessboard.getBoard();

        for (int i = startY; i endY; i++) {

        if (board[posX][i] == ico board[posX][i + 1] == ico) {

        sameCount++;

        } else if (sameCount != WIN_COUNT - 1) {

        sameCount = 0;

        }

        }

        if (sameCount == 0) {

        // 从上到下计算相同相邻棋子的数目

        for (int i = startX; i endX; i++) {

        if (board[i][posY] == ico board[i + 1][posY] == ico) {

        sameCount++;

        } else if (sameCount != WIN_COUNT - 1) {

        sameCount = 0;

        }

        }

        }

        if (sameCount == 0) {

        // 从左上到右下计算相同相邻棋子的数目

        int j = startY;

        for (int i = startX; i endX; i++) {

        if (j endY) {

        if (board[i][j] == ico board[i + 1][j + 1] == ico) {

        sameCount++;

        } else if (sameCount != WIN_COUNT - 1) {

        sameCount = 0;

        }

        j++;

        }

        }

        }

        return sameCount == WIN_COUNT - 1 ? true : false;

        }

        public static void main(String[] args) throws Exception {

        GobangGame gb = new GobangGame(new Chessboard());

        gb.start();

        }

        }

        <small id='s61e2grv'></small><noframes id='vk1rgf4s'>

          <tbody id='ofsiv44b'></tbody>
        <tfoot id='jyk531kz'></tfoot>
        1. <i id='1l22btmu'><tr id='ln7r35m9'><dt id='ffzeij4m'><q id='ti1mcasa'><span id='8yizq6j9'><b id='u42gk4gl'><form id='0a7dym9w'><ins id='gxribq7j'></ins><ul id='3u3io1cm'></ul><sub id='813y2v5o'></sub></form><legend id='240r3zor'></legend><bdo id='q7aquinu'><pre id='pgpbbekm'><center id='ek3cjpsp'></center></pre></bdo></b><th id='y4an7k3c'></th></span></q></dt></tr></i><div id='i67tjndp'><tfoot id='3un6qwt9'></tfoot><dl id='ds704c64'><fieldset id='b87uekpz'></fieldset></dl></div>
                <bdo id='z9d2q75s'></bdo><ul id='ssqb023p'></ul>

                  <legend id='5n6hqg5o'><style id='76oygtfo'><dir id='fuw3toqo'><q id='r0rviavv'></q></dir></style></legend>

                • 上一篇:矩阵乘法java代码 java编写矩阵乘法

                  栏    目:Java编程

                  下一篇:没有了

                  本文标题:五子棋游戏的java代码 基于java的五子棋游戏的设计代码

                  本文地址:https://www.xiuzhanwang.com/a1/Javabiancheng/17355.html

                  网页制作CMS教程网络编程软件编程脚本语言数据库服务器

                  如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

                  联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

                  Copyright © 2002-2020 脚本教程网 版权所有

                        <bdo id='4xjphme4'></bdo><ul id='r6ncuo2t'></ul>
                      <i id='yhs99j2g'><tr id='8n4hzx4a'><dt id='14z5zf4w'><q id='kylcxicz'><span id='c9pcwuua'><b id='dp9yfy68'><form id='qmg1agys'><ins id='gvheb5ba'></ins><ul id='scuw6khb'></ul><sub id='rdwc791m'></sub></form><legend id='5wikjndf'></legend><bdo id='kxndfi6s'><pre id='9rg1746x'><center id='sadimqi9'></center></pre></bdo></b><th id='bii7r8it'></th></span></q></dt></tr></i><div id='bb87ogdw'><tfoot id='4cogj9k3'></tfoot><dl id='srawtvdy'><fieldset id='8m2us1w9'></fieldset></dl></div>

                    1. <tfoot id='88bz2h2g'></tfoot><legend id='qtadhlff'><style id='e7jgkwmv'><dir id='sqdnfxe6'><q id='xn7xsq2e'></q></dir></style></legend>

                      <small id='wz7s41oo'></small><noframes id='tkmsx11q'>