java五子棋倒计时代码_用java编写五子棋程序时黑方和白方倒计时出现负数怎么处理?求高手指点。...

在编写Java五子棋程序时遇到黑方和白方倒计时出现负数的问题,主要原因是线程未正确控制。建议检查isBlack变量的切换逻辑,并在一方时间到时停止线程。可以通过设置canPlay为false来实现线程停止,避免时间继续递减导致负数。新游戏开始时需要重新启动线程。
摘要由CSDN通过智能技术生成

做了一个简单的模拟,代码如下:

你的问题出要是出在控制上。

我估计你这个方法中的isBlack 这个变量是自动切换的,

黑棋下完了,isBlack = false; 白棋下完了 isBlack = true;

这样,就会出问题,因为你的线程是没有停止的,所以,blackTime--; 或 whiteTime--; 是一直在进行的。而且 canPlay 没有用上。

你看一下 if (isBlack) 中的代码,这是我没有改动的

你再看一下 else 中的代码, 那是我改过的。

可以不会出现负数。

再一个,我觉得只要有一方时间到了,就该停止线程,canPlay的作用应该就是停止线程。

一方时间用完,应该是负吧,不该等到双方时间都 用完啊。

新游戏时,重新启动线程

----------------------------------------------------------------------------------------------

import javax.swing.JOptionPane;

public class Time extends Thread {

int maxTime = 1;

boolean isBlack = false;

int blackTime = 60;

int whiteTime = 60;

boolean canPlay = true;

public static void main(String[] args) {

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是五子棋的完整Python代码: ```python import numpy as np # 定义棋盘大小 BOARD_SIZE = 15 # 定义棋子类型 EMPTY = 0 BLACK = 1 WHITE = 2 class Board: def __init__(self): self.board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=np.int32) self.current_player = BLACK def get(self, x, y): return self.board[x][y] def put(self, x, y): self.board[x][y] = self.current_player def switch_player(self): self.current_player = WHITE if self.current_player == BLACK else BLACK def is_valid_move(self, x, y): if x < 0 or x >= BOARD_SIZE or y < 0 or y >= BOARD_SIZE: return False if self.board[x][y] != EMPTY: return False return True def is_game_over(self): # 判断横向是否有五子相连 for i in range(BOARD_SIZE): for j in range(BOARD_SIZE - 4): if self.board[i][j] == self.board[i][j+1] == self.board[i][j+2] == self.board[i][j+3] == self.board[i][j+4] and self.board[i][j] != EMPTY: return True # 判断竖向是否有五子相连 for i in range(BOARD_SIZE - 4): for j in range(BOARD_SIZE): if self.board[i][j] == self.board[i+1][j] == self.board[i+2][j] == self.board[i+3][j] == self.board[i+4][j] and self.board[i][j] != EMPTY: return True # 判断左上到右下是否有五子相连 for i in range(BOARD_SIZE - 4): for j in range(BOARD_SIZE - 4): if self.board[i][j] == self.board[i+1][j+1] == self.board[i+2][j+2] == self.board[i+3][j+3] == self.board[i+4][j+4] and self.board[i][j] != EMPTY: return True # 判断左下到右上是否有五子相连 for i in range(4, BOARD_SIZE): for j in range(BOARD_SIZE - 4): if self.board[i][j] == self.board[i-1][j+1] == self.board[i-2][j+2] == self.board[i-3][j+3] == self.board[i-4][j+4] and self.board[i][j] != EMPTY: return True return False def __str__(self): result = ' ' for i in range(BOARD_SIZE): result += str(i) + ' ' result += '\n' for i in range(BOARD_SIZE): result += str(i) + ' ' for j in range(BOARD_SIZE): if self.board[i][j] == EMPTY: result += '+ ' elif self.board[i][j] == BLACK: result += 'X ' else: result += 'O ' result += '\n' return result board = Board() while True: print(board) if board.current_player == BLACK: print('黑方落子:') else: print('白方落子:') x = int(input('请输入x坐标:')) y = int(input('请输入y坐标:')) if board.is_valid_move(x, y): board.put(x, y) if board.is_game_over(): print(board) print('游戏结束!') break board.switch_player() else: print('无效的落子!') ``` 这个代码实现了一个文本版的五子棋游戏,可以在命令行中运行。玩家先输入x坐标,然后输入y坐标,程序会检测这个落子是否有效,并将棋子放在棋盘上。当有一方获胜程序会打印出游戏结束的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值