C语言(基础)|C语言实现三子棋

三子棋
文章目录

  • 三子棋
  • 一、问题描述
  • 二、基本步骤
  • 三、主要函数
  • 四、代码实现
    • game.h
    • game.c
    • test.c
  • 五、注意事项
  • 六、结果展示
    • 玩家胜
    • 电脑胜
    • 平局

一、问题描述 一、问题描述
用C语言实现三子棋
二、基本步骤 二、基本步骤
1.添加game.c和test.c源文件,game.h头文件
2.创建菜单,玩家选择开始游戏或退出游戏
3.初始化棋盘
4.打印出棋盘
5.玩家下棋
6.电脑下棋
7.判断胜负
三、主要函数 三、主要函数
1.菜单界面
void menu() { printf("*************************\n"); printf("******** 1. play ********\n"); printf("******** 0. exit ********\n"); printf("*************************\n"); }

2.初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {board[i][j] = ' '; } } }

3.打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) {int j = 0; //打印数据 for (j = 0; j < col; j++) {printf(" %c ", board[i][j]); if (j < row - 1) {printf("%c", '|'); } } printf("\n"); //打印分界线 if (i < row - 1) {for (j = 0; j < row; j++) {printf("---"); if (j < row - 1) {printf("%c", '|'); } } } printf("\n"); } }

4.玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; while(1) {printf("请输入坐标:<"); scanf("%d,%d", &x, &y); if (x <= row && y <= col && board[x - 1][y - 1] == ' ') {board[x - 1][y - 1] = '*'; break; } else {printf("输入坐标非法,请重新输入"); } }}

5.电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col) { while(1) {int x = rand() % row; int y = rand() % col; if (board[x][y] == ' ') {board[x][y] = '#'; break; } } }

6.判断平局
int Is_full(char board[ROW][COL], int row, int col) { int i = 0; int j = 0; for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {if (board[i][j] == ' ') return 1; } } return 0; }

【C语言(基础)|C语言实现三子棋】7.判断胜负
int Is_win(char board[ROW][COL], int row, int col) { int i = 0; int j = 0; //判断行 for (i = 0; i < row; i++) {if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*') {return 1; } else if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#') {return 0; } } //判断列 for (i = 0; i < row; i++) {if (board[0][i] == '*' && board[1][i] == '*' && board[2][i] == '*') {return 1; } else if (board[0][i] == '#' && board[1][i] == '#' && board[2][i] == '#') {return 0; } } //判断对角线 if ((board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*') || (board[0][2] == '*' && board[1][1] == '*' && board[2][0] == '*')) {return 1; } else if ((board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#') || (board[0][2] == '#' && board[1][1] == '#' && board[2][0] == '#')) {return 0; } //判断是否平局 int ret = Is_full(board, row, col); if (ret == 0) {return 2; } return 3; }

四、代码实现 game.h
#pragma once #include #include #include#define ROW 3 #define COL 3void InitBoard(char board[ROW][COL], int row, int col); void DisplayBoard(char board[ROW][COL],int row, int col); void PlayerMove(char board[ROW][COL], int row, int col); void ComputerMove(char board[ROW][COL], int row, int col); int Is_win(char board[ROW][COL], int row, int col); int Is_full(char board[ROW][COL], int row, int col);

game.c 主要函数
test.c
#define _CRT_SECURE_NO_WARNINGS #include"game.h"void menu() { printf("*************************\n"); printf("******** 1. play ********\n"); printf("******** 0. exit ********\n"); printf("*************************\n"); }void game() { char board[ROW][COL]; //初始化棋盘 InitBoard(board, ROW, COL); //打印棋盘 DisplayBoard(board, ROW, COL); while(1) {//玩家走 PlayerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); int n = Is_win(board, ROW, COL); //判断胜负 if (n == 0) {printf("电脑获胜"); break; } else if (n ==1) {printf("玩家获胜"); break; } else if(n==2) {printf("平局"); break; } else {printf("电脑走:>\n"); }//电脑走 ComputerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); n = Is_win(board, ROW, COL); //判断胜负 if (n==0) {printf("电脑获胜"); break; } else if (n == 1) {printf("玩家获胜"); break; } else if(n==2) {printf("平局"); break; } else {printf("玩家走:>\n"); } }}int main() { srand((unsigned int)time(NULL)); int input = 0; do {menu(); scanf("%d", &input); switch (input) {case 1: game(); break; case 0: break; default: printf("输入错误,请重新输入"); break; } } while (input); return 0; }

五、注意事项 1.使用宏定义:提高代码可读性,也便于修改
#define ROW 3 #define COL 3

2.电脑随机生成落子坐标在主函数中使用
srand((unsigned int)time(NULL));

六、结果展示 玩家胜 C语言(基础)|C语言实现三子棋
文章图片

电脑胜 C语言(基础)|C语言实现三子棋
文章图片

平局 C语言(基础)|C语言实现三子棋
文章图片

    推荐阅读