#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. UGUI不规则按钮实现思路

    根据图片的透明度来判断是否点击到了适当区域(如果a值是0,说明完全透明,则判断为没点击,否则判断为触发点击) using UnityEngine; using System.Collections; ...

  2. ceph--磁盘和rbd、rados性能测试工具和方法

    我在物理机上创建了5台虚拟机,搭建了一个ceph集群,结构如图: 具体的安装步骤参考文档:http://docs.ceph.org.cn/start/ http://www.centoscn.com/ ...

  3. cisco VPN配置

    拓扑拿朋友的. r1(config)#int f0/0 r1(config-if)#ip add 50.50.50.50 255.255.255.0 r1(config-if)#no shu r1(c ...

  4. json 和 pickel 详解

    一.json json,用于字符串 和 python数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load 1.json.loads()用于将字符串形式的字典,列表 ...

  5. 学习联系 Java阶乘相关练习

    题目一:一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度 double hou = 0.00008; for (int i = 1; i > 0; i++) { hou = ...

  6. Entity Framework Lambda 实现多列Group by,并汇总求和

    var result = DataSummaryRepository.FindBy(x => x.UserID == argMemberNo && x.SummaryDate & ...

  7. Android基础总结(6)——内容提供器

    前面学习的数据持久化技术包括文件存储.SharedPreferences存储以及数据库存储技术保存的数据都只能被当前应用程序所访问.虽然文件存储和SharedPreferences存储中提供了MODE ...

  8. Android基础总结(4)——广播接收器

    在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的.Android提供了一整套完整的API, ...

  9. centos7 pxe minimal install

    # 01-78-2b-cb-69-10-f3 default menu.c32 prompt 0 timeout 50 label CentOS 7 MENU DEFAULT MENU LABEL C ...

  10. [原]My first Python

    我的第一个Python程序: print 'hello world' raw_input ("print any key to continue...") 在python3.4下应 ...