/*
Name: 黑客小C
Date: 06/06/22 21:56
*/
//版本:1.17
#include<bits/stdc++.h>
#include <windows.h>
#include<string>
using namespace std;
int qp[4][4];
void open() {
std::system("color E4");
cout<<" 井字棋"<<endl;
Sleep(2000);
system("cls");
std::system("color E4");
cout<<"by:黑客小C"<<endl;
Sleep(2000);
system("cls");
std::system("color E4");
cout<<"版本:1.17"<<endl;
cout<<"更新内容:提升运行效果,修复部分已知bug。";
Sleep(2000);
system("cls");
std::system("color E4");
for(int i=0; i<10; i++) {
std::system("color E4");
cout<<"加载中";
Sleep(100);
cout<<".";
Sleep(100);
cout<<".";
Sleep(100);
cout<<".";
Sleep(100);
system("cls");
Sleep(100);
}
}
void first() {
for(int i=1; i<=3; i++) {
for(int j=1; j<=3; j++) {
qp[i][j]=0;
}
}
}
void out() {
for(int i=1; i<=3; i++) {
for(int j=1; j<=3; j++) {
cout<<qp[i][j]<<" ";
}
cout<<endl;
}
}
bool win() {
for(int i=1; i<=3; i++) {
if(qp[i][1]==1&&qp[i][2]==1&&qp[i][3]==1) {
return true;
}
}
for(int j=1; j<=3; j++) {
if(qp[1][j]==1&&qp[2][j]==1&&qp[3][j]==1) {
return true;
}
}
if(qp[1][1]==1&&qp[2][2]==1&&qp[3][3]==1) {
return true;
}
if(qp[1][3]==1&&qp[2][2]==1&&qp[3][1]==1) {
return true;
}
return false;
}
bool lost() {
for(int i=1; i<=3; i++) {
if(qp[i][1]==2&&qp[i][2]==2&&qp[i][3]==2) {
return true;
}
}
for(int j=1; j<=3; j++) {
if(qp[1][j]==2&&qp[2][j]==2&&qp[3][j]==2) {
return true;
}
}
if(qp[1][1]==2&&qp[2][2]==2&&qp[3][3]==2) {
return true;
}
if(qp[1][3]==2&&qp[2][2]==2&&qp[3][1]==2) {
return true;
}
return false;
}
int AI() {
if(qp[1][1]==1&&qp[2][1]==1&&qp[3][1]==0) {
qp[3][1]=2;
return 0;
}
if(qp[1][2]==1&&qp[2][2]==1&&qp[3][2]==0) {
qp[3][2]=2;
return 0;
}
if(qp[1][3]==1&&qp[2][3]==1&&qp[3][3]==0) {
qp[3][3]=2;
return 0;
}
//
if(qp[3][1]==1&&qp[2][1]==1&&qp[1][1]==0) {
qp[1][1]=2;
return 0;
}
if(qp[2][2]==1&&qp[3][2]==1&&qp[1][2]==0) {
qp[1][2]=2;
return 0;
}
if(qp[2][3]==1&&qp[3][3]==1&&qp[1][3]==0) {
qp[1][3]=2;
return 0;
}
//
if(qp[1][1]==1&&qp[3][1]==1&&qp[2][1]==0) {
qp[2][1]=2;
return 0;
}
if(qp[3][2]==1&&qp[1][2]==1&&qp[2][2]==0) {
qp[2][2]=2;
return 0;
}
if(qp[3][3]==1&&qp[1][3]==1&&qp[2][3]==0) {
qp[2][3]=2;
return 0;
}
//
if(qp[1][1]==1&&qp[1][2]==1&&qp[1][3]==0) {
qp[1][3]=2;
return 0;
}
if(qp[2][1]==1&&qp[2][2]==1&&qp[2][3]==0) {
qp[2][3]=2;
return 0;
}
if(qp[3][1]==1&&qp[3][2]==1&&qp[3][2]==0) {
qp[3][3]=2;
return 0;
}
//
if(qp[1][3]==1&&qp[1][2]==1&&qp[1][1]==0) {
qp[1][1]=2;
return 0;
}
if(qp[2][3]==1&&qp[2][2]==1&&qp[2][3]==0) {
qp[2][3]=2;
return 0;
}
if(qp[3][3]==1&&qp[3][2]==1&&qp[3][1]==0) {
qp[3][1]=2;
return 0;
}
//
if(qp[1][1]==1&&qp[1][3]==1&&qp[1][2]==0) {
qp[1][2]=2;
return 0;
}
if(qp[2][1]==1&&qp[2][3]==1&&qp[2][2]==0) {
qp[2][2]=2;
return 0;
}
if(qp[3][1]==1&&qp[3][3]==1&&qp[3][2]==0) {
qp[3][2]=2;
return 0;
}
//
if(qp[1][1]==1&&qp[2][2]==1&&qp[3][3]==0) {
qp[3][3]=2;
return 0;
}
if(qp[1][1]==1&&qp[2][2]==0&&qp[3][3]==1) {
qp[2][2]=2;
return 0;
}
if(qp[1][1]==0&&qp[2][2]==1&&qp[3][3]==1) {
qp[1][1]=2;
return 0;
}
//
if(qp[1][3]==1&&qp[2][2]==1&&qp[3][1]==0) {
qp[3][1]=2;
return 0;
}
if(qp[1][3]==1&&qp[2][2]==0&&qp[3][1]==1) {
qp[2][2]=2;
return 0;
}
if(qp[1][3]==1&&qp[2][3]==1&&qp[3][1]==1) {
qp[1][3]=2;
return 0;
}
//
for(int i=1; i<=3; i++) {
for(int j=1; j<=3; j++) {
if(qp[i][j]==0) {
qp[i][j]=2;
return 0;
}
}
}
}
bool nwl() {
if(win()||lost()) {
return true;
}
if(!win()||!lost()) {
for(int i=1; i<=3; i++) {
for(int j=1; j<=3; j++) {
if(qp[i][j]==0) {
return true;
}
}
}
}
return false;
}
int AI_2() {
for(int i=1; i<=3; i++) {
for(int j=1; j<=3; j++) {
if(qp[i][j]==0) {
qp[i][j]=2;
return 0;
}
}
}
}
int main() {
std::system("color E4");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
open();
int x,y;
char c[101];
char h;
cout<<"为自己起个名字吧:"<<endl;
gets(c);
cout<<"你好,";
puts(c);
cout<<"井字棋"<<endl;
cout<<"3字连成横竖斜线胜,1先2后。左上角为0,0,右下角为3,3。"<<endl;
cout<<"你可以输入1个坐标,棋子会下在那,如果犯规,这轮无法走棋。"<<endl;
cout<<"输入e简单模式,d困难模式。"<<endl;
cin>>h;
Sleep(1000);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
if(h=='d') {
std::system("color E4");
do {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
system("cls");
std::system("color E4");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
out();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
if(lost()) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"你输了!"<<endl;
first();
return 0;
}
cout<<"轮到你";
cin>>x>>y;
if(qp[x][y]==0)
qp[x][y]=1;
else {
cout<<"犯规罚停一轮!"<<endl;
Sleep(1500);
}
system("cls");
std::system("color E4");
out();
if(win()) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"你赢了!"<<endl;
first();
return 0;
}
cout<<"轮到玩家91"<<endl;
AI();
} while(nwl());
out();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"和棋!"<<endl;
first();
return 0;
} else if(h=='e') {
std::system("color E4");
do {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
system("cls");
std::system("color E4");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
out();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
if(lost()) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"你输了!"<<endl;
first();
return 0;
}
cout<<"轮到你";
cin>>x>>y;
if(qp[x][y]==0)
qp[x][y]=1;
else {
cout<<"犯规罚停一轮!"<<endl;
Sleep(1500);
}
system("cls");
std::system("color E4");
out();
if(win()) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"你赢了!"<<endl;
return 0;
first();
}
cout<<"轮到我是电脑人"<<endl;
AI_2();
} while(nwl());
out();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"和棋!"<<endl;
first();
} else {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"输入错误!"<<endl;
}
return 0;
}
c++井字棋(虽为原创,但可能与部分他人作品撞脸)
于 2022-07-22 13:31:51 首次发布