当前位置:  首页>> 技术小册>> Python编程轻松进阶(五)

14.2.2 四子棋源代码

在本章中,我们将深入探讨并实现一个简单的四子棋(Connect Four)游戏的源代码。四子棋是一种两人对战的棋盘游戏,玩家交替在垂直的格子中放入棋子,目标是让自己的棋子在水平、垂直或对角线方向上连续排列四个,从而获胜。以下是一个基于Python实现的四子棋游戏完整源代码,包含了游戏逻辑、用户交互以及基本的胜负判断。

1. 游戏初始化

首先,我们需要设置游戏的基本参数,如棋盘大小、玩家标记等,并初始化棋盘。

  1. def initialize_board(size=7, width=6):
  2. """ 初始化棋盘,返回一个二维列表,默认为7行6列 """
  3. return [[0] * width for _ in range(size)]
  4. def print_board(board):
  5. """ 打印棋盘 """
  6. for row in board:
  7. print(' '.join(str(cell) for cell in row))
  8. print(" 1 2 3 4 5 6")
  9. def check_win(board, player, row, col):
  10. """ 检查是否有玩家获胜 """
  11. directions = [
  12. (0, 1), (1, 0), (1, 1), (1, -1) # 右,下,右下,右上
  13. ]
  14. for dx, dy in directions:
  15. count = 1
  16. x, y = row + dx, col + dy
  17. while 0 <= x < len(board) and 0 <= y < len(board[0]) and board[x][y] == player:
  18. count += 1
  19. x, y = x + dx, y + dy
  20. x, y = row - dx, col - dy
  21. while 0 <= x < len(board) and 0 <= y < len(board[0]) and board[x][y] == player:
  22. count += 1
  23. x, y = x - dx, y - dy
  24. if count >= 4:
  25. return True
  26. return False
  27. def is_valid_move(board, row, col):
  28. """ 检查落子位置是否有效 """
  29. return 0 <= row < len(board) and 0 <= col < len(board[0]) and board[row][col] == 0
  30. def make_move(board, row, col, player):
  31. """ 在棋盘上放置棋子 """
  32. if is_valid_move(board, row, col):
  33. board[row][col] = player
  34. #### 2. 游戏主循环
  35. 接下来,我们定义游戏的主循环,包括玩家交替落子、检查胜负、以及游戏结束条件。
  36. ```python
  37. def main():
  38. board = initialize_board()
  39. players = ['X', 'O']
  40. current_player = 0
  41. while True:
  42. print_board(board)
  43. print(f"Player {players[current_player]}'s turn:")
  44. try:
  45. row = int(input("Enter row number (0-6): "))
  46. col = int(input("Enter column number (1-6): ")) - 1 # 输入转换为0-based index
  47. if not is_valid_move(board, row, col):
  48. print("Invalid move, try again.")
  49. continue
  50. make_move(board, row, col, players[current_player])
  51. if check_win(board, players[current_player], row, col):
  52. print_board(board)
  53. print(f"Player {players[current_player]} wins!")
  54. break
  55. current_player = 1 - current_player # Switch players
  56. except ValueError:
  57. print("Invalid input, please enter numbers.")
  58. if all(cell != 0 for row in board for cell in row):
  59. print_board(board)
  60. print("It's a draw!")
  61. break
  62. if __name__ == "__main__":
  63. main()

3. 游戏逻辑解析

  • 初始化棋盘initialize_board函数创建了一个二维列表作为棋盘,其中0表示空位。
  • 打印棋盘print_board函数遍历棋盘并打印,便于玩家观察游戏进展。
  • 检查胜负check_win函数检查在给定位置放置棋子后,是否形成连续四个同色棋子。它遍历四个方向(右、下、右下、右上),并计算连续相同棋子的数量。
  • 有效落子is_valid_move函数确保玩家选择的落子位置在棋盘范围内且为空。
  • 落子make_move函数在有效位置放置棋子。
  • 游戏主循环main函数控制游戏流程,包括玩家交替落子、胜负检查、以及游戏结束条件处理。

4. 扩展与改进

  • 图形界面:当前实现是基于文本终端的,可以进一步使用Tkinter或Pygame等库开发图形界面版本,提升用户体验。
  • AI对手:为游戏添加AI对手,可以使用简单的贪心算法或更复杂的搜索算法(如Minimax + Alpha-Beta剪枝)来实现。
  • 网络对战:通过网络通信协议(如TCP/IP)实现两名玩家在线对战,增加游戏的趣味性和挑战性。
  • 多语言支持:为游戏添加多语言支持,使更多玩家能够享受游戏乐趣。

通过上述步骤,我们实现了一个基本的四子棋游戏。这个游戏不仅考验玩家的策略思维,还为他们提供了一个休闲娱乐的好去处。希望读者能够在此基础上进一步探索和实践,创造出更多有趣的功能和玩法。