zoukankan      html  css  js  c++  java
  • 【新年第一个程序】三子棋小游戏(C语言数组实现)

    一、游戏效果


     

     

    二、游戏规则

        ❶ 输入1进入游戏

        ❷ 输入0退出游戏

        ❸ 玩家先走

        ❹ 玩家落子是选择棋盘的坐标位置

        ❺ 电脑是随机落子

        ❻ 如果电脑连了三子则提示电脑赢了,选择要不要继续游戏

    三、实现游戏的代码思路

    ✪ 先构架游戏整体思路

    void game()
    
    {
    
        char ret = 0;
    
        //数组存放棋盘信息
    
        char board[ROW][COL] = { 0 };//二维数组的初始化并没有这么简单
    
        int row = ROW;
    
        int col = COL;
    
        //1.初始化棋盘
    
        //一定要初始化
    
        InitBoard(board, ROW, COL);
    
        //2.打印棋盘
    
        DisplayBoard(board, ROW, COL);
    
        //3.玩游戏,开始下棋了
    
        while (1)
    
        {
    
            //玩家下棋
    
            PlayerMove(board, ROW, COL);
    
            DisplayBoard(board, ROW, COL);
    
            //判断玩家是否赢了
    
            ret = Iswin(board, ROW, COL);
    
            //如果不是游戏继续,那么就直接跳出循环
    
            if (ret != 'D')
    
            {
    
                break;
    
            }
    
            //电脑下棋
    
            ComputerMove(board, ROW, COL);
    
            DisplayBoard(board, ROW, COL);
    
            //判断电脑是否赢了
    
            ret = Iswin(board, ROW, COL);
    
            //如果不是游戏继续,那么就直接跳出循环
    
            if (ret != 'D')
    
            {
    
                break;
    
            }
    
        }
    
        if (ret == 'X')
    
            printf("玩家赢了
    ");
    
        else if (ret == 'O')
    
            printf("电脑赢了
    ");
    
        else
    
            printf("平局
    ");
    
    }

    ————————

    ✪ 再分步写出相应所需函数

    1、菜单函数

    void mnue()
    
    {
    
        printf("-------------------------------
    ");
    
        printf("-------------------------------
    ");
    
        printf("----1.play      0.exit--------
    ");
    
        printf("-------------------------------
    ");
    
        printf("-------------------------------
    ");
    
    }

    ————————

    2、初始化棋盘函数

    //函数的初始化
    
    //将棋盘所有元素都初始化为空格
    
    //空格为不在屏幕上显示其字符的字符(0也是)
    
    void InitBoard(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++)
    
            {
    
                board[i][j] = ' ';
    
            }
    
        }
    
    }

    ————————

    3、打印棋盘函数

    //打印棋盘
    
    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++)
    
            {
    
                printf(" %c ", board[i][j]);
    
                if (j < col - 1)
    
                    printf("|");
    
            }
    
            printf("
    ");
    
            if (i < row - 1)
    
            {
    
                for (j = 0; j < col; j++)
    
                {
    
                    printf("---");
    
                    if (j < col - 1)
    
                        printf("|");
    
                }
    
                printf("
    ");
    
            }
    
        }
    
    }

    ————————

    4、用来存储玩家下棋信息的函数

    //玩家下棋
    
    void PlayerMove(char board[ROW][COL], int row, int col)
    
    {
    
        int x = 0;
    
        int y = 0;
    
        printf("玩家走
    ");
    
        while (1)
    
        {
    
            printf("请输入要下的坐标:");
    
            scanf("%d%d", &x, &y);
    
            if (x >= 1 && y >= 1 && x <= row && y <= col)
    
            {
    
                if (board[x - 1][y - 1] == ' ')
    
                {
    
                    board[x - 1][y - 1] = 'X';
    
                    break;
    
                }
    
                else
    
                    printf("该坐标被占用,请重新输入
    ");
    
            }
    
            else
    
                printf("该坐标不存在,请重新输入
    ");
    
        }
    
    }

    ————————

    5、电脑随机下棋的函数

    //电脑随机下棋
    
    void ComputerMove(char board[ROW][COL], int row, int col)
    
    {
    
        printf("电脑走
    ");//三子棋中电脑只要下在空棋盘上即可
    
        int x = 0;
    
        int y = 0;
    
        while (1)
    
        {
    
            x = rand() % row;//将电脑走的随机值控制在棋盘中
    
            y = rand() % col;
    
            if (x >= 1 && y >= 1 && x <= row && y <= col)
    
            {
    
                if (board[x - 1][y - 1] == ' ')
    
                {
    
                    board[x - 1][y - 1] = 'O';
    
                    break;
    
                }
    
            }
    
        }
    
    }

    ————————

    6、判断棋盘是否满了的函数

    //返回1,表示棋盘满了
    
    //返回0,表示棋盘还没满
    
    int IsFull(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++)
    
            {
    
                if (board[i][j] == ' ')
    
                    return 0;//没满
    
            }
    
        }
    
        return 1;//满了
    
    }

    ————————

    7、判断输赢和游戏是否继续的函数

    //判断输赢和游戏是否继续
    
    //判断输赢
    
    //4种状态
    
    //1.玩家赢了---'X'
    
    //2.电脑赢了---'O'
    
    //3.平局----'C'
    
    //4.游戏继续---'D'
    
    char Iswin(char board[ROW][COL], int row, int col)
    
    {
    
        int i = 0;
    
        //横3行
    
        for (i = 0; i < row; i++)
    
        {
    
            if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
    
            {
    
                return board[i][0];//Iswin直接结束
    
            }
    
        }
    
        //列3行
    
        for (i = 0; i < col; i++)
    
        {
    
            if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
    
            {
    
                return board[0][i];
    
            }
    
        }
    
        //两个对角线
    
        if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
    
            return board[1][1];
    
        if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
    
            return board[1][1];
    
        //判断是否平局
    
        if (1 == IsFull(board, ROW, COL))
    
            return 'C';
    
        //继续游戏
    
        return 'D';
    
    }

    ————————

    8、主函数控制游戏的进程

    int main()
    
    {
    
        int input = 0;
    
        srand((unsigned int)time(NULL));//扩大电脑走的随机值范围
    
        do
    
        {
    
            mnue();
    
            printf("请输入(0/1):");
    
            scanf("%d", &input);
    
            switch (input)
    
            {
    
            case 1:
    
                printf("三子棋游戏开始
    ");
    
                game();
    
                break;
    
            case 0:
    
                printf("退出游戏
    ");
    
                break;
    
            defout:
    
                printf("输入错误,请重新输入
    ");
    
                break;
    
            }
    
        } while (input);
    
        return 0;
    
    }

     

    最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

    【值得关注】我的 C/C++编程学习交流俱乐部【点击进入】

    问题答疑,学习交流,技术探讨,还有超多编程资源大全,零基础的视频也超棒~

  • 相关阅读:
    梦断代码读后感02
    UML大战需求与分析--阅读笔记4
    UML大战需求分析--阅读笔记3
    软件需求与分析课堂讨论一
    UML大战需求分析--阅读笔记02
    UML大战需求分析--阅读笔记01
    学习进度--大三下
    问题账户需求分析
    2016年秋季阅读计划
    个人总结
  • 原文地址:https://www.cnblogs.com/huya-edu/p/14416330.html
Copyright © 2011-2022 走看看