单纯的暴力写法,不含任何搜索算法。。。
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<graphics.h>
char c[20][20];
int X1, Y1, X2, Y2;
using namespace std;
void print()
{
system("cls");
printf(" ");
for (int i = 1; i <= 15; i++) {
if (i == 1)printf(" ");
if (i <= 9)
printf("%d ", i);
else
printf("%d ", i);
}
printf("\n");
for (int i = 1; i <= 15; i++) {
if (i <= 9)
printf("%d ", i);
else
printf("%d ", i);
for (int j = 1; j <= 15; j++) {
printf("%c ", c[i][j]);
}
printf("\n");
}
printf("人先手,电脑后手\n");
printf("请输入棋子的坐标:");
}
void init()
{
memset(c, 'o', sizeof(c));
for (int i = 0; i <= 9; i++)
c[0][i] = c[i][0] = 'z';
}
bool people(int x, int y)
{
if (c[x][y] == 'o') {
c[x][y] = 'w';
print();
return true;
}
else {
printf("该点处有子存在,请重新输入\n");
return false;
}
}
bool check2(int x, int y) {
int flag = -1;
for (int i = y - 4; i <= y; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 3; i <= y + 1; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 2; i <= y + 2; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 1; i <= y + 3; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y; i <= y + 4; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 4; i <= x; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 3; i <= x + 1; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2; i <= x + 2; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 1; i <= x + 3; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x; i <= x + 4; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 4, j = y - 4; i <= x, j <= y; ++i, ++j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 3, j = y - 3; i <= x + 1, j <= y + 1; ++i, ++j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2, j = y - 2; i <= x + 2, j <= y + 2; ++i, ++j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 1, j = y - 1; i <= x + 3, j <= y + 3; ++i, ++j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x, j = y; i <= x + 4, j <= y + 4; ++i, ++j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2, j = y + 2; i <= x + 2, j >= y - 2; ++i, --j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 4, j = y + 4; i <= x, j >= y; ++i, --j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 3, j = y + 3; i <= x + 1, j >= y - 1; ++i, --j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2, j = y + 2; i <= x + 2, j >= y - 2; ++i, --j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 1, j = y + 1; i <= x + 3, j >= y - 3; ++i, --j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x, j = y; i <= x + 4, j >= y - 4; ++i, --j) {
if (c[i][j] == 'b')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
else return false;
}
bool computer(int x1, int y1, int x2, int y2) {
bool ret = false;
if (c[x1][y1] == 'o') {
c[x1][y1] = 'b';
ret = check2(x1, y1);
}
else if (c[x2][y2] == 'o') {
c[x2][y2] = 'b';
ret = check2(x2, y2);
}
return ret;
}
bool check(int x, int y) {
int flag = -1;
for (int i = y - 4; i <= y; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 3; i <= y + 1; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 2; i <= y + 2; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 1; i <= y + 3; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y; i <= y + 4; ++i) {//检查5个子连在一起的情况
if (c[x][i] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 4; i <= x; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 3; i <= x + 1; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2; i <= x + 2; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 1; i <= x + 3; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x; i <= x + 4; ++i) {//检查5个子连在一起的情况
if (c[i][y] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 4, j = y - 4; i <= x, j <= y; ++i, ++j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 3, j = y - 3; i <= x + 1, j <= y + 1; ++i, ++j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2, j = y - 2; i <= x + 2, j <= y + 2; ++i, ++j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 1, j = y - 1; i <= x + 3, j <= y + 3; ++i, ++j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x, j = y; i <= x + 4, j <= y + 4; ++i, ++j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2, j = y + 2; i <= x + 2, j >= y - 2; ++i, --j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 4, j = y + 4; i <= x, j >= y; ++i, --j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 3, j = y + 3; i <= x + 1, j >= y - 1; ++i, --j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 2, j = y + 2; i <= x + 2, j >= y - 2; ++i, --j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x - 1, j = y + 1; i <= x + 3, j >= y - 3; ++i, --j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = x, j = y; i <= x + 4, j >= y - 4; ++i, --j) {
if (c[i][j] == 'w')flag = 5;
else {
flag = -1; break;
}
}
if (flag == 5)return true;
for (int i = y - 1; i <= y + 2; ++i) {//4个子的情况
if (c[x][i] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x; Y1 = y - 2; X2 = x; Y2 = y + 3;
return false;
}
for (int i = y; i <= y + 3; ++i) {
if (c[x][i] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x; Y1 = y - 1; X2 = x; Y2 = y + 4;
return false;
}
for (int i = y - 2; i <= y + 1; ++i) {
if (c[x][i] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x; Y1 = y - 3; X2 = x; Y2 = y + 2;
return false;
}
for (int i = y - 3; i <= y; ++i) {
if (c[x][i] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x; Y1 = y - 4; X2 = x; Y2 = y + 1;
return false;
}
for (int i = x - 3; i <= x; ++i) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 4; Y1 = y; X2 = x + 1; Y2 = y;
return false;
}
for (int i = x - 2; i <= x + 1; ++i) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 3; Y1 = y; X2 = x + 2; Y2 = y;
return false;
}
for (int i = x - 1; i <= x + 2; ++i) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 2; Y1 = y; X2 = x + 3; Y2 = y;
return false;
}
for (int i = x; i <= x + 3; ++i) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 1; Y1 = y; X2 = x + 4; Y2 = y;
return false;
}
for (int i = x - 3, j = y - 3; i <= x, j <= y; i++, j++) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 4; Y1 = y - 4; X2 = x + 1; Y2 = y + 1;
return false;
}
for (int i = x - 2, j = y - 2; i <= x + 1, j <= y + 1; i++, j++) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 3; Y1 = y - 3; X2 = x + 2; Y2 = y + 2;
return false;
}
for (int i = x - 1, j = y - 1; i <= x + 2, j <= y + 2; i++, j++) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 2; Y1 = y - 2; X2 = x + 3; Y2 = y + 3;
return false;
}
for (int i = x, j = y; i <= x + 3, j <= y + 3; i++, j++) {
if (c[i][y] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 1; Y1 = y - 1; X2 = x + 4; Y2 = y + 4;
return false;
}
for (int i = x - 3, j = y + 3; i <= x, j >= y; i++, j--) {
if (c[i][j] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 4; Y1 = y + 4; X2 = x + 1; Y2 = y - 1;
return false;
}
for (int i = x - 2, j = y + 2; i <= x + 1, j >= y - 1; i++, j--) {
if (c[i][j] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 3; Y1 = y + 3; X2 = x + 2; Y2 = y - 2;
return false;
}
for (int i = x - 1, j = y + 1; i <= x + 2, j >= y - 2; i++, j--) {
if (c[i][j] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 2; Y1 = y + 2; X2 = x + 3; Y2 = y - 3;
return false;
}
for (int i = x, j = y; i <= x + 3, j >= y - 3; i++, j--) {
if (c[i][j] == 'w')flag = 4;
else {
flag = -1; break;
}
}
if (flag == 4) {
X1 = x - 1; Y1 = y + 1; X2 = x + 4; Y2 = y - 4;
return false;
}
if (c[x][y] == 'w'&&c[x][y + 1] == 'w'&&c[x][y + 3] == 'w') {//** *的情况
flag = 3;
X1 = x; Y1 = y - 1; X2 = x; Y2 = y + 2;
return false;
}
if (c[x][y] == 'w'&&c[x][y - 1] == 'w'&&c[x][y + 2] == 'w') {
flag = 3;
X1 = x; Y1 = y - 2; X2 = x; Y2 = y + 1;
return false;
}
if (c[x][y] == 'w'&&c[x][y - 2] == 'w'&&c[x][y - 3] == 'w') {
flag = 3;
X1 = x; Y1 = y - 1; X2 = x; Y2 = y + 1;
return false;
}
if (c[x][y] == 'w'&&c[x][y + 2] == 'w'&&c[x][y + 3] == 'w') {//* **的情况
flag = 3;
X1 = x; Y1 = y + 1; X2 = x; Y2 = y - 1;
return false;
}
if (c[x][y] == 'w'&&c[x][y - 2] == 'w'&&c[x][y + 1] == 'w') {//* **的情况
flag = 3;
X1 = x; Y1 = y - 1; X2 = x; Y2 = y + 2;
return false;
}
if (c[x][y] == 'w'&&c[x][y - 1] == 'w'&&c[x][y - 3] == 'w') {//* **的情况
flag = 3;
X1 = x; Y1 = y - 2; X2 = x; Y2 = y + 1;
return false;
}
if (c[x][y] == 'w'&&c[x + 1][y + 1] == 'w'&&c[x + 3][y + 3] == 'w') {//*
flag = 3; //*
X1 = x+2; Y1 = y + 2; X2 = x-1; Y2 = y - 1;
return false; //*的情况
}
if (c[x][y] == 'w'&&c[x - 1][y - 1] == 'w'&&c[x + 2][y + 2] == 'w') {
flag = 3;
X1 = x + 1; Y1 = y + 1; X2 = x + 3; Y2 = y + 3;
return false;
}
if (c[x][y] == 'w'&&c[x - 2][y + 2] == 'w'&&c[x - 3][y + 3] == 'w') {
flag = 3;
X1 = x - 1; Y1 = y + 1; X2 = x + 1; Y2 = y - 1;
return false;
}
if (c[x][y] == 'w'&&c[x - 1][y + 1] == 'w'&&c[x + 2][y - 2] == 'w') {
flag = 3;
X1 = x + 1; Y1 = y - 1; X2 = x + 3; Y2 = y - 3;
return false;
}
if (c[x][y] == 'w'&&c[x - 2][y + 2] == 'w'&&c[x - 3][y + 3] == 'w') {//*
flag = 3; //*
X1 = x - 1; Y1 = y + 1; X2 = x + 1; Y2 = y - 1;
return false; //*
}
if (c[x][y] == 'w'&&c[x][y - 1] == 'w'&&c[x][y - 2] == 'w') {//3个子的情况
flag = 3;
X1 = x; Y1 = y - 3; X2 = x; Y2 = y + 1;
return false;
}
if (c[x][y + 1] == 'w'&&c[x][y] == 'w'&&c[x][y - 1] == 'w') {
flag = 3;
X1 = x; Y1 = y - 2; X2 = x; Y2 = y + 2;
return false;
}
if (c[x][y + 2] == 'w'&&c[x][y + 1] == 'w'&&c[x][y] == 'w') {
flag = 3;
X1 = x; Y1 = y - 1; X2 = x; Y2 = y + 3;
return false;
}
if (c[x - 2][y - 2] == 'w'&&c[x - 1][y - 1] == 'w'&&c[x][y] == 'w') {
flag = 3;
X1 = x - 3; Y1 = y - 3; X2 = x + 1; Y2 = y + 1;
return false;
}
if (c[x - 1][y - 1] == 'w'&&c[x][y] == 'w'&&c[x + 1][y + 1] == 'w') {
flag = 3;
X1 = x - 2; Y1 = y - 2; X2 = x + 2; Y2 = y + 2;
return false;
}
if (c[x][y] == 'w'&&c[x + 1][y + 1] == 'w'&&c[x + 2][y + 2] == 'w') {
flag = 3;
X1 = x - 1; Y1 = y - 1; X2 = x + 3; Y2 = y + 3;
return false;
}
if (c[x - 2][y + 2] == 'w'&&c[x - 1][y + 1] == 'w'&&c[x][y] == 'w') {
flag = 3;
X1 = x - 3; Y1 = y + 3; X2 = x + 1; Y2 = y - 1;
return false;
}
if (c[x - 1][y + 1] == 'w'&&c[x][y] == 'w'&&c[x + 1][y - 1] == 'w') {
flag = 3;
X1 = x - 2; Y1 = y + 2; X2 = x + 2; Y2 = y - 2;
return false;
}
if (c[x][y] == 'w'&&c[x + 1][y - 1] == 'w'&&c[x + 2][y - 2] == 'w') {
flag = 3;
X1 = x - 1; Y1 = y + 1; X2 = x + 3; Y2 = y - 3;
return false;
}
if (flag == -1) {
if (c[x][y] == 'w'&&c[x - 1][y] == 'w') {//两个子的情况
flag = 2;
X1 = x - 2; Y1 = y; X2 = x + 1; Y2 = y;
return false;
}
if (c[x][y] == 'w'&&c[x + 1][y] == 'w') {
flag = 2;
X1 = x - 1; Y1 = y; X2 = x + 2; Y2 = y;
return false;
}
if (c[x][y] == 'w'&&c[x + 1][y + 1] == 'w') {
flag = 2;
X1 = x - 1; Y1 = y - 1; X2 = x + 2; Y2 = y + 2;
return false;
}
if (c[x][y] == 'w'&&c[x - 1][y - 1] == 'w') {
flag = 2;
X1 = x - 2; Y1 = y - 2; X2 = x + 1; Y2 = y + 1;
return false;
}
if (c[x][y] == 'w'&&c[x][y - 1] == 'w') {
flag = 2;
X1 = x; Y1 = y; X2 = x; Y2 = y - 2;
return false;
}
if (c[x][y] == 'w'&&c[x][y + 1] == 'w') {
flag = 2;
X1 = x; Y1 = y; X2 = x; Y2 = y + 2;
return false;
}
for (int i = x - 1; i <= x + 1; i++) {//一个子的情况
for (int j = y - 1; j <= y + 1; j++) {
if (c[i][j] == 'o') {
X1 = i; Y1 = j; X2 = x; Y2 = y;
flag = 1;
return false;
}
}
}
}
}
int main()
{
init();
print();
while (1) {
int x, y;
scanf("%d %d", &x, &y);
if (people(x, y) == false)continue;
if (check(x, y)) {//check检验人是否胜利
printf("人胜利!\n");
break;
}
else {//模拟电脑走的步骤,然后check2
bool flag = computer(X1, Y1, X2, Y2);
if (flag == true) {
printf("电脑胜利!\n");
print();
break;
}
else {
print();
}
}
}
return 0;
}