zoukankan      html  css  js  c++  java
  • C 语言控制台实现五子棋项目

    花了一天时间实现了控制台五子棋项目,把项目贴上来。也算是告一段落了。

    为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验。所以在编程初期选择了控制台小游戏《单机五子棋》作为项目进行编码。

    本项目定位:

           控制台小程序,作为熟悉一个完整的项目流程存在。

    项目周期:

           一星期。

    实际时间:

      一天。(2016年4月5日)

    游戏功能:

           首先实现能够让双人进行对战,最后得出胜负(结果)。然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏。

    编码风格:

           C语言面向过程编程,变量名与函数名全部使用驼峰命名法。

    代码:

    #include <stdio.h>    // 标准库
    #include <conio.h>    // 按键
    #include <Windows.h> // 屏幕刷新
    #include <stdlib.h>  // 随机数
    
    static const int wArr = 15;
    static const int hArr = 15;
    
    int temp = 0;
    int allRound = 0;
    int iMap[wArr][hArr] = {};
    void initMap();
    void showMap();
    void getUserInput();
    void userInput(int width, int height);
    void whoIsWin();
    void aiInput(int w, int h);
    
    bool notherUser = true; // 区分用户
    
    int myChess = 0;
    int whiteChess = 22;
    int blackChess = 33;
    
    int main()
    {
        int InputW = 0;
        int InputH = 0;
        initMap();
    
        while (1)
        {
            showMap();
            getUserInput();
            system("CLS");
            whoIsWin();
            if (20000 == allRound) 
                break;
            
        }
    
        showMap();
        if (notherUser)
        {
            printf("User2, Win
    ");
        }
        else
        {
            printf("User1, Win
    ");
        }
    
        return 0;
    }
    
    void initMap()
    {
        for (int i = 0; i < wArr; ++i)
        {
            for (int j = 0; j < hArr; ++j)
            {
                iMap[i][j] = NULL;
            }
        }
    
        for (int i = 0; i < wArr; ++i)
        {
            iMap[i][0] = temp++;
        }
    
        temp = 0;
    
        for (int i = 0; i < wArr; ++i)
        {
            iMap[0][i] = temp++;
        }
        temp = 0;
    }
    
    void showMap()
    {
        for (int i = 0; i < wArr; ++i)
        {
            for (int j = 0; j < hArr; ++j)
            {
                printf("%3.0d", iMap[i][j]);
            }
            printf("
    ");
        }
    }
    
    void getUserInput()
    {
        int w, h;
        if (notherUser)
        {
            printf("User1:
    ");
            myChess = whiteChess;
            // ============  用户输入
            scanf_s("%d %d", &w, &h);
    
            userInput(w, h);
        }
        else
        {
            printf("User2:
    ");
            myChess = blackChess;
            // 下面是 AI 部分
            aiInput(rand()%wArr, rand()%hArr);
        }    
    }
    
    void userInput(int w, int h)
    {
        if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
        {
            return;
        }
        else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
        {
            return;
        }
        iMap[w][h] = myChess;
    
        notherUser = !notherUser;
    }
    
    void aiInput(int w, int h)
    {
        if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
        {
            return;
        }
        else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
        {
            return;
        }
        iMap[w][h] = myChess;
    
        notherUser = !notherUser;
    }
    
    void whoIsWin()
    {
        for (int i = 0; i < wArr; ++i)
        {
            for (int j = 0; j < hArr; ++j)
            {
                if(iMap[i][j] > 0)
                    // 竖排五个
                    if (iMap[i + 0][j] == iMap[i + 1][j]
                        && iMap[i + 1][j] == iMap[i + 2][j]
                        && iMap[i + 2][j] == iMap[i + 3][j]
                        && iMap[i + 3][j] == iMap[i + 4][j]
                        //&& iMap[i + 4][j] == iMap[i + 5][j]
                        )
                    {
                        allRound = 20000;
                    }
                    // 右斜五个
                    else if (iMap[i + 0][j + 0] == iMap[i + 1][j + 1]
                        && iMap[i + 1][j + 1] == iMap[i + 2][j + 2]
                        && iMap[i + 2][j + 2] == iMap[i + 3][j + 3]
                        && iMap[i + 3][j + 3] == iMap[i + 4][j + 4]
                        //&& iMap[i + 4][j + 4] == iMap[i + 5][j + 5]
                        )
                    {
                        allRound = 20000;
                    }
                    // 左斜五个
                    else if (iMap[i + 0][j + 0] == iMap[i - 1][j + 1]
                        && iMap[i - 1][j + 1] == iMap[i - 2][j + 2]
                        && iMap[i - 2][j + 2] == iMap[i - 3][j + 3]
                        && iMap[i - 3][j + 3] == iMap[i - 4][j + 4]
                        //&& iMap[i - 4][j + 4] == iMap[i - 5][j + 5]
                        )
                    {
                        allRound = 20000;
                    }
                    // 横排五个
                    else if (iMap[i][j + 0] == iMap[i][j + 1]
                        && iMap[i][j + 1] == iMap[i][j + 2]
                        && iMap[i][j + 2] == iMap[i][j + 3]
                        && iMap[i][j + 3] == iMap[i][j + 4]
                        //&& iMap[i][j + 4] == iMap[i][j + 5]
                        )
                    {
                        allRound = 20000;
                    }
            }
        }
    }
  • 相关阅读:
    【Postgresql】set up
    【LSTM】Understanding-LSTMs
    【CTR】各公司方法
    【DL】stanford--cs20si--tensorflow
    Redis数据库入门教程
    用.htaccess文件实现URL重写
    php中urldecode()和urlencode()
    php中序列化与反序列化
    网站整合Ucenter详细流程
    ucenter 整合外部网站,实现登录等操作
  • 原文地址:https://www.cnblogs.com/chenstyle/p/5357796.html
Copyright © 2011-2022 走看看