本篇用c语言实现了简单的三子棋。
代码演示(代码中附注解):
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<time.h>
#define row 3
#define col 3
//定义棋盘静态全局变量
static char chess_board[row][col];
//初始化棋盘
void InitGame() {
for (int i = 0;i < row;++i) {
for (int j = 0;j < col;++j) {
//初始化设置为空格
chess_board[i][j] = ' ';
}
}
}
//显示棋盘
void ShowChessBoard() {
for (int i = 0;i < row;++i) {
printf(" %c | %c | %c \n", chess_board[i][0],
chess_board[i][1],
chess_board[i][2]);
if (i != 2) {
printf("--- --- ---\n");
}
}
}
//玩家下棋
void PlayerMove() {
int m = 0;
int n = 0;
while (1) {
printf("请输入你要落子的坐标(格式为 坐标一+空格+坐标二):");
scanf("%d %d", &m, &n);
if (m < 0 || m>2 || n < 0 || n>2) {
printf("输入的坐标只能在0~2之间!\n");
}
else if (chess_board[m][n] != ' ') {
printf("该处已有棋子!请重新选择。\n");
}
else {
chess_board[m][n] = 'O';
break;
}
}
}
//电脑下棋
void ComputerMove() {
int m = 0;
int n = 0;
while (1) {
srand(time(0));
m = rand() % 3;
n = rand() % 3;//随机生成0~2的数字
if (chess_board[m][n] == ' ') {
chess_board[m][n] = '*';
break;
}
}
}
//判断棋盘是否满
bool IsFullChessBoard() {
for (int i = 0;i < row;++i) {
for (int j = 0;j < col;++j) {
if (chess_board[i][j] == ' ') {
return false;
}
}
}
return true;
}
//检查结果 输出0为平局,输出*电脑赢,输出O为玩家赢
char CheakResult() {
//判断行
for (int i = 0;i < row;++i) {
if (chess_board[i][0] == chess_board[i][1] &&
chess_board[i][0] == chess_board[i][2] &&
chess_board[i][0] != ' ') {
return chess_board[i][0];
}
}
//判断列
for (int i = 0;i < col;++i) {
if (chess_board[0][i] == chess_board[1][i] &&
chess_board[0][i] == chess_board[2][i] &&
chess_board[0][i] != ' ') {
return chess_board[0][i];
}
}
//判断斜线
if (chess_board[0][0] == chess_board[1][1] &&
chess_board[0][0] == chess_board[2][2] &&
chess_board[0][0] != ' ') {
return chess_board[0][0];
}
if (chess_board[0][2] == chess_board[1][1] &&
chess_board[1][1] == chess_board[2][0] &&
chess_board[1][1] != ' ') {
return chess_board[1][1];
}
return '0';
}
//开始游戏
void StartGame() {
//初始化棋盘
InitGame();
//打印棋盘
ShowChessBoard();
bool b;
char r;
while (1) {
//玩家下棋
PlayerMove();
ShowChessBoard();
//判断是否下满
b = IsFullChessBoard();
//判断结果
r = CheakResult();
if (r != '0' || b) {
break;
}
//电脑下棋
printf("电脑落子\n");
ComputerMove();
ShowChessBoard();
//判断是否下满
b = IsFullChessBoard();
//判断结果
r = CheakResult();
if (r != '0' || b) {
break;
}
}
//判断输赢
if (r == 'O') {
printf("恭喜你,赢了不太聪明人机!!!\n");
}
else if (r == '*') {
printf("不可能,不可能,你居然会输给它!!!\n");
}
else {
printf("平局!");
}
}
int main() {
int select = 1;
while (select) {
printf("****************************************\n");
printf("****************************************\n");
printf("* 欢迎来到建议三子棋游戏 *\n");
printf("* 1.开始游戏 0.退出 *\n");
printf("****************************************\n");
printf("****************************************\n");
//选择是否开始玩游戏
printf("请输入你的选择>:");
scanf("%d", &select);
if (select == 0) {
break;
}
StartGame();
printf("\n");
}
printf("已结束,欢迎下次再玩!\n");
return 0;
}
ps:第一次运行可能会有一点点慢。