Java编写的五子棋小游戏

本文介绍了一个简单的Java五子棋游戏实现,采用二维数组表示棋盘,通过控制台输入玩家落子位置,并实现了判断输赢的功能。文章分享了代码细节及实现技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看书的时候看到一个不完整的Java编写的一个五子棋小游戏,为了恢复一下编程能力刚刚把这个小程序完成了。

实现的功能很简单,两人对下五子棋,程序自动回判断输赢。在ubuntu下搞得,没有装什么高端的输入法的程序,所以用“*”和“X”来代表两个不同的棋子。

这个程序虽然简单但是还是有很多值得学习的地方。


首先,整个棋盘用二维数组表示。在Java中声明一个二维数组使用 type[][] arrName;的语句。

其次,我们需要给数组赋值,开始的时候是画棋盘使用的是“+”,给二维数组开辟空间和一维数组差不多。e.g.: arrName= new type[len1][len2];

判断游戏时候结束我们需要判断四个方向的棋子是不是连成了5个棋子。是的话游戏继续,否则退出。

整个代码的主要架构如下图所示:


其中initBoard负责初始化,printBoard负责打印更新整个面板,main做点常规操作赋值之类的,WinOrLose则负责判断游戏时候结束。

比较有价值的代码是输入这部分,可以根据特定符号分割输入的数据,值得收藏的代码:


 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  String inputStr = null;
  inputStr=br.readLine();
  String[] str = inputStr.split(",");


以下为完整的代码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Gobang {
    private String[][] board;
    
    private static int BOARD_SIZE = 15;
    
    private void initBoard(){
        board = new String[BOARD_SIZE][BOARD_SIZE];
        for (int i = 0; i<BOARD_SIZE; i++)
        {
            for (int j = 0; j<BOARD_SIZE; j++)
            {
                board[i][j]="十";
            }
        }
    }
   public void printBoard(){
       for (int i = 0 ; i < BOARD_SIZE;i++)
       {
           for(int j = 0; j< BOARD_SIZE; j++)
           {
                  System.out.print(board[i][j]);
           }
             System.out.print("\n");
       }
   }
   
   public int winOrLose(int x, int y, String star){
       int end = 0; 
       int xPos=x,yPos=y;
       int s1=0,s2=0,sum=0,time = 4;
       star = board[x][y];
       
       while(time !=0)
       {   
           //左斜
           for(int i = x-1,j=y-1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); i--,j--)
           {
                  s1++;
           }
           for (int i=x+1,j=y+1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); i++, j++)
           {
               s2++;
           }  
           sum = s1 + s2;
           if(sum==5)
           {
               end = 1;
               break;
           }
           else
           {
               s1=0; s2 = 0; sum = 0;
           }
           //右斜
           for(int i = x-1,j=y-1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); i++,j--)
           {
                  s1++;
           }
           for (int i=x+1,j=y+1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); i--, j++)
           {
               s2++;
           }  
           sum = s1 + s2;
           if(sum==5)
           {
               end = 1;
               break;
           }
           else
           {
               s1=0; s2 = 0; sum = 0;
           }
           //north and south
           for(int i = x-1,j=y-1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); j--)
           {
                  s1++;
           }
           for (int i=x+1,j=y+1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); j++)
           {
               s2++;
           }  
           sum = s1 + s2;
           if(sum==5)
           {
               end = 1;
               break;
           }
           else
           {
               s1=0; s2 = 0; sum = 0;
           }
           //we
           for(int i = x-1,j=y-1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); i++)
           {
                  s1++;
           }
           for (int i=x+1,j=y+1; board[i][j] == star && (i>=0 && i< BOARD_SIZE) && (j>=0 && j< BOARD_SIZE); i--)
           {
               s2++;
           }  
           sum = s1 + s2;
           if(sum==5)
           {
               end = 1;
               break;
           }
           else
           {
               s1=0; s2 = 0; sum = 0;
           }
       }
       
       
       return end;
   }

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
           Gobang gb = new Gobang();
           gb.initBoard();
           gb.printBoard();
           BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
           String inputStr = null;
           int flag=0;
           int end=0;
           while ((inputStr = br.readLine()) != null )
           {
               String[] posStrArr = inputStr.split(",");
               
               int xPos = Integer.parseInt(posStrArr[0]);
               int yPos = Integer.parseInt(posStrArr[1]);
               if(flag==0)
               {
                   gb.board[xPos-1][yPos-1] = "*";
               }
               else
               {
                   gb.board[xPos-1][yPos-1] = "X"; 
               }
               flag++;
               gb.printBoard();
               end=gb.winOrLose(xPos-1, yPos-1, gb.board[xPos-1][yPos-1]);
               if(end ==1)
               {
                   break;
               }
           }
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值