20200710 千锤百炼软工人第五天
今天很遗憾没有学习JAVA语言.........
今天是完成的小学期之前的几个任务的完善工作
在此附上源代码和运行截图
#include<iostream>
using namespace std;
class Game
{
private:
char status[9]; //字符数组
char p, c;
int score[9]; int fail, counter;//计算下了多少次
public:
~Game(void);
Game();
void Print();
int Cal(int, int);
bool Judge(int, int, int);
void play();
};
Game::~Game(void)
{
}
Game::Game()
{
for (int i = 0; i<9; i++)
{
status[i] = '1' + i; //按照ASCLL表
counter = 0;
fail = 0;
}
}
void Game::Print() //打印棋盘
{
cout << "----------------" << endl;
cout << " " << status[0] << " | " << status[1] << " | " << status[2] << endl;
cout << "----------------" << endl;
cout << " " << status[3] << " | " << status[4] << " | " << status[5] << endl;
cout << "----------------" << endl;
cout << " " << status[6] << " | " << status[7] << " | " << status[8] << endl;
}
int Game::Cal(int i, int j) //计算分值
{
int result = 0;
if ((status[i - 1] == c) && (status[j - 1] == c))
{
result = 50;
fail = 2; //计算机赢
}
if ((status[i - 1] == p) && (status[j - 1] == p))
{
result = 25;
}
if (((status[i - 1] == c) && (status[j - 1]<'A')) || (status[i - 1]<'A') && (status[j - 1] == c))
result = 10;
if (((status[i - 1] == p) && (status[j - 1]<'A')) || (status[i - 1]<'A') && (status[j - 1] == p))
result = 8;
if ((status[i - 1]<'A') && (status[j - 1]<'A'))
result = 4;
return result;
}
bool Game::Judge(int i, int j, int k) //判断是否为直线
{
return((status[i - 1] == p) && (status[j - 1] == p) && (status[k - 1] == p));
}
void Game::play()
{
int n = 0, max = 0, temp = 0, xu;
Print();
cout << "请选择下棋顺序(1、先下 2、后下):" << endl;
cin >> xu;
cout << "请选择棋子(‘X’或'O')" << endl;
cin >> p;
if (p = 'X')c = 'O';
else c = 'X';
if (xu == 2)
{
status[4] = c;
counter++;
Print();
cout << "computer plays 5!" << endl;
}
do
{
do
{
cout << "请输入1--9:" << endl;
cin >> n;
} while (status[n - 1] >= 'A');
status[n - 1] = p;
counter++;
if (Judge(1, 2, 3) || Judge(4, 5, 6) || Judge(7, 8, 9) || Judge(1, 4, 7) || Judge(2, 5, 8) || Judge(3, 6, 9) || Judge(1, 5, 9) || Judge(3, 5, 7))
fail = 1;
if ((fail == 0) && (counter<9))
for (int k = 0; k<9; k++) // 暴力计算所有分值
if (status[k]<'A')
{
switch (k)
{
case 0:score[0] = Cal(2, 3) + Cal(4, 7) + Cal(5, 9); break;
case 1:score[1] = Cal(1, 3) + Cal(5, 8); break;
case 2:score[2] = Cal(1, 2) + Cal(6, 9) + Cal(5, 7); break;
case 3:score[3] = Cal(5, 6) + Cal(1, 7); break;
case 4:score[4] = Cal(4, 6) + Cal(2, 8) + Cal(1, 9) + Cal(3, 7); break;
case 5:score[5] = Cal(4, 5) + Cal(3, 9); break;
case 6:score[6] = Cal(1, 4) + Cal(3, 5) + Cal(8, 9); break;
case 7:score[7] = Cal(2, 5) + Cal(7, 9); break;
case 8:score[8] = Cal(7, 8) + Cal(3, 6) + Cal(1, 5); break;
}
}
else score[k] = -1; //已经有棋子了
max = score[0]; //假定最大分值
for (int k = 1; k<9; k++) //暴力选出最大分值
if (score[k]>max)
{
max = score[k];
temp = k;
}
status[temp] = c;
counter++;
cout << "computer play" << temp + 1 << "!" << endl;
Print();
} while ((fail == 0) && (counter<9));
if (fail == 0)cout << "和棋!" << endl;
else if (fail == 1)
cout << "你赢了!" << endl;
else
cout << "你输了!" << endl;
}
int main()
{
cout << "欢迎进入人机下棋游戏" << endl;
Game G;
G.play();
}
using namespace std;
class Game
{
private:
char status[9]; //字符数组
char p, c;
int score[9]; int fail, counter;//计算下了多少次
public:
~Game(void);
Game();
void Print();
int Cal(int, int);
bool Judge(int, int, int);
void play();
};
Game::~Game(void)
{
}
Game::Game()
{
for (int i = 0; i<9; i++)
{
status[i] = '1' + i; //按照ASCLL表
counter = 0;
fail = 0;
}
}
void Game::Print() //打印棋盘
{
cout << "----------------" << endl;
cout << " " << status[0] << " | " << status[1] << " | " << status[2] << endl;
cout << "----------------" << endl;
cout << " " << status[3] << " | " << status[4] << " | " << status[5] << endl;
cout << "----------------" << endl;
cout << " " << status[6] << " | " << status[7] << " | " << status[8] << endl;
}
int Game::Cal(int i, int j) //计算分值
{
int result = 0;
if ((status[i - 1] == c) && (status[j - 1] == c))
{
result = 50;
fail = 2; //计算机赢
}
if ((status[i - 1] == p) && (status[j - 1] == p))
{
result = 25;
}
if (((status[i - 1] == c) && (status[j - 1]<'A')) || (status[i - 1]<'A') && (status[j - 1] == c))
result = 10;
if (((status[i - 1] == p) && (status[j - 1]<'A')) || (status[i - 1]<'A') && (status[j - 1] == p))
result = 8;
if ((status[i - 1]<'A') && (status[j - 1]<'A'))
result = 4;
return result;
}
bool Game::Judge(int i, int j, int k) //判断是否为直线
{
return((status[i - 1] == p) && (status[j - 1] == p) && (status[k - 1] == p));
}
void Game::play()
{
int n = 0, max = 0, temp = 0, xu;
Print();
cout << "请选择下棋顺序(1、先下 2、后下):" << endl;
cin >> xu;
cout << "请选择棋子(‘X’或'O')" << endl;
cin >> p;
if (p = 'X')c = 'O';
else c = 'X';
if (xu == 2)
{
status[4] = c;
counter++;
Print();
cout << "computer plays 5!" << endl;
}
do
{
do
{
cout << "请输入1--9:" << endl;
cin >> n;
} while (status[n - 1] >= 'A');
status[n - 1] = p;
counter++;
if (Judge(1, 2, 3) || Judge(4, 5, 6) || Judge(7, 8, 9) || Judge(1, 4, 7) || Judge(2, 5, 8) || Judge(3, 6, 9) || Judge(1, 5, 9) || Judge(3, 5, 7))
fail = 1;
if ((fail == 0) && (counter<9))
for (int k = 0; k<9; k++) // 暴力计算所有分值
if (status[k]<'A')
{
switch (k)
{
case 0:score[0] = Cal(2, 3) + Cal(4, 7) + Cal(5, 9); break;
case 1:score[1] = Cal(1, 3) + Cal(5, 8); break;
case 2:score[2] = Cal(1, 2) + Cal(6, 9) + Cal(5, 7); break;
case 3:score[3] = Cal(5, 6) + Cal(1, 7); break;
case 4:score[4] = Cal(4, 6) + Cal(2, 8) + Cal(1, 9) + Cal(3, 7); break;
case 5:score[5] = Cal(4, 5) + Cal(3, 9); break;
case 6:score[6] = Cal(1, 4) + Cal(3, 5) + Cal(8, 9); break;
case 7:score[7] = Cal(2, 5) + Cal(7, 9); break;
case 8:score[8] = Cal(7, 8) + Cal(3, 6) + Cal(1, 5); break;
}
}
else score[k] = -1; //已经有棋子了
max = score[0]; //假定最大分值
for (int k = 1; k<9; k++) //暴力选出最大分值
if (score[k]>max)
{
max = score[k];
temp = k;
}
status[temp] = c;
counter++;
cout << "computer play" << temp + 1 << "!" << endl;
Print();
} while ((fail == 0) && (counter<9));
if (fail == 0)cout << "和棋!" << endl;
else if (fail == 1)
cout << "你赢了!" << endl;
else
cout << "你输了!" << endl;
}
int main()
{
cout << "欢迎进入人机下棋游戏" << endl;
Game G;
G.play();
}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」