8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

用C语言实现三子棋(下)

来源:本站原创 浏览:37次 时间:2023-05-19

以下是test.c的代码

#include "game.h"//测试三子棋游戏void menu(){    printf("***********************\n");    printf("****1.play   0.exit****\n");    printf("***********************\n");}//游戏的整个算法实现void game(){    char ret = 0;    //数组 - 存放走出棋盘的信息    char board[ROW][COL] = { 0 };//全部空格    //初始化棋盘    InitBoard(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 test(){    int input = 0;    srand((unsigned int)time(NULL));    do    {        menu();        printf("请选择:>");        scanf("%d", &input);        switch (input)        {        case 1:            game();            printf("三子棋\n");            break;        case 0:            printf("退出游戏\n");            break;        default:            printf("选择错误,请重新选择\n");            break;        }    } while (input);}int main(){    test();    return 0;}

game.h的代码如下:

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);//告诉我们四种游戏得状态//玩家赢 - '*'//电脑赢 - '#'//继续   - 'Q'//平局   - 'C'char IsWin(char board[ROW][COL], int row, int col);

game.c的代码如下:

#include "game.h"//返回1 表示棋盘满了//返回0,表示棋盘没满int 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][0] == board[i][2] && board[i][1] != ' ')        {            return board[i][1];        }    }    //竖三列    for ( i = 0; i < col; 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[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')        return board[1][1];    //判断是否平局    if (1 == IsFull(board,ROW,COL))    {        return 'Q';    }    return 'C';}void ComputerMove(char board[ROW][COL], int row, int col){    int x = 0;    int y = 0;    printf("电脑走:>\n");    while (1)    {        x = rand() % row;        y = rand() % col;        if (board[x][y] == ' ')        {            board[x][y] = '#';            break;        }    }}void PlayerMove(char board[ROW][COL], int row, int col){    int x = 0;    int y = 0;    printf("玩家走:>\n");    //判断x,y坐标得合法性    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 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++)//  {//      //1.打印一行的数据//      printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);//      //2.打印分割行//      if (i <row -1)//      {//          printf("---|---|---\n");//      }////  }//}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++)        {            //1.打印一行的数据            printf(" %c ", board[i][j]);            if (j < col - 1)            {                printf("|");            }        }        printf("\n");        //2.打印分割行        if (i < row - 1)        {                for ( j = 0; j < col; j++)                {                printf("---");                if (j<col - 1)                {                    printf("|");                }            }            printf("\n");        }    }}

有兴趣的朋友可以尝试一下,创建一个头文件两个源文件就能玩一个简单的三子棋小游戏。
2021.1.28

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net