Java五子棋-人人对战

五子棋是国内受到普遍欢迎的一款游戏,规则简单,趣味不俗。作为一名程序员,自然也希望将它移植到电脑上。
这篇我们要讲的主要就是实现简单的人人对战,AI算法放到以后单独说。
我们先来整理一下脉络,看看实现五子棋需要哪些内容:

  • 棋盘。这毋庸置疑
  • 落子监听。下棋当然要把棋子画出来,显然我们是用鼠标来下棋,这里就需要用到鼠标的监听
  • 胜负判断。下棋自然有输赢,每一步棋后都需要进行判断

棋盘

棋盘的绘制应该是十分简单,就不多说了,画成什么样就看自己的心情。当然,为了使用起来更加,我们可以加上开始游戏、悔棋、认输等按钮,按钮的监听我之前的文章也有讲过,不清楚的欢迎大家去看一下。其中,为了更合理一点,在开始游戏之前显然是不能悔棋和认输的,所以我们需要在开始游戏按钮按下之前将这两个按钮设置为无法使用,调用setEnabled()方法就可以实现,需要一个参数,类型为布尔。

落子监听

按钮的监听我们添加在actionPerformed方法(使用这个方法需要添加ActionListener接口)里,通过e.getActionCommand来获得按钮的名字来判断是哪个按钮,实现相应的功能。而落子的监听我们通过mousePressedmouseReleasedmouseClicked来实现(需要继承MouseAdapter类或者添加

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java五子棋人人对战的示例: ```java import java.util.Scanner; public class Gomoku { private static final int SIZE = 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 Gomoku() { board = new int[SIZE][SIZE]; currentPlayer = BLACK; } public void play() { Scanner scanner = new Scanner(System.in); while (true) { System.out.println("当前玩家: " + (currentPlayer == BLACK ? "黑棋" : "白棋")); System.out.print("请输入要下棋的位置(x y): "); int x = scanner.nextInt(); int y = scanner.nextInt(); if (isValidMove(x, y)) { makeMove(x, y); printBoard(); if (isWinningMove(x, y)) { System.out.println("恭喜玩家 " + (currentPlayer == BLACK ? "黑棋" : "白棋") + " 获胜!"); break; } currentPlayer = (currentPlayer == BLACK ? WHITE : BLACK); } else { System.out.println("无效的移动,请重新输入!"); } } scanner.close(); } private boolean isValidMove(int x, int y) { return x >= 0 && x < SIZE && y >= 0 && y < SIZE && board[x][y] == EMPTY; } private void makeMove(int x, int y) { board[x][y] = currentPlayer; } private boolean isWinningMove(int x, int y) { int count = 1; // 检查水平方向 for (int i = x - 1; i >= 0 && board[i][y] == currentPlayer; i--) { count++; } for (int i = x + 1; i < SIZE && board[i][y] == currentPlayer; i++) { count++; } if (count >= 5) { return true; } // 检查垂直方向 count = 1; for (int i = y - 1; i >= 0 && board[x][i] == currentPlayer; i--) { count++; } for (int i = y + 1; i < SIZE && board[x][i] == currentPlayer; i++) { count++; } if (count >= 5) { return true; } // 检查左上到右下的对角线 count = 1; for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == currentPlayer; i--, j--) { count++; } for (int i = x + 1, j = y + 1; i < SIZE && j < SIZE && board[i][j] == currentPlayer; i++, j++) { count++; } if (count >= 5) { return true; } // 检查右上到左下的对角线 count = 1; for (int i = x - 1, j = y + 1; i >= 0 && j < SIZE && board[i][j] == currentPlayer; i--, j++) { count++; } for (int i = x + 1, j = y - 1; i < SIZE && j >= 0 && board[i][j] == currentPlayer; i++, j--) { count++; } if (count >= 5) { return true; } return false; } private void printBoard() { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { if (board[i][j] == EMPTY) { System.out.print("- "); } else if (board[i][j] == BLACK) { System.out.print("● "); } else if (board[i][j] == WHITE) { System.out.print("○ "); } } System.out.println(); } } } public class Main { public static void main(String[] args) { Gomoku game = new Gomoku(); game.play(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值