增加了一個人機對戰功能
不過機器是瞎逼下的
所以人贏起來很容易
感覺智商收到了侮辱(手動捂臉)
勿噴勿噴
#include <bits/stdc++.h>
#define SIZE 15
#define WIN 5
using namespace std;
char chessboard[SIZE][SIZE];
int heng,zong;
void prch();//打印棋盤
int menu();//遊戲選擇界面
int judge(char a);//判斷黑子白子是否勝利
int main()
{
int p=menu();
if(p==1)//人人對戰模式
{
prch();
int flag=0;
for (int i=0; i<SIZE; i++)//對奇葩內容進行初始化
for (int j=0; j<SIZE; j++)
chessboard[i][j] = ' ';
printf("請輸入黑子(@)的座標,形如:4 4: ");
while(~scanf("%d%d",&zong,&heng))
{
while (heng<1||zong<1||heng>SIZE||zong>SIZE||chessboard[zong-1][heng-1] != ' ')
{
printf("輸入有誤!請重新輸入!\n\n");
if (flag%2==0)
printf("請輸入黑子(@)座標,形如:4 4:");
else
printf("請輸入白子(O)座標,形如:4 4:");
scanf("%d%d",&zong,&heng);
}
if (flag%2==0)
chessboard[zong - 1][heng - 1]='@';
else
chessboard[zong - 1][heng - 1]='O';
prch();
//判斷哪一方獲勝
if(flag%2==0)
{
if(judge('@'))
{
printf("黑棋獲勝!!!!\n");
break;
}
}
else
{
if(judge('O'))
{
printf("白棋獲勝!!!!\n");
break;
}
}
flag++;
if (flag%2 ==0)
printf("請輸入黑子(@)座標,形如:4 4:");
else
printf("請輸入白子(O)座標,形如:4 4:");
}
}
else if(p==2)//人機對戰模式
{
prch();
for (int i=0; i<SIZE; i++)//對奇葩內容進行初始化
for (int j=0; j<SIZE; j++)
chessboard[i][j] = ' ';
printf("請輸入黑子(@)的座標,形如:4 4: ");
while(~scanf("%d%d",&zong,&heng))
{
while (heng<1||zong<1||heng>SIZE||zong>SIZE||chessboard[zong-1][heng-1] != ' ')
{
printf("輸入有誤!請重新輸入!\n\n");
printf("請輸入黑子(@)座標,形如:4 4:");
scanf("%d%d",&zong,&heng);
}
chessboard[zong - 1][heng - 1]='@';
prch();
if(judge('@'))
{
printf("黑棋獲勝!!!!\n");
break;
}
zong=rand()%15+1,heng=rand()%15+1;
chessboard[zong - 1][heng - 1]='O';
prch();
if(judge('O'))
{
printf("白棋獲勝!!!!\n");
break;
}
printf("請輸入黑子(@)座標,形如:4 4:");
}
}
else//退出遊戲
printf("退出遊戲");
return 0;
}
void prch()//打印棋盤
{
printf(" ");
for (int i=1; i<=SIZE; i++)
printf(" %-3d",i);
printf("\n");
printf(" ___________________________________________________________\n");
for (int i=0; i<SIZE; i++)
{
if (i>=0)
printf("%-3d",i+1);
else
printf(" ");
printf("|");
for (int j=0; j<SIZE; j++)
printf(" %-2c|", chessboard[i][j]);
printf("\n ___________________________________________________________\n");
}
printf("\n\n");
}
int menu()//遊戲選擇界面
{
int num;
printf("************ 五子棋小遊戲 ************\n");
printf("****** 1.人人對戰 2.人機對戰 *******\n");
printf("************ 3.退出遊戲 *************\n");
printf("***************************************\n");
printf(" 您的選擇(1或2)是:");
scanf("%d",&num);
return num;
}
int judge(char a)//判斷黑子白子是否勝利
{
for (int i=0; i<SIZE; i++)
{
for (int j=0; j<SIZE; j++)
{
if (chessboard[i][j] == a)
{
int count_a = 1;
//豎直方向
for (int x=i-1,times=0; x>=0; x--,times++)
{
if (chessboard[x][j]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
for (int y=i+1,times=0; y<SIZE; y++,times++)
{
if (chessboard[y][j]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
if (count_a>=WIN)
{
return true;
}
//橫方向
count_a=1;
for (int x=j-1,times=0; x>=0; x--,times++)
{
if (chessboard[i][x]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
for (int y=j+1,times=0; y<SIZE; y++,times++)
{
if (chessboard[i][y]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
if (count_a>=WIN)
{
return true;
}
//上斜下方向
count_a=1;
for (int x=i-1,y=j-1,times=0; i>=0&&j>=0; x--,y--,times++)
{
if (chessboard[x][y]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
for (int x=i+1,y=j+1,times=0; i<SIZE&&j<SIZE; x++,y++,times++)
{
if (chessboard[x][y]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
if (count_a>=WIN)
{
return true;
}
//下斜上方向
count_a=1;
for (int x=i+1,y=j-1,times=0; x<SIZE&&y>=0; x++,y--,times++)
{
if (chessboard[x][y]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
for (int x=i-1,y=j+1,times=0; x>=0&&y<SIZE; x--,y++,times++)
{
if (chessboard[x][y]==a)
{
count_a++;
}
else
break;
if (times>WIN-1)
break;
}
if (count_a>=WIN)
{
return true;
}
}
}
}
return false;
}