当前位置:   article > 正文

三子棋、井字棋 -python版本代码-C语言版本代码_三子棋python代码

三子棋python代码

三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利,而对方就算输了,但是三子棋在很多时候会出现和棋的局面。

8a552e3aa3a249f29da36578e001b2a1.png

废话不多说,直接上代码,好用请给个三连关注谢谢,我的B站是技术宅学长的个人空间-技术宅学长个人主页-哔哩哔哩视频 (bilibili.com)

  1. #作者:技术宅学长(CSDN、B站、抖音均为该ID)
  2. #电赛交流1群:586475593
  3. #电赛交流2群:878095340
  4. #电赛交流3群:873779462
  5. #电赛交流4群:208635284
  6. #电赛交流5群:903429622
  7. import random
  8. # 定义棋盘大小和玩家符号
  9. ROWS, COLS = 3, 3
  10. PLAYER_X = 'X'#玩家
  11. PLAYER_O = 'O'#电脑AI
  12. EMPTY = ' '
  13. # 函数:打印棋盘
  14. def print_board(board):
  15. for row in board:
  16. print(" | ".join(row))
  17. print("-" * 9)
  18. # 函数:检查当前状态是否是结束状态(胜负或平局)
  19. def check_game_over(board):
  20. # 检查行和列
  21. for i in range(ROWS):
  22. if board[i][0] == board[i][1] == board[i][2] != EMPTY: # 检查行
  23. return board[i][0]
  24. if board[0][i] == board[1][i] == board[2][i] != EMPTY: # 检查列
  25. return board[0][i]
  26. # 检查对角线
  27. if board[0][0] == board[1][1] == board[2][2] != EMPTY: # 主对角线
  28. return board[0][0]
  29. if board[0][2] == board[1][1] == board[2][0] != EMPTY: # 副对角线
  30. return board[0][2]
  31. # 检查是否平局
  32. if all(board[i][j] != EMPTY for i in range(ROWS) for j in range(COLS)):
  33. return "Draw"
  34. # 游戏未结束
  35. return None
  36. # 函数:实现Minimax算法来找到最优的下棋位置
  37. def minimax(board, depth, is_maximizing):
  38. result = check_game_over(board)
  39. if result == PLAYER_X:
  40. return -1 # X赢了
  41. elif result == PLAYER_O:
  42. return 1 # O赢了
  43. elif result == "Draw":
  44. return 0 # 平局
  45. if is_maximizing:
  46. best_score = -float('inf')
  47. for i in range(ROWS):
  48. for j in range(COLS):
  49. if board[i][j] == EMPTY:
  50. board[i][j] = PLAYER_O
  51. score = minimax(board, depth + 1, False)
  52. board[i][j] = EMPTY
  53. best_score = max(score, best_score)
  54. return best_score
  55. else:
  56. best_score = float('inf')
  57. for i in range(ROWS):
  58. for j in range(COLS):
  59. if board[i][j] == EMPTY:
  60. board[i][j] = PLAYER_X
  61. score = minimax(board, depth + 1, True)
  62. board[i][j] = EMPTY
  63. best_score = min(score, best_score)
  64. return best_score
  65. # 函数:让电脑选择最优的下棋位置
  66. def computer_move(board):
  67. best_move = None
  68. best_score = -float('inf')
  69. for i in range(ROWS):
  70. for j in range(COLS):
  71. if board[i][j] == EMPTY:
  72. board[i][j] = PLAYER_O
  73. score = minimax(board, 0, False)
  74. board[i][j] = EMPTY
  75. if score > best_score:
  76. best_score = score
  77. best_move = (i, j)
  78. board[best_move[0]][best_move[1]] = PLAYER_O
  79. # 主函数:控制游戏流程
  80. def main():
  81. board = [[EMPTY for _ in range(COLS)] for _ in range(ROWS)]
  82. current_player = PLAYER_O#设置先行玩家PLAYER_X为人,PLAYER_O为AI
  83. print("欢迎使用三子棋程序!")
  84. print_board(board)
  85. while True:
  86. if current_player == PLAYER_X:
  87. row = int(input("请输入你要下的行 (0, 1, 2) :"))
  88. col = int(input("请输入你要下的列 (0, 1, 2) :"))
  89. if board[row][col] == EMPTY:
  90. board[row][col] = PLAYER_X
  91. current_player = PLAYER_O
  92. else:
  93. print("移动错误,当前位置有棋,请重下")
  94. continue
  95. else:
  96. print("AI走棋")
  97. computer_move(board)
  98. current_player = PLAYER_X
  99. print_board(board)
  100. game_result = check_game_over(board)
  101. if game_result:
  102. if game_result == "Draw":
  103. print("平局!")
  104. else:
  105. if game_result == 'O':
  106. print(f" AI获胜!")
  107. else:
  108. print(f" 恭喜你获胜!")
  109. break
  110. if __name__ == "__main__":
  111. main()
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #define ROWS 3
  5. #define COLS 3
  6. #define PLAYER_X 'X'
  7. #define PLAYER_O 'O'
  8. #define EMPTY ' '
  9. // 打印棋盘
  10. void print_board(char board[ROWS][COLS]) {
  11. for (int i = 0; i < ROWS; ++i) {
  12. printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
  13. if (i != ROWS - 1) {
  14. printf("---|---|---\n");
  15. }
  16. }
  17. }
  18. // 检查游戏是否结束(胜负或平局)
  19. char check_game_over(char board[ROWS][COLS]) {
  20. // 检查行和列
  21. for (int i = 0; i < ROWS; ++i) {
  22. if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != EMPTY) {
  23. return board[i][0];
  24. }
  25. if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != EMPTY) {
  26. return board[0][i];
  27. }
  28. }
  29. // 检查对角线
  30. if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != EMPTY) {
  31. return board[0][0];
  32. }
  33. if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != EMPTY) {
  34. return board[0][2];
  35. }
  36. // 检查是否平局
  37. bool is_draw = true;
  38. for (int i = 0; i < ROWS; ++i) {
  39. for (int j = 0; j < COLS; ++j) {
  40. if (board[i][j] == EMPTY) {
  41. is_draw = false;
  42. break;
  43. }
  44. }
  45. if (!is_draw) {
  46. break;
  47. }
  48. }
  49. if (is_draw) {
  50. return 'D'; // 平局
  51. }
  52. return ' '; // 游戏未结束
  53. }
  54. // Minimax算法实现
  55. int minimax(char board[ROWS][COLS], int depth, bool is_maximizing) {
  56. char result = check_game_over(board);
  57. if (result == PLAYER_X) {
  58. return -1; // X赢了
  59. } else if (result == PLAYER_O) {
  60. return 1; // O赢了
  61. } else if (result == 'D') {
  62. return 0; // 平局
  63. }
  64. if (is_maximizing) {
  65. int best_score = -1000; // 初始最小值
  66. for (int i = 0; i < ROWS; ++i) {
  67. for (int j = 0; j < COLS; ++j) {
  68. if (board[i][j] == EMPTY) {
  69. board[i][j] = PLAYER_O;
  70. int score = minimax(board, depth + 1, false);
  71. board[i][j] = EMPTY;
  72. best_score = score > best_score ? score : best_score;
  73. }
  74. }
  75. }
  76. return best_score;
  77. } else {
  78. int best_score = 1000; // 初始最大值
  79. for (int i = 0; i < ROWS; ++i) {
  80. for (int j = 0; j < COLS; ++j) {
  81. if (board[i][j] == EMPTY) {
  82. board[i][j] = PLAYER_X;
  83. int score = minimax(board, depth + 1, true);
  84. board[i][j] = EMPTY;
  85. best_score = score < best_score ? score : best_score;
  86. }
  87. }
  88. }
  89. return best_score;
  90. }
  91. }
  92. // 计算并返回电脑的最优下棋位置
  93. void computer_move(char board[ROWS][COLS]) {
  94. int best_score = -1000;
  95. int best_move_row = -1;
  96. int best_move_col = -1;
  97. for (int i = 0; i < ROWS; ++i) {
  98. for (int j = 0; j < COLS; ++j) {
  99. if (board[i][j] == EMPTY) {
  100. board[i][j] = PLAYER_O;
  101. int score = minimax(board, 0, false);
  102. board[i][j] = EMPTY;
  103. if (score > best_score) {
  104. best_score = score;
  105. best_move_row = i;
  106. best_move_col = j;
  107. }
  108. }
  109. }
  110. }
  111. board[best_move_row][best_move_col] = PLAYER_O;
  112. }
  113. // 主函数:控制游戏流程
  114. int main() {
  115. char board[ROWS][COLS];
  116. char current_player = PLAYER_X;//先落子玩家,PLAYER_X为玩家,PLAYER_O为电脑
  117. // 初始化棋盘
  118. for (int i = 0; i < ROWS; ++i) {
  119. for (int j = 0; j < COLS; ++j) {
  120. board[i][j] = EMPTY;
  121. }
  122. }
  123. // 游戏循环
  124. while (true) {
  125. // 打印当前棋盘状态
  126. printf("\nCurrent board:\n");
  127. print_board(board);
  128. // 检查游戏是否结束
  129. char game_result = check_game_over(board);
  130. if (game_result != ' ') {
  131. if (game_result == 'D') {
  132. printf("It's a draw!\n");
  133. } else {
  134. printf("%c wins!\n", game_result);
  135. }
  136. break;
  137. }
  138. // 根据当前玩家决定下棋
  139. if (current_player == PLAYER_X) {
  140. int row, col;
  141. printf("\nEnter row number (0, 1, 2) for your move: ");
  142. scanf("%d", &row);
  143. printf("Enter column number (0, 1, 2) for your move: ");
  144. scanf("%d", &col);
  145. if (board[row][col] == EMPTY) {
  146. board[row][col] = PLAYER_X;
  147. current_player = PLAYER_O;
  148. } else {
  149. printf("Invalid move! That position is already taken. Try again.\n");
  150. continue;
  151. }
  152. } else {
  153. printf("\nComputer's turn:\n");
  154. computer_move(board);
  155. current_player = PLAYER_X;
  156. }
  157. }
  158. return 0;
  159. }

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/997173
推荐阅读
相关标签
  

闽ICP备14008679号