Java五子棋的简单实现

五子棋项目设计文档

项目介绍:

本次设计是基于知识点Java类和对象以及数组开发的一个小型五子棋游戏程序。游戏开始时,选择黑棋、白棋开局,将一枚棋子落在棋盘一坐标上,然后轮番落子,如此轮流下子,直到某一方首先在棋盘的竖、横或方向上的五子连成线,则该方该局获胜。

项目功能:

游戏说明:功能列表如下:

(1)输出棋盘;

(2)提示用户下子;

(3)查看用户是否出界或者落子位置是否被占用

(4)轮番黑棋白棋选择坐标位置进行下子

(5)判断游戏是否输赢;

(6)退出游戏。

项目知识点:

Java类和对象、二维数组

项目实现思路:

  1. 棋盘设计为15*15,棋盘类型Chess[][] 二维数组,所含属性String chessType; 棋盘首先chessType值是
  2. 初始化二维数组
  3. 玩家选择黑白后,开始下棋。输入要下棋子的行列坐标黑白棋子轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋)。
  4. 每一次落子成功后,马上判断以该位置为中心的八个方向:上、下、左、右、左上、左下、右上、右下是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。
  5. 当游戏一方胜利后显示胜利信息。从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是,代表白棋,代表黑棋代表格子。   

代码实现

Gobang类

import java.util.Arrays;
import java.util.Scanner;
public class Gobang {
    private CheckBoard[][] checkBoard;
    private int end;//用于结束开始循环
    private   final int INITSIZE=15;
    public Gobang(){

    }
    //创建棋盘
public void setCheckBoard(){
        checkBoard=new CheckBoard[INITSIZE][INITSIZE];
        for(int i=0;i<INITSIZE;i++){
            for(int j=0;j<INITSIZE;j++){
                checkBoard[i][j]=new CheckBoard(0,i,j);
            }
        }
    }
//白棋下棋操作
public void white(){
        Scanner scanner=new Scanner(System.in);
        System.out.println("轮到白棋");
        int i=scanner.nextInt();
        int j=scanner.nextInt();
        checkBoard[i][j].var=1;
        if(checkBoard[i][j].win(checkBoard,i,j,INITSIZE,1)){
            System.out.println("恭喜白棋获胜");
            end=3;//结束循环
        }
}
//黑棋下棋操作
public void black(){
    Scanner scanner=new Scanner(System.in);
    System.out.println("轮到黑棋");
    int i=scanner.nextInt();
    int j=scanner.nextInt();
    checkBoard[i][j].var=-1;
    if(checkBoard[i][j].win(checkBoard,i,j,INITSIZE,-1)){
        System.out.println("恭喜黑棋获胜");
       end=3;
    }
}
//打印棋谱
public void print(){
        for(int i=0;i<INITSIZE;i++){
            for(int j=0;j<INITSIZE;j++){
                if(checkBoard[i][j].var==1){
                    System.out.print("◯"+" ");
                }else if (checkBoard[i][j].var==0){
                    System.out.print("➕"+" ");
                }else{
                    System.out.print("◉"+" ");
                }
            }
            System.out.println();
        }
}
//开始下棋操作
   public void start(){
        setCheckBoard();
       end=0;
        for(;;){
            if(end!=3){
            print();
            white();
            if(end==3){break;}
            print();
            black();
            }
        }

    }
}

CheckBoard类

public class CheckBoard {
//    private String piece;
    private int x;//行
    private int y;//列
    public int var;//种类,白色为1,黑色为-1,无棋子为0
    public CheckBoard(int var,int x,int y){

    }


    //改变棋子为白色
    public void changeWhite(CheckBoard[][] checkBoard,int x,int y){
//        checkBoard[x][y].var="○";
        checkBoard[x][y].var=1;

    }
    //改变棋子为黑色
    public void changeBlack(CheckBoard[][] checkBoard,int x,int y){
//        checkBoard[x][y].piece="○";
        checkBoard[x][y].var=1;
    }
    public boolean win(CheckBoard[][] checkBoard,int x, int y,int INITSIZE,int color){
        int count=0;
        boolean flag=false;
        int num=0;//定义一个控制种类的数
        if(color==1){
            num=1;//白色
        }else{
            num=-1;//黑色
        }
        //横向判断
        for(int i=x-4;i<x+5;i++){
        if(i<0||x+5>INITSIZE-1){
            continue;
        }
        if(checkBoard[i][y].var==color){
            count++;
        }
        if(count==5){
            flag=true;
        }
        }
        //纵向判断
        count=0;
        for(int j=y-4;j<y+5;j++){
            if(j<0||y+5>INITSIZE-1){
                continue;
            }
            if(checkBoard[x][j].var==color){
                count++;
            }
            if(count==5){
                flag=true;
            }
        }
        //左斜判断
        count=0;
        for(int i=x-4;i<x+5;i++){
            if(i<0||x+5>INITSIZE-1){
                continue;
            }
            if(checkBoard[i][i].var==color){
                count++;
            }
            if(count==5){
                flag=true;
            }
        }
        //右斜判断
        count=0;
        for(int i=x-4,j=y+4;i<x+5;i++,j--){
            if(i<0||x+5>INITSIZE-1||j<0||y+5>INITSIZE-1){
                continue;
            }
            if(checkBoard[i][j].var==color){
                count++;
            }
            if(count==5){
                flag=true;
            }
        }
        return flag;

        }

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值