VC下的人人对弈五子棋(dos)

#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

posted @ 2016-05-15 19:02  DoubleLeft  阅读(319)  评论(1编辑  收藏  举报