java实现三子棋小游戏

三子棋是一个很古老的民间传统游戏,玩起来也非常便捷。三子棋也叫做OOXX棋,井字棋等,用“井”字分出3×3的格子,双方轮流下棋子(可以用O或者X来区别),只要将自己的棋子连成直线一行、一列或者对角线)就赢了,如果所有棋子都占满空格,没有任何一方成直线,则为平局。

在这里插入图片描述

实现思路:

a、程序提示第一个游戏者放置一个X棋子,然后提示第二个游戏者放置一个O棋子。每当游戏者放置一个棋子后,在屏幕显示棋盘状态,并判断棋局状态(胜、平、尚未结束)

b、为放置一个棋子,程序应提示用户输入棋子的行号和列号。

代码:

import java.util.Random;
import java.util.Scanner;

/**
 * @program: work1
 * @description: 三子棋游戏
 * @author: 谢荣旺 1429382875@qq.com
 * @create: 2021-03-13 21:39
 **/
public class unit6 {
    //是否玩家一
    static boolean first = true;
    //玩家代号
    static String player = first?"一":"二";
    //玩家一的棋子
    static final String chessPiecesOne = " O ";
    //玩家二的棋子
    static final String chessPiecesTwo = " X ";
    //棋子
    static String chessPieces = first?chessPiecesOne:chessPiecesTwo;
    //键盘输入对象
    static Scanner in = new Scanner(System.in);
    //玩家落子的行号
    static int x = 0;
    //玩家落子的列号
    static int y = 0;
    //是否结束
    static boolean over = false;
    //落子次数
    static int number = 0;
    //棋盘
    static String[][] list = {{"__|", "__|", "__"}, {"__|", "__|", "__"}, {"  |", "  |", "  "}};

    /**
     * @Description: 主函数
     * @param args:
     * @return: void
     * @Author: 谢荣旺
     * @Date: 2021/3/13
     */
    public static void main(String[] args) {
//        System.out.println("__|__|__");
//        System.out.println("__|__|__");
//        System.out.println("  |  |  ");
        System.out.println("初始化棋盘完成,游戏开始!");
        print();
        while (!over){
            number++;
            play();
            System.out.println("玩家"+player+"落子结束!棋盘当前状态为:");
            print();
            if (win()){
                System.out.println("玩家"+player+"获胜!");
                over = !over;
            }else if (number == 9){
                System.out.println("棋盘已满,双方打平!");
                over = !over;
            }else {
                System.out.println("棋局尚未结束!");
            }
            first = !first;
        }
    }

    /**
     * @Description: 玩家落子
     * @param :
     * @return: void
     * @Author: 谢荣旺
     * @Date: 2021/3/13
     */
    static void play() {
        player = first?"一":"二";
        chessPieces = chessPieces = first?chessPiecesOne:chessPiecesTwo;
        System.out.println("玩家"+player+"开始落子,请输入落子的行号:");
        x = in.nextInt();
        System.out.println("玩家"+player+"开始落子,请输入落子的列号:");
        y = in.nextInt();
        if (x < 1 || x > 3 || y < 1 || y > 3 || list[x - 1][y - 1].equals(chessPiecesOne) || list[x - 1][y - 1].equals(chessPiecesTwo)) {
            System.out.println("落子犯规,请重新落子!不可超出边界,也不可重复落子!");
            play();
        }else {
            list[x - 1][y - 1] = chessPieces;
        }
    }

    /**
     * @Description: 打印棋盘
     * @param :
     * @return: void
     * @Author: 谢荣旺
     * @Date: 2021/3/13
     */
    static void print(){
        for (String[] ints : list) {
            for (String i : ints) {
                Random random = new Random();
                System.out.print(i);
            }
            System.out.println("");
        }
    }

    /**
     * @Description: 判断是否获胜
     * @param :
     * @return: boolean
     * @Author: 谢荣旺
     * @Date: 2021/3/13
     */
    static boolean win(){
        //首先判断同一行棋子是否相同;
        if (list[x-1][0].equals(list[x-1][1]) && list[x-1][0].equals(list[x-1][2])){
            return true;
        }
        //然后判断同一列棋子是否相同;
        if (list[0][y-1].equals(list[1][y-1]) && list[0][y-1].equals(list[2][y-1])){
            return true;
        }
        int position = (x-1)*3+y;
        //然后判断第3、5、7个棋子是否相同;
        if (position == 3  || position == 5 || position == 7){
            if (list[0][2].equals(list[1][1]) && list[0][2].equals(list[2][0])){
                return true;
            }
        }
        //然后判断第1、5、9个棋子是否相同;
        if (position == 1  || position == 5 || position == 9){
            if (list[0][0].equals(list[1][1]) && list[0][0].equals(list[2][2])){
                return true;
            }
        }
        return false;
    }
}

运行结果:

平局:
初始化棋盘完成,游戏开始!
__|__|__
__|__|__
  |  |  
玩家一开始落子,请输入落子的行号:
1
玩家一开始落子,请输入落子的列号:
1
玩家一落子结束!棋盘当前状态为:
 O __|__
__|__|__
  |  |  
棋局尚未结束!
玩家二开始落子,请输入落子的行号:
1
玩家二开始落子,请输入落子的列号:
2
玩家二落子结束!棋盘当前状态为:
 O  X __
__|__|__
  |  |  
棋局尚未结束!
玩家一开始落子,请输入落子的行号:
1
玩家一开始落子,请输入落子的列号:
2
落子犯规,请重新落子!不可超出边界,也不可重复落子!
玩家一开始落子,请输入落子的行号:
1
玩家一开始落子,请输入落子的列号:
3
玩家一落子结束!棋盘当前状态为:
 O  X  O 
__|__|__
  |  |  
棋局尚未结束!
玩家二开始落子,请输入落子的行号:
1
玩家二开始落子,请输入落子的列号:
4
落子犯规,请重新落子!不可超出边界,也不可重复落子!
玩家二开始落子,请输入落子的行号:
1
玩家二开始落子,请输入落子的列号:
3
落子犯规,请重新落子!不可超出边界,也不可重复落子!
玩家二开始落子,请输入落子的行号:
2
玩家二开始落子,请输入落子的列号:
2
玩家二落子结束!棋盘当前状态为:
 O  X  O 
__| X __
  |  |  
棋局尚未结束!
玩家一开始落子,请输入落子的行号:
3
玩家一开始落子,请输入落子的列号:
2
玩家一落子结束!棋盘当前状态为:
 O  X  O 
__| X __
  | O   
棋局尚未结束!
玩家二开始落子,请输入落子的行号:
2
玩家二开始落子,请输入落子的列号:
1
玩家二落子结束!棋盘当前状态为:
 O  X  O 
 X  X __
  | O   
棋局尚未结束!
玩家一开始落子,请输入落子的行号:
2
玩家一开始落子,请输入落子的列号:
3
玩家一落子结束!棋盘当前状态为:
 O  X  O 
 X  X  O 
  | O   
棋局尚未结束!
玩家二开始落子,请输入落子的行号:
3
玩家二开始落子,请输入落子的列号:
3
玩家二落子结束!棋盘当前状态为:
 O  X  O 
 X  X  O 
  | O  X 
棋局尚未结束!
玩家一开始落子,请输入落子的行号:
3
玩家一开始落子,请输入落子的列号:
1
玩家一落子结束!棋盘当前状态为:
 O  X  O 
 X  X  O 
 O  O  X 
棋盘已满,双方打平!

Process finished with exit code 0

获胜:
初始化棋盘完成,游戏开始!
__|__|__
__|__|__
  |  |  
玩家一开始落子,请输入落子的行号:
1
玩家一开始落子,请输入落子的列号:
1
玩家一落子结束!棋盘当前状态为:
 O __|__
__|__|__
  |  |  
棋局尚未结束!
玩家二开始落子,请输入落子的行号:
1
玩家二开始落子,请输入落子的列号:
2
玩家二落子结束!棋盘当前状态为:
 O  X __
__|__|__
  |  |  
棋局尚未结束!
玩家一开始落子,请输入落子的行号:
2
玩家一开始落子,请输入落子的列号:
2
玩家一落子结束!棋盘当前状态为:
 O  X __
__| O __
  |  |  
棋局尚未结束!
玩家二开始落子,请输入落子的行号:
1
玩家二开始落子,请输入落子的列号:
3
玩家二落子结束!棋盘当前状态为:
 O  X  X 
__| O __
  |  |  
棋局尚未结束!
玩家一开始落子,请输入落子的行号:
3
玩家一开始落子,请输入落子的列号:
3
玩家一落子结束!棋盘当前状态为:
 O  X  X 
__| O __
  |  | O 
玩家一获胜!
Disconnected from the target VM, address: '127.0.0.1:53064', transport: 'socket'

Process finished with exit code 0

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值