java代码实现五子棋(控制台操作)

五子棋

1,数据设计
数据设计的目的,是将整个程序里面会平凡使用到的数据,提前做好处理。就像进行平时写算法题里面提前设置好每个部分所代表的意义和数值。

而五子棋里面相对来说会被频繁调用到的就有:
棋盘,回合数

用数组来表示棋盘以及落子的坐标。int map[][];
用一个int类型来表示回合数:int flag;

2,项目结构分析

五子棋项目本身流程相对复杂,并不是一个if或者for就可以独立完成的,所以需要创建对象以及方法,将功能分开书写再相互调用最后组合成一个完整的程序。

3,列举项目功能

1.初始化数据,给代表棋盘的数组赋值全部设置为零。给代表回合数的flag赋值为0。

2.下棋,根据玩家的输入以及当前的回合数,判断相对应的位置是否可以落子。可以落子就改变数值,不能落子就重新输入。

3.打印棋盘,根据当前数组的值打印棋盘情况

4.判断胜利,当棋盘上出现五个相同的棋子连成一条线,根据棋子的种类宣布胜利结果

5.胜利界面,在游戏结果出来以后判断胜利界面。

6.主页面,显示开始游戏,设置界面,退出游戏供玩家选择。

7.游戏各部分功能整合,根据游戏设计规划,先后反复调用各类方法让游戏变得更加完整。

4,根据功能进行方法设计

public void init(); 

数值初始化
int map【20】【20】 = 0;
int flag = 0
参数: void
返回值: void

public int isWin(int x, int y);

判断是否胜利,以及胜利的对象。
参数:
x: 当前回合落子的x坐标
y: 当前回合落子的y坐标
返回值:
0表示没有获胜
1表示黑子胜利
2表示白子胜利

public int playerMove(int x, int y); 

在指定位置落子
如果map[x][y]是空地 则修改map[x][y]的值:改为相应颜色(flag对应颜色)
否则不进行操作
参数:
x: 当前回合落子的x坐标
y: 当前回合落子的y坐标
返回值:
0表示落子失败 (棋盘已经有子)
1表示落子成功

public void menuView(); 

功能: 展示选项, 玩家可以在这里选择进入游戏, 进入设置或退出游戏

进入游戏: 调用游戏界面函数gameView();
进入设置: 敬请期待…
退出游戏: 调用exit(0);

public void gameView_ShowMap();

功能: 根据map数组 打印游戏棋盘
参数: void
返回值: void

public void winView(); 

功能: 根据flag的值 打印游戏胜利界面 用户可以按任意键回到主菜单
参数: void
返回值: void

public void gameView(); 

负责人: 张三

功能: 游戏界面整合
初始化游戏数据(调用函数init())
while(1){
打印游戏界面(调用函数gameView_ShowMap())
接收玩家坐标输入
落子(调用落子函数playerMove())
(如果落子失败 重新开始循环)判断游戏是否胜利(调用胜利判断函数isWin())
(如果游戏胜利 调用胜利界面函数 然后结束当前界面)
切换玩家(修改flag值)
}
参数: void
返回值: void

5,程序代码框架

public class Gomoku{
   
void init(){
   
//代码实现
}
int isWin(int x, int y){
   
//代码实现
}
int playerMove(int x, int y){
   
//代码实现
}
void menuView(){
   
//代码实现
}
void gameView_ShowMap(){
   
//代码实现
}
void winView(){
   
//代码实现
}
void gameView(){
   
//代码实现
}
}

6.程序源码

import java.util.Scanner;

public class Gomoku {
   
    public static void main(String[] args) {
   
        //实例化system01
        System01 system01 = new System01();
        //调用方法
        system01.menuView();
    }
}

class System01{
   
    //设置成员方法
    public int map[][] =new int[19][19];
    public int flag = 0;

    //初始化数据
    public void ini
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是 Java 实现五子棋代码示例: ``` import java.util.Scanner; public class FiveChess { private static final int ROWS = 15; // 棋盘行数 private static final int COLS = 15; // 棋盘列数 private static final int EMPTY = 0; // 空格子 private static final int BLACK = 1; // 黑棋 private static final int WHITE = 2; // 白棋 private int[][] board; // 棋盘数组 private int currentPlayer; // 当前落子方 public FiveChess() { board = new int[ROWS][COLS]; currentPlayer = BLACK; // 黑棋先行 } // 落子 public void play(int row, int col) { if (board[row][col] != EMPTY) { throw new RuntimeException("该位置已有棋子!"); } board[row][col] = currentPlayer; currentPlayer = (currentPlayer == BLACK) ? WHITE : BLACK; // 切换落子方 } // 判断游戏是否结束 public boolean isGameOver() { return isWin(BLACK) || isWin(WHITE) || isDraw(); } // 判断是否平局 public boolean isDraw() { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (board[i][j] == EMPTY) { return false; } } } return true; } // 判断是否获胜 public boolean isWin(int player) { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (board[i][j] == player) { // 判断横向是否连续五子 if (j + 4 < COLS && board[i][j + 1] == player && board[i][j + 2] == player && board[i][j + 3] == player && board[i][j + 4] == player) { return true; } // 判断纵向是否连续五子 if (i + 4 < ROWS && board[i + 1][j] == player && board[i + 2][j] == player && board[i + 3][j] == player && board[i + 4][j] == player) { return true; } // 判断左斜是否连续五子 if (i + 4 < ROWS && j + 4 < COLS && board[i + 1][j + 1] == player && board[i + 2][j + 2] == player && board[i + 3][j + 3] == player && board[i + 4][j + 4] == player) { return true; } // 判断右斜是否连续五子 if (i + 4 < ROWS && j - 4 >= 0 && board[i + 1][j - 1] == player && board[i + 2][j - 2] == player && board[i + 3][j - 3] == player && board[i + 4][j - 4] == player) { return true; } } } } return false; } // 打印棋盘 public void printBoard() { System.out.print(" "); for (int j = 0; j < COLS; j++) { System.out.print(j + " "); } System.out.println(); for (int i = 0; i < ROWS; i++) { System.out.print(i + " "); for (int j = 0; j < COLS; j++) { if (board[i][j] == EMPTY) { System.out.print("+ "); } else if (board[i][j] == BLACK) { System.out.print("● "); } else { System.out.print("○ "); } } System.out.println(i); } System.out.print(" "); for (int j = 0; j < COLS; j++) { System.out.print(j + " "); } } public static void main(String[] args) { FiveChess game = new FiveChess(); Scanner scanner = new Scanner(System.in); while (!game.isGameOver()) { game.printBoard(); System.out.print("请 " + ((game.currentPlayer == BLACK) ? "黑方" : "白方") + " 落子(例如:3,4):"); String input = scanner.nextLine(); String[] parts = input.split(","); int row = Integer.parseInt(parts[0]); int col = Integer.parseInt(parts[1]); try { game.play(row, col); } catch (RuntimeException e) { System.out.println(e.getMessage()); } } game.printBoard(); if (game.isDraw()) { System.out.println("平局!"); } else { System.out.println(((game.currentPlayer == BLACK) ? "白方" : "黑方") + " 获胜!"); } } } ``` 使用上述代码可以在控制台实现五子棋游戏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值