五子棋 C++ 程序

头文件名称:“标头.h”

#define qipandaxiao 20
int five_chess(int (*p)[qipandaxiao], int x, int y, int type);

主函数文件名称:“源.cpp”

#include<iostream>
using namespace std;
#include"标头.h"
int main()
{
int x, y, a[qipandaxiao][qipandaxiao], type;
cout << "输入1表示黑子,输入2表示白子" << endl;
while (1)
{
cout << "输入行数:"; cin >> x; 
cout << "输入列数:"; cin >> y;
cout << "输入棋子类别"; cin >> type;
if (x < 0 || x>(qipandaxiao-1) || y < 0 || y>(qipandaxiao-1))
{
cout << "请输入正确范围内的行列" << endl; continue;
}
else if (a[x][y]==1||a[x][y]==2)
{
cout << "此行列已经有棋子"; continue;
}
else five_chess(a, x, y, type);
}
system("pause");
}


函数文件名称:“源1.cpp”

#include<iostream>
#include"标头.h"
using namespace std;
int five_chess(int (*p)[qipandaxiao], int x, int y, int type)
{
//列方向判断
*(*(p + x) + y) = type;
if (type==1)
{
int i, j = 0;
i = x;
while (i<=x+4&&i<=(qipandaxiao-1))
{
if (*(*(p + i) + y) != 1 || j == 5) break;
i++; j++;
}
if (j==5&& *(*(p + i) + y)==1) cout << "黑子赢了";
else if ((i - 5) < 0) cout << '\0';
else
{
j = 0;
while (i>=x-4&&i>=0)
{
i--; j++;
if (*(*(p + i) + y) != 1 || j == 5) break;
}
if (j==5&& *(*(p + i) + y) ==1) cout << "黑子赢了";
else cout << '\0';
}
}
if (type == 2)
{
int i, j = 0;
i = x;
while (i <= x + 4 && i <= (qipandaxiao-1))
{
if (*(*(p + i) + y) != 2 || j == 5) break;
i++; j++;
}
if (j == 5 && *(*(p + i) + y)==2) cout << "白子赢了";
else if ((i - 5) < 0) cout << '\0';
else
{
j = 0;
while (i >= x - 4 && i >= 0)
{
i--; j++;
if (*(*(p + i) + y) != 2 || j == 5) break;
}
if (j == 5 && *(*(p + i) + y) == 2) cout << "白子赢了";
else cout << '\0';
}
}
//行方向判断
if (type == 1)
{
int i, j = 0;
i = y;
while (i <= y + 4 && i <= (qipandaxiao-1))
{
if (*(*(p + x) + i) != 1 || j == 5) break;
i++; j++;
}
if (j == 5 && *(*(p + x) + i) == 1) cout << "黑子赢了";
else if ((i - 5) < 0) cout << '\0';
else
{
j = 0;
while (i >= y - 4 && i >= 0)
{
i--; j++;
if (*(*(p + x) +i) != 1 || j == 5) break;
}
if (j == 5 && *(*(p + x) + i) == 1) cout << "黑子赢了";
else cout << '\0';
}
}
if (type == 2)
{
int i, j = 0;
i = y;
while (i <= y + 4 && i <= (qipandaxiao-1))
{
if (*(*(p + x) + i) != 2 || j == 5) break;
i++; j++;
}
if (j == 5 && *(*(p + x) + i) == 2) cout << "白子赢了";
else if ((i - 5) < 0) cout << '\0';
else
{
j = 0;
while (i >= y - 4 && i >= 0)
{
i--; j++;
if (*(*(p + x) + i) != 2 || j == 5) break;
}
if (j == 5 && *(*(p + x) + i) == 2) cout << "白子赢了";
else cout << '\0';
}
}
//135度方向检测
if (type == 1)
{
int i = 0, j = 0, k = 0;
i = x; j = y;
while (i<=x+4&&j<=y+4&&i<=(qipandaxiao-1)&&j<=(qipandaxiao-1))
{
k++;
if (*(*(p + i) + j) != 1 || k == 5) break;
i++; j++;
}
if (k == 5 && *(*(p + i) + j) == 1) cout << "黑子赢了" << endl;
else if (i - 5 < 0 || j - 5 < 0) cout << "\0";
else 
{
k = 0;
while (i>=x-4&&j>=y-4&&i>=0&&j>=0)
{
i--; j--; k++;
if (*(*(p + i) + j) != 1 || k == 5) break;
}
if (k == 5 && *(*(p + i) + j) == 1) cout << "黑子赢了" << endl;
}

}
if (type == 2)
{
int i = 0, j = 0, k = 0;
i = x; j = y;
while (i <= x + 4 && j <= y + 4 && i <= (qipandaxiao-1) && j <= (qipandaxiao-1))
{
k++;
if (*(*(p + i) + j) != 2 || k == 5) break;
i++; j++;
}
if (k == 5 && *(*(p + i) + j) == 2) cout << "白子赢了" << endl;
else if (i - 5 < 0 || j - 5 < 0) cout << "\0";
else
{
k = 0;
while (i >= x - 4 && j >= y - 4 && i >= 0 && j >= 0)
{
i--; j--; k++;
if (*(*(p + i) + j) != 2 || k == 5) break;
}
if (k == 5 && *(*(p + i) + j) == 2) cout << "白子赢了" << endl;
}


}
//45度方向检测
if (type == 1)
{
int i = 0, j = 0, k = 0;
i = x; j = y;
while (i >= x - 4 && j <= y + 4 && i >= 0 && j <= (qipandaxiao - 1))
{
k++;
if (*(*(p + i) + j) != 1 || k == 5) break;
i--; j++;
}
if (k == 5 && *(*(p + i) + j) == 1) cout << "黑子赢了" << endl;
else if (i + 5 > (qipandaxiao - 1) || j - 5 < 0) cout << "\0";
else
{
k = 0;
while (i <= x + 4 && j >= y - 4 && i <= (qipandaxiao - 1) && j >= 0)
{
i++; j--; k++;
if (*(*(p + i) + j) != 1 || k == 5) break;
}
if (k == 5 && *(*(p + i) + j) == 1) cout << "黑子赢了" << endl;
}
}
if (type ==2)
{
int i = 0, j = 0, k = 0;
i = x; j = y;
while (i >= x - 4 && j <= y + 4 && i >= 0 && j <= (qipandaxiao-1))
{
k++;
if (*(*(p + i) + j) != 2 || k == 5) break;
i--; j++;
}
if (k == 5 && *(*(p + i) + j) == 2) cout << "黑子赢了" << endl;
else if (i + 5 >(qipandaxiao-1) || j - 5 < 0) cout << "\0";
else
{
k = 0;
while (i <= x + 4 && j >= y - 4 && i <= (qipandaxiao-1) && j >= 0)
{
i++; j--; k++;
if (*(*(p + i) + j) != 2 || k == 5) break;
}
if (k == 5 && *(*(p + i) + j) == 2) cout << "黑子赢了" << endl;
}


}
return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值