这种井字棋,我是考古发现的,编写时前后隔了几天,思路有些混乱,对于凌乱的代码请不要介意
规则:
1.↑↓←→控制移动,【空格】放下棋子
2.棋盘为3 * 3的3 * 3的九宫格的九宫格(好绕啊)
3.当小型九宫格中有三颗你的棋子连成一线,那么这个小的九宫格就属于你的棋子格子,当大型九宫格中的格子连成一线时,你就赢了
4.你所可以下的格子与棋盘的位置关系,是相对应于对手所下的棋子与他所下的格子的关系,当你所可以下的格子已被占据时,你可以在整个棋盘里未被占据或未下棋子的地方下棋
视频教学【免费】
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#include <ctime>
int a[4][4][4][4];
int winer[4][4];
int x1, yy1, x2, y2;
int now;
void print(int i, int j, int k, int l) {
if(i == x1 && j == yy1 && k == x2 && l == y2) printf("+");
else if(winer[i][j] == 1) printf("①");
else if(winer[i][j] == 2) printf("②");
else if(a[i][j][k][l] == 1) printf("●");
else if(a[i][j][k][l] == 2) printf("○");
else printf("㊣");
}
void put_map() {
printf("┏━━┳━━┳━━┓┏━━┳━━┳━━┓┏━━┳━━┳━━┓\n┃");
print(1, 1, 1, 1);
printf("┃");
print(1, 1, 1, 2);
printf("┃");
print(1, 1, 1, 3);
printf("┃┃");
print(1, 2, 1, 1);
printf("┃");
print(1, 2, 1, 2);
printf("┃");
print(1, 2, 1, 3);
printf("┃┃");
print(1, 3, 1, 1);
printf("┃");
print(1, 3, 1, 2);
printf("┃");
print(1, 3, 1, 3);
printf("┃\n");
printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
print(1, 1, 2, 1);
printf("┃");
print(1, 1, 2, 2);
printf("┃");
print(1, 1, 2, 3);
printf("┃┃");
print(1, 2, 2, 1);
printf("┃");
print(1, 2, 2, 2);
printf("┃");
print(1, 2, 2, 3);
printf("┃┃");
print(1, 3, 2, 1);
printf("┃");
print(1, 3, 2, 2);
printf("┃");
print(1, 3, 2, 3);
printf("┃\n");
printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
print(1, 1, 3, 1);
printf("┃");
print(1, 1, 3, 2);
printf("┃");
print(1, 1, 3, 3);
printf("┃┃");
print(1, 2, 3, 1);
printf("┃");
print(1, 2, 3, 2);
printf("┃");
print(1, 2, 3, 3);
printf("┃┃");
print(1, 3, 3, 1);
printf("┃");
print(1, 3, 3, 2);
printf("┃");
print(1, 3, 3, 3);
printf("┃\n");
printf("┗━━┻━━┻━━┛┗━━┻━━┻━━┛┗━━┻━━┻━━┛\n");
printf("┏━━┳━━┳━━┓┏━━┳━━┳━━┓┏━━┳━━┳━━┓\n┃");
print(2, 1, 1, 1);
printf("┃");
print(2, 1, 1, 2);
printf("┃");
print(2, 1, 1, 3);
printf("┃┃");
print(2, 2, 1, 1);
printf("┃");
print(2, 2, 1, 2);
printf("┃");
print(2, 2, 1, 3);
printf("┃┃");
print(2, 3, 1, 1);
printf("┃");
print(2, 3, 1, 2);
printf("┃");
print(2, 3, 1, 3);
printf("┃\n");
printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
print(2, 1, 2, 1);
printf("┃");
print(2, 1, 2, 2);
printf("┃");
print(2, 1, 2, 3);
printf("┃┃");
print(2, 2, 2, 1);
printf("┃");
print(2, 2, 2, 2);
printf("┃");
print(2, 2, 2, 3);
printf("┃┃");
print(2, 3, 2, 1);
printf("┃");
print(2, 3, 2, 2);
printf("┃");
print(2, 3, 2, 3);
printf("┃");
puts("");
printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
print(2, 1, 3, 1);
printf("┃");
print(2, 1, 3, 2);
printf("┃");
print(2, 1, 3, 3);
printf("┃┃");
print(2, 2, 3, 1);
printf("┃");
print(2, 2, 3, 2);
printf("┃");
print(2, 2, 3, 3);
printf("┃┃");
print(2, 3, 3, 1);
printf("┃");
print(2, 3, 3, 2);
printf("┃");
print(2, 3, 3, 3);
printf("┃");
puts("");
printf("┗━━┻━━┻━━┛┗━━┻━━┻━━┛┗━━┻━━┻━━┛\n");
printf("┏━━┳━━┳━━┓┏━━┳━━┳━━┓┏━━┳━━┳━━┓\n┃");
print(3, 1, 1, 1);
printf("┃");
print(3, 1, 1, 2);
printf("┃");
print(3, 1, 1, 3);
printf("┃┃");
print(3, 2, 1, 1);
printf("┃");
print(3, 2, 1, 2);
printf("┃");
print(3, 2, 1, 3);
printf("┃┃");
print(3, 3, 1, 1);
printf("┃");
print(3, 3, 1, 2);
printf("┃");
print(3, 3, 1, 3);
printf("┃");
puts("");
printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
print(3, 1, 2, 1);
printf("┃");
print(3, 1, 2, 2);
printf("┃");
print(3, 1, 2, 3);
printf("┃┃");
print(3, 2, 2, 1);
printf("┃");
print(3, 2, 2, 2);
printf("┃");
print(3, 2, 2, 3);
printf("┃┃");
print(3, 3, 2, 1);
printf("┃");
print(3, 3, 2, 2);
printf("┃");
print(3, 3, 2, 3);
printf("┃");
puts("");
printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
print(3, 1, 3, 1);
printf("┃");
print(3, 1, 3, 2);
printf("┃");
print(3, 1, 3, 3);
printf("┃┃");
print(3, 2, 3, 1);
printf("┃");
print(3, 2, 3, 2);
printf("┃");
print(3, 2, 3, 3);
printf("┃┃");
print(3, 3, 3, 1);
printf("┃");
print(3, 3, 3, 2);
printf("┃");
print(3, 3, 3, 3);
printf("┃");
puts("");
printf("┗━━┻━━┻━━┛┗━━┻━━┻━━┛┗━━┻━━┻━━┛\n");
}
bool p(int k) {
int temp1 = 0, temp2 = 0;
if(x2 == y2 || x2 + y2 == 4) {
if(a[x1][yy1][1][1] == k && a[x1][yy1][2][2] == k && a[x1][yy1][3][3] == k) {
return true;
}
if(a[x1][yy1][1][3] == k && a[x1][yy1][2][2] == k && a[x1][yy1][3][1] == k) {
return true;
}
}
for(int i = 1; i <= 3; i ++) {
if(a[x1][yy1][x2][i] == k) ++ temp1;
if(a[x1][yy1][i][y2] == k) ++ temp2;
}
return temp1 == 3 || temp2 == 3;
}
bool bp(int k) {
int temp1 = 0, temp2 = 0;
if(x1 == yy1 || x1 + yy1 == 4) {
if(winer[1][1] == k && winer[2][2] == k && winer[3][3] == k) {
return true;
}
if(winer[1][3] == k && winer[2][2] == k && winer[3][1] == k) {
return true;
}
}
for(int i = 1; i <= 3; i ++) {
if(winer[x1][i] == k) ++ temp1;
if(winer[i][yy1] == k) ++ temp2;
}
return temp1 == 3 || temp2 == 3;
}
void run() {
x1 = yy1 = x2 = y2 = 2;
while(true) {
now %= 2;
now += 1;
system("cls");
put_map();
printf("玩家%d", now);
int temp1 = x1, temp2 = yy1;
while(true) {
if(x2 == 0) {
x1 --;
x2 = 3;
system("cls");
put_map();
printf("玩家%d", now);
}
if(x2 == 4) {
x1 ++;
x2 = 1;
system("cls");
put_map();
printf("玩家%d", now);
}
if(y2 == 0) {
yy1 --;
y2 = 3;
system("cls");
put_map();
printf("玩家%d", now);
}
if(y2 == 4) {
yy1 ++;
y2 = 1;
system("cls");
put_map();
printf("玩家%d", now);
}
if(kbhit()) {
char ch = getch();
if(ch == -32) {
ch = getch();
if(winer[temp1][temp2] == 0) {
if(ch == 72 && x2 > 1) {
-- x2;
system("cls");
put_map();
printf("玩家%d", now);
}
else if(ch == 80 && x2 < 3) {
++ x2;
system("cls");
put_map();
printf("玩家%d", now);
}
else if(ch == 75 && y2 > 1) {
-- y2;
system("cls");
put_map();
printf("玩家%d", now);
}
else if(ch == 77 && y2 < 3) {
++ y2;
system("cls");
put_map();
printf("玩家%d", now);
}
}
else {
if(ch == 72 && (x1 != 1 || x2 != 1)) {
-- x2;
system("cls");
put_map();
printf("玩家%d", now);
}
else if(ch == 80 && (x1 != 3 || x2 != 3)) {
++ x2;
system("cls");
put_map();
printf("玩家%d", now);
}
else if(ch == 75 && (yy1 != 1 || y2 != 1)) {
-- y2;
system("cls");
put_map();
printf("玩家%d", now);
}
else if(ch == 77 && (yy1 != 3 || y2 != 3)) {
++ y2;
system("cls");
put_map();
printf("玩家%d", now);
}
}
}
else if(ch == ' ' && a[x1][yy1][x2][y2] == 0 && winer[x1][yy1] == 0) {
system("cls");
put_map();
printf("玩家%d", now);
a[x1][yy1][x2][y2] = now;
if(p(now)) {
winer[x1][yy1] = now;
if(bp(now)) {
system("cls");
printf("玩家%d赢了", now);
return;
}
}
x1 = x2;
yy1 = y2;
x2 = 2;
y2 = 2;
break;
}
}
}
}
}
int main() {
run();
return 0;
}