C语言数组实现三子棋应用实例

Aggie ·
更新时间:2024-09-20
· 205 次阅读

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

三子棋:(拆分部分如下)

test.c 测试游戏逻辑

game.h关于游戏相关的函数声明,符号声明 头文件的包含

game.c游戏相关函数的实现

游戏进行的过程:(4种)

1.玩家获胜--*(游戏结束)

2.电脑获胜--#(游戏结束)

3.平局--Q(游戏结束)

4.游戏继续--C

IsWin函数 用来判断游戏的状态

game.c

#include"game.h" #include<stdio.h> //初始化棋盘的函数  void InitBoard(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++)         {             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)          {             int j=0;             for(j=0;j<col;j++)             {                 printf("---");                 if(j<col-1)                     printf("|");                 }             printf("\n");             }     } } //玩家下棋  void PlayerMove(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 ComputerMove(char board[ROW][COL],int row,int col) {     printf("电脑走:>\n");     while(1)     {         int x=rand()%row;         int y=rand()%col;         //判断占用         if(board[x][y]==' ')          {             board[x][y]='#';             break;         } } IsFull(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 0;//棋盘没满              }         }     }     return 1;     //棋盘满了  } char IsWin(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<ccol;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];     }     //判断平局--棋盘是否下满,满了返回1,不满返回0     int ret=IsFull(board,row,col);     if(ret==1)     {         return '0';     }      //继续     return 'C';      }

game.h

//头文件的包含  #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 PlayerMove(char board[ROW][COL],int row,int col); //电脑下棋 void ComputerMove(char board[ROW][COL],int row,int col); //判断游戏是否出现输赢  char IsWin(char board[ROW][COL],int row,int col);

test.c

#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);      char ret=0;//接受游戏状态      while(1)     {         //玩家下棋         PlayerMove(board,ROW,COL);         DisplayBoard(board,ROW,COL);         //判断玩家是否获胜          ret=IsWin(board,ROW,COL);         if(ret!='C')             break;          //电脑下棋          ComputerMove(board,ROW,COL);         DisplayBoard(board,ROW,COL);         //判断电脑是否获胜          ret=IsWin(board,ROW,COL);         if(ret!='C')             break;     }     if(ret=='*')     {         printf("玩家获胜\n");         }     else if(ret=='#')     {         printf("电脑获胜\n");         }     else     {         printf("平局\n");         }     DisplayBoard(board,ROW,COL);     } int main() {     int input=0;     srand((unsigned int)time(NULL));     do     {         menu();         printf("请选择:>");         scanf("%d",&input);         switch(input)         {         case 1:             printf("三子棋游戏\n");             break;         case 0:             printf("退出游戏\n");             break;         default:             printf("选择错误,重新选择\n");             break;         }     }while(input); }

部分游戏界面,如上图所示 

具体思路见代码中注释所示



C语言 数组

需要 登录 后方可回复, 如果你还没有账号请 注册新账号