C语言实现三子棋(九宫格)的游戏

//创建两原文档和一个头文件

//第一个原文档运行主函数名字随便起

#include "game.h"
#define _CRT_SECURE_NO_WARNINGS 1
void menu()
{
    printf("*********************\n");
    printf("***1 play - 0 exit***\n");
    printf("*********************\n");
    printf("请输入:");
}
void game1()
{
    char zyq[ROW][COL]={0};
    Initboard(zyq,ROW,COL);//将二维数组所有的数设置为空格
    Display(zyq,ROW,COL);//显示下棋的棋盘
    srand ((unsigned int)time(NULL));//调用rand函数生成随机数时需要调用srand函数生成时间戳
    printf("请输入你要下的横纵坐标(如:1 1):");
    while(1)
    {
        //进入游戏玩家开始下棋
        char ret=0;
        Playmove(zyq,ROW,COL);//玩家开始下棋
        Display(zyq,ROW,COL);//显示玩家下棋后的棋盘
        ret=IsWin(zyq,ROW,COL);//通过返回值判断玩家是否胜利
        if(ret=='*')//返回*玩家赢跳出循环
        {
            printf("玩家赢\n");
            break;
        }
        if(ret=='1')//返回1平局
        {
            printf("平局\n");
            break;
        }
        //电脑走
        Computermove(zyq,ROW,COL);//电脑开始下棋
        Display(zyq,ROW,COL);//显示电脑下棋后的棋盘
        ret=IsWin(zyq,ROW,COL);//通过返回值判断玩家是否胜利
        if(ret=='#')//返回#电脑赢跳出循环
        {
            printf("电脑赢,你真笨!!!\n");
            break;
        }
        if(ret=='d')//返回1平局
        {
            printf("平局\n");
            break;
        }
    }
}
int main()
{
    int input=0;
    menu();//生成菜单进行提示
    do
    {
        scanf("%d",&input);//输入选择
        switch(input)
        {
        case 1://输入1进入游戏
             printf("进入游戏\n");
             game1();
             printf("要想继续请再次输入1:");
            break;
        case 0://输入0推出游戏
            printf("退出游戏\n");    
            break;
        default://输入其他不合法重新输入
            printf("输入错误,请重新输入\n");
            break;
        }
    }
    while(input);//当输入的值为0时可推出循环,不为0循环继续
    return 0;
}

//第二个原文档名字为game.c

#include "game.h"
#define _CRT_SECURE_NO_WARNINGS 1
void Initboard(char zyq[ROW][COL],int row,int col)
{
    int i=0;
    int j=0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            zyq[i][j]=' ';//将二维数组全部数据设置为空格
        }
    }
}
//显示棋盘
void Display(char zyq[ROW][COL],int row,int col)
{
    int i=0;
    int j=0;
    for(i=0;i<row;i++)
    {
        
        for(j=0;j<col;j++)
        {
            printf(" %c ",zyq[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 Playmove(char zyq[ROW][COL],int row,int col)
{
    int x=0;
    int y=0;
    while(1)
    {
        printf("玩家走:");
        scanf("%d %d",&x,&y);//输入玩家要下的位置
        if(zyq[x-1][y-1]==' '&&x>=1&&x<=3&&y>=1&&y<=3)//判断玩家下的位置是否合法x,y范围是否在1到3之间,且该位置的数组是否为空格
        {
            zyq[x-1][y-1]='*';//当是空格且合法时玩家下棋的标志为*
            break;
        }
        else
        {
            printf("输入错误 请重新输入\n");//不合法提示
        }
    }
}
//电脑走
void Computermove(char zyq[ROW][COL],int row,int col)
{
    int x=0;
    int y=0;
    printf("电脑走\n");
    while(1)
    {
        x=rand()%row;//利用rand函数生成随机数%row则生成x的范围为0~row-1
        y=rand()%col;//与上同理
        if(zyq[x][y]==' ')//判断这个位置是否为空格当时空格可进行落子
        {
            zyq[x][y]='#';//电脑下棋标志为#
            break;
        }
    }
}
//*玩家赢
//#电脑赢
//c继续
//d平局
char IsWin(char zyq[ROW][COL],int row,int col)
{
    int i=0;
    int j=0;
    char d=0;
    char c=1;
    for(i=0;i<3;i++)//判断横着是否有三个一样的并且不时空格
    {
        if(zyq[i][0]==zyq[i][1]&&zyq[i][1]==zyq[i][2]&&zyq[i][2]!=' ')
        {
            return zyq[i][0];
            break;
        }
    }
    for(j=0;j<3;j++)//判断竖着是否有三个一样的并且不时空格
    {
        if(zyq[0][j]==zyq[1][j]&&zyq[1][j]==zyq[2][j]&&zyq[2][j]!=' ')
        {
            return zyq[0][j];
            break;
        }
    }
    if(zyq[0][0]==zyq[1][1]&&zyq[1][1]==zyq[2][2]&&zyq[2][2]!=' ')//判断斜着是否有三个一样的并且不时空格
    {
        return zyq[0][0];
    }
    if(zyq[0][2]==zyq[1][1]&&zyq[1][1]==zyq[2][0]&&zyq[2][0]!=' ')//判断斜着是否有三个一样的并且不时空格
    {
        return zyq[0][2];
    }
    if(zyq[0][0]==zyq[0][1]&&zyq[0][1]==zyq[0][2]&&zyq[0][1]==zyq[1][0]&&zyq[0][1]==zyq[1][1]&&zyq[0][1]==zyq[1][2]&&zyq[0][1]==zyq[2][0]&&zyq[0][1]==zyq[2][1]&&zyq[0][1]==zyq[2][2]&&zyq[0][1]!=' ')//判断是否为平局
    {
        return d;
    }
    return c;
}
 

//头文件为game.h

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3
void Initboard(char zyq[ROW][COL],int row,int col);
void Display(char zyq[ROW][COL],int row,int col);
void Playmove(char zyq[ROW][COL],int row,int col);
void Computermove(char zyq[ROW][COL],int row,int col);
char IsWin(char zyq[ROW][COL],int row,int col);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值