java控制台版实现五子棋游戏

控制台实现五子棋游戏,供大家参考,具体内容如下

  • 控制台打印棋盘
  • 编写两人对弈的五子棋游戏,游戏规则:黑白双方有一方首先实现五子连续,则获胜,游戏结束。

代码:

import java.util.Scanner;

public class Wuziqi {
  //自定义二维数组来描述棋盘,默认初始值为0
  int[][] chessBoard = new int[16][16];

  //自定义成员方法来绘制棋盘
  void paint(){
    //1.先绘制棋盘中第一行的坐标信息,也就是列坐标信息
    for (int i = 0; i < 17; i++) {
      if( 0 == i){
        System.out.println(" ");
      }else {
        //按照16进制打印i-1的数值
        System.out.printf("%x " , i - 1);
      }
    }
    System.out.println();

    //2.绘制棋盘中除了第一行之外的其他部分以及行坐标信息
    for (int i = 0; i < 16; i++) {
      //用于打印行坐标信息
      System.out.printf("%x ", i);
      for (int j = 0; j < 16; j++) {
        //刚开始棋盘中所有内容都是+ , 因此直接打印
        if (0 == chessBoard[i][j]){
          System.out.print("+ ");
        } else if (1 == chessBoard[i][j]){
          System.out.print("● ");
        }else {
          System.out.print("○ ");
        }
      }
      //打印完一行的所有内容之后进行换行
      System.out.println();
    }
  }

  //自定义成员方法来提示黑方和白方分别下棋
  void play(){
    //定义标志位来进行黑方和白方的切换,true代表黑方,false代表白方
    boolean flag = true;
    //不断地分别提示黑方和白方下棋
    while(true){
      System.out.println("请" + (flag ? "黑方" : "白方") + "输入落子坐标(x,y):");
      Scanner sc = new Scanner(System.in);
      int x = sc.nextInt();
      int y = sc.nextInt();
      //根据用户输入的坐标来调整棋盘中的图案,策略为改变数值的元素值,
      //当黑子落子时就将数组中对应的元素值改为1,当白方落子时就将数组中对应的元素改为2
      chessBoard[x][y] = (flag ? 1 : 2);
      //重新绘制图案
      paint();
      //判断当前方是否胜利,若胜利就结束游戏
      if (Success(x, y)) {
        System.out.println("恭喜" + (flag ? "黑方" : "白方") + "胜利了!");
        break;
      }
      // 此时切换下棋方
      flag = !flag;
    }
  }

  //自定义成员方法来判断用户是否获胜,获胜的规则时:任意相同颜色的5个棋子连成一条线
  boolean Success(int x, int y){
    //1.判断竖向是否连成一线,则需要以该点为中心向上四个点向下四个点
    //声明变量来统计竖向相同颜色棋子的个数,先统计向上同色棋子的个数
    //先统计向上颜色相同的个数
    int count = 1;
    for (int i = x - 1; i >= 0; i--) {
      //若当前点代表的棋子与上述某个点代表的棋子不一样,则向上统计结束
      if (chessBoard[x][y] != chessBoard[i][y]){
        break;
      }
      count++;
    }
    //再统计向下颜色相同的个数
    for (int i = x + 1; i < chessBoard.length; i++) {
      if (chessBoard[x][y] != chessBoard[i][y]){
        break;
      }
      count++;
    }
    if (5 == count){
      return true;
    }

    //2.判断横向是否连成一条线,则需要以该店为中心向左四个点向右四个点
    count = 1;
    //先统计向左颜色相同的个数
    for (int j = y - 1; j >= 0; j--) {
      //若当前点代表的棋子与上述某个点代码的棋子不一样,则向上统计结束
      if (chessBoard[x][y] != chessBoard[x][j]) {
        break;
      }
      count++;
    }
    //再统计向右颜色相同的个数
    for (int j = y + 1; j < chessBoard.length; j++) {
      if(chessBoard[x][y] != chessBoard[x][j]){
        break;
      }
      count++;
    }
    if (5 == count){
      return true;
    }

    // 3.判断左上到右下是否连成一线,则需要以该点为中心向左上四个点向右下四个点
    count = 1;
    // 先统计左上颜色相同的个数
    for (int i = x-1, j = y - 1; i >= 0 && j >= 0; i--, j--) {
      // 若当前点代表的棋子与上述某个点代表的棋子不一样,则向上统计结束
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    // 再统计右下颜色相同的个数
    for (int i = x+1, j = y + 1; i <= 15 && j <= 15; i++, j++) {
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    if (5 == count) {
      return true;
    }

    // 4.判断右上到左下是否连成一线,则需要以该点为中心向右上四个点向左下四个点
    count = 1;
    // 先统计右上颜色相同的个数
    for (int i = x-1, j = y + 1; i >= 0 && j <= 15; i--, j++) {
      // 若当前点代表的棋子与上述某个点代表的棋子不一样,则向上统计结束
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    // 再统计左下颜色相同的个数
    for (int i = x+1, j = y - 1; i <= 15 && j >= 0; i++, j--) {
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    if (5 == count) {
      return true;
    }

    // 当上述所有情况都不成立时,表示该下棋方没有获胜
    return false;
  }
}
public class WuziqiTest {

  public static void main(String[] args) {
    //声明一个Wuziqi类型的引用指向Wuziqi类型的对象
    Wuziqi wz = new Wuziqi();
    //调用paint()方法打印列信息
    wz.paint();
    //下棋开始
    wz.play();
  }
}

结果如下

文中没有对下棋时候的数组下标进行合理值判断,各位可自行完善。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java编程实现五子棋人人对战代码示例

    利用Java,在控制台操作下,编写的五子棋,作为复习二维数组,面向对象等基础知识.w表示白棋,b表示黑棋 import java.util.Scanner; public class MainMethod { public static char[][] c = new char[10][10]; public static void main(String[] args) { MainMethod mainMethod = new MainMethod(); mainMethod.init()

  • Java实现两人五子棋游戏(二) 画出棋盘

    本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根目录/res/drawable/chessboard/png,现在我要显示这张图片. DrawChessBoard.java package xchen.test.simpleGobang; import java.awt.Graphics; import java.awt.Image; impor

  • Java实现五子棋AI算法

    五子棋AI算法 也算是一个典型的游戏AI算法,一些棋类的AI算法都可以参考实现,下面是Java实现代码 棋盘抽象接口 import java.util.List; public interface IChessboard { //取得棋盘最大横坐标 public int getMaxX(); //最大纵坐标 public int getMaxY(); //取得当前所有空白点,这些点才可以下棋 public List<Point> getFreePoints(); } 棋子类实现 //棋子类 p

  • Java实现两人五子棋游戏(三) 画出棋子

    上一篇文章讲的是Java实现两人五子棋游戏(二) 画出棋盘,已经画好棋盘,接下来要实现控制功能,主要功能: 1)选择棋子 2)画棋子 3)判断胜负 4)交换行棋方 先实现画棋子PART -------------画棋子代码示例如下-------------- 首先,定义一个棋子类,这个类有两个属性,棋子颜色(0-表示黑色,1-表示白色),是否落子(我计划用一个二维数组才存储棋子的落子信息) Chessman.java package xchen.test.simpleGobang; public

  • java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //定义一个操作面板 OperatorPane op=null; public GomokuFrame() { //设置名称 this.setTitle("五子棋"); //设置窗口大小 this.setSize(510,510); //设置窗

  • java实现单人版五子棋游戏

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 package gyb.exam; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Point; import java.awt.Toolkit; import java.awt.

  • Java棋类游戏实践之单机版五子棋

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目标        1.掌握JavaGUI界面设计        2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二.实践内容       设计一个简单的五子棋程序,能够实现五子棋下棋过程.如下图所示 1.五子棋棋盘类 package cn.edu.ouc.fiveChess; import java.awt.Color; import java.awt.Curs

  • java基于swing实现的五子棋游戏代码

    本文实例讲述了java基于swing实现的五子棋游戏代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Main extends JFrame implements ActionListener{         private static final long serialVersionUID = 1L;      

  • java实现单机版五子棋

    这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一.该游戏需要实现 1.设计主框架,界面. 2.利用ActionListener接口实现按钮事件的监听. 3.重新开始功能的实现. 4.悔棋功能的实现. 5.退出功能的实现. 6.棋盘中棋子点类的定义. 7.利用MouseListener接口实现事件监听,并实现接口里的所有方法. 8.当鼠标移动到棋盘上的交点上,且该点上无棋子时能够变成小手形状. 9.点击棋盘时

  • Java实现五子棋网络版

    本文实例为大家分享了Java实现五子棋网络版的具体代码,供大家参考,具体内容如下 需求分析: 对于网络五子棋而言,在普通五子棋的基础上需要添加以下功能: 1.拥有服务器端和客户端,用户通过客户端登录服务器后可与其他登录的用户进行对弈 2.服务器支持多组用户同时进行对弈 3.用户可以在服务器上创建新游戏或加入已创建的游戏 4.用户在下棋的时候可以进行聊天交流 由上可以知道需要实现的功能: ·提供服务器和客户端的功能 ·服务器将监听客户端的登录情况并允许多个客户端进行登录 ·用户通过客户端可以登录服

随机推荐