我需要满足以下要求,请用c++完成程序功能简介 该程序是tictactoe游戏,棋盘为3*3,当三个棋子连起来即为赢。 输入参数时,若输入的数字超出边界或在已有棋子的地方再输入,则提示出错,要求重新输入。 3、细化需求 1)两个玩家可以下棋,第一次下棋之前首先将棋盘清空。以后每次下棋时都要判断棋盘是否已满。 2)下棋时需要判断当前棋盘的棋子是否已满 3)下棋时指定规则,由谁先下棋,下棋时判断下棋的坐标是否正确,如果不正确提示玩家继续下棋;当下棋时的坐标正确时,保存棋子的坐标和当前已下棋子的总数。 4)每一次下棋都要判断当前玩家的棋子是否已经连线(横、竖、对角线),当连成线时,则当前玩家赢 5)如果当前玩家棋子没有连成线,则提示另一方玩家下棋,下棋过程判断同第3,4步。 6)结束一局后,判断是否进行下一局。 7)能够自定义棋盘大小,并且能统计输赢结果并打印输出
时间: 2023-09-18 22:09:14 浏览: 30
以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
const int MAX_SIZE = 10; // 最大棋盘大小
char board[MAX_SIZE][MAX_SIZE]; // 棋盘
int board_size; // 棋盘大小
int total_steps; // 总步数
void init_board() { // 初始化棋盘,全部设为' '
for (int i = 0; i < board_size; i++) {
for (int j = 0; j < board_size; j++) {
board[i][j] = ' ';
}
}
}
void print_board() { // 打印棋盘
for (int i = 0; i < board_size; i++) {
for (int j = 0; j < board_size; j++) {
cout << "+---";
}
cout << "+" << endl;
for (int j = 0; j < board_size; j++) {
cout << "| " << board[i][j] << " ";
}
cout << "|" << endl;
}
for (int j = 0; j < board_size; j++) {
cout << "+---";
}
cout << "+" << endl;
}
bool is_valid_pos(int x, int y) { // 判断坐标是否合法
return x >= 0 && x < board_size && y >= 0 && y < board_size && board[x][y] == ' ';
}
bool check_win(char player) { // 判断是否胜利
// 判断行是否连成一线
for (int i = 0; i < board_size; i++) {
int count = 0;
for (int j = 0; j < board_size; j++) {
if (board[i][j] == player) {
count++;
if (count == board_size) {
return true;
}
} else {
count = 0;
}
}
}
// 判断列是否连成一线
for (int j = 0; j < board_size; j++) {
int count = 0;
for (int i = 0; i < board_size; i++) {
if (board[i][j] == player) {
count++;
if (count == board_size) {
return true;
}
} else {
count = 0;
}
}
}
// 判断对角线是否连成一线
int count1 = 0, count2 = 0;
for (int i = 0; i < board_size; i++) {
if (board[i][i] == player) {
count1++;
if (count1 == board_size) {
return true;
}
} else {
count1 = 0;
}
if (board[i][board_size - i - 1] == player) {
count2++;
if (count2 == board_size) {
return true;
}
} else {
count2 = 0;
}
}
return false;
}
void play_game() { // 开始游戏
char players[2] = {'X', 'O'}; // 两个玩家
int cur_player = 0; // 当前玩家
bool continue_game = true; // 是否继续游戏
while (continue_game) {
init_board(); // 初始化棋盘
total_steps = 0; // 清空步数
cout << "玩家" << players[cur_player] << "先手" << endl;
bool game_over = false; // 是否结束游戏
while (!game_over) {
print_board(); // 打印棋盘
int x, y; // 玩家下棋的坐标
while (true) {
cout << "玩家" << players[cur_player] << "下棋,请输入坐标(格式:x y):";
cin >> x >> y;
if (is_valid_pos(x, y)) {
board[x][y] = players[cur_player];
total_steps++;
if (check_win(players[cur_player])) { // 当前玩家胜利
cout << "玩家" << players[cur_player] << "胜利!" << endl;
game_over = true;
} else if (total_steps == board_size * board_size) { // 平局
cout << "平局!" << endl;
game_over = true;
} else { // 切换到另一个玩家
cur_player = 1 - cur_player;
}
break;
} else {
cout << "输入坐标不合法,请重新输入!" << endl;
}
}
}
// 询问是否继续游戏
char choice;
while (true) {
cout << "是否继续游戏?(Y/N)";
cin >> choice;
if (choice == 'Y' || choice == 'y') {
continue_game = true;
break;
} else if (choice == 'N' || choice == 'n') {
continue_game = false;
break;
} else {
cout << "输入错误,请重新输入!" << endl;
}
}
}
}
int main() {
// 输入棋盘大小
cout << "请输入棋盘大小:";
cin >> board_size;
if (board_size <= 0 || board_size > MAX_SIZE) {
cout << "棋盘大小超出范围!" << endl;
return 0;
}
play_game(); // 开始游戏
return 0;
}
```
以上代码实现了一个基本的井字棋游戏,支持自定义棋盘大小,并且能够统计输赢结果并打印输出。玩家可以通过输入坐标来下棋,程序会判断坐标是否合法以及当前玩家是否胜利。当有一方玩家胜利或者棋盘已满时,游戏结束,并询问是否继续游戏。