参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>
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?'$':'@';
}
}