目录
# 1、游戏描述
如下图所示,游戏会自动打印菜单由玩家选择play或者exit.
然后玩家可以通过坐标进行下棋,电脑随机下棋(显然这个电脑有点智障,不会下棋)
(玩家赢) (平局) (电脑赢)
# 2、游戏架构
#define _CRT_SECURE_NO_WARNINGS 1;
#include "game.h"
void caidan()//打印菜单函数
{
printf("****************************\n");
printf("******** 1.play ********\n");
printf("******** 0.exit ********\n");
printf("****************************\n");
}
void game()//游戏
{
char ret;
char borad[ROW][COL];
Init_Borad(borad, ROW, COL);//期盼初始化
Print_Borad(borad, ROW, COL);//打印空棋盘
while (1)
{
Player_move(borad, ROW, COL);//玩家下棋
Print_Borad(borad, ROW, COL);//打印棋盘
//判断输赢(玩家赢==*,电脑赢==#,平局==Q,游戏继续==C)
ret=is_win(borad, ROW, COL);
if (ret != 'C')
{
break;
}
Computer_move(borad, ROW, COL);//电脑下棋
Print_Borad(borad, ROW, COL);//打印期盼
//判断输赢
ret = is_win(borad, ROW, COL);
if (ret != 'C')
{
break;
}
}
if (ret == '*')
printf("玩家赢!\n");
else if (ret == '#')
printf("电脑赢!\n");
else
printf("平局!");
}
void test01()
{
srand((unsigned int)time(NULL));//随机数种子
int input;//输入0 、1 在菜单中选择功能
do
{
caidan();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 0:
printf("游戏已退出\n");
break;
case 1:
printf("三子棋游戏开始\n");
game();
printf("三子棋游戏结束\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
}
int main()
{
test01();
}
# 3、关键函数
#define _CRT_SECURE_NO_WARNINGS 1;
#include "game.h"
void Init_Borad(char borad[ROW][COL], int row, int col)//棋盘初始化
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
borad[i][j] = ' ';
}
}
}
void Print_Borad(char borad[ROW][COL], int row, int col)//打印棋盘
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", borad[i][j]);
if (j < col-1)
printf("|");
}printf("\n");
if (i < row - 1)
{
//int k = 0;
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}printf("\n");
}
}
}
//玩家下棋
void Player_move(char borad[ROW][COL], int row, int col)
{
printf("玩家下棋:>");
int x = 0, y = 0;
while (1)
{
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (borad[x - 1][y - 1] == ' ') {
borad[x - 1][y - 1] = '*';//玩家棋子为 *
break;
}
else
{
printf("已有棋子,请重新下棋!\n");
}
}
else
{
printf("坐标非法,请重新下棋!\n");
}
}
}
//电脑下棋
void Computer_move(char borad[ROW][COL], int row, int col)
{
printf("电脑下棋:>\n");
int x = 0, y = 0;
while (1)
{
x = rand() % row;
y = rand() % col;
if (borad[x][y] == ' ') {
borad[x][y] = '#';//电脑棋子为 #
break;
}
}
}
char is_win(char borad[ROW][COL], int row, int col)
{
int i = 0;
//三列
for (i = 0; i < col; i++)
{
if (borad[0][i] == borad[1][i] && borad[1][i] == borad[2][i] && borad[2][i] != ' ')
return borad[0][i];
}
//三行
for (i = 0; i < row; i++)
{
if (borad[i][0] == borad[i][1] && borad[i][1] == borad[i][2] && borad[i][2] != ' ')
return borad[i][0];
}
if (borad[0][0] == borad[1][1] && borad[1][1] == borad[2][2] && borad[2][2] != ' ')
return borad[0][0];
if (borad[2][0] == borad[1][1] && borad[1][1] == borad[0][2] && borad[0][2] != ' ')
return borad[2][0];
int count = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
if (borad[i][j] == ' ')
count++;
}
}
if (count == 0)//如果批判没有一个空格,说明棋盘已经下满了
return 'Q';//返回平局
return 'C';//如果上面没有返回说明游戏继续!
}
# 头文件
#include <stdio.h>
#include <time.h>
#define ROW 3
#define COL 3
//函数声明
//棋盘初始化
void Init_Borad(char borad[ROW][COL], int row, int col);
//打印棋盘
void Print_Borad(char borad[ROW][COL], int row, int col);
//玩家下棋
void Player_move(char borad[ROW][COL], int row, int col);
//电脑下棋
void Computer_move(char borad[ROW][COL], int row, int col);
//判断输赢
char is_win(char borad[ROW][COL], int row, int col);