C语言学习(三子棋)

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

void game()

{

        int ret=0;

        char board[ROW][COL]={0};

        //初始化棋盘

        Initplayboard(board,ROW,COL);

        //打印棋盘

        displayboard(board,ROW,COL);

        //移动

        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");

        }

}

void menu()

{

        printf("**********************************************\n");

        printf("****                1.play                ****\n");

           printf("****                0.exlt                ****\n");

        printf("**********************************************\n");

}

void test()

{

        int input=0;

        menu();

        do

        {

        printf("请输入>:\n");

        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;

}

game.c

#include"game.h"

void Initplayboard(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 x=0;

        int y=0;

        for(x=0;x<row;x++)

        {

               //1打印数据行

               for(y=0;y<col;y++)

               {

                  printf(" %c ",board[x][y]);

                  if(y!=col-1)

                  {

                      printf("|");

                  }

                  if(y==col-1)

                  {

                          printf("\n");

                  }

               }

               //2打印分割行

                  for(y=0;y<col;y++)

                  {

                          printf("___");  

                          if(y!=col-1)

                          {

                                 printf("|");

                          }

                          if(y==col-1)

                          {

                                 printf("\n");

                          }

                  }

                 

        }

}

//玩家移动

void playermove(char board[ROW][COL],int row,int col)

{

        int a=0;

        int b=0;

        while(1)

        {

        printf("请输入坐标>:");

        scanf("%d%d",&a,&b);

        if(a>=1&&a<=row && b>=1&&b<=col)

        {

           if(board[a-1][b-1]==' ')

           {

               board[a-1][b-1]='+';

                  break;

           }

           else

           {

                  printf("该位置已有棋子,请重新下棋\n");

           }

        }

        else

        {

               printf("坐标不合法,请重新输入\n");

        }

        }

}

//电脑移动

void computermove(char board[ROW][COL],int row,int col)

{

        int x=0;

        int y=0;

        srand((unsigned int)time(NULL));

        while(1)

        {

        int x=rand()%row;

        int y=rand()%col;

        if(board[x][y]==' ')

        {

               printf("电脑下\n");

           board[x][y]='-';

           break;

        }

        }

}

int ISfull(char board[ROW][COL],int row,int col)

{

        int x=0;

        int y=0;

        for(x=0;x<row;x++)

        {

               for(y=0;y<col;y++)

               {

                       if(board[x][y]==' ')

                       {

                              return 0;

                       }

               }

        }

        return 1;

}

//判断输赢  ‘+’玩家赢‘-’电脑赢‘Q’平局‘C’继续

char ISwin(char board[ROW][COL],int row,int col)

{

        int x=0;

        int y=0;

        for(x=0;x<row;x++)

        {

                       if(board[x][0]==board[x][1]&&board[x][1]==board[x][2]&&board[x][0]!=' ')//判断三行

                       {

                              return board[x][0];

                       }

        }

        for(x=0;x<row;x++)

        {

                       if(board[0][x]==board[1][x]&&board[1][x]==board[2][x]&&board[0][x]!=' ')//判断三列

                       {

                              return board[0][x];

                       }

        }

                       if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[0][0]!=' ')//判断左斜线

                       {

                              return board[0][0];

                       }

                       if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[0][2]!=' ')//判断右斜线

                       {

                              return board[0][2];

                       }

                       if(1==ISfull(board,ROW,COL))

                       {

                              return 'Q';

                       }

        return 'C';

}

 game.h

#define _CRT_SECURE_NO_WARNINGS 1

#define ROW 3

#define COL 3

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void Initplayboard(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);

int ISfull(char board[ROW][COL],int row,int col);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值