在学习一段时间c语言后可以开发一些小游戏来加强对与代码的掌握,今天我来介绍的是c语言小游戏之井字棋。
首先,我们创作三个文件,头文件用于声明函数和一些定义,第二个文件来实现游戏的运行,最后一个文件用于主体的代码。
写出大概的主体函数(srand函数是后面用到的随机数现在暂时用不到)。
写出menu()菜单函数
开始写游戏内容
char board[ROW][COL];//定义棋子
InitBoard(board,ROW, COL);//初始化棋盘
DisplayBoard(board, ROW, COL);//打印棋盘
在头文件声明
# define COL 3//行定义
#define ROW 3//列定义
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col);
写出棋盘形式(在第二个文件也就是游戏内容文件)
void InitBoard(char board[ROW][COL], int row, int col)
{
int i=0, j=0;
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
board[i][j] = ' ';
}
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
printf("|");
}
printf("\n");
if (i < row - 1)
{
for (j = 0;j < col;j++)
{
printf("___");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}
}
第一步就完成了,最后的样式就是下面这样
创建完棋盘后就可以开始下棋了,首先是玩家下棋,进行定义和声明和实现
DisplayBoard(board, ROW, COL);//在第三个文件定义
//玩家下棋
void PlayerBoard(char board[ROW][COL], int row, int col);//在头文件声明
//在游戏文件实现
void PlayerBoard(char board[ROW][COL], int row, int col)
{
int i = 0, j = 0;
printf("玩家下棋->\n");
while (1)
{
printf("请输入坐标:\n");
scanf_s("%d %d", &i, &j);
if (i >= 1 && i <= row && j >= 1 && j <= col)
{
if (board[i-1][j-1] == ' ')
{
board[i-1][j-1] = '*';
break;
}
else
printf("您输入的坐标被占用,请重新输入\n");
}
}
}
玩家下完后电脑下棋,要保证电脑随机性我们就会用到rand函数来模拟电脑随机下棋
ComputerBoard(board, ROW, COL);//在第三个文件定义
//电脑下棋
void ComputerBoard(char board[ROW][COL], int row, int col);//在头文件声明
//在游戏文件实现
void ComputerBoard(char board[ROW][COL], int row, int col)
{
printf("电脑下棋->\n");
int i = 0, j = 0;
while (1)
{
i = rand() % row;//rand函数
j = rand() % col;
if (board[i][j] == ' ')
{
board[i][j] = '#';
break;
}
}
}
srand((unsigned int)time(NULL));//在第三个文件的写一个生成随机数的函数,并返回rand函数中
//注意该函数需要头文件
# include<stdlib.h>
# include<time.h>
在玩家和电脑下完之后需要判断结果
//返回值为*,玩家胜
//返回值为#,电脑胜
//返回值为q,平局
//返回值为c,继续游戏
char ret= isWin(board, ROW, COL);//定义函数
//判断结果
char isWin(char board[ROW][COL], int row, int col);//声明函数
//实现函数
char isWin(char board[ROW][COL], int row, int col)
{
int i, j;
for (i = 0;i < row;i++)
{
if (board[i][0] == board[i][1] && board[i][2]!=' '&& board[i][2]== board[i][0])
return board[i][0];
}
for (i = 0;i < col;i++)
{
if (board[0][i] == board[1][i] && board[2][i] == board[0][i]&& board[0][i] != ' ')
return board[0][i];
}
if (board[0][0] == board[1][1] && board[2][2] != ' '&& board[0][0] == board[2][2])
return board[0][0];
if (board[2][0] == board[1][1] && board[0][2] != ' '&& board[2][0] == board[0][2])
return board[2][0];
else if (IsFull(board, ROW, COL))
{
return 'q';
}
return 'c';
}
//依据返回结果来判断运行结果
while (1)
{
PlayerBoard(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//返回值为*,玩家胜
//返回值为#,电脑胜
//返回值为q,平局
//返回值为c,继续游戏
char ret= isWin(board, ROW, COL);
if (ret != 'c')
{
if (ret == '*')
{
printf("玩家胜\n");
break;
}
else if (ret == '#')
{
printf("电脑胜\n");
break;
}
else
{
printf("平局\n");
break;
}
}
最后展示运行结果
这篇文章写的很乱,因为我自己感觉不知道从何下笔所以写的差,也多多希望大家能够在评论区留言应该改进的地方,谢谢大家。
最后附上我的git地址观看我的井字棋代码:暑假练习: 暑假班的练习
在这个文件可以观看。