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

为了进一步了解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. java程序练习:数组中随机10个数中的最大值

    //定义输入:其实是一个可以保存10个整数的数组 //使用循环遍历,生成10个随机数,放入每个元素中//打桩,数组中的内容 //定义输出变量 //将数组中第一个元素取出,保存在max中,当靶子 //遍 ...

  2. ExtJS4.2学习(九)属性表格控件PropertyGrid(转)

    鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-15/178.html ------------- ...

  3. spoj 2178

    好水...... #include<cstdio> #include<cstdlib> #include<cstring> #include<algorith ...

  4. express 3.0.x 中默认不支持flash() 的解决方法

    Express 3.x默认已经不支持req.flash(),如果要用flash()需要这样兼容 1.flash 消息暂存在session中,需要cookieParser 和 session中间件来声明 ...

  5. poj 2065 SETI 高斯消元

    看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...

  6. tomcat 禁止某些文件(夹)的访问

    tomcat 禁止某些文件(夹)的访问 <!-- 不允许访问的文件以及文件夹 --> <security-constraint> <display-name>Tom ...

  7. 缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor” 解决方案

    静态类中添加如下.此方法本人测试有效. //缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor” namespace  ...

  8. http://nxlhero.blog.51cto.com/962631/1666250?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

    http://nxlhero.blog.51cto.com/962631/1666250?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&am ...

  9. ASC #1

    开始套题训练,第一套ASC题目,记住不放过每一题,多独立思考. Problem A ZOJ 2313 Chinese Girls' Amusement 循环节 题意:给定n,为圆环长度,求k < ...

  10. DVB系统中PCR的生成和PCR校正

    http://blog.csdn.net/chenliangming/article/details/3616720 引自<广播电视信息>2008年1月 从数字电视前端系统功能上来讲,传统 ...