办个网站多少钱,应用公园制作app免费吗,小程序开发平台官网,商标查询网入口test.c源文件 - 三子棋游戏测试 game.h头文件 - 三子棋游戏函数的声明 game.c源文件 - 三子棋游戏函数的实现 主函数源文件#xff1a;
#define _CRT_SECURE_NO_WARNINGS 1#includegame.h //自己定义的用
void menu()
{printf(*************… test.c源文件 - 三子棋游戏测试 game.h头文件 - 三子棋游戏函数的声明 game.c源文件 - 三子棋游戏函数的实现 主函数源文件
#define _CRT_SECURE_NO_WARNINGS 1#includegame.h //自己定义的用
void menu()
{printf(****************************************\n);printf(******* 三子棋 *********\n);printf(******* author小凡同学 *********\n);printf(******* 1.play *********\n);printf(******* 0.exit *********\n);printf(****************************************\n);
}
void game()
{//存储数据 - 二位数组char board[ROW][COL];//初始化棋盘 - 初始化空格InitBoard(board, ROW, COL);//打印一下棋盘 - 本质上是打印数组内容DisplayBoard(board, ROW, COL);char ret 0;//接受游戏状态while (1){//玩家下棋PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断玩家是否赢得游戏retIsWin(board, ROW, COL);if (ret ! C)break;//电脑下棋ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断电脑是否赢得游戏ret IsWin(board, ROW, COL);if (ret ! C)break;}if (ret *){printf(玩家赢了\n);}else if (ret #){printf(电脑赢了\n);}else{printf(平局\n);}}
int main()
{int input0;srand((unsigned int)time(NULL));do {menu();printf(请选择);scanf(%d, input);switch (input){case 1:game();/*printf(三子棋游戏\n);*/break;case 0:printf(退出游戏\n);break;default:printf(选择错误重新选择\n);break;}} while (input); //当input0是while条件判断为假跳出循环非零即为真do while循环继续return 0;
}
头文件封装
#pragma once//头文件的包含#includestdio.h
#includestdlib.h
#includetime.h
//符号定义
#define ROW 10
#define COL 10//函数声明//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘的函数void DisplayBoard(char board[ROW][COL], int row, int col);//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col);//判断输赢
/*
游戏状态
1.玩家赢了 - *
2.电脑赢了 - #
3.平局 - Q -棋盘下满了返回 * # Q 游戏结束
4.游戏继续 - CIsWin() 用来判断游戏的状态
*/
//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col);//判断平局
游戏函数实现源文件
#define _CRT_SECURE_NO_WARNINGS 1
#include game.h
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{int i0;int 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;
// for (i 0; i row; i)
// {
// printf( %c | %c | %c \n, board[i][0], board[i][1], board[i][2]);
// if(irow-1)
// printf(---|---|---\n);
// }
//}void DisplayBoard(char board[ROW][COL], int row, int col)
{int i 0;for (i 0; i row; i){int j 0;for (j 0; j col; j) {printf( %c , board[i][j]);if (j col - 1)printf(|);}printf(\n);if (i row - 1){int j 0;for (j 0; j col; j){printf(---);if (j col - 1)printf(|);}printf(\n);}}
}void PlayerMove(char board[ROW][COL], int row, int col)
{int x, y;printf(玩家走\n);while (1) {printf(请输入下棋的坐标);scanf(%d %d, x, y);//判断坐标合法性if (x 1 x row y 1 y col){//下棋//坐标是否被占用if (board[x - 1][y - 1] ){board[x - 1][y - 1] *;break;}else{printf(坐标非法请重新输入\n);}}else{printf(坐标非法请重新输入\n);}}}void ComputerMove(char board[ROW][COL], int row, int col)
{printf(电脑走\n);while (1) {int x rand() % row;int y rand() % col;//判断占用if (board[x][y] ){board[x][y] #;break;}}
}int IsFull(char board[ROW][COL], int row, int col)
{int i 0;int j 0;for (i 0;i row; i){for (j 0; j col; j){if (board[i][j] ){return 0;//棋盘没满}}}return 1;//棋盘满了
}char IsWin(char board[ROW][COL], int row, int col)
{int i 0;int j 0;for (i 0; i row; i){for (j 0; j col; j){//判断三行if (board[i][j] board[i][j1] board[i][j1] board[i][j2] board[i][j1] ! ){return board[i][j1];}//判断三列if (board[i][j] board[i1][j] board[i1][j] board[i2][j] board[i1][j] ! ){return board[i 1][j];}//主对角线if (board[i][j] board[i1][j1] board[i 1][j 1] board[i 2][j 2] board[i1][j1] ! ){return board[i1][j1];}//副对角线if (board[i][j] board[i1][j-1] board[i1][j-1] board[i2][j-2] board[i1][j-1] ! ){return board[i 1][j - 1];}}}判断三行// for (i 0; i row; i)// {// if (board[i][0] board[i][1] board[i][1] board[i][2] board[i][1] ! )// {// return board[i][1];// }// }判断三列// for (i 0; i col; i)// {// if (board[0][i] board[1][i] board[1][i] board[2][i] board[1][i] ! )// {// return board[1][i];// }// }判断对角线// if (board[0][0] board[1][1] board[1][1] board[2][2] board[1][1] ! )// {// return board[1][1];// }// if (board[0][2] board[1][1] board[1][1] board[2][0] board[1][1] ! )// {// return board[1][1];// }//判断平局//如果棋盘满了返回1不满返回0int retIsFull(board, row, col);if (ret 1){return Q;//平局}//继续return C;}
运行结果