ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用Java实现简单的五子棋游戏,两年前我学生时代做的小开发,供学生党参考练手

2019-07-16 15:00:21  阅读:207  来源: 互联网

标签:练手 begin Java 五子棋 System break println false out


五子棋棋盘大小:20*20

用“十”填充,玩家使用黑色棋子,电脑使用白色棋子

可连续的多次对战

源代码如下:

package package0;
import java.util.Random;
import java.util.Scanner;

public class WuZiQi {
    //初始化棋盘数据
    static int length = 20;
    //创建棋盘和棋盘网格符号
    static String[][] goBang = new String[length][length];
    static String add = "十";
    static String black="●";
    static String white="○";
    static boolean begin=true;

    static String zb=null;
    static boolean blackDo=true;//true时为黑方选手的落子,false时为白方选手的落子,黑方代表玩家
    static int a,b;//hanglie
    static int blackScore=1; static int whiteScore=1;


    //初始化棋局的方法20*20,用"十"填充
    public static void main(String[] args) {
        boolean goOn=true;
        do {
            //初始化棋盘
            for (int i = 0; i < goBang.length; i++) {
                for (int j = 0; j < goBang.length; j++) {
                    goBang[i][j] = add;
                }
            }
            Scanner scanner = new Scanner(System.in);

            //下棋


            show();//开局首先调用显示棋局的静态方法
            do {

                //输入走棋的位置
                System.out.println("请输入您下棋行和列,如:3,5表示第3行第5列,1=<x<=20,1=<y<=20:");
                zb = scanner.next();
                String[] str = zb.split(",");//以,为界把一个字符串分成两个字符串
                a = Integer.valueOf(str[0]) - 1;
                b = Integer.valueOf(str[1]) - 1;//将字符串转int,并-1才能转换成数组的索引下标

                //用黑子填充棋局
                if (goBang[a][b].equals(add)) {//判断goBang[a][b]这个位置是否可用
                    if (blackDo) {//是黑方走的棋时把黑子填充在输入的坐标里,并改变blackDo的值,使下一次为白方填充
                        goBang[a][b] = black;
                        blackDo = false;
                    } else {//不是黑方走的棋时把白子填充在输入的坐标里,并改变blackDo的值,使下一次为黑方填充
                        goBang[a][b] = white;
                        blackDo = true;
                    }
                } else {//输入的坐标位置不可用时
                    do {
                        System.out.println("输入位已经存在棋子,请从新输入:");
                        zb = scanner.next();
                        str = zb.split(",");//以,为界把一个字符串分成两个字符串
                        a = Integer.valueOf(str[0]) - 1;
                        b = Integer.valueOf(str[1]) - 1;//将字符串转int,并-1才能转换成数组的索引下标
                    } while (!goBang[a][b].equals(add));
                    if (blackDo) {//是黑方走的棋时把黑子填充在输入的坐标里,并改变blackDo的值,使下一次为白方填充
                        goBang[a][b] = black;
                        blackDo = false;
                    } else {//不是黑方走的棋时把白子填充在输入的坐标里,并改变blackDo的值,使下一次为黑方填充
                        goBang[a][b] = white;
                        blackDo = true;
                    }
                }
                PanDing();//调用判定方法进行判定
                //如果人赢了,机器就不需要再走
                if (blackScore < 5) {
                    //机器走棋
                    Random rand = new Random();
                    b = rand.nextInt(20);//生成【0,20)之间的随机整数,不包括20
                    a = rand.nextInt(20);//生成【0,20)之间的随机整数,不包括20
                    if (goBang[a][b].equals(add)) {
                        goBang[a][b] = white;
                        blackDo = true;
                    } else {
                        do {
                            b = rand.nextInt(20);//生成【0,20)之间的随机整数,不包括20
                            a = rand.nextInt(20);//生成【0,20)之间的随机整数,不包括20

                        } while (goBang[a][b].equals(add));
                        goBang[a][b] = white;
                        blackDo = true;
                    }
                }
                show();


            } while (begin);
            System.out.println("是否再来一局?y/n :");
            if(scanner.next().equals("n")){goOn=false;}

        }while(goOn);


    }//主方法结束
    static void show(){//静态方法显示棋局
        //输出棋局的方法用增强for循环
        for (String[] strings : goBang) {
            for (String string : strings) {
                System.out.print(string);
            }
            System.out.println();
        }
    }
    static void PanDing() {
        /**判定输赢,赢面出现时共有4种情况
         * 定义blackScore为黑方棋子连续的连接个数,值为5时赢
         * 定义whiteScore为白方棋子连续的连接个数,值为5时赢
         */

        //1.第一种情况:5个横着的连续的相同颜色的棋子

        blackScore=1;whiteScore=1;
        lableA:
        for (String[] strings : goBang) {
            for (String x : strings) {
                if (x.equals(black)) {
                    blackScore++;
                } else blackScore = 0;

                if (x.equals(white)) {
                    whiteScore++;
                } else whiteScore = 0;

                if (blackScore > 5) {
                    begin = false;
                    System.out.println("游戏结束,你赢了");
                    break lableA;
                }
                if (whiteScore > 5) {
                    begin = false;
                    System.out.println("游戏结束,你输了");
                    break lableA;
                }
            }

        }
        //2.第二种情况竖线,分两种判定方式
        //2.1 最后落子在竖线的顶端构成五子连珠,由上往下判定
        if(a<16&&blackScore<5){
            blackScore=1;whiteScore=1;
            int a1=a;
            for(int i=0;i<4;i++){
                int a0=a1++;int b0=b;

                if (goBang[a1][b].equals(goBang[a0][b]) && goBang[a1][b].equals(black)) {
                    blackScore++;
                }
                if (goBang[a1][b].equals(goBang[a0][b]) && goBang[a1][b].equals(white)) {
                    whiteScore++;
                }


                if (blackScore >= 5) {
                    begin = false;
                    System.out.println("游戏结束,你赢了");
                    break;
                }
                if (whiteScore >= 5) {
                    begin = false;
                    System.out.println("游戏结束,你输了");
                    break;
                }

            }

        }
        //2.2 最后落子在竖线的底端构成五子连珠,由下往上判定
        if(a>3&&blackScore<5){
            blackScore=1;whiteScore=1;
            int a1=a;
            for(int i=0;i<4;i++){
                int a0=a1--;
                if(goBang[a1][b].equals(goBang[a0][b])&&goBang[a1][b].equals(black)){
                    blackScore++;
                }
                if(goBang[a1][b].equals(goBang[a0][b])&&goBang[a1][b].equals(white)){
                    whiteScore++;
                }
                if(blackScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你赢了!");
                    break;
                }
                if(whiteScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你输了!");
                    break;
                }
            }


        }
        //3.第三种情况" \ "斜线,分两种判定方式
        //3.1从左上往右下判定
        if(a<16&&b<16&&blackScore<5){
            blackScore=1;whiteScore=1;
            int a1=a;int b1=b;
            for(int i=0;i<4;i++){
                int a0=a1++;int b0=b1++;
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(black)){
                    blackScore++;
                }
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(white)){
                    whiteScore++;
                }
                if(blackScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你赢了!");
                    break;
                }
                if(whiteScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你输了!");
                    break;
                }

            }

        }
        //3.2、从右下往左上判定
        if(a>3&&b>3&&blackScore<5){
            blackScore=1;whiteScore=1;
            int a1=a;int b1=b;
            for(int i=0;i<4;i++){
                int a0=a1--;int b0=b1--;
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(black)){
                    blackScore++;
                }
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(white)){
                    whiteScore++;
                }
                if(blackScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你赢了!");
                    break;
                }
                if(whiteScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你输了!");
                    break;
                }
            }

        }
        //4.第四种情况" / " 分两种判定方式
        //4.1从右上往左下判定
        if(a<16&&b>3&&blackScore<5){
            blackScore=1;whiteScore=1;
            int a1=a;int b1=b;
            for(int i=0;i<4;i++){
                int a0=a1++;int b0=b1--;
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(black)){
                    blackScore++;
                }
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(white)){
                    whiteScore++;
                }
                if(blackScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你赢了!");
                    break;
                }
                if(whiteScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你输了!");
                    break;
                }
            }
        }
        //4.2从左下往右上判定
        if(a>3&&b<16&&blackScore<5){
            blackScore=1;whiteScore=1;
            int a1=a;int b1=b;
            for(int i=0;i<4;i++){
                int a0=a1--;int b0=b1++;
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(black)){
                    blackScore++;
                }
                if(goBang[a1][b1].equals(goBang[a0][b0])&&goBang[a1][b1].equals(white)){
                    whiteScore++;
                }
                if(blackScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你赢了!");
                    break;
                }
                if(whiteScore>=5){
                    begin=false;
                    System.out.println("游戏结束,你输了!");
                    break;
                }
            }
        }
}
}

 

******************************************************************

技术交流微信;intboy520

代做毕业设计

*****************************************************************

标签:练手,begin,Java,五子棋,System,break,println,false,out
来源: https://blog.csdn.net/qq_44756792/article/details/96135969

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有