失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > (C语言)用C语言编写小游戏——三子棋

(C语言)用C语言编写小游戏——三子棋

时间:2021-02-02 10:55:45

相关推荐

(C语言)用C语言编写小游戏——三子棋

目录

三子棋效果展示

三子棋的功能实现

1、初始化棋盘格

2、打印棋盘

3、玩家下棋

4、电脑下棋

5、判断输赢(玩家赢/电脑赢/平局)

完整代码展示

三子棋小游戏的代码实现分为三个文件,test.c(测试游戏功能)、game.h(头文件的包含和函数的声明)、game.c(实现函数功能)

后附三个文件完整代码

三子棋效果展示

三子棋的功能实现

1、初始化棋盘格

将定义的二维数组中的数据全部初始化为空格

void InitBoard(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++){board[i][j] = ' ';}}}

2、打印棋盘

void DisplayBoard(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++){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");}}}

3、玩家下棋

void PlayerMove(char board[ROW][COL],int row,int col){int a = 0;int b = 0;printf("玩家走:\n");while(1){printf("请输入下棋的坐标:");scanf("%d %d",&a,&b);if (a>0 && a<=row && b>0 && b<=col){if (board[a-1][b-1] == ' '){board[a-1][b-1] = '*';break;}else{printf("坐标被占用,请重新输入\n");}}else{printf("坐标不合法,请重新输入\n");}}}

4、电脑下棋

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;}}}

5、判断输赢(玩家赢/电脑赢/平局)

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] != ' '){return board[i][1];}}//判断三列for (i = 0;i < row;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];}//判断平局//满1int ret = IsFull(board,ROW,COL);if (ret == 1)return 'Q';return 'C';}

完整代码展示

1、test.c

#include "game2.h"void menu(){printf("***************************\n");printf("******* 1.play ********\n");printf("******* 0.exit ********\n");printf("***************************\n");}void game(){char mine[ROWS][COLS] = {0};char show[ROWS][COLS] = {0};//初始化棋盘InitBoard(mine,ROWS,COLS,'0');InitBoard(show,ROWS,COLS,'*');//打印棋盘//DisplayBoard(mine,ROW,COL);DisplayBoard(show,ROW,COL);//布置雷SetMine(mine,ROW,COL);//DisplayBoard(mine,ROW,COL);//扫描雷FindMine(mine,show,ROW,COL);}int main(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case 1:game();break;case 0:printf("已退出游戏\n");break;default:printf("输入错误,请重新选择\n");break;}}while(input);return 0;}

2、game.h

#ifndef game2_h#define game2_h#include <stdio.h>#include "stdlib.h"#include "time.h"#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define MINEC 10//函数声明//初始化棋盘void InitBoard(char board[ROWS][COLS],int row,int col,char set);//打印棋盘void DisplayBoard(char board[ROWS][COLS],int row,int col);//布置雷void SetMine(char board[ROWS][COLS],int row,int col);//排查雷void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);#endif /* game2_h */

3、game.c

#include "game2.h"void InitBoard(char board[ROWS][COLS],int row,int col,char set){int i = 0;int j = 0;for (i = 0; i < row;i++){for (j = 0;j < col;j++){board[i][j] = set;}}}void DisplayBoard(char board[ROWS][COLS],int row,int col){int i = 0;int j = 0;printf("--------扫雷游戏--------\n");for (i = 0; i <= col; i++){printf("%d ",i);}printf("\n");for (i = 1;i <= row;i++){printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",board[i][j]);}printf("\n");}printf("--------扫雷游戏--------\n");}void SetMine(char board[ROWS][COLS],int row,int col){int count = MINEC;while(count){int i = rand() % row + 1;int j = rand() % col + 1;if (board[i][j] == '0'){board[i][j] = '1';count--;}}}int get_mine_count(char mine[ROWS][COLS],int x,int y){return mine[x-1][y-1] + mine[x][y-1] + mine[x+1][y-1] + mine[x-1][y] + mine[x+1][y] + mine[x-1][y+1] + mine[x][y+1] + mine[x+1][y+1] - 8*'0';}void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col){//1、输入排查的坐标//2、检查坐标处是不是雷//(1)是雷 - 很遗憾炸死//(2)不是雷 - 统计坐标周围有几个雷 - 存储排查雷的信息到show数组,游戏继续int x = 0;int y = 0;int win = 0;while(win < row*col - MINEC){printf("请输入要排查的坐标:");scanf("%d %d",&x,&y);if (x>=1 && x<= row && y>=1 && y<=col){if(mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int count = get_mine_count(mine,x,y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);win++;}}else{printf("坐标不合法,请重新输入\n");}}if (win == row*col - MINEC){printf("成功\n");DisplayBoard(mine, ROW, COL);}}

如果觉得《(C语言)用C语言编写小游戏——三子棋》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。