如何用C语言编写一个支持长尾词查询的三子棋游戏程序?

2026-04-12 07:091阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2333个文字,预计阅读时间需要10分钟。

如何用C语言编写一个支持长尾词查询的三子棋游戏程序?

原文:本文实例为大家分享了C语言实现三子棋小游戏的完整代码,供大家参考。具体内容如下:

1.基本流程

1.1 菜单界面选择开始或者退出游戏。

1.2 创建棋盘并初始化。

1.3 打印棋盘。

1.4 玩家落子。

1.5 判断胜负。

简化版:“C语言三子棋小游戏代码实例,包括:

1.游戏流程:选择开始或退出,创建棋盘,打印棋盘,玩家落子,判断胜负。

如何用C语言编写一个支持长尾词查询的三子棋游戏程序?

2.详细步骤见上。

本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下

1.基本流程

1.菜单界面选择开始或者退出游戏。
2.创建棋盘并初始化。
3.打印棋盘。
4.玩家落子并打印棋盘
5.电脑落子并打印棋盘
6.判定胜负关系(输,赢,平局)

2. 配置运行环境

本次游戏用到三个文件,两个源文件test.c,game.c,一个头game.h。其中,game.c,game.h可以称作一个游戏模块,为什么要这样做呢?因为多个文件可以分别处理各自模块的功能,能更好处理各个模块之间的逻辑并且便于后期调试,也使得代码的可读性提高。

3.代码过程

3.1菜单界面选择开始或者退出游戏

int main() {     test();     return 0; }

打印菜单

void menu() {     printf("******************\n");     printf("***** 1.play *****\n");     printf("***** 0.exit *****\n");     printf("******************\n");   }

选择数字,1代表玩游戏,0代表退出游戏

void test() {     int input = 0;     do     {         menu();         printf("请选择:>");         scanf("%d", &input);         switch (input)         {         case 1:             printf("玩游戏\n");//游戏             break;         case 0:             printf("退出游戏\n");             break;         default:             printf("选择错误\n");             break;         }     } while (input); }

3.2.创建棋盘并初始化。

用一个二维数组创建一个3*3的棋盘。

使用宏定义的原因:

1.推高代码可读性,后续代码中遇到3,方便理解含义。
2.提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。

char board[ROW][COL] = { 0 }; #define ROW 3 #define COL 3

在game.c中初始化棋盘

void InitBoard(char board[ROW][COL],int row,int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             board[i][j] = ' ';         }     } }

3.3打印棋盘。

在game.c中实现打印棋盘

void Displayboard(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         //打印数据         int j = 0;         for (j = 0; j < col; j++)         {             printf(" %c ", board[i][j]);             if(j<col-1)                printf("|");         }         printf("\n");         //打印分割的行         if (i < row - 1)         {             for (j = 0; j < col; j++)             {                 printf("---");                 if (j < col - 1)                 {                     printf("|");                 }             }             printf("\n");         }                 } }

棋盘的搭建的本质是留出一片空间,玩家或者电脑在棋盘上进行操作。每一行和每一列都要设置分割线进行区分,才能完成打印。

4.玩家落子并打印棋盘

在game.c中实现对棋盘上空位的判断,防止一个位置多次下棋,并且显示出空位给玩家下棋,之后打印出新的棋盘。

void player_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("玩家下棋\n");     while (1)     {         printf("请输入坐标:>");         scanf("%d %d", &x, &y);         //下棋         if (x >= 1 && x <= row && y >= 1 && y <= col)         {             if (board[x - 1][y - 1] == ' ')             {                 board[x - 1][y - 1] = '*';                 break;             }             else                 printf("该坐标已被占用,请重新输入\n");         }         else         {             printf("数字输入非法,请重新输入\n");         }     } }

5.电脑落子并打印棋盘

玩家选择一个位置打印后,电脑通过rand()函数产生一个在限定范围内的的随机值,并产生一个随机坐标并在相应坐标打印一个字符(电脑下棋过程),滞后打印新的棋盘。注意:rand函数使用之前要调用一个srand函数。

同样也是在game.c文件中实现。

void computer_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("电脑下棋\n");     while (1)     {         x = rand() % row;  //0~2         y = rand() % col;  //0~2         if (board[x][y] == ' ')         {             board[x][y] = '#';             break;         }     } }

6.判定胜负关系(输,赢,平局)

在玩家与电脑多次落子之后,产生最终的结果,这时候对结果进行分析,相同的3个字符相连(行 列 对角线)即为胜利,如果棋盘已满但双方都没有完成三个字符相连即为平局。

创建一个is_win函数用它的返回值来表示游戏结果

玩家赢 :‘*
电脑赢 :‘#
平局 :‘E
继续 :‘C

char is_win(char board[ROW][COL], int row, int col) {     //判断行     int i = 0;     for (i = 0; i < row; i++)     {         if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')             return board[i][1];     }       //判断列       for (i = 0; i < col; i++)     {         if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')             return board[1][i];     }       //判断对角线       if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')         return board[1][1];       if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')         return board[1][1];       //判断平局     if (is_full(board, row, col) == 1)         return 'E';       //继续     return 'C'; }

每一次玩家与电脑落子后都要进行判断

//判断输赢的代码   char  ret = 0;         ret = is_win(board, ROW, COL); if (ret != 'C') {    break; }

在下棋的过程中,还要时时刻刻判断棋盘有没有满。

int is_full(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             if (board[i][j] == ' ')                 return 0;//没满         }     }     return 1;//(满了) }

7.整体代码展示

7.1 test.c

#include <stdio.h>   #include "game.h"   void menu() {     printf("******************\n");     printf("***** 1.play *****\n");     printf("***** 0.exit *****\n");     printf("******************\n");   }   void game() {     char  ret = 0;     char board[ROW][COL] = { 0 };       //初始化棋盘为全空格     InitBoard(board, ROW, COL);          //打印棋盘     Displayboard(board, ROW, COL);          while (1)     {         //玩家下棋         player_move(board, ROW, COL);         Displayboard(board, ROW, COL);         //判断输赢         ret = is_win(board, ROW, COL);         if (ret != 'C')         {             break;         }           //电脑下棋  随机下棋         computer_move(board, ROW, COL);         Displayboard(board, ROW, COL);         ret = is_win(board, ROW, COL);         if (ret != 'C')         {             break;         }     }     if (ret == '*')     {         printf("玩家赢了\n");     }     else if (ret == '#')     {         printf("电脑赢了\n");     }     else         printf("平局\n");   } // //什么情况,游戏就结束了 //玩家赢 - '*' //电脑赢 - '#' //平局   - 'E' //继续   - 'C' //   void test() {     srand((unsigned int)time(NULL));     int input = 0;     do     {         menu();         printf("请选择:>");         scanf("%d", &input);         switch (input)         {         case 1:             game();//游戏             break;         case 0:             printf("退出游戏\n");             break;         default:             printf("选择错误\n");             break;         }     } while (input); }   int main() {     test();     return 0; }

7.2 game.c

//初始化棋盘 void InitBoard(char board[ROW][COL],int row,int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             board[i][j] = ' ';         }     } }        //打印棋盘     void Displayboard(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         //打印数据         int j = 0;         for (j = 0; j < col; j++)         {             printf(" %c ", board[i][j]);             if(j<col-1)                printf("|");         }         printf("\n");         //打印分割的行         if (i < row - 1)         {             for (j = 0; j < col; j++)             {                 printf("---");                 if (j < col - 1)                 {                     printf("|");                 }             }             printf("\n");         }                 } }     //玩家下棋 void player_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("玩家下棋\n");     while (1)     {         printf("请输入坐标:>");         scanf("%d %d", &x, &y);         //下棋         if (x >= 1 && x <= row && y >= 1 && y <= col)         {             if (board[x - 1][y - 1] == ' ')             {                 board[x - 1][y - 1] = '*';                 break;             }             else                 printf("该坐标已被占用,请重新输入\n");         }         else         {             printf("数字输入非法,请重新输入\n");         }     } }   //电脑下棋   void computer_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("电脑下棋\n");     while (1)     {         x = rand() % row;  //0~2         y = rand() % col;  //0~2         if (board[x][y] == ' ')         {             board[x][y] = '#';             break;         }     } }   //判断棋盘有没有满 int is_full(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             if (board[i][j] == ' ')                 return 0;//没满         }     }     return 1;//(满了) }   //判断输赢 char is_win(char board[ROW][COL], int row, int col) {     //判断行     int i = 0;     for (i = 0; i < row; i++)     {         if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')             return board[i][1];     }       //判断列       for (i = 0; i < col; i++)     {         if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')             return board[1][i];     }       //判断对角线       if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')         return board[1][1];       if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')         return board[1][1];       //判断平局     if (is_full(board, row, col) == 1)         return 'E';       //继续     return 'C'; }

7.3 game.h

#pragma once   #include <stdio.h> #include <stdlib.h> #include <time.h>   #define ROW 3 #define COL 3 //初始化棋盘 void InitBoard(char board[ROW][COL], int row, int col);   //打印棋盘 void Displayboard(char board[ROW][COL], int row, int col);   //玩家下棋 void player_move(char board[ROW][COL], int row, int col);   //电脑下棋 void computer_move(char board[ROW][COL], int row, int col);   //判断输赢 char is_win(char board[ROW][COL], int row, int col);

编译环境:VS 2019

以上就是三子棋的全部实现过程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计2333个文字,预计阅读时间需要10分钟。

如何用C语言编写一个支持长尾词查询的三子棋游戏程序?

原文:本文实例为大家分享了C语言实现三子棋小游戏的完整代码,供大家参考。具体内容如下:

1.基本流程

1.1 菜单界面选择开始或者退出游戏。

1.2 创建棋盘并初始化。

1.3 打印棋盘。

1.4 玩家落子。

1.5 判断胜负。

简化版:“C语言三子棋小游戏代码实例,包括:

1.游戏流程:选择开始或退出,创建棋盘,打印棋盘,玩家落子,判断胜负。

如何用C语言编写一个支持长尾词查询的三子棋游戏程序?

2.详细步骤见上。

本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下

1.基本流程

1.菜单界面选择开始或者退出游戏。
2.创建棋盘并初始化。
3.打印棋盘。
4.玩家落子并打印棋盘
5.电脑落子并打印棋盘
6.判定胜负关系(输,赢,平局)

2. 配置运行环境

本次游戏用到三个文件,两个源文件test.c,game.c,一个头game.h。其中,game.c,game.h可以称作一个游戏模块,为什么要这样做呢?因为多个文件可以分别处理各自模块的功能,能更好处理各个模块之间的逻辑并且便于后期调试,也使得代码的可读性提高。

3.代码过程

3.1菜单界面选择开始或者退出游戏

int main() {     test();     return 0; }

打印菜单

void menu() {     printf("******************\n");     printf("***** 1.play *****\n");     printf("***** 0.exit *****\n");     printf("******************\n");   }

选择数字,1代表玩游戏,0代表退出游戏

void test() {     int input = 0;     do     {         menu();         printf("请选择:>");         scanf("%d", &input);         switch (input)         {         case 1:             printf("玩游戏\n");//游戏             break;         case 0:             printf("退出游戏\n");             break;         default:             printf("选择错误\n");             break;         }     } while (input); }

3.2.创建棋盘并初始化。

用一个二维数组创建一个3*3的棋盘。

使用宏定义的原因:

1.推高代码可读性,后续代码中遇到3,方便理解含义。
2.提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。

char board[ROW][COL] = { 0 }; #define ROW 3 #define COL 3

在game.c中初始化棋盘

void InitBoard(char board[ROW][COL],int row,int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             board[i][j] = ' ';         }     } }

3.3打印棋盘。

在game.c中实现打印棋盘

void Displayboard(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         //打印数据         int j = 0;         for (j = 0; j < col; j++)         {             printf(" %c ", board[i][j]);             if(j<col-1)                printf("|");         }         printf("\n");         //打印分割的行         if (i < row - 1)         {             for (j = 0; j < col; j++)             {                 printf("---");                 if (j < col - 1)                 {                     printf("|");                 }             }             printf("\n");         }                 } }

棋盘的搭建的本质是留出一片空间,玩家或者电脑在棋盘上进行操作。每一行和每一列都要设置分割线进行区分,才能完成打印。

4.玩家落子并打印棋盘

在game.c中实现对棋盘上空位的判断,防止一个位置多次下棋,并且显示出空位给玩家下棋,之后打印出新的棋盘。

void player_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("玩家下棋\n");     while (1)     {         printf("请输入坐标:>");         scanf("%d %d", &x, &y);         //下棋         if (x >= 1 && x <= row && y >= 1 && y <= col)         {             if (board[x - 1][y - 1] == ' ')             {                 board[x - 1][y - 1] = '*';                 break;             }             else                 printf("该坐标已被占用,请重新输入\n");         }         else         {             printf("数字输入非法,请重新输入\n");         }     } }

5.电脑落子并打印棋盘

玩家选择一个位置打印后,电脑通过rand()函数产生一个在限定范围内的的随机值,并产生一个随机坐标并在相应坐标打印一个字符(电脑下棋过程),滞后打印新的棋盘。注意:rand函数使用之前要调用一个srand函数。

同样也是在game.c文件中实现。

void computer_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("电脑下棋\n");     while (1)     {         x = rand() % row;  //0~2         y = rand() % col;  //0~2         if (board[x][y] == ' ')         {             board[x][y] = '#';             break;         }     } }

6.判定胜负关系(输,赢,平局)

在玩家与电脑多次落子之后,产生最终的结果,这时候对结果进行分析,相同的3个字符相连(行 列 对角线)即为胜利,如果棋盘已满但双方都没有完成三个字符相连即为平局。

创建一个is_win函数用它的返回值来表示游戏结果

玩家赢 :‘*
电脑赢 :‘#
平局 :‘E
继续 :‘C

char is_win(char board[ROW][COL], int row, int col) {     //判断行     int i = 0;     for (i = 0; i < row; i++)     {         if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')             return board[i][1];     }       //判断列       for (i = 0; i < col; i++)     {         if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')             return board[1][i];     }       //判断对角线       if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')         return board[1][1];       if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')         return board[1][1];       //判断平局     if (is_full(board, row, col) == 1)         return 'E';       //继续     return 'C'; }

每一次玩家与电脑落子后都要进行判断

//判断输赢的代码   char  ret = 0;         ret = is_win(board, ROW, COL); if (ret != 'C') {    break; }

在下棋的过程中,还要时时刻刻判断棋盘有没有满。

int is_full(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             if (board[i][j] == ' ')                 return 0;//没满         }     }     return 1;//(满了) }

7.整体代码展示

7.1 test.c

#include <stdio.h>   #include "game.h"   void menu() {     printf("******************\n");     printf("***** 1.play *****\n");     printf("***** 0.exit *****\n");     printf("******************\n");   }   void game() {     char  ret = 0;     char board[ROW][COL] = { 0 };       //初始化棋盘为全空格     InitBoard(board, ROW, COL);          //打印棋盘     Displayboard(board, ROW, COL);          while (1)     {         //玩家下棋         player_move(board, ROW, COL);         Displayboard(board, ROW, COL);         //判断输赢         ret = is_win(board, ROW, COL);         if (ret != 'C')         {             break;         }           //电脑下棋  随机下棋         computer_move(board, ROW, COL);         Displayboard(board, ROW, COL);         ret = is_win(board, ROW, COL);         if (ret != 'C')         {             break;         }     }     if (ret == '*')     {         printf("玩家赢了\n");     }     else if (ret == '#')     {         printf("电脑赢了\n");     }     else         printf("平局\n");   } // //什么情况,游戏就结束了 //玩家赢 - '*' //电脑赢 - '#' //平局   - 'E' //继续   - 'C' //   void test() {     srand((unsigned int)time(NULL));     int input = 0;     do     {         menu();         printf("请选择:>");         scanf("%d", &input);         switch (input)         {         case 1:             game();//游戏             break;         case 0:             printf("退出游戏\n");             break;         default:             printf("选择错误\n");             break;         }     } while (input); }   int main() {     test();     return 0; }

7.2 game.c

//初始化棋盘 void InitBoard(char board[ROW][COL],int row,int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             board[i][j] = ' ';         }     } }        //打印棋盘     void Displayboard(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         //打印数据         int j = 0;         for (j = 0; j < col; j++)         {             printf(" %c ", board[i][j]);             if(j<col-1)                printf("|");         }         printf("\n");         //打印分割的行         if (i < row - 1)         {             for (j = 0; j < col; j++)             {                 printf("---");                 if (j < col - 1)                 {                     printf("|");                 }             }             printf("\n");         }                 } }     //玩家下棋 void player_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("玩家下棋\n");     while (1)     {         printf("请输入坐标:>");         scanf("%d %d", &x, &y);         //下棋         if (x >= 1 && x <= row && y >= 1 && y <= col)         {             if (board[x - 1][y - 1] == ' ')             {                 board[x - 1][y - 1] = '*';                 break;             }             else                 printf("该坐标已被占用,请重新输入\n");         }         else         {             printf("数字输入非法,请重新输入\n");         }     } }   //电脑下棋   void computer_move(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     printf("电脑下棋\n");     while (1)     {         x = rand() % row;  //0~2         y = rand() % col;  //0~2         if (board[x][y] == ' ')         {             board[x][y] = '#';             break;         }     } }   //判断棋盘有没有满 int is_full(char board[ROW][COL], int row, int col) {     int i = 0;     for (i = 0; i < row; i++)     {         int j = 0;         for (j = 0; j < col; j++)         {             if (board[i][j] == ' ')                 return 0;//没满         }     }     return 1;//(满了) }   //判断输赢 char is_win(char board[ROW][COL], int row, int col) {     //判断行     int i = 0;     for (i = 0; i < row; i++)     {         if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')             return board[i][1];     }       //判断列       for (i = 0; i < col; i++)     {         if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')             return board[1][i];     }       //判断对角线       if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')         return board[1][1];       if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')         return board[1][1];       //判断平局     if (is_full(board, row, col) == 1)         return 'E';       //继续     return 'C'; }

7.3 game.h

#pragma once   #include <stdio.h> #include <stdlib.h> #include <time.h>   #define ROW 3 #define COL 3 //初始化棋盘 void InitBoard(char board[ROW][COL], int row, int col);   //打印棋盘 void Displayboard(char board[ROW][COL], int row, int col);   //玩家下棋 void player_move(char board[ROW][COL], int row, int col);   //电脑下棋 void computer_move(char board[ROW][COL], int row, int col);   //判断输赢 char is_win(char board[ROW][COL], int row, int col);

编译环境:VS 2019

以上就是三子棋的全部实现过程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。