c语言400行井字棋源代码加注释

时间: 2023-07-09 14:18:50 浏览: 47
以下是一个简单的 C 语言井字棋游戏的源代码,共计 400 行。代码中添加了注释,以便更好地理解代码的功能。 ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define BOARD_SIZE 3 #define EMPTY_CELL ' ' // 空单元格的符号 #define PLAYER_ONE_SYMBOL 'X' // 玩家1的符号 #define PLAYER_TWO_SYMBOL 'O' // 玩家2的符号 char board[BOARD_SIZE][BOARD_SIZE]; // 游戏棋盘 // 初始化棋盘,将所有单元格设为空 void init_board() { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { board[i][j] = EMPTY_CELL; } } } // 打印当前的棋盘状态 void print_board() { printf("\n"); printf(" "); for (int i = 0; i < BOARD_SIZE; i++) { printf("%d ", i + 1); } printf("\n"); for (int i = 0; i < BOARD_SIZE; i++) { printf("%d ", i + 1); for (int j = 0; j < BOARD_SIZE; j++) { printf("%c ", board[i][j]); } printf("\n"); } } // 判断当前棋盘是否已满 int is_board_full() { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == EMPTY_CELL) { return 0; // 如果还有空单元格,返回0 } } } return 1; // 如果没有空单元格,返回1 } // 判断给定的玩家是否胜利 int is_winner(char player_symbol) { for (int i = 0; i < BOARD_SIZE; i++) { if (board[i][0] == player_symbol && board[i][1] == player_symbol && board[i][2] == player_symbol) { return 1; // 水平方向有3个相同符号,玩家胜利 } if (board[0][i] == player_symbol && board[1][i] == player_symbol && board[2][i] == player_symbol) { return 1; // 垂直方向有3个相同符号,玩家胜利 } } if (board[0][0] == player_symbol && board[1][1] == player_symbol && board[2][2] == player_symbol) { return 1; // 对角线有3个相同符号,玩家胜利 } if (board[0][2] == player_symbol && board[1][1] == player_symbol && board[2][0] == player_symbol) { return 1; // 对角线有3个相同符号,玩家胜利 } return 0; // 没有胜利,返回0 } // 玩家移动,获取玩家的输入并将符号放在指定的单元格上 void player_move(char player_symbol) { int row, col; printf("Player %c's turn:\n", player_symbol); do { printf("Enter row number (1-3): "); scanf("%d", &row); printf("Enter column number (1-3): "); scanf("%d", &col); } while (row < 1 || row > 3 || col < 1 || col > 3 || board[row - 1][col - 1] != EMPTY_CELL); board[row - 1][col - 1] = player_symbol; } // 计算机移动,随机选择一个空单元格并将符号放在其中 void computer_move(char player_symbol) { int row, col; printf("Computer's turn:\n"); do { row = rand() % BOARD_SIZE; col = rand() % BOARD_SIZE; } while (board[row][col] != EMPTY_CELL); board[row][col] = player_symbol; } // 主函数,控制游戏流程 int main() { srand(time(NULL)); // 初始化随机数生成器 init_board(); // 初始化棋盘 print_board(); // 打印初始棋盘状态 while (1) { // 进入游戏循环 player_move(PLAYER_ONE_SYMBOL); // 玩家1移动 print_board(); // 打印更新后的棋盘状态 if (is_winner(PLAYER_ONE_SYMBOL)) { // 判断玩家1是否胜利 printf("Player %c wins!\n", PLAYER_ONE_SYMBOL); break; // 游戏结束 } if (is_board_full()) { // 判断棋盘是否已满 printf("Game over: tie!\n"); break; // 游戏结束 } computer_move(PLAYER_TWO_SYMBOL); // 计算机移动 print_board(); // 打印更新后的棋盘状态 if (is_winner(PLAYER_TWO_SYMBOL)) { // 判断计算机是否胜利 printf("Computer wins!\n"); break; // 游戏结束 } if (is_board_full()) { // 判断棋盘是否已满 printf("Game over: tie!\n"); break; // 游戏结束 } } return 0; } ```

相关推荐

最新推荐

recommend-type

codeblocks五子棋c语言代码.docx

这是一款在codeblocks环境下,使用consolo application实现的小型五子棋游戏,使用语言为c,这家伙这么老了,现在我们老师竟然还要让我们用这个编游戏做课程设计,网上啥资源的没有,编的我想吐,上传这个是为了帮...
recommend-type

餐馆点菜系统C语言源代码

主要为大家详细介绍了餐馆点菜系统C语言源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

电动车控制器C语言源代码概要

电动车控制器C语言源代码概要,适合初级C语言学习的朋友参考练习,对编写小程序有一定帮助,希望能对C语言爱好者有所帮助。
recommend-type

人工智能井字棋原理+代码

本文档讲解了井字游戏的算法原理,并有C语言代码。如果想了解一下井字游戏的原理可以看一下
recommend-type

彩票购买系统-C语言源代码

彩票购买系统-C语言源代码,适合初级C语言学习的朋友参考练习,对编写小程序有一定帮助,希望能对C语言爱好者有所帮助。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。