三子棋十分简单 我们只需要考虑以下几方面
- 打印棋盘
- 玩家下棋与电脑下棋
- 胜负判断
代码如下
#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
//三子棋
char a[row][line];
int count1 = 0;
void menu()
{
printf("********************************\n");
printf("******* 1. play *******\n");
printf("******* 0. exit *******\n");
printf("********************************\n");
}
void printpan(char a[row][line]) {
for (int i = 0; i < row; i++) {
cout << "|";
for (int j = 0; j < line; j++) {
cout << "___" <<a[i][j] << "|";
}cout << endl;
}
}
void initial(char a[row][line]) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < line; j++) {
a[i][j] = ' ';
}cout << endl;
}
}
void input(char a[row][line]) {
int m; int n; cout << "该你啦!请输入你想下的位置的坐标" << endl;cin >> m >> n;
while(a[m][n]!=' '||m>row-1||n>line-1||m<0||n<0)
{ cout << "wrong step.again;";
cin >> m >>n;
}
if (a[m][n] == ' ') {
a[m][n] = 'o';//玩家是o
}
}
void computermove(char a[row][line]) {
int r = rand() % row, l = rand() % line;
while (a[r][l] != ' ')
{
r = rand() % row;
l = rand() % line;
}
if (a[r][l] == ' ') {
a[r][l] = 'x';//玩家是o
}
}
char judge(char a[row][line]) {
for (int i = 0; i < row; i++) {
if (a[i][0] == 'o' && a[i][1] == a[i][0] && a[i][2] == a[i][1])return 'o';
if (a[i][0] == 'x' && a[i][1] == a[i][0] && a[i][2] == a[i][1])return 'x';
}
for (int i = 0; i < line; i++) {
if (a[0][i] == 'o' && a[1][i] == a[0][i] && a[2][i] == a[1][i])return 'o';
if (a[0][i] == 'x' && a[1][i] == a[0][i] && a[2][i] == a[1][i])return 'x';
}
if (a[0][0] == 'o' && a[1][1] == a[0][0] && a[2][2] == a[1][1])return 'o';
else if (a[0][0] == 'x' && a[1][1] == a[0][0] && a[2][2] == a[1][1])return 'x';
else if (a[0][2] == 'o' && a[1][1] == a[0][2] && a[2][0] == a[1][1])return 'o';
else if (a[0][2] == 'x' && a[1][1] == a[0][2] && a[2][0] == a[1][1])return 'x';
else if (count1 >= row * line)return '平';
else return 0;
}
void game() {
count1 = 0;
initial(a);
printpan(a);
while ((judge(a) != 'o' || judge(a) != 'x' || judge(a) != '平')) {
input(a); count1++;
char m=judge(a);
if (m == 'o' || m == 'x' || m == '平')break;
computermove(a); m = judge(a);
if (m == 'o' || m == 'x' || m == '平')break;count1++;
printpan(a);
}
if (judge(a) == 'o')cout << "win!";
else if (judge(a) == 'x')cout << "lose 0.0";
else cout << "平局";
cout <<"you can type 1 for another game and 0 to exit" << endl;
}
int main() {
srand((int)time(NULL));
int n;
menu();
do {
cout << endl << "请输入:" ;cin >> n;
switch (n)
{
case 1:
game();
break;
case 0:cout << "bye!"; break;
default:
cout << "wrong choice.again" << endl;
break;
}
} while (cin>>n&&n!=0);
}