三子棋 代码

item.c

#include"game1.h"
void order() {
    printf("###################\n");
    printf("##1.enter  0.back##\n");
    printf("###################\n");
}
void game() {
    char a[M][N]={0};//初始化数组,将数组棋盘全部置为数字0 
    char ret='0';
    //打印棋盘
    itisdisplay(a,M,N);//二维数组也可以用数组名来传
    itisplay(a,M,N);
    ret=itisconsult(a,M,N);//判断当前局势的结果
    //#--玩家赢了
    //*--电脑赢了
    //Q--平局
    //C--游戏继续
    while(ret=='C') {
         itisplay(a,M,N);
        ret=itisconsult(a,M,N);
        switch(ret) {
            case '#':
                printf("玩家赢啦!\n");
                break;
            case '*':
                printf("电脑赢啦!\n");
                break;
            case 'Q':
                printf("平局\n");
                break;
        }
    }

}
int main() {
    srand((unsigned)time(NULL));
    int input=0;
    do {
        order();
        printf("请输入选项:》\n");
        scanf("%d",&input);
        switch(input) {
            case 1:
                printf("进入游戏中......\n");
                game();
                break;
            case 0:
                printf("退出游戏\n");
                break;
            default:
                printf("输入错误,请重新输入\n");
                break;
        }
    } while(input);
}

game.h

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define M 3
#define N 3
void itisdisplay(char a[M][N],int m,int n);
void itisplay(char a[M][N],int m,int n);
char itisconsult(char a[M][N],int m,int n);

game.c

#include"game1.h"

//打印棋盘
void itisdisplay(char a[M][N],int m,int n) {

    int i=0;
    int j=0;
    printf("\n");
    for(i=0; i<m; i++) {
        for(j=0; j<n; j++) {

            if(j==n-1) {
                printf(" %c ",a[i][j]);
            } else
                printf(" %c |",a[i][j]);
        }
        if(i<m-1) {
            printf("\n");
            for(j=0; j<n; j++) {
                if(j==n-1) {
                    printf("---",a[i][j]);
                } else
                    printf("---|",a[i][j]);
            }
        }//先打印行再列
        printf("\n");
    }
    printf("\n");
}
//单局玩法
void itisplay(char a[M][N],int m,int n) {
    printf("玩家下:\n");
    int in1=0,in2=0;
    while(1) {
        scanf("%d %d",&in1,&in2);
        if(in1>m||in1<1||in2<1||in2>n) {
            //判断输入是否合法
            printf("输入错误,请重新输入\n");
        } else {
            a[in1-1][in2-1]='#';
            itisdisplay(a,M,N);
            break;
        }
    }
    printf("电脑下:\n");
    while(1) {
        int num1=rand()%3;//0,1,2,
        int num2=rand()%3;
        if(a[num1][num2]!='#') {
            a[num1][num2]='*';
            break;
        }
    }
    itisdisplay(a,M,N);
}//单局玩法
char itisconsult(char a[M][N],int m,int n) {
    int i=0;
    int j=0;
    //玩家赢
    for(i=0; i<m; i++) {
        if(a[i][1]==a[i][2]&&a[i][2]==a[i][0]&&a[i][1]=='#') {
            //行满三
//            printf("玩家赢了!\n");
            return a[i][1];
            break;
        } else if(a[0][i]==a[1][i]&&a[1][i]==a[2][i]&&a[i][1]=='#') {
            //列满三
//            printf("玩家赢了!\n");
            return a[1][i];
            break;
        } else if((a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[1][1]=='#')||(a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[1][1]=='#') ) {
            //斜对角
//            printf("玩家赢了!\n");
            return a[1][1];
            break;
        }
        //电脑赢
        for(i=0; i<n; i++) {
            if(a[i][1]==a[i][2]&&a[i][2]==a[i][0]&&a[i][1]=='*') {
                //行满三
//            printf("电脑赢了!\n");
                return a[i][1];
                break;
            } else if(a[0][i]==a[1][i]&&a[1][i]==a[2][i]&&a[i][1]=='*') {
                //列满三
//            printf("电脑赢了!\n");
                return a[1][i];
                break;
            } else if((a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[1][1]=='*')||(a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[1][1]=='*') ) {
                //斜对角
//            printf("电脑赢了!\n");
                return a[1][1];
                break;
            }
        }
        //平局
        int flag=0;
        for(i=0; i<m; i++) {
            for(j=0; j<n; j++) {
                if(a[i][j]==0) {
                    flag=1;//没有布满则游戏继续
                }
            }
        }
        if(flag==1) {
            return 'C';
        } else {
            return 'Q';
        }

    }
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值