版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35558510/article/details/53843931
#include<stdio.h>
#include<windows.h>
#define len 15
int status[2][4*len][2*len]={0};//记录落子
int player=0;//游戏者
int x=1,y=1;//光标位置
void gotoxy(int x, int y) //光标移动函数
{
COORD pos;
pos.X=x-1;
pos.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void graphy()//绘制棋盘
{
memset(status,0,sizeof(status));
x=y=1;
player=0;
int i,j;
system("cls");
system("color E1");
printf("┌─");
for(i=0;i<len-2;i++)
printf("┬─");
printf("┐");//
for(i=0;i<len-2;i++)
{
printf("\n");
for(j=0;j<len;j++)
printf("│ ");
printf("\n├") ;
for(j=0;j<len-2;j++)
printf("─┼");
printf("─┤");
}//
printf("\n");
for(i=0;i<len;i++)
printf("│ ");
printf("\n└");//
for(i=0;i<len-2;i++)
printf("─┴");
printf("─┘\npalyer 1");
gotoxy(1,1);//此轮玩家
}
void move()//位置移动
{
graphy();
while(1)
{
switch(getch())
{
case 'a':if(x>0) x-=4;break;
case 's':if(y<2*(len-1)) y+=2;break;
case 'd':if(x<4*(len-1)) x+=4;break;
case 'w':if(y>0) y-=2;break;
case ' ':if(!status[0][x][y]&&!status[1][x][y]) set();
}
gotoxy(x,y);
}
}
void set()//落子
{
if(player)
printf("●");
else printf("○");
status[player][x][y]=1;
gotoxy(x,y);
if(win()) final();
else
{
player=!player;
gotoxy(8,30);
printf("%d",player+1);
}//此时玩家
}
int win(void)//输赢判断
{
int i,j,n=0,dx[9],dy[9],p,q;
for(i=-1;i<=1;i++)
for(j=-1;j<=1;j++)
if(status[player][x+4*i][y+2*j]&&(i||j))
{
dx[n]=4*i;
dy[n]=2*j;
n++;
}//周围九子
for(i=0;i<n;i++)
{
p=q=0;
for(j=1;j<=4;j++)
{
if(status[player][x+j*dx[i]][y+j*dy[i]]) p++;
else break;
}
for(j=1;j<=4;j++)
{
if(status[player][x-j*dx[i]][y-j*dy[i]]) q++;
else break;
}
if(p+q=4) return 1;
else return 0;
}//合五即胜
}
void final()//赢后显示
{
system("color F1");
gotoxy(1,30);
printf("player %d win\n空格键重新开始...",player+1);
if(getch()==' ') move();
else exit(0);
}
int main()
{
system("mode con cols=60 lines=32");
move();
}