共有回帖数 0 个
-
原创五子棋(界面版)抛砖引玉 寻蒙c高手交流
////////////////////////////////////////////
#include "stdio.h"
#includegraphics.h
#define LEFT 0x4b00 /*光标左键值*/
#define RIGHT 0x4d00 /*光标右键值*/
#define DOWN 0x5000 /*光标下键值*/
#define UP 0x4800 /*光标上键值*/
#define ESC 0x011b /* ESC键值*/
#define ENTER 0x1c0d /* 回车键值*/
int a[15][15]={0},key;
void playtoplay(void);/*人人对战函数*/
void DrawQp(void);/*画棋盘函数*/
void MoveColor(int x,int y);/*恢复原来棋盘状态*/
void QpChange(int x,int y,int z);/*判断棋盘的变化*/
void playWin(int t);/*输出胜利者信息*/
void chongtucolor(int x,int y);
void main()
{
int gd=DETECT,gr;
initgraph(&gd,&gr,""); /*初始化图形系统*/
DrawQp();/*画棋盘*/
playtoplay();/*人人对战*/
getch();
closegraph();/*关闭图形系统*/
}
void chongtucolor(int x,int y)
{
switch(a[(x-46)/26][(y-46)/26])
{
case 0:
break; /*黑色*/
default:
setfillstyle(SOLID_FILL,4);break;
}
}
void DrawQp()/*画棋盘*/
{
int i,j;
setcolor(RED);
rectangle(3,3,635,472);
setbkcolor(BLUE);
setcolor(WHITE);
for(i=46;i=462;i+=26)
fillellipse(x,y,10,10);
SetPlayColor(t);
x-=26;
chongtucolor(x,y);
fillellipse(x,y,10,10);
}
else
if(key==RIGHT&&x449&&y33)/*右方向键*/
{
MoveColor(x,y);
fillellipse(x,y,10,10);
SetPlayColor(t);
x+=26;
chongtucolor(x,y);
fillellipse(x,y,10,10);
}
else
if(key==UP&&y59)/*上方向键*/
{
MoveColor(x,y);
fillellipse(x,y,10,10);
SetPlayColor(t);
y-=26;
chongtucolor(x,y);
fillellipse(x,y,10,10);
}
else
if(key==DOWN&&y449)/*下方向键*/
{
MoveColor(x,y);
fillellipse(x,y,10,10);
SetPlayColor(t);
y+=26;
chongtucolor(x,y);
fillellipse(x,y,10,10);
}
}
t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/
} /*endwhile*/
}
void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/
{
if(y46)/*如果是从起点出发就恢复蓝色*/
setfillstyle(SOLID_FILL,BLUE);
else/*其他情况如果是1就恢复6白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/
switch(a[(x-46)/26][(y-46)/26])
{
case 1:
setfillstyle(SOLID_FILL,15);break; /*白色*/
case 2:
setfillstyle(SOLID_FILL,8);break; /*黑色*/
default:
setfillstyle(SOLID_FILL,BLUE); /*蓝色*/
}
}
void QpChange(int x,int y,int t)/*判断棋盘的变化*/
{
int i,j,k,kk,ii,jj,m,n;
i=(x-46)/26; /*计算数组元素的行下标*/
j=(y-46)/26; /*计算数组元素的列下标*/
/***************** 上下判断*************************/
ii=i;
m=0;n=0;
while(ii0)
{ii--;
if(a[ii][j]==a[j])
m++;
else
break;
}
ii=i;
while(ii14)
{
ii++;
if(a[ii][j]==a[j])
n++;
else
break;
}
if((m+n)=4)
playWin(t);
/****************左右判断***********************/
jj=j;
m=0;n=0;
while(jj0)
{
jj--;
if(a[jj]==a[j])
m++;
else
break;
}
jj=j;
while(jj14)
{
jj++;
if(a[jj]==a[j])
n++;
else
break;
}
if((m+n)=4)
playWin(t);
/***********************斜着判断1**********************/
ii=i;jj=j;
m=0;n=0;
while(ii0&&jj0)
{
ii--;jj--;
if(a[ii][jj]==a[j])
m++;
else
break;
}
ii=0;jj=0;
while(ii14&&jj14)
{
ii++;jj++;
if(a[ii][jj]==a[j])
n++;
else
break;
}
if((m+n)=4)
playWin(t);
/*******************斜着判断2**********************/
ii=i;jj=j;
m=0;n=0;
while(ii0&&jj14)
{
ii--;jj++;
if(a[ii][jj]==a[j])
m++;
else
break;
}
ii=i;jj=j;
while(ii14&&jj0)
{
ii++;jj--;
if(a[ii][jj]==a[j])
n++;
else
break;
}
if((m+n)=4)
playWin(t);
}
void playWin(int t)/*输出最后的胜利者结果*/
{
settextstyle(0,0,4);
setcolor(12);
if(t==1)
outtextxy(100,10,"white win!");
else
outtextxy(100,10,"Back win!");
getch();
exit(0);
}
楼主 2015-12-18 13:54 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知