用c语言或者c++编写一个五子棋游戏
时间: 2023-12-06 13:05:46 浏览: 77
好的,以下是一个简单的五子棋游戏的实现,使用 C++ 编写。
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int N = 15; // 棋盘大小
const int WIN = 5; // 获胜所需棋子数
char board[N][N]; // 棋盘
bool player; // 当前下子的玩家,true 表示先手,false 表示后手
// 初始化棋盘
void init_board() {
memset(board, '.', sizeof(board));
}
// 显示棋盘
void print_board() {
cout << " ";
for (int i = 0; i < N; i++) {
cout << i << " ";
}
cout << endl;
for (int i = 0; i < N; i++) {
cout << i << " ";
for (int j = 0; j < N; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
}
// 判断是否下子越界
bool is_valid(int x, int y) {
return x >= 0 && x < N && y >= 0 && y < N;
}
// 判断是否下子位置已有棋子
bool is_empty(int x, int y) {
return board[x][y] == '.';
}
// 下子
void move(int x, int y) {
if (is_valid(x, y) && is_empty(x, y)) {
board[x][y] = player ? 'X' : 'O';
player = !player;
}
}
// 判断是否有获胜者
bool has_winner() {
char ch = player ? 'X' : 'O';
// 横向
for (int i = 0; i < N; i++) {
for (int j = 0; j < N - WIN + 1; j++) {
bool flag = true;
for (int k = 0; k < WIN; k++) {
if (board[i][j+k] != ch) {
flag = false;
break;
}
}
if (flag) return true;
}
}
// 纵向
for (int i = 0; i < N - WIN + 1; i++) {
for (int j = 0; j < N; j++) {
bool flag = true;
for (int k = 0; k < WIN; k++) {
if (board[i+k][j] != ch) {
flag = false;
break;
}
}
if (flag) return true;
}
}
// 对角线
for (int i = 0; i < N - WIN + 1; i++) {
for (int j = 0; j < N - WIN + 1; j++) {
bool flag = true;
for (int k = 0; k < WIN; k++) {
if (board[i+k][j+k] != ch) {
flag = false;
break;
}
}
if (flag) return true;
}
}
// 反对角线
for (int i = 0; i < N - WIN + 1; i++) {
for (int j = WIN - 1; j < N; j++) {
bool flag = true;
for (int k = 0; k < WIN; k++) {
if (board[i+k][j-k] != ch) {
flag = false;
break;
}
}
if (flag) return true;
}
}
return false;
}
int main() {
init_board();
player = true;
while (true) {
print_board();
int x, y;
cout << "Player " << (player ? "X" : "O") << " move (x y): ";
cin >> x >> y;
move(x, y);
if (has_winner()) {
print_board();
cout << "Player " << (player ? "O" : "X") << " wins!" << endl;
break;
}
}
return 0;
}
```
该程序使用了一个二维字符数组来表示棋盘,'.' 表示空位,'X' 表示先手下的棋子,'O' 表示后手下的棋子。程序中实现了下子、判断是否有获胜者等功能。
阅读全文