参考代码:
#include
#include
#include
#include
//棋盘数组
char board[15][15];
//棋子的坐标
char key_x=7,key_y=7;
//棋子角色 黑‘@’ 白‘$’
char role ='@';
//初始化棋盘
void init_board(void)
{
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
board[i][j]='*';
}
}
}
//显示棋盘
void show_board(void)
{
system("clear");
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
printf(" %c",board[i][j]);
}
printf("n");
}
}
void get_key(void)
{
printf("请%c落子",role);
for(;;)
{
printf("33[%hhd;%hhdH",key_x+1,(key_y+1)*2);
switch(getch())
{
case 183: key_x>0 && key_x--;break;
case 184: key_x<14 && key_x++;break;
case 186: key_y>0 && key_y--;break;
case 185: key_y<14 && key_y++;break;
case 10: if('*'==board[key_x][key_y])
{
board[key_x][key_y]=role;
return;
}
}
}
}
//检查是否五子连珠
bool is_win(void)
{
//左上右下
int cnt=0;
//左上
for(int x=key_x-1,y=key_y-1;x>=0 && y>=0;x--,y--)
{
if(board[x][y]==role)
{
cnt++;
}
else
{
break;
}
}
//右下
for(int x=key_x+1,y=key_y+1;x<15 && y<15;x++,y++)
{
if(board[x][y]==role)
{
cnt++;
}
else
{
break;
}
}
if(4<=cnt)
{
return true;
}
cnt=0;
//左右
for(int x=key_x-1;x>=0;x--)
{
if(board[x][key_y]==role)
{
cnt++;
}
else
{
break;
}
}
for(int x=key_x+1;x<15;x++)
{
if(board[x][key_y]==role)
{
cnt++;
}
else
{
break;
}
}
if(4<=cnt)
{
return true;
}
cnt=0;
//上下
for(int y=key_y-1;y>=0;y--)
{
if(board[key_x][y]==role)
{
cnt++;
}
else
{
break;
}
}
for(int y=key_y+1;y<15;y++)
{
if(board[key_x][y]==role)
{
cnt++;
}
else
{
break;
}
}
if(4<=cnt)
{
return true;
}
cnt=0;
//左下右上
for(int x=key_x+1,y=key_y-1;x<15 && y>=0;x++,y--)
{
if(board[x][y]==role)
{
cnt++;
}
else
{
break;
}
}
for(int x=key_x-1,y=key_y+1;x>=0 && y<15;x--,y++)
{
if(board[x][y]==role)
{
cnt++;
}
else
{
break;
}
}
if(4<=cnt)
{
return true;
}
return false;
}
int main(int argc,const char* argv[])
{
init_board();
for(;;)
{
show_board();
get_key();
if(is_win())
{
printf("33[%hhd;%hhdH",17,1);
show_board;
printf("%c赢了n",role);
return 0;
}
//交换函数
role='@'==role?'$':'@';
}
}
暑期编程PK赛
得CSDN机械键盘等精美礼品!