五子棋(无AI)
#define _CRT_SECURE_NO_WARNINGS
#define ROW 9
#define COL 9
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
// 菜单
int meun() {
printf("====================\n");
printf("____五子棋小游戏____\n");
printf("--------------------\n");
printf(" 1 开始游戏 \n");
printf(" 0 退出游戏 \n");
printf(" 请输入您的选择:");
int choice;
scanf("%d", &choice);
return choice;
}
char arr[ROW][COL];
int count = ROW * COL;
void Init() {
for (int row = 0; row < ROW; ++row) {
for (int col = 0; col < COL; ++col) {
arr[row][col] = ' ';
}
}
}
// 打印
void print(char arr[ROW][COL]) {
for (int row = 0; row < ROW; ++row) {
printf("----");
}
printf("-\n");
for (int row = 0; row < ROW; ++row) {
printf("|");
for (int col = 0; col < COL; ++col) {
printf(" %c |", arr[row][col]);
}
printf("\n");
for (int row = 0; row < ROW; ++row) {
printf("----");
}
printf("-\n");
}
}
// 玩家落子
void Plamove() {
while (1) {
print(arr);
printf("请输入一个坐标(row col):");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row<0 || row>ROW - 1 || col<0 || col>COL - 1 || arr[row][col] != ' ') {
system("cls");
printf("您的输入非法,请重新输入!\n");
continue;
}
arr[row][col] = '*';
print(arr);
--count;
break;
}
}
// 电脑落子
void Commove() {
system("cls");
printf("电脑落子...");
while (1) {
int row = rand() % ROW;
int col = rand() % COL;
if (arr[row][col] != ' ') {
continue;
}
arr[row][col] = '+';
printf("电脑落子完毕!\n");
--count;
break;
}
}
char Pan() {
// 列五连续
for (int row = 0; row < ROW; ++row) {
for (int col = 0; col < COL - 4; ++col) {
if (arr[row][col] == arr[row][col + 1] &&
arr[row][col] == arr[row][col + 2] &&
arr[row][col] == arr[row][col + 3] &&
arr[row][col] == arr[row][col + 4] &&
arr[row][col] != ' ') {
return arr[row][col];
}
}
}
// 行五连续
for (int col = 0; col < COL; ++col) {
for (int row = 0; row < ROW - 4; ++row) {
if (arr[row][col] == arr[row + 1][col] &&
arr[row][col] == arr[row + 2][col] &&
arr[row][col] == arr[row + 3][col] &&
arr[row][col] == arr[row + 4][col] &&
arr[row][col] != ' ') {
return arr[row][col];
}
}
}
// 斜下五连续
for (int row = 0; row < ROW - 4; ++row) {
for (int col = 0; col < COL - 4; ++col) {
if (arr[row][col] == arr[row + 1][col + 1] &&
arr[row][col] == arr[row + 2][col + 2] &&
arr[row][col] == arr[row + 3][col + 3] &&
arr[row][col] == arr[row + 4][col + 4] &&
arr[row][col] != ' ') {
return arr[row][col];
}
}
}
// 斜上五连续
for (int row = 0; row < ROW - 4; ++row) {
for (int col = COL; col > 3; --col) {
if (arr[row][col] == arr[row + 1][col - 1] &&
arr[row][col] == arr[row + 2][col - 2] &&
arr[row][col] == arr[row + 3][col - 3] &&
arr[row][col] == arr[row + 4][col - 4] &&
arr[row][col] != ' ') {
return arr[row][col];
}
}
}
// 和棋
if (count == 0) {
return 'h';
}
return ' ';
}
void Game() {
srand((unsigned int)time(0));
Init();
char win = ' ';
while (1) {
Plamove();
win = Pan();
if (win != ' ') {
break;
}
Commove();
win = Pan();
if (win != ' ') {
break;
}
}
if (win == '*') {
system("cls");
print(arr);
printf("\n @@@@ @@@@ \n @@@@@@ @@@@@@ \n@@@@@@@@@@@@@@@@\n@@@@@@@@@@@@@@@@\n @@@@@@@@@@@@@@ \n @@@@@@@@@@@@ \n @@@@@@@@@@ \n @@@@@@@@ \n @@@@@@ \n @@ \n 你赢了 !\n");
}
else if (win == '+') {
system("cls");
print(arr);
printf("你输了 !\n");
}
else if (win == 'h') {
system("cls");
print(arr);
printf("和棋 !\n");
}
else {
system("cls");
print(arr);
printf("代码BUG了!\n");
}
}
int main() {
int n;
while (1) {
n = meun();
if (n == 1) {
Game();
}
else if (n == 0) {
printf("再见!\n");
system("cls");
break;
}
else {
printf("您的输入有误,请重新输入!\n");
system("cls");
continue;
}
}
system("pause");
}