该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include "string.h"
#include
#include
#include
int seat[20][20];
int usr;
struct GotoXy_xy
{
int GotoXy_temp[100][3];
}GotoXy_xy;
void HideCursor(int n) /*隐藏光标*/
{
CONSOLE_CURSOR_INFO cursor_info={1,n};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void GotoXy(int x,int y) /*将光标移到(x,y)*/
{
HANDLE hout;
COORD coord;
coord.X=x;
coord.Y=y;
hout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,coord);
}
void init()
{
int i,j;
usr=0;
GotoXy(0,0);
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
seat[i][j]=0;
}
printf("%2c",' ');
for(i=0;i<20;i++)
printf("%3.2d",i);
printf("\n");
for(i=0;i<20;i++)
{
printf("%3.2d",i);
for(j=0;j<20;j++)
printf("· ");
printf("\n");
}
GotoXy(68,7);
printf("欢迎使用!");
GotoXy(66,9);
printf("五子棋小游戏");
GotoXy(68,11);
printf("by 熊清熹");
GotoXy(68,13);
printf("2015.3.4");
}
int osheng()
{
int i,j;//判断横着的5个是否都相等
for(i=0;i<20;i++)
{
for(j=0;j<16;j++)
if(seat[i][j]==1&&seat[i][j+1]==1&&seat[i][j+2]==1&&seat[i][j+3]==1&&seat[i][j+4]==1)
return 1;
}
for(j=0;j<20;j++)//判断竖着的5个是否都相等
{
for(i=0;i<16;i++)
if(seat[i][j]==1&&seat[i+1][j]==1&&seat[i+2][j]==1&&seat[i+3][j]==1&&seat[i+4][j]==1)
return 1;
}
for(i=0;i<16;i++)//判断左斜5个
{
for(j=0;j<16;j++)
if(seat[i][j]==1&&seat[i+1][j+1]==1&&seat[i+2][j+2]==1&&seat[i+3][j+3]==1&&seat[i+4][j+4]==1)
return 1;
}
for(i=0;i<16;i++)//右斜5个
{
for(j=19;j>3;j--)
if(seat[i][j]==1&&seat[i+1][j-1]==1&&seat[i+2][j-2]==1&&seat[i+3][j-3]==1&&seat[i+4][j-4]==1)
return 1;
}
return 0;
}
int xsheng()
{
int i,j;//判断横着的5个是否都相等
for(i=0;i<20;i++)
{
for(j=0;j<16;j++)
if(seat[i][j]==2&&seat[i][j+1]==2&&seat[i][j+2]==2&&seat[i][j+3]==2&&seat[i][j+4]==2)
return 1;
}
for(j=0;j<20;j++)//判断竖着的5个是否都相等
{
for(i=0;i<16;i++)
if(seat[i][j]==2&&seat[i+1][j]==2&&seat[i+2][j]==2&&seat[i+3][j]==2&&seat[i+4][j]==2)
return 1;
}
for(i=0;i<16;i++)//判断左斜5个
{
for(j=0;j<16;j++)
if(seat[i][j]==2&&seat[i+1][j+1]==2&&seat[i+2][j+2]==2&&seat[i+3][j+3]==2&&seat[i+4][j+4]==2)
return 1;
}
for(i=0;i<16;i++)//右斜5个
{
for(j=19;j>3;j--)
if(seat[i][j]==2&&seat[i+1][j-1]==2&&seat[i+2][j-2]==2&&seat[i+3][j-3]==2&&seat[i+4][j-4]==2)
return 1;
}
return 0;
}
int he()
{
int i,j;
for( i=0;i<20;i++)
for( j=0;j<20;j++)
{
if(seat[i][j]==0)//当棋盘全部子都不是0时才能return 1,即棋盘已下满
return 0;
}
return 1;
}
void clear()
{
int i,j;
GotoXy(0,0);
for(i=0;i<61;i++)
{
for(j=0;j<20;j++)
printf(" ");
}
GotoXy(28,22);
printf(" ");
GotoXy(30,23);
printf(" ");
GotoXy(25,24);
printf(" ");
}
void main()
{
int M_x,M_y,P_x,P_y;
INPUT_RECORD inRec;
DWORD res;
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄
init();
HideCursor(0);
while(1)
{
if(usr==0)
{
GotoXy(28,22);
printf("当前下棋方:黑方");
}
else if(usr==1)
{
GotoXy(28,22);
printf("当前下棋方:白方");
}
else if(usr==2)
{
GotoXy(28,22);
printf("GAME OVER! ");
GotoXy(25,24);
printf("再来一局 退出");
}
ReadConsoleInput(hInput, &inRec, 1, &res);
if(inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键
{
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),inRec.Event.MouseEvent.dwMousePosition);
M_x=inRec.Event.MouseEvent.dwMousePosition.X;
M_y=inRec.Event.MouseEvent.dwMousePosition.Y;
if(M_x>=3&&M_x<=60&&M_y>=1&&M_y<=20)
{
if(((M_x-3)%3)==0)
{
P_x=(M_x-3)/3;
P_y=M_y-1;
if(usr==0)
{
if(!seat[P_x][P_y])
{
usr=1;
printf("●");
seat[P_x][P_y]=1;
if(osheng())
{
GotoXy(30,23);
printf("黑棋胜!");
usr=2;
}
}
}
else if(usr==1)
{
if(!seat[P_x][P_y])
{
usr=0;
printf("○");
seat[P_x][P_y]=2;
if(xsheng())
{
GotoXy(30,23);
printf("白棋胜!");
usr=2;
}
}
}
if(he())
printf("平局!");
}
}
else if(M_x>=25&&M_x<=31&&M_y==24&&usr==2)
{
clear();
init();
}
else if(M_x>=37&&M_x<=39&&M_y==24&&usr==2)
{
GotoXy(25,9);
exit(1);
}
}
}
}