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

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

本项目定位:

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

项目周期:

一星期。

实际时间:

  一天。(2016年4月5日)

游戏功能:

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

编码风格:

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

代码:

#include <stdio.h>    // 标准库
#include <conio.h> // 按键
#include <Windows.h> // 屏幕刷新
#include <stdlib.h> // 随机数 static const int wArr = ;
static const int hArr = ; int temp = ;
int allRound = ;
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 = ;
int whiteChess = ;
int blackChess = ; int main()
{
int InputW = ;
int InputH = ;
initMap(); while ()
{
showMap();
getUserInput();
system("CLS");
whoIsWin();
if ( == allRound)
break; } showMap();
if (notherUser)
{
printf("User2, Win\n");
}
else
{
printf("User1, Win\n");
} return ;
} void initMap()
{
for (int i = ; i < wArr; ++i)
{
for (int j = ; j < hArr; ++j)
{
iMap[i][j] = NULL;
}
} for (int i = ; i < wArr; ++i)
{
iMap[i][] = temp++;
} temp = ; for (int i = ; i < wArr; ++i)
{
iMap[][i] = temp++;
}
temp = ;
} void showMap()
{
for (int i = ; i < wArr; ++i)
{
for (int j = ; 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 <= || h >= hArr || h <= )
{
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 <= || h >= hArr || h <= )
{
return;
}
else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
{
return;
}
iMap[w][h] = myChess; notherUser = !notherUser;
} void whoIsWin()
{
for (int i = ; i < wArr; ++i)
{
for (int j = ; j < hArr; ++j)
{
if(iMap[i][j] > )
// 竖排五个
if (iMap[i + ][j] == iMap[i + ][j]
&& iMap[i + ][j] == iMap[i + ][j]
&& iMap[i + ][j] == iMap[i + ][j]
&& iMap[i + ][j] == iMap[i + ][j]
//&& iMap[i + 4][j] == iMap[i + 5][j]
)
{
allRound = ;
}
// 右斜五个
else if (iMap[i + ][j + ] == iMap[i + ][j + ]
&& iMap[i + ][j + ] == iMap[i + ][j + ]
&& iMap[i + ][j + ] == iMap[i + ][j + ]
&& iMap[i + ][j + ] == iMap[i + ][j + ]
//&& iMap[i + 4][j + 4] == iMap[i + 5][j + 5]
)
{
allRound = ;
}
// 左斜五个
else if (iMap[i + ][j + ] == iMap[i - ][j + ]
&& iMap[i - ][j + ] == iMap[i - ][j + ]
&& iMap[i - ][j + ] == iMap[i - ][j + ]
&& iMap[i - ][j + ] == iMap[i - ][j + ]
//&& iMap[i - 4][j + 4] == iMap[i - 5][j + 5]
)
{
allRound = ;
}
// 横排五个
else if (iMap[i][j + ] == iMap[i][j + ]
&& iMap[i][j + ] == iMap[i][j + ]
&& iMap[i][j + ] == iMap[i][j + ]
&& iMap[i][j + ] == iMap[i][j + ]
//&& iMap[i][j + 4] == iMap[i][j + 5]
)
{
allRound = ;
}
}
}
}

C 语言控制台实现五子棋项目的更多相关文章

  1. C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...

  2. C语言可以开发哪些项目?(转)

    原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言 ...

  3. C语言控制台窗体图形界面编程(总结)

    本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本 ...

  4. 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

    使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...

  5. Go 语言控制台输入&生成随机数

    Go 语言控制台输入&生成随机数 1. 不同基础类型之间的转化对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化.其中最常用的数值转化函数 ...

  6. Win32控制台、Win32项目、MFC项目、CLR控制台、CLR空项目、空项目区别

    转载:https://blog.csdn.net/zfmss/article/details/79244696 1.Win32控制台 初始代码模版以main为程序入口,默认情况下,只链接C++运行时库 ...

  7. docker~Dockerfile方式生成控制台和Api项目的镜像

    回到目录 一些理论知识 将控制台程序和API程序部署到docker,然后运行它,这个首先要解决的问题就是如何在linux平台运行C#代码,哈哈,很古老的问题,事实上,对于这种问题早在几年前就已经有了解 ...

  8. vue初级学习--控制台创建vue项目

    一.导语 困困的我,好想睡啊,但还是敲下这边有的没的的笔记吧 二.正文 1.输入 vue list 可查看此环境下,vue能创建的项目模板 没将webpack.vue-route啃精了的话,老实用we ...

  9. go语言熟知的开源项目

    go语言在国内是比较火的,并且好多公司都用go语言进行重构之前的系统,今天来看下基本大家都知道的go语言的开源项目 1.Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用 ...

随机推荐

  1. DataTableExtensions.AsEnumerable 方法

    在下面的示例中,DisplayProducts 方法接收一个数据表,其中包含名为 ProductName一个 DataColumn,提取 ProductName 值,然后输出值. using Syst ...

  2. Contest2037 - CSU Monthly 2013 Oct (Problem J: Scholarship)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=9 [题解]: 这题卡了一下,卡在负数的情况,负数输出 0 这题主要找到一 ...

  3. Automotive Security的一些资料和心得(1):Security Engineering

    陆续更新一些最近在Automotive Security方面的资料和心得. 1. Overview 1.1. Software Engineering Process PLC-Phases: Intr ...

  4. 搭建 Android 开发环境,初试HelloWorld (win7) (上) (转)

    搭建Android开发环境主要有以下几步要做: 1.JDK安装 2.Eclipse安装 3.Android SDK安装 4.ADT安装 5.创建AVD 1.JDK(Java Development K ...

  5. secureCRT中文字符乱码

    1.远程linux机器.修改环境变量LANG.例如在~/.bash_profile里面添加 export LANG=zh_CN.UTF8 2.本地windows机器.修改SecureCRT的设置.找到 ...

  6. spring <form:checkboxes> tag and css class

    I have issue with: <form:checkboxes path="roles" cssClass="checkbox" items=&q ...

  7. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...

  8. How does it work in C#? - Part 3 (C# LINQ in detail)

    http://www.codeproject.com/Articles/383749/How-does-it-work-in-Csharp-Part-Csharp-LINQ-in-d

  9. LINUX Find命令使用

    LINUX Find命令使用 ====================================================== find   -name april*            ...

  10. Android开发之ListView-SimpleAdapter的使用

    SimpleAdapter: SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int r ...