C语言项目:一天时间写出《五子棋项目》,包含源码分享

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言项目:一天时间写出《五子棋项目》,包含源码分享相关的知识,希望对你有一定的参考价值。

一天时间开发出老师说需要一星期的C语言游戏:五子棋项目!给大家分享一下~

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

本项目定位:

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

游戏功能:

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

编码风格:

       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\\n");

    }

    else

    {

        printf("User1, Win\\n");

    }

    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("\\n");

    }

}

void getUserInput()

{

    int w, h;

    if (notherUser)

    {

        printf("User1:\\n");

        myChess = whiteChess;

        // ============  用户输入

        scanf_s("%d %d", &w, &h);

        userInput(w, h);

    }

    else

    {

        printf("User2:\\n");

        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;

                }

        }

    }

}

本次分享就到这里了,一起努力吧!

对于准备学习编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:614504899点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

 

以上是关于C语言项目:一天时间写出《五子棋项目》,包含源码分享的主要内容,如果未能解决你的问题,请参考以下文章

(源码推荐)快速开发10几天时间纯代码高仿《内涵段子》

C语言小项目 -- 五子棋小游戏(通用版)

C系列Unity3D | 花一天时间做个经典小游戏Pacman

C语言项目源码,C语言源代码大全(2021最新)!

android:怎样用一天时间,写出“飞机大战”这种游戏!(无框架-SurfaceView绘制)

详解 C 语言开发五子棋游戏以及游戏中的重要算法与思路