C 语言控制台实现五子棋项目
花了一天时间实现了控制台五子棋项目,把项目贴上来。也算是告一段落了。
为了进一步了解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 语言控制台实现五子棋项目的更多相关文章
- C语言可以开发哪些项目?
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...
- C语言可以开发哪些项目?(转)
原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言 ...
- C语言控制台窗体图形界面编程(总结)
本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本 ...
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...
- Go 语言控制台输入&生成随机数
Go 语言控制台输入&生成随机数 1. 不同基础类型之间的转化对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化.其中最常用的数值转化函数 ...
- Win32控制台、Win32项目、MFC项目、CLR控制台、CLR空项目、空项目区别
转载:https://blog.csdn.net/zfmss/article/details/79244696 1.Win32控制台 初始代码模版以main为程序入口,默认情况下,只链接C++运行时库 ...
- docker~Dockerfile方式生成控制台和Api项目的镜像
回到目录 一些理论知识 将控制台程序和API程序部署到docker,然后运行它,这个首先要解决的问题就是如何在linux平台运行C#代码,哈哈,很古老的问题,事实上,对于这种问题早在几年前就已经有了解 ...
- vue初级学习--控制台创建vue项目
一.导语 困困的我,好想睡啊,但还是敲下这边有的没的的笔记吧 二.正文 1.输入 vue list 可查看此环境下,vue能创建的项目模板 没将webpack.vue-route啃精了的话,老实用we ...
- go语言熟知的开源项目
go语言在国内是比较火的,并且好多公司都用go语言进行重构之前的系统,今天来看下基本大家都知道的go语言的开源项目 1.Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用 ...
随机推荐
- Jplayer(转)
Jplayer必须要加载 1.样式 jplayer.blue.monday.css 2.jq jquery.1.6.2.min.js 当前最新版本为1.6.2 3.jplayer的js jquery ...
- coolcarousel 图片轮播缩放问题
var myurl; var mydata; var mytype = "POST"; var jsonType = "json"; var htmlType ...
- DIV中TABLE居的2种方式
<html><head><title>测试页面</title></head><body><div width=" ...
- [BEC][hujiang] Lesson02 Unit1:Working life ---Reading
2 1.1Working Life p7 reading attitudes to work Question6: 对于Attitude问题 1 I be willing/ unwilling to ...
- APP,webapp 设计相关资料汇集区
(1).@2x iPhone3GS时代,我们为一个应用提供图标(或按钮提供贴图),只需要icon.png.针对现在的iPhone4~6 Retina显示屏,需要制作额外的@2x高分辨率版本. 例如在i ...
- 安装Ubuntu双系统系列——更换源
Ubuntu 有一个非常有用的命令 apt-get,它可以帮助你下载软件,还可以安装,下载并安装的命令是 apt-get install. 那Ubuntu默认是从哪里下载软件呢,这可以查看文件/etc ...
- 初始化一台linux server来做项目管理和测试
毕业以后很多没做过这么技术的事情了,不过今年要开始咯. Goal: 练手安装Nginx,并且配置不同的server,后端有Tomcat的(JIRA),有PHP(总得有的),还有Tornado和Node ...
- Ubuntu 12.04上编译Vim7.4的时候遇到“no terminal library found”问题
错误如下: no terminal library foundchecking for tgetent()... configure: error: NOT FOUND! You need ...
- 关于web会话中的session过期时间的设置
关于web会话中的session过期时间的设置 1.操作系统: 步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉右键“属性”——〉主目录——〉配置— ...
- git rev-list
git-rev-list - Lists commit objects in reverse chronological order 按照时间顺序倒序排列的commit Update: If all ...