酷代码 AI
菜单

写出文字版象棋代码,包含吃子将军等规则

以下是一个简单的文字版中国象棋代码示例,用 Python 实现,包含基本的吃子和将军规则: ```python # 初始化棋盘 def init_board(): board = [ ['車', '馬', '相', '仕', '帥', '仕', '相', '馬', '車'], [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', '砲', ' ', ' ', ' ', ' ', ' ', '砲', ' '], ['卒', ' ', '卒', ' ', '卒', ' ', '卒', ' ', '卒'], [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], ['兵', ' ', '兵', ' ', '兵', ' ', '兵', ' ', '兵'], [' ', '炮', ' ', ' ', ' ', ' ', ' ', '炮', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], ['車', '马', '象', '士', '将', '士', '象', '马', '車'] ] return board # 打印棋盘 def print_board(board): for row in board: for piece in row: print(piece, end=' ') print() # 判断是否将军 def is_check(board, is_red): if is_red: king_pos = None for i in range(len(board)): for j in range(len(board[0])): if board[i][j] == '将': king_pos = (i, j) break if king_pos: break # 简单判断是否被将军,这里只考虑直线攻击 for i in range(king_pos[0] - 1, -1, -1): if board[i][king_pos[1]] in ['車', '炮']: if all(board[k][king_pos[1]] == ' ' for k in range(i + 1, king_pos[0])): return True for i in range(king_pos[0] + 1, len(board)): if board[i][king_pos[1]] in ['車', '炮']: if all(board[k][king_pos[1]] == ' ' for k in range(king_pos[0] + 1, i)): return True for j in range(king_pos[1] - 1, -1, -1): if board[king_pos[0]][j] in ['車', '炮']: if all(board[king_pos[0]][k] == ' ' for k in range(j + 1, king_pos[1])): return True for j in range(king_pos[1] + 1, len(board[0])): if board[king_pos[0]][j] in ['車', '炮']: if all(board[king_pos[0]][k] == ' ' for k in range(king_pos[1] + 1, j)): return True else: king_pos = None for i in range(len(board)): for j in range(len(board[0])): if board[i][j] == '帥': king_pos = (i, j) break if king_pos: break # 简单判断是否被将军,这里只考虑直线攻击 for i in range(king_pos[0] - 1, -1, -1): if board[i][king_pos[1]] in ['車', '砲']: if all(board[k][king_pos[1]] == ' ' for k in range(i + 1, king_pos[0])): return True for i in range(king_pos[0] + 1, len(board)): if board[i][king_pos[1]] in ['車', '砲']: if all(board[k][king_pos[1]] == ' ' for k in range(king_pos[0] + 1, i)): return True for j in range(king_pos[1] - 1, -1, -1): if board[king_pos[0]][j] in ['車', '砲']: if all(board[king_pos[0]][k] == ' ' for k in range(j + 1, king_pos[1])): return True for j in range(king_pos[1] + 1, len(board[0])): if board[king_pos[0]][j] in ['車', '砲']: if all(board[king_pos[0]][k] == ' ' for k in range(king_pos[1] + 1, j)): return True return False # 移动棋子 def move_piece(board, from_x, from_y, to_x, to_y, is_red): piece = board[from_x][from_y] if (is_red and piece.islower()) or (not is_red and piece.isupper()): print("不能移动对方的棋子!") return board if board[to_x][to_y] != ' ': if (is_red and board[to_x][to_y].isupper()) or (not is_red and board[to_x][to_y].islower()): print("不能吃自己的棋子!") return board board[to_x][to_y] = piece board[from_x][from_y] = ' ' return board # 主函数 def main(): board = init_board() is_red = True while True: print_board(board) if is_check(board, is_red): print("将军!") try: from_x, from_y, to_x, to_y = map(int, input("请输入移动的棋子坐标(起始行 起始列 目标行 目标列):").split()) board = move_piece(board, from_x, from_y, to_x, to_y, is_red) is_red = not is_red except ValueError: print("输入格式错误,请输入四个整数!") if __name__ == "__main__": main() ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 棋子移动规则的完整性,当前代码只实现了简单的吃子和将军判断,对于棋子的具体移动规则(如马走日、象走田等)还需要进一步完善。 2. 边界条件的处理,在判断棋子移动和攻击时,要确保不会越界。 3. 输入验证,要确保用户输入的坐标是合法的,避免出现数组越界等错误。 [2025-11-22 11:07:20 | AI写代码神器 | 1579点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多