用C语言实现简单五子棋小游戏
本文实例为大家分享了C语言实现简单五子棋小游戏的具体代码,供大家参考,具体内容如下
在vs2019创建新项目,然后添加两个源文件test.c和game.c,接着创建一个头文件game.h。
文章图片
【用C语言实现简单五子棋小游戏】test.c:
#include "game.h" 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); ret = IsWin(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"); }} void menu(){ printf("******************************\n"); printf("*******1.play******\n"); printf("*******0.exit******\n"); printf("******************************\n"); }int main(){ int input = 0; srand((unsigned int)time(NULL)); do {menu(); printf("请输入:\n"); scanf("%d", &input); switch (input){case 1:game(); break; case 0:printf("退出游戏\n"); break; default:printf("输入错误,请重新输入:\n"); break; } } while (input); return 0; }
game.c:
#include "game.h" void InitBoard(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++){board[i][j] = ' '; } }} 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){for (j = 0; j < col; j++){printf("---"); if (j < col - 1)printf("|"); }}printf("\n"); }} void PlayerMove(char board[ROW][COL], int row, int col){ printf("玩家走:\n"); int i = 0; int j = 0; while (1) {printf("请输入坐标:\n"); scanf("%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"); }}else{printf("坐标超出范围\n"); } }} void ComputerMove(char board[ROW][COL], int row, int col){ int i = 0; int j = 0; printf("电脑走:\n"); while (1) {i = rand() % row; j = rand() % col; if (board[i][j] == ' '){board[i][j] = '#'; 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; //判断三行 for (i = 0; i < row; i++) {if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' '){returnboard[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, 不满返回0 int ret = IsFull(board, row, col); if (ret == 1) {return 'Q'; } //继续 return 'C'; }
game.h:
#include #include #include#define ROW 3#define COL 3 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); char IsWin(char board[ROW][COL], int row, int col); int IsFull(char board[ROW][COL], int row, int col);
运行效果如图:
文章图片
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- JS中的各种宽高度定义及其应用
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 涉毒患者(新诗)
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询