用c语言实现简单三子棋游戏
2017-10-19 17:28
916 查看
首先,把全部代码罗列如下:
此次程序的成功运行,主要是通过对八个自定义函数,以及对一个enum常量结构体的调用来实现的,以下是对整个程序过程的深入分析:
1.menu函数:在这里,主要是对游戏开始界面的设置。整体来说比较简单,主要是运用了几个printf()函数来具体实现的;
2.init_board函数:此函数主要是进行棋盘的初始化操作。在这里用到了memset()函数,主要是对棋盘的初始化,即对每个方格进行置空,当然,在这里也可以通过两个for循环语句来实现函数初始化;
3.display_board函数:主要用于实现对棋盘井字形框架的打印,在这里要特别注意(i!=2)判断语句,因为在这里主要是打印两行,所以控制两行输出即可;
4.player_move函数:此函数是由玩家来进行完成的,输入任意坐标时,要特别注意坐标的越界问题,在这里通过一个if语句来加以限制;
5.computer_move函数:主要是针对电脑进行游戏的设置,这里通过调用rand()函数来实现1-3之间随机数的抽取;
6.chess_full函数:主要是用来判断棋盘是否已经满格;
7.check_win函数:主要用于判断是否有一方已经赢得了比赛,即对是否出现了三行,三列,或者两个交叉列排成一排进行判断,如果都没有出现,则进行判断是否棋盘已满;
8.game函数:通过对函数的嵌套调用,以此来实现各函数的功能,从而来进行游戏;
9:enum:通过运用enum来定义结构体常量;
10.最后,通过主函数来实现程序的运行,在这里运用到了srand()函数和time()函数,具体用法在此不再累述,请自行查阅,同时也用到switch控制语句来进行判断选择;
#define _CRT_SECURE_NO_WARNINGS 1 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"time.h" #define ROWS 3 #define COLS 3 //菜单函数 void menu() { printf("******************************\n"); printf("*****欢迎进入三子棋游戏区*****\n"); printf("**** 1:开始进入游戏 ****\n"); printf("**** 0:结束本次游戏 ****\n"); printf("******************************\n"); printf("请输入0或1进行游戏:--> "); } //对棋盘进行初始化 void init_board(char board[ROWS][COLS], int row, int col) { memset(board, ' ', row*col*sizeof(char)); } //memset是以字节为单位,初始化内存块 //当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值 //在这里也可以用for循环来进行棋盘初始化,具体代码如下: /*{ int x = 0; int y = 0; for (x = 0; x < 3; x++) { for (y = 0; y < 3; y++) { board[x][y] = ' '; } } } */ //实现棋盘函数 //主要是打印出三子棋盘上的九方格图形 void display_board(char board[ROWS][COLS], 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 (i != 2)//控制只输入两行 printf("---|---|---\n"); } } //打印人进行的棋盘函数 void player_move(char board[ROWS][COLS], int row, int col) { int x = 0; int y = 0; while (1) { printf("请输入棋子对应坐标:-> "); scanf("%d,%d", &x,&y); x--; y--;//因为下标是从0开始的,所以各自减去1 4000 if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2))) { if (board[x][y] == ' ') { board[x][y] = 'X'; break; } else { printf("输入的下标有误,请重新输入!"); } } else { printf("输入的下标有误,请重新输入!"); } } } //打印电脑所进行的棋盘游戏函数 void computer_move(char board[ROWS][COLS], int row, int col) { while (1) { //rand()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长 //因此在一定范围内,可以看成是随机的 //比如是用rand()函数产生1-100以内的随机整数:int num=rand()%100 int x = rand() % 3; int y = rand() % 3; if (board[x][y] == ' ') { board[x][y] = '0'; break; } } } //对棋盘进行判满运算 int chess_full(char board[ROWS][COLS], int row, int col) { int x = 0; int y = 0; for (x = 0; x < row; x++) { for (y = 0; y < col; y++) { if (board[x][y] == ' ') return 0; } } return 1;//表示棋盘已满 } //判断输赢函数 //主要是三行和三列,以及两个交叉实现三子排成一排 char check_win(char board[ROWS][COLS], 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<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]; } if (chess_full(board, row, col)) { return 's';//表示棋盘已满 } return ' '; } //通过在主函数中调用game()函数来具体实现各个函数的相关功能 void game() { int ret = 0; char board[ROWS][COLS] = { 0 }; init_board(board, ROWS, COLS); display_board(board, ROWS, COLS);//函数的嵌套调用 while (1) { printf("player moves:\n"); player_move(board, row, col); display_board(board, row, col); ret = check_win(board, row, col); if (ret != ' ') break; printf("computer moves:\n"); computer_move(board, row, col); display_board(board, row, col); check_win(board, row, col); if (ret != ' ') break; } if (ret == 'X') { printf("Congratulatons! player wins!\n"); } else if (ret == '0') { printf("Undortunately! player loses!\n"); } else { printf("It's a tie,please play again!\n"); } } //通过运用enum常亮,来实现枚举声明,并附上相应的默认值0,1 enum Option { EXIT,//0 PLAY //1 }; //主函数 int main() { int input = 0; srand((unsigned int)time(NULL)); //time函数可以获取当前的系统时间(但是获取的是秒数,是从1970年1月1日零时零分零秒到目前为止所经过的时间) do { menu(); printf("please choose:--> "); scanf("%d", &input);//srand函数是随机数发生器的初始化函数 //为了让每一次程序的调用都产生不同的值,常常使用系统时间来初始化 switch (input) { case PLAY: game(); break; case EXIT: break; default: printf("default!please choose again!\n"); break; } } while (input); system("pause\n"); return 0; }
此次程序的成功运行,主要是通过对八个自定义函数,以及对一个enum常量结构体的调用来实现的,以下是对整个程序过程的深入分析:
1.menu函数:在这里,主要是对游戏开始界面的设置。整体来说比较简单,主要是运用了几个printf()函数来具体实现的;
2.init_board函数:此函数主要是进行棋盘的初始化操作。在这里用到了memset()函数,主要是对棋盘的初始化,即对每个方格进行置空,当然,在这里也可以通过两个for循环语句来实现函数初始化;
3.display_board函数:主要用于实现对棋盘井字形框架的打印,在这里要特别注意(i!=2)判断语句,因为在这里主要是打印两行,所以控制两行输出即可;
4.player_move函数:此函数是由玩家来进行完成的,输入任意坐标时,要特别注意坐标的越界问题,在这里通过一个if语句来加以限制;
5.computer_move函数:主要是针对电脑进行游戏的设置,这里通过调用rand()函数来实现1-3之间随机数的抽取;
6.chess_full函数:主要是用来判断棋盘是否已经满格;
7.check_win函数:主要用于判断是否有一方已经赢得了比赛,即对是否出现了三行,三列,或者两个交叉列排成一排进行判断,如果都没有出现,则进行判断是否棋盘已满;
8.game函数:通过对函数的嵌套调用,以此来实现各函数的功能,从而来进行游戏;
9:enum:通过运用enum来定义结构体常量;
10.最后,通过主函数来实现程序的运行,在这里运用到了srand()函数和time()函数,具体用法在此不再累述,请自行查阅,同时也用到switch控制语句来进行判断选择;
相关文章推荐
- 用c语言简单实现三子棋游戏
- c语言编程实现简单三子棋游戏
- 三子棋游戏(简单)————C语言实现
- 三子棋游戏C语言模拟实现
- C语言三字棋游戏先简单介绍一下三子棋的规则,方便我们接下来的编程和理解。规则如下: 在九宫格棋盘上,只要将自己的三个棋子走成一条线(横、竖、对角线),对方就算输了。
- C语言实现简单的记忆力测试游戏
- 【C语言基础】C语言三子棋的简单实现
- 一个简单的三子棋游戏(c语言实现)
- C语言实现简单24点游戏
- C语言中随机数的生成,以及简单猜数游戏的实现。
- 使用C语言实现简单的三子棋程序
- C语言实现一个简单的猜数字游戏
- c语言实现的三子棋游戏
- c语言实现简单的猜数字游戏
- 如何用C语言实现三子棋游戏
- C语言实现三子棋游戏(意义版)
- C语言实现简单的三子棋小游戏
- 用c语言实现三子棋的游戏
- c语言实现三子棋游戏
- 一个简单的三子棋游戏(c语言实现)