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

为了进一步了解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. (转)Const,Const函数,Const变量,函数后面的Const

    本文转自http://www.cnblogs.com/Fancyboy2004/archive/2008/12/23/1360810.html 看到const 关键字,C++程序员首先想到的可能是co ...

  2. linux 批量重命名文件

    模拟结果文件路径结构大概是:/当前目录/模型名/字模型名模拟/模拟温度/模拟结果文件. 模拟结果文件命名时相同的.模拟结果文件需要修改模拟结果文件的后缀名. 附shell脚本: find -type ...

  3. ExtJS4.2学习(三)Grid表格(转)

    鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-07/172.html --------------- ...

  4. [转载]vs2012中使用Spring.NET报错:Spring.Context.Support.ContextRegistry 的类型初始值设定项引发异常

    学习使用Spring.NET中的时候,写了一个Demo,在运行时报了一个错误:Spring.Context.Support.ContextRegistry 的类型初始值设定项引发异常. 重新整理思绪, ...

  5. 团体程序设计天梯赛-练习集L1-017. 到底有多二

    L1-017. 到底有多二 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个整数“犯二的程度”定义为该数字中包含2的个数与其 ...

  6. 解决Oracle ORA-00984: column not allowed here

    某列是字符列,结果忘记加单引号了 INSERT INTO prt_document_present (company_code, doc_no, seq_no, field_name, desc_ms ...

  7. 咦,为DJANGO的ORM的QUERYSET增加数据列的样码,很好用哟

    这个我真的没有查资料,是通过直觉和经验弄出来的,哈哈,感觉用深一点好. 这样在模板输出时,就更好控制啦.. if self.kwargs: if self.kwargs.has_key('search ...

  8. jquery layout学习

    1.官网:http://layout.jquery-dev.com/index.cfm 2.博客园:http://www.cnblogs.com/chen-fan/articles/2044556.h ...

  9. [java]2015上海邀请赛 B Base64

    题意: 给n和一个字符串(可以有空格) 求字符串编码n次后的字符串 编码方式:字符串的每个字符转化成ASCII码, ASCII码转化成8位2进制,    将二进制数分割成6位为一组的(不够的补0), ...

  10. 【mysql的设计与优化专题(3)】字段类型与合理的选择字段类型

    本篇博客稍微有点长,它实际上包括两个内容:一是mysql字段类型的介绍,二是在mysql建表过程中是如何正确选择这些字段类型; 字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是 ...