c三子棋 >_<

这里的三子棋比较简单 代码容易理解

#define _CRT_SECURE_NO_WARNINGS  
#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
#include<time.h>  
#include<math.h>  

enum OP
{
    Exit,
    Playgame
};
char arr[3][3] = { 0 };
int arr_size = 9;

void menu()
{
    //菜单
    printf("*******************\n");
    printf("      0.Exit     \n");
    printf("      1.Playgame \n");
    printf("*****************\n");

}

void board()
{  //打印键盘
    printf("   |   |   \n");

    for(int i = 0; i<3; i++)
    {
        printf("_%c_|_%c_|_%c_\n", arr[i][0],arr[i][1],arr[i][2]);//棋子显示
        if(i<2)
        {
            printf("   |   |    \n");
        }
    }



}

void play()
{ //人工下棋
    int m = 0, n = 0;
    printf("请输入棋子坐标: ");
    scanf("%d%d", &m, &n);

    if(m<1 || m>3 || n<1 || n>3)
    {
        printf("不符合规则,请重新输入: ");
        play();
    }
    else
    {
        arr[m-1][n-1] = 'X';
        arr_size--;
    }



}

void Cplay()
{//计算机下棋
    printf("计算机下棋:\n");
    srand(time(NULL));
    int m = rand() %3;
    int n = rand() %3;   //随机数0.1.2

    while(arr[m][n] != ' ')
    {
        m = rand()%3;
        n = rand()%3;
    }
    arr[m][n] = '*';
    arr_size--;
}

int win()
{   //判断玩家赢
    for(int m = 0; m<3; m++)
    {
        if((arr[m][0]=='X') && (arr[m][1]=='X') && (arr[m][2])=='X')
        {
            return 1;
        }
        else if((arr[0][m]=='X')&& (arr[1][m]=='X')&&(arr[2][m]=='X'))
        {
            return 1;
        }
    }
    if(((arr[0][0]=='X')&&(arr[1][1]=='X')&&(arr[2][2]=='X')) || ((arr[0][2] == 'X') && (arr[1][1] == 'X') && (arr[2][0]=='X')))
    {
        return -1;
    }

    if(arr_size == 0)            //平局
        return 2;
}

int main()
{
     int num = 0;
     menu();
     printf("请选择: ");
     scanf("%d", &num);

     //棋盘初始化清空
     for(int i = 0; i<3; i++)
     {
         for(int j = 0; j<3; j++)
         {
             arr[i][j] = ' ';
         }
     }
     switch(num)
     {
         case Exit:
             exit(0);
         case Playgame:
             while(1)
             {
                 board();
                 if(win()==-1 || win()==1 || win()==2)
                 {
                     break;
                 }
                 play();
                 board();
                 if(win()==-1 || win()==1 || win()==2)
                 {
                     break;
                 }
                 Cplay();
             }
         default:
             break;
     }

     if(win()==-1)
     {
         printf("计算机win!");
     }
     else if(win()==1)
     {
         printf("YOU赢了!");
     }
     else
     {
         printf("平局!");
     }
     system("pause");
     return 0;



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值