「游戏」c++井字棋

这种井字棋,我是考古发现的,编写时前后隔了几天,思路有些混乱,对于凌乱的代码请不要介意

规则:
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;
} 

猜你喜欢

转载自blog.csdn.net/yu_______chen/article/details/107289083