#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include "iostream"
#include "iomanip"
#include"graphics.h"   //延迟输出函数 Sleep() 头文件
#include"conio.h"
#include"time.h"
#include<iostream>
#include"stdio.h"
using namespace std;
void broke()    //画面输出函数,可以删除
{
initgraph(640,480);
setbkcolor(BLACK);
cleardevice();
int i;

for(i=480;i>=220;i--)
{
setlinecolor(RGB(225,i,0));
setfillstyle(BS_SOLID);
setfillcolor(RGB(225,i,0));
fillcircle(320,i,10);
Sleep(i/10-21);
setlinecolor(BLACK);
setfillstyle(BS_SOLID);
setfillcolor(BLACK);
fillcircle(320,i,10);
}

setfillcolor(MAGENTA);
solidcircle(320,200,100);
Sleep(500);
setfillcolor(BLACK);
solidcircle(320,200,400);

int x,y;
char ch;
srand(time(0));
while(1)
{
for(i=1;i<150;i++)
{
x=rand()%300;
y=rand()%450;
if(x<150) x=150+x%80;
if(y<230) y=290+y%50;
setlinecolor(RGB(y-100,y+x%20,100+i*2));
circle(y,x,100);
setlinecolor(RGB(y+x%20,100+i*2,y-100));
circle(y,x,100);
}
Sleep(500);
setfillcolor(BLACK);
solidcircle(320,200,300);

for(i=1;i<150;i++)
{
x=rand()%300;
y=rand()%450;
if(x<150) x=150+x%80;
if(y<230) y=290+y%50;
setlinecolor(RGB(y-100,y+x%20,100+i*2));
circle(y,x,100);
setlinecolor(RGB(y+x%20,100+i*2,y-100));
circle(y,x,100);
}
}
getch();
closegraph();
}
char a[23][23]; //
//int record_x[20]; int record_y[20]; 阔以由此扩展复盘功能
void cint(); //
void out_look(); //棋盘界面输出函数

void out_start() //棋盘界面初始化
{
int i,j;
for(i=0;i<=22;i++)
for(j=0;j<=22;j++)
a[i][j]='-';
}
int check(char ch) //五子连棋判断
{
int i,j,k=0;
for(i=1;i<=20;i++) //横向
for(j=1;j<=20;j++)
{
if(a[i][j]==ch) k++;
if(a[i][j]=='-') k=0;
if(k==5) return 1;
}
k=0;

for(i=1;i<=20;i++) //竖向
for(j=1;j<=20;j++)
{
if(a[j][i]==ch) k++;
if(a[j][i]=='-') k=0;
if(k==5) return 1;

}
k=0;

for(j=1,i=1;j<=20;j++,i++) //右倾
{
if(a[i][j]==ch) k++;
if(a[i][j]=='-') k=0;
if(k==5) return 1;
}
k=0;

for(i=1,j=20;i<=20;i++,j--) //左倾
{
if(a[i][j]==ch) k++;
if(a[i][j]=='-') k=0;
if(k==5) return 1;
}

return 0;
}

void cls(int x) //清屏和延迟输出函数
{
Sleep(x);
system("cls");
}

void end(char ch[]) //获胜输出函数
{
printf("恭喜%s获得胜利!!!",ch);
cls(1500);
cout<<"是否再对弈一局?(y/n)";
char ask;
cin>>ask;
if(ask=='y') {out_start(); out_look(); cint();}
else broke();
}

void out_head() //游戏最初提示输出函数
{

cout<<"一起来下棋吧!";
}
int out_ok() //开始指令接受函数
{
out_head();
cout<<"\nOK?(y/n)\n";
fflush(stdin);
char a=getchar();
if(a=='y') { cls(500) ; return 1;}
if(a=='n') {broke();return 0;}
else {printf("输出错误,请重新输入"); cls(500); out_ok();}
}

void out_look() //棋盘输出
{
int i,j;
for(i=0;i<=20;i++)
cout<<setw(3)<<setfill(' ')<<i;
cout<<endl;

for(i=1;i<=20;i++)
{
cout<<setw(3)<<setfill(' ')<<i;
for(j=1;j<=20;j++)
cout<<setw(3)<<setfill(' ')<<a[i][j];
cout<<endl;
}
}

int out_check(char temp)
{
if(temp!='-')
{
cout<<"对不起,你不能在此落子,请重新输入";
return 1;
}
return 0;
}

void out_down(char aa[],char k) //落子辅助函数
{
int x,y;
printf("%s着棋:\n选择横轴:",aa);
cin>>x;
cout<<"\n选择竖轴:";
cin>>y;

if(x>20||y>20||x<=0||y<=0)
{
cout<<"\n对不起,你的落子超出棋盘范围,请重新输入";
cls(1200);
out_look();
out_down(aa,k);
}

if(out_check(a[x][y])==1)
{
cls(1000);
out_look();
out_down(aa,k);
}
else
{
a[x][y]=k;
cls(100);
out_look();
}
return;
}
void cint() //落子主控函数
{
char aa[5]="蓝方",bb[5]="红方";
char x='*',y='#';

while(1)
{
out_down(aa,x);
if(check(x)==1) {end(aa); break;}
out_down(bb,y);
if(check(y)==1) {end(bb); break;}
}
return;
}
int main(void) //主函数
{
out_start();
int ask=out_ok();
if(ask==1) {cls(500); out_look(); cint();}
return 0;
}

附:由于VC和TC的差异,如果由于头文件<graphsic.h>不存在,可以去http://www.easyx.cn/  下载EASY X

VC下的人人对弈五子棋(dos)的更多相关文章

  1. 在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。

    在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除. 作者:邵盛松 2009-09-05 前言 1关于的BLOB(Binary)数据的存储和读取功能主要参考了MSDN上的一篇& ...

  2. VC++下封装ADO类以及使用方法

    操作系统:windows 7软件环境:visual studio 2008 .Microsoft SQL 2005本次目的:介绍一个已经封装的ADO类,简单说明怎么导入使用 首先声明一下,这个封装的A ...

  3. VC下Debug和Release区别

    整理日: 2015年3月23日 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到 ...

  4. 在VC下显示JPEG、GIF格式图像的一种简便方法

    在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言  JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛 ...

  5. VC下加载JPG/GIF/PNG图片的两种方法

    转载自:http://blog.sina.com.cn/s/blog_6582aa410100huil.html 仅管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg ...

  6. VC++下使用ADO操作数据库

    VC++下使用ADO操作数据库主要要用到 _ConnectionPtr,_CommandPtr,_RecordsetPtr三个ADO对象指针,我查找了相关资料,发现网上源码很多,但是都相对凌乱,于是自 ...

  7. VC下如何调用控制台命令以及其他可执行文件

    开始的时候想写一个基于MFC的Wifi开关控制程序,可是不知道VC中如何调用控制台命令,经过网上的学习,发现其实挺挺简单也挺好用.于是制作了一个简单的基于MFC个人助理小软件,可以点击按钮实现Wifi ...

  8. VC++下编译Libgeotiff(含Libtiff)

    转自原文Win10+VC++下编译Libgeotiff(含Libtiff)详细图文教程 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作GeoTiff文件的库.同 ...

  9. VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法

    VC MFC 提供的 API LoadBitmap / LoadImage 类 CBitmap 等都只能操作 BMP 位图,图标.对于其他常用的 JPG / JPEG / GIF / PNG 格式,它 ...

随机推荐

  1. DoTween使用

    官网:http://dotween.demigiant.com/ 1.step 这里使用lamda表达式,通过dotween的to方法将其移动到 Vector3(348, 196, 0)的值返回到Ve ...

  2. flash上传在spring mvc中出现的问题2

    转载请注明: TheViper http://www.cnblogs.com/TheViper  这两天本屌在做flash拼图上传遇到点坑 上传原理很简单,就是把上图右边画布区域BitmapData. ...

  3. 【测试】模拟一个全表扫描的sql,对其进行优化走索引,并且将执行计划稳定到baseLine。

    ①创建表t3: SQL> create table t3 (id int); Table created. SQL; rows created. ②开启自动捕获并修改时间格式: SQL> ...

  4. 使用throws抛出异常

    声明抛出异常实在一个方法声明的throws子句中指明的.throws子句方法的基本形式如下.方法 throws 异常列表{ }throws子句中可以指明多个异常,说明该方法不对这些异常进行处理,而是抛 ...

  5. openldap安装配置

    http://www.jslink.org/linux/openldap-ssl-sssd.html http://www.unix-power.net/centos7/openldap.html h ...

  6. centos系统自动化安装研究

    https://rhinstaller.github.io/anaconda/intro.html https://github.com/rhinstaller/pykickstart/blob/ma ...

  7. 0511 backlog 项目管理

    SCRUM 这次的作业就是确定SCRUM的计划,确定sprint backlog的一个冲刺周期,而这个周期是两个星期.争取在两周内发布1.0版本. 本次作业以网站构建为主: ID       NAME ...

  8. Android IOS WebRTC 音视频开发总结(六十)-- 您为什么招不到适合的音视频人才

    本文主要介绍音视频行业招聘现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 有过音视频人才招聘经验的应该都深有 ...

  9. 使用buildroot编译bind DNS服务器

    用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以直接添加到文件系统里边,如常用的udhcpc,tftp,apache,ligh ...

  10. .NET中使用log4net

    一,加载log4net引用 下载log4net.dll,我们这里使用的是.NET2.0 下载地址:http://files.cnblogs.com/gosky/log4net-1.2.13-bin-n ...